質問 M.U 2004/12/16 15:49:27 └簡単な音だけならBEEPで出せますが 哲 2004/12/16 16:49:38 └もう一つ、***.wavファイルをサウンドレコー... 哲 2004/12/16 17:06:45 └wavファイルを再生するのなら独自拡張の 青木太一 2004/12/16 18:30:22 └返事遅れてすいません M.U 2004/12/17 21:51:42
質問 M.U 2004/12/16 15:49:27 ツリーへ
質問 |
返事を書く |
M.U 2004/12/16 15:49:27 | |
十進BASICで音を出すプログラムを作りたいのですがどのようにすればいいのでしょうか? |
└簡単な音だけならBEEPで出せますが 哲 2004/12/16 16:49:38 ツリーへ
Re: 質問 |
返事を書く |
哲 2004/12/16 16:49:38 | |
簡単な音だけなら BEEPで出せますが 音色までこだわるならWinAPIを呼び出すことになり少々面倒ですがこんな感じです。 DECLARE EXTERNAL FUNCTION midiOpen DECLARE EXTERNAL FUNCTION midiMsg DECLARE EXTERNAL FUNCTION midiClose ! 利用可能なMIDIデバイスの数を獲得 DECLARE EXTERNAL FUNCTION midiGet OPTION CHARACTER byte ! 文字サイズを1バイトにする LET hmid$=REPEAT$("*",4) ! 四バイト分用意 LET Note=70 !音階(&H00から&H7F(127)) LET Inst=0 !楽器No(GM音色番号に準拠?) LET Vol=BVAL("7F",16) !音量(&H00から&H7F(127)) IF midiGet<1 THEN STOP ! MIDIデバイスがなければ終了 LET n=midiOpen(hMid$, -1, 0, 0, 0) ! 文字列を数値に変換 LET hMidiOut=0 LET k=1 FOR i=1 TO 4 LET hMidiOut = hMidiOut + k*ORD(hMid$(i:i)) LET k = k*256 NEXT i LET n=midiMsg(hMidiOut, BVAL("c0",16) + Inst * 256) LET n=midiMsg(hMidiOut, BVAL("90",16) + Note * 256 + Vol * 256 * 256) WAIT DELAY 1 LET n=midiMsg(hMidiOut, BVAL("80",16) + Note * 256) LET n=midiClose(hMidiOut) END EXTERNAL FUNCTION midiOpen(lphMidiOut$,uDeviceID,dwCallback,dwInstance,dwFlags) ASSIGN "winmm.dll","midiOutOpen" END FUNCTION EXTERNAL FUNCTION midiMsg(hMid,Dt) ASSIGN "winmm.dll","midiOutShortMsg" END FUNCTION EXTERNAL FUNCTION midiClose(hMid) ASSIGN "winmm.dll","midiOutClose" END FUNCTION EXTERNAL FUNCTION midiGet ASSIGN "winmm.dll","midiOutGetNumDevs" END FUNCTION |
└もう一つ、***.wavファイルをサウンドレコー... 哲 2004/12/16 17:06:45 ツリーへ
Re: 簡単な音だけならBEEPで出せますが |
返事を書く |
哲 2004/12/16 17:06:45 | |
もう一つ、***.wav ファイルをサウンドレコーダ等で作って呼び出す方法です。 DECLARE EXTERNAL FUNCTION PlaySound LET S$="***.wav" LET n=PlaySound(S$, "", 128) END EXTERNAL FUNCTION PlaySound(pszSound$, hmod$, fdwSound) ASSIGN "winmm.dll","PlaySoundA" END FUNCTION |
└wavファイルを再生するのなら独自拡張の 青木太一 2004/12/16 18:30:22 ツリーへ
Re: もう一つ、***.wavファイルをサウンドレコー... |
返事を書く |
青木太一 2004/12/16 18:30:22 | |
wavファイルを再生するのなら独自拡張の play を使った方が簡単で素直ではないでしょうか? WindowsAPIを利用した方がきめ細かい制御が可能なのかもしれませんが... LET S$="***.wav" play S$ END それにしても、WindowsAPIをぜんぜん知らない私には、 哲さんの書き込みは勉強になります。 P.S. なぜか私の環境ではplayをつかったとき、ファイルがアプリケーションが関連づけられていないとエラーがでました。 (関連づけられているはずなんだけどなー...) 再現性を確認できたら正式にバグ報告します。 |
└返事遅れてすいません M.U 2004/12/17 21:51:42 ツリーへ
Re: wavファイルを再生するのなら独自拡張の |
返事を書く |
M.U 2004/12/17 21:51:42 | |
返事遅れてすいません ご丁寧なご返事ありがとうございます |