新しく発言する EXIT インデックスへ
beepx,yについて

  beep x,y について 山口 司 2004/08/09 18:37:02 
  十進BASICでは難しいようなので、2004/08/09 20:56:49 
  │└哲さま、ありがとうございました。参考にな... 山口 2004/08/09 21:47:53 
  │ └ちょっと面倒ですがWindowsAPIを使えばMIDI...2004/08/09 21:54:57 
  │  └手掛かりを示していただいて有難うございま... 山口 2004/08/10 00:05:47 
  │   └こういうのもありますよ。 shino 2004/08/10 23:32:32 
  │    └APIでMidi音源で書いて見たのですが音が出ま...2004/08/12 09:28:50 
  │     └アドレスの引き渡しには shino 2004/08/13 00:28:23 
  │      └見事です!2004/08/13 08:53:08 
  スピーカーからでる音をwavファイルにするの... 青木太一 2004/08/10 11:49:10 
   └有難うございます。検討してみます。 山口 2004/08/10 15:13:27 

  beep x,y について 山口 司 2004/08/09 18:37:02  ツリーへ

beep x,y について 返事を書く
山口 司 2004/08/09 18:37:02
beep 1000,1000
beep 2000,1000
end

におきまして、1000ヘルツと2000ヘルツの2音は続けて出てきますが、これを同時に出せないものでしょうか?@
つまり2音を合成したいわけですが。
また、音をフアイルとしてsaveする方法はありましょうか?A
どなたかよろしくお願いします。

  十進BASICでは難しいようなので、2004/08/09 20:56:49  ツリーへ

Re: beep x,y について 返事を書く
2004/08/09 20:56:49
十進BASICでは難しいようなので、
過去ログの答えで一応できるのですが山口さんの質問と逆のような?
http://freebbs.around.ne.jp/article/b/basic/37/duehix/index.html
最後の書き込みは無視してください。

  │└哲さま、ありがとうございました。参考にな... 山口 2004/08/09 21:47:53  ツリーへ

Re: 十進BASICでは難しいようなので、 返事を書く
山口 2004/08/09 21:47:53
哲さま、ありがとうございました。参考になりました。

  │ └ちょっと面倒ですがWindowsAPIを使えばMIDI...2004/08/09 21:54:57  ツリーへ

Re: 哲さま、ありがとうございました。参考にな... 返事を書く
2004/08/09 21:54:57
ちょっと面倒ですがWindowsAPIを使えばMIDI音源も使えます。
こんなところを参考にどうぞ
http://homepage1.nifty.com/MADIA/vb/API/MidiOutShortMsg.htm

  │  └手掛かりを示していただいて有難うございま... 山口 2004/08/10 00:05:47  ツリーへ

Re: ちょっと面倒ですがWindowsAPIを使えばMIDI... 返事を書く
山口 2004/08/10 00:05:47
手掛かりを示していただいて有難うございます。

  │   └こういうのもありますよ。 shino 2004/08/10 23:32:32  ツリーへ

Re: 手掛かりを示していただいて有難うございま... 返事を書く
shino 2004/08/10 23:32:32
こういうのもありますよ。

EXTERNAL FUNCTION mciSendString(lpstrCommand$,lpstrReturnString$,uReturnLength,hWndCallback)
ASSIGN "winmm.dll","mciSendStringA"
END FUNCTION

