ニャオニャオ21世紀

アイデア。レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

PSG音源MSXのSOUND命令 音の基礎編 MSX BASIC基礎その17

MSXの機体の情報が一杯 これは必見の書籍!! 僕らの好きなMSXハードカタログ

MSXの音について全く知らなかったのですが、

今回、大仏パラダイス(ROMカートリッジ化してネット販売予定)の時に

調べたアレコレを書きたいと思います^^

 

小学生の頃はPLAY文を少し弄りました〜。

まぁ、MSXマガジンだったかな、それに載っている

”ジングルベル”を打ち込んだくらいですねー(*´﹃`*)

 

あと"サクラ"とか。

さーくーらー、さーくーらーってやつですね^^

 

ゲーム音楽はよく聞いていました。

ハイドライド1のトウルゥ〜トウルゥ〜トゥトゥトゥ・トゥ、トウルゥ〜を

学校帰りに口ずさんでいました(*´艸`*)

 

世間ではスーパーマリオが口ずさまれている中、

僕はそれに対抗してハイドライドの、のどかな音楽を一生懸命口ずさんでいました

(*´ω`*)

 

 

どんどん音楽が豪華になっていきましたよね〜。

そういえば一番聞いたのはアーケードの、アフターバーナーかもしれないです。

ソノシートを持っていて、アホほど聞きましたね〜^^

 

でも、

MSXで音楽をやるほどではなかったのです、うーん。

 

今回、勉強でPLAY文、SOUND文を弄って、

ちょっと面白いなぁと感じてしまいました(*´ω`*)

 

最終的には作曲できないといけないのですが。

(大仏パラダイスでは、スピードの問題もあり、効果音のみです)

 

今回はSOUND命令です。

(効果音によく使われます。

でも大仏パラダイスで使ったのはPLAY文なんですけどね^^;)

 

 

 

自作MSXゲーム、大仏パラダイスとは?

ROMカートリッジ版の大仏パラダイス(MSX)発売予定!!! - ニャオニャオ21世紀

 

ゲームレジェンド31で自作MSX用ROMカートリッジの大仏パラダイス販売!! - ニャオニャオ21世紀

 

音は周波数?

音というのは周波数らしいです。

む?

 

結局、空気の振動らしいのです。

空気が、速く振動しているか、ゆっくり振動しているかで、

人間には音が高い、低いで聞こえるらしいですね〜。

 

ある周波数がで、

ある周波数がで、

ある周波数がと決まっているそうです。

 

PLAY命令ではドレミと(CDE)と打ち込んで音を鳴らします(MML)が、

SOUND命令は、周波数を設定して音をだすという...

 

なんか凄いかも(*´艸`*)

 

マシン語で音を出すときは、

ひとつひとつ周波数(数値)を設定してやることで

音楽にするのでしょうか?

(まだ全く知識がなくて...)

 

 

MSXのPSG(音源)は?

三重和音です。

3音だせるということ。

( チャンネルA、チャンネルB、チャンネルC)

 

うーん。

どうなんでしょうかね〜。

頑張ればいい音が出せますよね!

ハイドライド3とか素晴らしいし、ザナドゥとか、ドラスレ4とかも3音だし。

 

それとノイズも出せます。

ガーっていう、ラジオの雑音みたいなの?かな?

 

 

それからMSXのPSGは、

FM音源のように音色は変えることができないんですよね〜。

 

PSGは矩形波(くけいは)といって、四角の波なんですよ。

カックカクです。

音は周波数なので、波の形で音色も色々です。

 

しかしMSXのPSGは、1つの四角い波(それを矩形といいます)。

(コナミに矩形波クラブってありましたよね〜、懐かしい^^)

 

ですので、どのゲームも同じ音色なんです。

(音色を変えることができると、ピアノっぽい音や、

トランペットのような音とかに変えることが出来ます。

でもMSXでは...)

 

でも僕は、PSGの矩形波の音が好きですよ!!!

 

 

SOUND命令 ( 0 ~ 13)まで設定する

SOUNDは、

SOUND 3,128

などと命令してやります。

 

最初、この時点で、

"わからん、もう嫌だー"となったのは秘密ですw

 

でも調べていくとわりと簡単なんですよ、これ。

 

詳しく言えば、PSGの各レジスタに数値を設定してやります。

 sound2,135なら、最初の2がPSGのレジスタです。

 

うーん、

PSGのチップに14個のデータを受け取るところがあって、

そこに数字を入れてやれば、音が色々変わる、

という感じですね〜。

 

sound 0~13 , 数値(0~255) 

 

14個も!!!

多すぎてわからんと思いましたが、

音色で6つ、

ノイズの設定で1つ、

ミキサーで1つ(普通の音か、ノイズか、または両方か設定)、

ボリュームで3つ、

エンベロープという訳のわからんので、なんやかんやで3つ

計14個!

 

なんとなく分かりそうですよね!

特に音色で(ドレミとか)、6つだし。

しかも音のボリュームで3つ。

大半がコレ!

 

エンベロープって何?と思われると思いますが、

結局、音のボリュームをだんだん大きくしてやるとか、

音量の大きい小さいを使って波のようにするとか、そんなんみたいですよ(*´﹃`*)

そんな音の大小を流れるように変えてやると、

なんかいい感じの音になりますよというもの?かな。

