サウンド関係の命令

↑目次に戻る

SBVOLUME 音量

SmileBasicの音量の設定

引数

音量

0~255

SBVOLUME 128

変数=SBVOLUME()

SmileBasicの音量の取得

戻り

0~255: 音量

V=SBVOLUME()

VOLUME 音量

マスター音量の設定

引数

音量

0~255

VOLUME 128

変数=VOLUME()

マスター音量の取得

戻り

0~255: 音量

V=VOLUME()

BEEP [効果音番号][,音量]

単純な警告音・効果音の発生

引数

効果音番号

鳴らす音の種類: 0~5 省略時: 1

0 Beep 単純なビープ音
1 Square エラー音
2 Button-correct 決定音
3 Button-incorrect キャンセル音
4 Put カーソル音
5 Button-Start スタート音

音量

再生する音量: 0~255 省略時: 128

BEEP 3

SOUND レジスタ番号,データ

サウンドデバイスのレジスタへ値を設定する

引数

レジスタ番号

値を設定するレジスタの番号: 0~255

データ

設定する値: 0~255

SOUND 15,240

変数=SOUND(レジスタ番号)

サウンドデバイスのレジスタの現在の設定値を取得する

引数

レジスタ番号

設定値を読み出すレジスタの番号: 0~255

戻り

現在の設定値: 0~255

V=SOUND(12)

サウンドデバイスについて

8チャンネル同時発声可能な波形メモリ音源です。
レジスタの割り当ては以下の通りです。

レジスタ番号 Ch.
0x00-0x07 Ch.0
0x08-0x0F Ch.1
0x10-0x17 Ch.2
0x18-0x1F Ch.3
0x20-0x27 Ch.4
0x28-0x2F Ch.5
0x30-0x37 Ch.6
0x38-0x3F Ch.7
0x40-0x7F (Reserved)
各チャンネルのレジスタは以下の通りです。
オフセット 機能
+0 Freq0/FreqSet
+1 Freq1
+2 Freq2
+3 Freq3
+4 Volume
+5 WaveSel
+6 (Reserved)
+7 PhaseReset

レジスタFreq3~Freq0に書き込む32ビット値 R は、以下の式で求めます。
 R = 5592.4 * f(Hz)

Freq3: 周波数設定の31-24ビット目。Freq0に書き込むまで発音に反映されません。
Freq2: 周波数設定の23-16ビット目。Freq0に書き込むまで発音に反映されません。
Freq1: 周波数設定の15-8ビット目。Freq0に書き込むまで発音に反映されません。
Freq0: 周波数設定の7-0ビット目。このレジスタに書き込んだ時点でFreq3~Freq0に設定した値が発音に反映されます。
Volume: 音量です。(0~255)
WaveSel: 波形を選択します。(0-7)
PhaseReset: 書き込むと位相がリセットされます。(値はなんでもよい)

レジスタ番号 波形番号
0x80-0x8F Wave0
0x90-0x9F Wave1
0xA0-0xAF Wave2
0xB0-0xBF Wave3
0xC0-0xCF Wave4
0xD0-0xDF Wave5
0xE0-0xEF Wave6
0xF0-0xFF Wave7

起動直後はWave0~7全てに矩形波が設定されています。

1つの波形は32サンプルです。(16バイト)
1サンプルは4ビットリニアです。(2の補数表現)
0b1000(-8)~0b0000(0)~0b0111(7)

1バイトの下位4ビット→上位4ビットの順で再生されます。

以下にサンプルプログラムを示します。

C=69
E=C+4
G=C+7

vol 0,0:vol 1,0:vol 2,0

freq 0,note(C):vol 0,255
wait 45

freq 0,note(E):vol 0,255
wait 45

freq 0,note(G):vol 0,255
wait 45

vol 0,0
wait 60

freq 0,note(C):vol 0,255
freq 1,note(E):vol 1,255
freq 2,note(G):vol 2,255
wait 90

vol 0,0:vol 1,0:vol 2,0
end

def note(no)
 return 440.0*pow(2.0,(no-69)/12.0)
end

def freq ch,f
 R%=5592.4*f
 sound ch*8+3,(R%>>24) and 255
 sound ch*8+2,(R%>>16) and 255
 sound ch*8+1,(R%>> 8) and 255
 sound ch*8+0,R% and 255
end

def vol ch,v
 sound ch*8+4,v
end

↑目次に戻る