この関数は、
! ファイルを開く
LET n=mciSendString("open """ & s$ & """ alias WAVE","",0,0)
! 再生
LET n=mciSendString("play WAVE from 0","",0,0)
! 停止
LET n=mciSendString("stop WAVE","",0,0)
! ファイルを閉じる
LET n=mciSendString("close WAVE","",0,0)
などのようにして使います。
開いた後は必ず閉じて下さい。

s$に使うファイルを入れればOKです。
WAV、MIDI、MP3など色々なファイルを再生できます。
詳しくはMSDNライブラリなどで調べてみて下さい。

  │    └APIでMidi音源で書いて見たのですが音が出ま...2004/08/12 09:28:50  ツリーへ

Re: こういうのもありますよ。 返事を書く
2004/08/12 09:28:50
APIでMidi音源で書いて見たのですが音が出ません。
どこが間違っているか解る方、教えて頂けないでしょうか?

DECLARE EXTERNAL FUNCTION midiOpen
DECLARE EXTERNAL FUNCTION midiOut
DECLARE EXTERNAL FUNCTION midiClose
PUBLIC NUMERIC hMid

LET Note=70 !音階(&H00から&H7F(127))
LET Inst=30 !楽器No(GM音色番号に準拠?)
LET Vol=BVAL("7F",16) !音量(&H00から&H7F(127))

LET n=midiOpen(hMid, -1, 0, 0, 0)
PRINT n
LET n=midiOut (hMid, BVAL("c0",16) + Inst * 256)
PRINT n
LET n=midiOut(hMid, BVAL("90",16) + Note * 256 + Vol * 256 * 256)
PRINT n
WAIT DELAY 3
LET n=midiOut (hMid, BVAL("80",16) + Note * 256)
PRINT n
LET n=midiClose (hMid)
PRINT n
END

EXTERNAL FUNCTION midiOpen(lphMidiOut,uDeviceID,dwCallback,dwInstance,dwFlags)
DECLARE NUMERIC hMid
ASSIGN "winmm.dll","midiOutOpen"
LET hMid=lphMidiOut
END FUNCTION

EXTERNAL FUNCTION midiOut(hMid,Dt)
ASSIGN "winmm.dll","midiOutShortMsg"
END FUNCTION

EXTERNAL FUNCTION midiClose(hMid)
ASSIGN "winmm.dll","midiOutClose"
END FUNCTION

  │     └アドレスの引き渡しには shino 2004/08/13 00:28:23  ツリーへ

Re: APIでMidi音源で書いて見たのですが音が出ま... 返事を書く
shino 2004/08/13 00:28:23
アドレスの引き渡しには
文字列変数を使わないといけないようです。
HMIDIOUT型はLONG型ですから、4バイトの文字列を用意すれば
よさそうですね。

いちおうプログラムも書いておきます。
DECLARE EXTERNAL FUNCTION midiOutOpen
DECLARE EXTERNAL FUNCTION midiOutShortMsg
DECLARE EXTERNAL FUNCTION midiOutClose
! 利用可能なMIDIデバイスの数を獲得
DECLARE EXTERNAL FUNCTION midiOutGetNumDevs
DECLARE NUMERIC hMidiOut
OPTION CHARACTER byte ! 文字サイズを1バイトにする
DECLARE STRING hMid$

LET hmid$=REPEAT$("*",4) ! 四バイト分用意

LET Note=70 !音階(&H00から&H7F(127))
LET Inst=30 !楽器No(GM音色番号に準拠?)
LET Vol=BVAL("7F",16) !音量(&H00から&H7F(127))

IF midiOutGetNumDevs<1 THEN STOP ! MIDIデバイスがなければ終了

LET n=midiOutOpen(hMid$, -1, 0, 0, 0)
PRINT n

! 文字列を数値に変換
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=midiOutShortMsg(hMidiOut, BVAL("c0",16) + Inst * 256)
PRINT n
WAIT DELAY 0.5
LET n=midiOutShortMsg(hMidiOut, BVAL("90",16) + Note * 256 + Vol * 256 * 256)
PRINT n
WAIT DELAY 0.5
LET n=midiOutShortMsg(hMidiOut, BVAL("80",16) + Note * 256)
PRINT n
WAIT DELAY 0.5

LET n=midiOutClose(hMidiOut)
PRINT n

END

EXTERNAL FUNCTION midiOutOpen(lphMidiOut$,uDeviceID,dwCallback,dwInstance,dwFlags)
ASSIGN "winmm.dll","midiOutOpen"
END FUNCTION

EXTERNAL FUNCTION midiOutShortMsg(hMid,Dt)
ASSIGN "winmm.dll","midiOutShortMsg"
END FUNCTION

EXTERNAL FUNCTION midiOutClose(hMid)
ASSIGN "winmm.dll","midiOutClose"
END FUNCTION

EXTERNAL FUNCTION midiOutGetNumDevs
ASSIGN "winmm.dll","midiOutGetNumDevs"
END FUNCTION

  │      └見事です!2004/08/13 08:53:08  ツリーへ

Re: アドレスの引き渡しには 返事を書く
2004/08/13 08:53:08
見事です!
なるほど、渡すほうは十進BASICがやってくれるけど受け取るほうが文字列になるわけですね。
ありがとうございました。

  スピーカーからでる音をwavファイルにするの... 青木太一 2004/08/10 11:49:10  ツリーへ

Re: beep x,y について 返事を書く
青木太一 2004/08/10 11:49:10
スピーカーからでる音をwavファイルにするのなら、
http://www.html.ne.jp/~soratosu/midi2wav.html
が参考になるかも知れません。
私は試していないのでなんとも言えませんが。

   └有難うございます。検討してみます。 山口 2004/08/10 15:13:27  ツリーへ

Re: スピーカーからでる音をwavファイルにするの... 返事を書く
山口 2004/08/10 15:13:27
有難うございます。検討してみます。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。