そのボリュームのパターンがいくつか用意されています。

SOUND 0、SOUND 1

チャンネルAの音階の周波数を入れます。

チャンネルAとは、MSXの出せる3音のうちの1つです。

 

なぜ2つ使って、1つの音の周波数を設定するかといいますと、

数字が大きすぎて、1つでは設定できないんです^^

(MSXは8bitなので、基本的に扱える数字は255まで。

2つ使って16bitの数字だと、65535まで)

 

16bitの数字だと、PSGの扱える周波数をオーバーしてしまいます。

65535も使わないので、

実際に必要なのは12bitです。(4096かな?)

そこでSOUND0の値と、SOUND1の値をくっつけて使います。

 

 

詳しくは、

周波数 = fc(入力クロック 1.789...MHz)  /  16 *  TP

で周波数を出すそうで、

このTPの値を、SOUND 0 , X1

                          SOUND 1 , X2

X2X1で表すそうです。

(X1は8ビット、X2は4ビットの計12ビットです。)

SOUND1の値の方が、上の桁になるみたいですね。

 

4オクターブの

ド(C)は、1AC

レ(D)は、17D

ミ(E)は、153

などとSOUND0とSOUND1に入れると、音がでるようです。

(AとかCとかは16進数だからです。)

(Aは10、Bは11、Cは12 ~  Fは15ですね)

SOUND1,1

SOUND0,&HAC

ということかな?

(&Hをつけてやると16進数という意味です)

(もちろん16進数にしなくても、普通の数値(10進数)でもOKです。)

(その場合、こちらのサイト様で16進数を10進数に変換などしてみてもいいですね^^

2進数、8進数、10進数、16進数相互変換ツール

)

 

 

(SOUND8,8とかも書かないといけません。下の方で詳しく。)

 

どんな数値を入れればいいかはこちらへ。

1章 PSGと音声出力 - テクハンwiki

 

SOUND 2、SOUND 3

チャンネルBの音階の周波数を入れます。

 

 

SOUND 4、SOUND 5

チャンネルCの音階の周波数を入れます。

 

 SOUND 6

 ノイズ周波数の設定です。

1つしか設定できないんですよね。

これを後述するミキサーで鳴らしたりします。

 

とりあえずノイズの設定です。

5ビットの数値。(0 ~ 31)

 

SOUND 7

音のミキシングです。

これは何かといいますと、チャンネルAは普通の音(トーン)、

チャンネルBもトーン、チャンネルCはノイズとか

決めて鳴らしてやることができます。

 

これは2進数で設定してやると楽です。

&B10000000

最初の2バイトは10ですが、

次の3バイトは、チャンネルC,B,Aのノイズの設定です。

 

0がON、1がOFF。

(普通と逆なのが^^;)

SOUND7,&B10000111

としてやるとすべての音(3音)が、ノイズになります。

 

最後の方の3バイトは、チャンネルC,B,Aのトーン(普通の音)です。

 

こちらも

0がON、1がOFF。

 

SOUND7,&B10111000

これで普通の音がなります^^

(一度設定してしまうと、ずっとその設定が活きてきます。

その都度、設定してやらないとノイズが混ざったり変な音になるので

お気をつけて^^)

 

注目すべき点なのが、トーンとノイズの両方を同時に鳴らすことが

できる点です。

SOUND7,&B10011000

としてやると

チャンネルCのノイズとトーンのビットが0になっているので、

両方ONです。

 

どんな音なんでしょうね?

 

SOUND 8、SOUND 9、SOUND 10

こちらはボリュームです。

これを設定してやらないと音がなりません^^;

SOUND8が、チャンネルA。SOUND0とSOUND1の、ですね。

SOUND9が、チャンネルB。

SOUND10が、チャンネルC。

 

設定する値は 0 ~ 15です。

 

さらに特殊な機能があります。

16と値を入れてやると、エンベロープがONになるのです(・∀・)

例  SOUND8,16

 

エンベロープは少し説明しましたが、下にも書きます。 

 

SOUND 11、SOUND12

エンベロープの周期の設定。16ビットのデータで設定するので、

SOUND11とSOUND12の値をくっつけて使います。

速いテンポになったりするのかな?

 

エンベロープとは。

エンベロープって、音のボリュームの大小を色々弄って効果をだしている

みたいな感じです。

例えば、だんだんボリュームが大きくなっていき、そしてだんだん小さくなっていくと

波みたいな感じに聞こえないでしょうか?

その他、その音の大きさを波形の形にして、

設定してあるのがエンベロープだと思います。

 

 

SOUND 13

エンベロープパターンの設定です。

0 ~ 15までの値を入れます。

パターンは10個?

 

どんなパターンがあるかは、こちらでチェックして下さい^^

1章 PSGと音声出力 - テクハンwiki

 

まとめ

SOUND命令の基本を書きました。

音は実際に色々と鳴らしてみないとわからないですねぇ。

 

僕もよくわかりません(#^.^#)

 

SOUND命令を、プログラムでいろいろとイジることも出来ます。

SOUND1の値を変数にして、

FOR文でだんだん増やしてやるとか。

 

どこかでサンプルを見つけてきて鳴らしてみるのが一番良いと思います。

 

次回はPLAY文をやってみたいと思います。

 

www.nyaonyao21.com

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください