beepについて
Posted: 2006年8月07日(月) 16:30
beep音の周波数はどのように指定すればよいのでしょうか。
こんなことですみませんが、C言語と同じように
Beep(周波数,時間)
でいいのですか?
はじめたばっかりでしらべてもよくわかりません。
こんなことですみませんが、C言語と同じように
Beep(周波数,時間)
でいいのですか?
はじめたばっかりでしらべてもよくわかりません。
WinowsXPを含むNT系のOSの場合、Beep関数の周波数、及び発音時間は有効なのですが、9X系ではBeep関数はMessageBeep関数を呼び出すだけなので周波数を指定することはできません。> beep音の周波数はどのように指定すればよいのでしょうか。
>
> こんなことですみませんが、C言語と同じように
> Beep(周波数,時間)
> でいいのですか?
> はじめたばっかりでしらべてもよくわかりません。
コード: 全て選択
Const Freq_C = 262
Const Freq_D = 294
Const Freq_E = 330
Const Freq_F = 349
Const Freq_G = 392
Const Freq_A = 440
Const Freq_B = 494
Const Time_W = 250
Type SOUND_DATA
Frequence As DWord
Length As DWord
End Type
Dim sd[28]=[
[Freq_C,Time_W],[Freq_D,Time_W],[Freq_E,Time_W],[Freq_F,Time_W],
[Freq_E,Time_W],[Freq_D,Time_W],[Freq_C,Time_W*2],
[Freq_E,Time_W],[Freq_F,Time_W],[Freq_G,Time_W],[Freq_A,Time_W],
[Freq_G,Time_W],[Freq_F,Time_W],[Freq_E,Time_W*2],
[Freq_C,Time_W*2],[Freq_C,Time_W*2],
[Freq_C,Time_W*2],[Freq_C,Time_W*2],
[Freq_C,Time_W/2],[Freq_C,Time_W/2],[Freq_D,Time_W/2],[Freq_D,Time_W/2],[Freq_E,Time_W/2],[Freq_E,Time_W/2],[Freq_F,Time_W/2],[Freq_F,Time_W/2],
[Freq_E,Time_W],[Freq_D,Time_W],[Freq_C,Time_W*2]
] As SOUND_DATA
Dim cnt As Long
For cnt=0 To 28
Beep(sd[cnt].Frequence,sd[cnt].Length*4/5)
Sleep(sd[cnt].Length)
Next
コード: 全て選択
Sub PlayBeep(ByVal command As BytePtr)As DWord
Dim A As DWord
Dim B As DWord
Dim L As DWord
Dim O As DWord
O=4
L=500
*PB1
Select Case GetByte(command)
Case &h41
A=O*12
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h42
A=O*12+2
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h43
A=O*12+3
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h44
A=O*12+5
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h45
A=O*12+7
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h46
A=O*12+8
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h47
A=O*12+10
If GetByte(command+1)=&h23 Then
A++
command++
End If
If GetByte(command+1)=&h62 Then
A--
command++
End If
Case &h4F
O=GetByte(command+1)-48
command+=2
Goto *PB1
Case &h53
Sleep(L)
command++
Goto *PB1
Case &h4C
L=0
*PB2
command++
If GetByte(command)>47 And GetByte(command)<58 Then
L*=10
L+=GetByte(command)-48
Goto *PB2
End If
command--
Goto *PB1
Case 0
Exit Function
Case Else
command++
Goto *PB1
End Select
Beep (Fix(2^(A/12)*27.5625+0.5),L)
command++
Goto *PB1
End Sub
コード: 全て選択
'A B C D E F G それぞれ、ラ、シ、、、ソが出る
'# b(Bの小文字)をA~Gの後につけると半音上げ下げ C#ならCより半音高い音 DbならDより半音低い音
'L 出す音の長さ(ミリ秒)を指定
'O オクターブを設定
'なお、命令と命令の間はスペース(&h20)を入れてよい
PlayBeep("L250 O4CO3GO4CO3G O4GO3GO4GO3G O5AO4AO5AO4A O4GO3GEG")
PlayBeep("L250 O4FO3GO4FO3G O4EO3GO4EO3G O4DO3GO4DO3G O4CO3GEG")
PlayBeep("L250 O4GO3GO4GO3G O4FO3GO4FO3G O4EO3GO4EO3G O4DO3GDG")
PlayBeep("L250 O4GO3GO4GO3G O4FO3GO4FO3G O4EO3GO4EO3G O4DO3GDG")
PlayBeep("L250 O4CO3GO4CO3G O4GO3GO4GO3G O5AO4AO5AO4A O4GO3GEG")
PlayBeep("L250 O4FO3GO4FO3G O4EO3GO4EO3G O4DO3GO4DO3G O4L1000C")
'こんなふうに書くと演奏される。