Tamesuke-Goto Maker的Blog -14ページ目

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

YMF825board用 ボイスエディタスケッチを修正しました。

 

キー操作関連を変更しました。以前より使いやすくなっていると思います。

cmdモードなんてダサい方法はやめてできるだけ1キーで操作できる様にしました。

 

再修正しました(9/22)

 

https://ameblo.jp/tamesuke-goto/entry-12312952665.html

 

 

------------

 

https://github.com/ringoro/YMF825voiceeditor

 

音色は EEPROMへ番号を付けて保存する様にしましたが、EEPROMの容量が512バイトと小さいのでボイス名を含めるとYMF825の最大16音色分は格納できません。

保存できるのは最大10音色となります。

と勘違い ATmega328は 1K-EEPROMなので16音は入りますたね。。。修正します。。

 

テスト演奏は ドレミファソラシドの一オクターブに。発音中に何かキーを押すと中断します。

 

アルゴリズムのキャリア、モジュレータの関係がテキストだけでは分かりづらいのですが、なんとかキャリア/モジュレータの関連がわかる様に表示工夫しました。

OPの番号にアスタリスクが付いているのがキャリア、矢印->でモジュレートの関係を示します。

 

 

キー操作

     '+'  パラメータ値インクリメント

     '-'  パラメータ値デクリメント

     CR  再描画

     'p' テスト演奏 (何かキーを押すと中断)

     's' 音色をEEPROMへ保存

     'l' 音色をEEPROMから読込(※)

     'd' 音色データをHEXダンプ

 

※ 一度も保存されてないEEPROM領域からデータを読み込むとランダムが値が入っている様でエディタが暴走してリスタートがかかってしまいます。最初にデフォルトの音色を1-10番まで保存しておく方が良いです。

 

 

MacOSでも動作確認しました。  

ArduinoをUSBで接続すると /devの中に cu.usbmodem.... というデバイスが現れますのでscreenコマンドを起動してアクセスしてください。

 

screen /dev/cu.usbmodem411 9600

 

 

Heartalkを買ったら 誰も必ずやるという お約束(?)の 
ヒミツのクマちゃんとのHeartalkトークです。
 
ようやくできた。。
 
 
{B8769972-F2BC-43C0-A35B-6CC47D7C3647}

 

 

何が面倒ってバッテリーケーブルのHPコネクタの作成が、、ミスミから取り寄せてようやくできた。それにしてもHeartalkは何かケースに入れたいですねえ、、何か良い方法ありますかね。


 

しかしデフォルトでは ハイ しか答えてくれんの。使いこなしのポイントは音声データの作成でしょうね。ヨメさんはちょと遊んですぐに飽きちゃいましたよ。

 

 

 

 

FM音源でやってみたかった事 純正なハーモニーを出す実験

 

昔のプロセッサの連載でもやってみた事ですが、YMF825でも試してみました。

音色は分かりやすいように倍音の少ないオルガン的な音色を使うことにします。

純正1回、平均律1回 づつ繰り返しています。平均律の時に低音の唸りがゴウゴウという感じに響いているのが分かるでしょうか。これで声部数が増えたりすると唸りどうしがさらに唸りを発生させたりして全体が濁ってしまうのが平均律の問題点なわけです。

 


 

残念ながら厳密に純正な和音を出すにはYMF825のFnumbの精度はちと悪いです。0.5ヘルツくらいの誤差がどうしても出てしまうのでできればあとプラス2bitくらいの精度がほしいところです。

この例では3度の音を純正に合わせて調整しています。

ルート=5度の音程をジャストな処を設定できればもっと良いのですが、そのためにはFnumb全体を見直さなければならないのでとりあえずこの程度まで。。

 

 keyon(0x14,0x65,0);
  delay(800);
//  keyon(0x1c,0x42,1);
  keyon(0x1c,0x3E,1);
  delay(800);

 

オルガンの音色

unsigned char tone_data[35] ={
 0x81,//header
 0x01,0x05,
0x00,0x7F,0xF4,0xAF,0x00,0x10,0x00,
0x00,0xAF,0xA0,0x0E,0x02,0x10,0x00,
0x00,0x2F,0xF3,0x9B,0x00,0x20,0x00,
0x00,0xAF,0xA0,0x0E,0x00,0x10,0x00,
0x80,0x03,0x81,0x80,
};