「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



以前、もあさんから教えていただいたサイトを
読んでいたら、MIDIのI/F回路について
凄く面白い実験をされてました。このページ。

http://www.geocities.jp/pcm1723/html/p4pcmidi.htm#top

一言で言うと、安ーーーーいフォトカプラ(高速版じゃない
フォトカプラ)を使ってMIDIのI/Fが出来る
のでは?って話。

そうそう。MIDIって、30kbps程度の通信速度
だから、安ーーーいフォトカプラ(80kbps程度
は出るみたい)だってなんとか使えるんじゃないかと
いうお話でした。

で、これだけのスペックがあるのに30kbps程度の
MIDI信号が伝送できないのか?という疑問について
素子の性格から紐解いて、その対応方法について実験
されてます。

うーん、オープンコレクタではなくカレントミラー
で受けると波形がなまらないのか。すばらしい。
このオシロの比較画像がわかりやすくてgood。

これなら、秋月で1個単価20円のフォトカプラと
1個単価5円のNPNトランジスタ2個、あとは
せいぜいLED1個で合計40円もあればMIDIの
i/f回路ができちゃうんだなぁ。ありがたい。

高速タイプのフォトカプラって200円くらいする
ので、桁違いの安さってことになります。

オイラみたいに、素子の中身やその動作原理に
ついてよく解ってない人間には到底行き着かない
境地だな。すばらしい。


で、さらにこのサイトの「音源仕様」のページ
http://www.geocities.jp/pcm1723/html/tg_spec.htm#fm_spec
を眺めていたら、YAMAHAの「YAMAHA SMAF GLOBAL」
のページからオーサリングツールをダウンロード云々
と書かれていたので、
http://smaf-yamaha.com/jp/
こちらからオーサリングツールをゲット。

うーん、こりゃいいじゃないか!FM音源の
オーサリングツールだ。これだ。これ。

というわけでvoice library画面の
スクリーンショットを元に感想などを。


左側はプリセットされた音源の一覧で、nomal preset
の0番の列は2オペレータの音源。nomal presetの
1番の列は同じ楽器を4オペレータ使った内容との
ことです。

で、その一覧から適当な楽器を選ぶと、右側にその
音色の各プリセットパラメータが表示されます。

例えばこのスクリーンショットなら、グランドピアノの
音色(2オペレータ)を選んでいるところですが、
右側にはオペレータ1(この場合モジュレータとして
働いてます)のパラメータが表示されている、といった
具合です。下のほうにはアルゴリズムも図示されてます。

ここでOp2のタブをクリックすればオペレータ2
(キャリア)のパラメータも見れます。

下の鍵盤部分をクリックすると音が出ます。
そうそう。そいうなんだ。こういうソフトを探して
いたんだよな!ありがたい。

で、色々な音色のパラメータを眺めてみるとなかなか
興味深い…。
あまり書いちゃうと、この日記読んで弄ってみよう
っていう方の楽しみがなくなっちゃうと思うので
ザックリと感想だけ。


まずスチールドラムの4オペレータ用パラメータを
眺めてみる…この周波数比ならオイラのMEGA48版
FM音源を発展させれば出せそうだな。
っていうか、このオーサリングツールに載っている
音源なら全部MEGA48でも実現できそうだな。

あとはLFOとかエンベロープとか組み込むだけだと
思う…。


和太鼓(TaikoDrm)…キャリア、オペレータとも
周波数比がゼロ? キャリアの周波数比がゼロって
なんだ?
あと、wave shapeがsin波の半波形
っぽいんだけど、こりゃなんだ?
この辺りは良く解らん…

マニュアル上は、パラメータの簡単な解説は
書いてあるんだけど、それがどんな意味なのか
までは書いてないんだよな…

そうそう。打楽器系のパラメータも見れるので、
この辺もあとで眺めてみよう。パッと見は
普通にキャリアとモジュレータのパラメータを
設定しているだけっぽいから、MEGA48版
にもそれなりに組み込めるんじゃないかな?


そうそう。パイプオルガン(ChrchOrg)があったので、
やはり白色彗星のテーマ曲を。(≧v≦)σ

うーん、4オペレータ音源ならかなり遊べるな。
元楽器の音色をなかなか再現できている感じ。

MEGA48での試算では処理能力上2オペレータ
×4~5和音程度がせいぜいって感じだったから、
4オペレータだと2和音程度が限界か…もうちょっと
CPUパワーが欲しいな。



