0~255
SBVOLUME 128
0~255: 音量
V=SBVOLUME()
0~255
VOLUME 128
0~255: 音量
V=VOLUME()
鳴らす音の種類: 0~5 省略時: 1
0 | Beep | 単純なビープ音 |
1 | Square | エラー音 |
2 | Button-correct | 決定音 |
3 | Button-incorrect | キャンセル音 |
4 | Put | カーソル音 |
5 | Button-Start | スタート音 |
再生する音量: 0~255 省略時: 128
BEEP 3
値を設定するレジスタの番号: 0~255
設定する値: 0~255
SOUND 15,240
設定値を読み出すレジスタの番号: 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