PC-8001で色々な音色を奏でようのコーナー

好評のPC-8001活用テクニックのページ、今回お送りするのは BEEP音源活用編第3弾、「音色を変えよう」です。

BEEPの高速ON・OFFによる音楽演奏では、その間隔(周波数)によって音程を 変えられるのは明らかです。しかし、音量や音色はどうやって変えれば いいのでしょうか?

もっとも単純なアプローチは、「ONとOFFの比率を変えてみる」というものです。 以下のプログラムを実行してみましょう。


リスト1・デューティー比を変えられる音出しルーチン

DF03hとDF04hで音程を指定(DF03h:DF04h=波形のOFFの長さ:ONの長さ)
DF05h〜DF06hで音長を指定

D120	F5	sound:	PUSH AF
D121	C5		PUSH BC
D122	D5		PUSH DE
D123	E5		PUSH HL
D124	2A 05 DF	LD HL,(DF05h)
D127	ED 5B 03 DF	LD DE,(DF03h)
D12B	3E 20	ccc:	LD A,20h
D12D	D3 40		OUT 40h,A
D12F	42		LD B,D
D130	10 FE	aaa:	DJNZ aaa
D132	3E 00		LD A,00h
D134	D3 40		OUT 40h,A
D136	43		LD B,E
D137	10 FE	bbb:	DJNZ bbb
D139	01 00 00	LD BC,0000h
D13C	37		SCF
D13D	ED 42		SBC HL,BC
D13F	20 EA		JR NZ,ccc
D141	E1		POP HL
D142	D1		POP DE
D143	C1		POP BC
D144	F1		POP AF
D145	C9		RET

ONとOFFの比率をいろいろ試してみると、同じ音程でもいろいろな音が出せることが わかると思います。ONの値をOFFより小さくすると、音量が小さくなるのは 当然ですが、音色もいろいろ変わって聞こえます。おすすめの値は、 10進数で(ON,OFF)の順に、

(5,75)(5,90)(5,25)(1,20)(3,7)(2,7)(40,200),(12,18)

などですね。


さて、単純にデューティー比を変えるだけでもこのようにいろいろな音が 出せることがわかりましたが、もっと複雑な波形にしてみたらどうでしょうか? それをプログラムしてみたのが、下のリスト2です。


リスト2・複雑な波形の発生ルーチン

BASICから、DEF USR=&hD000:A$=USR("文字列")で実行。
文字列で波形を指定する。
文字列の最後にエンドマーク"0"を入れること。
各文字が波形を表わす。例えば、1234560なら、
ON -  ---    -----
OFF --   ----     ------
のような波形になる。

D000	13		INC DE
D001	1A		LD A,(DE)
D002	6F		LD L,A
D003	13		INC DE
D004	1A		LD A,(DE)
D005	67		LD H,A
D006	06 FF		LD B,FFh
D008	C5	ddd:	PUSH BC
D009	E5		PUSH HL
D00A	CD 12 D0	CALL main
D00D	E1		POP HL
D00E	C1		POP BC
D00F	10 F7		DJNZ ddd
D011	C9		RET
D012	16 20	main:	LD D,20h
D014	7E	ccc:	LD A,(HL)
D015	FE FF		CP FFh
D017	D6 30		SUB 30h
D019	C8		RET Z
D01A	47		LD B,A
D01B	7A		LD A,D
D01C	D3 40		OUT 40h,A
D01E	10 FE	aaa:	DJNZ aaa
D020	EE 20		XOR 20h
D022	57		LD D,A
D023	23		INC HL
D024	18 EE		JR ccc

このプログラムは、OUT 81,0:A$=USR("..."):WIDTH 40のように、 DMAをストップして実行するといいでしょう。私のおすすめの波形は、

AA1188227733665544440
1A2A3A4A5A6A7A8A9AAA0
123456789ABCDEFEDCBA9876543210
123456789876543210
224488CCFFHH0
224488CCFFHHXX0
などですね。文字は数字やアルファベット以外も使えるので、バカ0とかアホ0とか ミッキーマウス0とか、いろいろ試してみると面白いでしょう。アルファベットも、 大文字と小文字で変わってきます。

戻る