コメント ( 9 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« 0014 このページが... »
 
コメント
 
 
 
Unknown (Chuck)
2009-03-17 14:43:56
こんにちは。
以前ATtiny45でFM音源の実験をしたことがあります。乗算器がないので機能は限定的だったのですが。
 
 
 
Unknown (nekosan)
2009-03-18 00:06:32
Chuckさんこんにちは。
http://emusic.g.hatena.ne.jp/Chuck/20070530
ここのmp3で正解でしょうか?

ギュンギュンの金属音でイイカンジですね。

TINY45だとハードウェア乗算器がなくて大変しょうね。
ソースもさっくり眺めさせていただきましたが、Cだと処理速度的にはかなりキツキツだったのでは?

 
 
 
Unknown (Chuck)
2009-03-18 04:38:51
あ、それです、それです。

Cで書きましたが当時見たときはそれほど無駄なコードは発生していないように思いました。WinAVRの最適化具合がバージョンによって揺れるのでなんとも言い切れないのですが。
とはいえfs=32kHzで入る程度まで仕様を削っています。乗算器があればもっといけたかもとは思います。定常音を得るのが目的だったのでEGとLFOは省略しましたが、音楽的には必要ですね。
8bit AVRで押し通すとしたら複数個のAVRを持ってきて個々の位相決定要素をそれぞれに演算させたものを集約させる、というやり方も面白そうです。
 
 
 
Unknown (nekosan)
2009-03-18 20:10:22
EGやLFOまで含めて4音程度同時に出して、かつMIDI入力機能なども搭載できれば、ウクレレ的な楽器をコードでじゃかじゃか鳴らす程度は出来そうだなぁ…などと妄想しています。

MEGA48のアセンブラで実験したところ、2オペ(モジュレータ1、キャリア1)で50クロック程度だったんですが、これにEG、LFOも載せつつ、オペレータを8個まで増やせれば行けそうなんですが…

入りきらなかったら、やはり複数AVRに分散でしょうかね…
 
 
 
Unknown (nekosan)
2009-03-19 19:56:00
>演算は sin(Cwt + B(t)sin(Mwt)) です。

なるほど。私の書いたロジックでは、今回は単音ということもあり色々手抜きをしてるので、とりあえず音が出る程度のスペックでした。

キャリアー側の周波数比は目下1固定にしちゃってます。(キャリア:2、モジュレータ:3,みたいな周波数比の設定が出来ない)

あと、各パラメタはレジスタ上で管理しているので、複数の音に対応させる時にはアクセスの遅いSRAMに確保しないとならないから、もう少し処理時間は必要になるでしょうね。

あと、sinテーブルは1波形256ポイント(8ビット幅)のデータしか持ってません。1波形を1バイトでアドレッシングできれば速いので。

この辺を拡充するとしたら、若干重くなりそうですね。


>私は手でパッチングしたい(アナログシンセ的に)ので

そうですよね。やっぱり手で弄りながら鳴らしたい!
ADSRはクルクルツマミかスライダーでグリグリ弄りたい。周波数比はロータリースイッチかロータリーエンコーダでしょうかね?

全部ロータリーエンコーダにすれば、入力端子がマルチプレクサできて簡単に済むかも…

>ADCで取り込もうとすると思います。演算精度が落ちるのですが。

10ビットADC取り込み時の割り込み禁止/解除の部分でしょうかね?
アセンブラだと割り込み禁止にしなくてもADCL、ADCHの2バイトのアトミックアクセス出来た気が…

もしくはADLAR=1として入力データの精度を8ビットに限定してしまえばアトミックアクセスも気にする必要がないかと…
 
 
 
Unknown (Chuck)
2009-03-20 06:22:47
私はUIにはADCを多用しています。手軽なので。

演算精度が落ちるのは、アトミックアクセスとは関係なくて、単純にビット数の話です。ADCが10ビットしかありませんし、そもそもDAC出力が更新速度を考えるといいとこ8ビットです。
とはいえ外にでる信号を丸めなし8~10ビットに統一できれば問題は生じないと思います。

EGはまだないもののLFOや正弦波生成のAVRはあるので、パワーのあるマイコンに接続してみるのもいいかもと思い始めました。雑誌付録のLPC2388とか。
 
 
 
Unknown (nekosan)
2009-03-20 19:35:31
>私はUIにはADCを多用しています。手軽なので。

そうですね。ロータリーエンコーダは入手性や値段に難がありますね…

>演算精度が落ちるのは、アトミックアクセスとは関係なくて、単純にビット数の話です。ADCが10ビットしかありませんし、そもそもDAC出力が更新速度を考えるといいとこ8ビットです。

DACと言えば、TINY861、461、261はPWM用に内蔵8MhzのPLL×8倍で64Mhzの出力ができるので、10ビットDACでも1サンプルあたり62.5Khzで出力が出来る計算です。(残念なことにMEGAシリーズじゃないので、乗算器が使えないんですけど)

このあいだTINY861買ってあるので、この高速PWM近々試してみたいと思ってます。
 
 
 
Unknown (Chuck)
2009-03-21 05:59:41
UIは、ときどきボタンですら分圧電位を作ってADCに読ませたりしています。1ポートで8ボタンぐらい処理しています(同時押しは禁止で)。

> DACと言えば、TINY861、461、261

これはいいことを伺いました。ATtiny861は追いかけていなかったので知りませんでした。
tiny25/45/85/26 だと64MHz PWMできてもTimer1が8bitだったんですよね…
今8bit PWMで作っている正弦波生成に使いたいです。
200~230円ぐらいですか。近々買うかもしれませんが、先にレールで買ったtiny85をまずは消化しなくては…
 
 
 
Unknown (nekosan)
2009-03-21 22:59:15
>UIは、ときどきボタンですら分圧電位を作ってADCに読ませたりしています。1ポートで8ボタンぐらい処理しています(同時押しは禁止で)。

ADCでボタン入力は1ピンですし、便利かも知れませんね。

>200~230円ぐらいですか。近々買うかもしれませんが、先にレールで買ったtiny85をまずは消化しなくては…

digi-keyでもtiny261は200円ちょっとって感じみたいですね。秋月とかの店頭でもその程度の単価で手に入るようになるといいんですけどね。

あと、できればmegaシリーズのように16ビットでPWMできるとか、もしくはMEGAシリーズでもPLLでPWMの周波数を引き上げられるといいいなぁ…。
 
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。