Making「鼻歌」

Home PC-6001mkII Program etc

関連リンク 鼻歌

最新の画面 更新日:2016/10/05
作成日:2016/07/31

2016年のP6オフ会で公開したネタ「鼻歌」の作成過程を以下少しずつ書き綴っていこうと思います。

2016/03/23:HML その5 (&コマンド)
 次に、スラーとタイの処理を実装する。MMLの書式では「&」が一般的なようなので、それに習う。「&」があれば、波形データを最初に戻さずに次の音声を鳴らす、理論上はこれだけでいいはずだ。

 この処理を行うために、新たに音継続フラグを追加する。ついでに、「&数字」で前回の音を延長するのもいいかもしれないな。処理を書いたところまでで、この日はタイムアップ。

 さて後日、確認を行う。「C&CC」が予定通り「フンーフン」と鳴る。「C&4C」は、まだ数字部分を無視して「フンー」と鳴る。あー、そりゃそうだ。まだ「&数字」の部分は作ってないので。

 「&数字」の処理部分を作成し、再度確認。今度はちゃんと「C&4C」が「フンーフン」と鳴った。

 これでとりあえず必要なものは揃った...かな?

2016/03/06:HML その4 (A〜G, Oコマンド)
 変換テーブルもできたので、いよいよ音階の実装開始!

 まずはオクターブ指定から。2〜6の範囲に制限し、(オクターブ - 2)*12をワーク領域に格納する。まあこれだけ。

 続いて、A〜Gコマンド。PLAY n値の相対位置に変換するテーブルを通し、先ほどのオクターブ情報を足し合わせる。これを、Pitch値への変換テーブルで変換する。あとは、Nコマンドの時と同じ処理をすればいい。

 いざテスト...特に問題なさげかな。ついでに半音上げ下げも実装する。A〜Gコマンドの直後に「+」「-」があれば、PLAY n値を±1する。...これでOK!

 なんだかんだで、最初やろうと思っていた事の大半ができていった。

2016/03/04〜05:音階変換 その2
 ここまでのプログラムを、PC-6001mkII実機で試してみる。

 なぜか、「フン」の聞こえ具合が違う...。実機の方がノイズ部分の音が大きいようなきがする。あと、以前から思っていたが、特に高音のときに若干実機の方が高い音になる。

 以前にkaychang6601さんが調べていた通り、実機とエミュとではPitchが1つずらすと概ね音の高さが合うようだ。音階の変換テーブルは実機をベースにするかな。とすると、Pitch値は1上がるんだっけ、下がるんだっけ?えーい、実機でもう一度調べなおしちゃえ。

 再度、拙い音感をもって聞き取ったデータを元に、変換テーブルを作成する。青い点が、近似曲線を元に近い位置をプロットしたものになる。

="画像"

 PLAY文のn値は、オクターブ2(O2)が12〜23、O3が24〜35のように12単位で1オクターブとなる。一応、O2〜O6まで変換テーブルを作成しておくか。

 ただ、O2では一部Pitch値の上限(127)を超えているため、実質O2Eくらいが低さの限界かもしれない。O5, O6ではPitchの差が少なすぎるので、目的の音階と全然合わなくなってくる。特にO6ではPitchを1つ下げると音の高さが1〜2音ほど変わる。実質、O6も使えなさそうだな。

 うーむ、これって、音声合成ROMのPitch値はO3〜O4の範囲にフォーカスを置いてパラメータ設計をしていたという事かも。

 分析もどきはこれくらいにして、変換テーブルを作成する。あとはこれを使うための処理を作成すれば、音階名指定の出力ができるはずだ。

履歴

ページ項目
その1 2015/01/xx:計画
2015/01/xx:処理概要 その1
2015/04/xx:処理概要 その2
2015/04/xx:基準長
2015/07/28〜08/04:処理概要 その3
2016/02/11〜23:音声出力
その2 2016/02/25〜26:HML その1 (基本処理)
2016/02/27:HML その2 (T,Lコマンド)
2016/02/28〜29:HML その3 (N,V,Rコマンド)
2016/03/01:音階変換 その1

PC-6001mkII