電子工作 12/8 FM音源に手を出してみた、その2(YMF825)
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

電子工作 12/8 FM音源に手を出してみた、その2(YMF825)

2017-12-07 21:08
    それでは、FM音源音源の続き
    (えー、一応ですね今回のは「備忘録」と言う事で調べながら書き足していきます、
    足りなかったり多少認識間違いしてたりする事もありますのでご容赦下さい)


    音の波の合成で参考になりそうなツイートを引用
    まあコイツはフーリエなので分解だけど
    シンセサイザーは波を足したり引いたり崩したりで
    変な音を出して楽しむ楽器と言う事で

    YMF825の基本的な波はこんだけ有る
    以下のWSのパラメーター
    それを。次の8種のアルゴリズムで足したり混ぜたりしていく
    グレーの四角が各発信するモジュールでオペレーターと呼ばれてます、
    ちなみに[1]の右から出てぐるっと回って左に入るのはフィードバックの表記です。


    まず、arduino用のサンプルからsetupの一部を
    fbd_spec1.mdのI_ADRの表を参考に

    if_s_write( 0x1D, OUTPUT_power );  OUTPUT_powerは0なら5V、1なら3.3V回路
    if_s_write( 0x02, 0x0E );//Analog Block Power-down control
    delay(1);
    if_s_write( 0x00, 0x01 );//CLKE N
    if_s_write( 0x01, 0x00 ); //ALreset
    if_s_write( 0x1A, 0xA3 ); //soft reset ソフトリセット
    delay(1);
    if_s_write( 0x1A, 0x00 ); //soft reset リセットから復帰
    delay(30);
    if_s_write( 0x02, 0x04 );//Analog Block Power-down controlAP1,AP3
    delay(1);
    if_s_write( 0x02, 0x00 );//Analog Block Power-down controlAP2
                      ここまでが初期化パート

    //add
    if_s_write( 0x19, 0x30 ); マスターボリューム 00〜FC(上位6ビット)
    if_s_write( 0x1B, 0x3F );//interpolation Sequencer Delay, Recovery Function Setting, Volume Interpolation Setting
    if_s_write( 0x14, 0x00 );//interpolation
    if_s_write( 0x03, 0x01 );// アナログ出力のゲイン設定、0で5dB1で、6.5dB

    if_s_write( 0x08, 0xF6 );//Sequencer Setting
    delay(21);
    if_s_write( 0x08, 0x00 );
    if_s_write( 0x09, 0xF8 );
    if_s_write( 0x0A, 0x00 );

    // if_s_write( 0x0D, 0x22 );//pitch octave


    if_s_write( 0x17, 0x40 );//MS_S Sequencer Time unit Setting
    if_s_write( 0x18, 0x00 );



    次に音色指定
    これは T_ADRは一気にワードで書き込みます
    spiバースト転送って事で
    35バイトですけど、各パラメータは上位ビット下位ビットに混ざって入ってます
    詳しくはドキュメント参照



    unsigned char tone_data[35] ={
    0x81,//header
    //T_ADR 0
    0x00, basic Octave
    0x42, LFO とアルゴリズム
    SR XOF  RR DR  AR SL  TL KSL DAM EAM DVB MLTI DT WS FB
    0x80,   0x7F,  0xF4,  0xFB,   0x00,     0x10,  0x80,  オペレーター1
    0x80,   0xAF,  0xA0,  0x0E,   0x03,     0x10,  0xC0,  オペレーター2
    0x00,   0x2F,  0xF3,  0xFB,   0x00,     0x20,  0xE0,  オペレーター3
    0x00,   0xAF,  0xA0,  0x0E,   0x01,     0x10,  0x40,  オペレーター4
     
    0x80, 0x03,0x81,0x80, 終了コード
    };


    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    0

    0

    0

    0

    0

    0

    BASIC Octave

    LFO 2bit

    0

    0

    0

    アルゴリズム3bit

    サスティーンレート4bit

    XOF

    0

    0

    KSR

    リリースレート4bit

    ディケイレート4bit

    アタックレート4bit

    サスティーンレベル

    トータルレベル6bit

    KSL

    0

    振幅変調2bit

    EAM

    0

    ビブラート2bit

    EVB

    MULTI 4bit

    0

    ディチューン3bit

    波形パターン5bit

    フィードバック3bit


    * LFO  Low Frequency oscilator
    * SR サスティーンレート
    * XOF keyoff無視、伸ばし音
    * KSR key scale センシビティARGレート
    * RR  リリースレート
    * DR  ディケイレート
    * AR  アタックレート
    * SL  サスティンレベル
    * TL  トータルレベル
    * KSL  key scale levelセンシビティ
    * DAM 振幅変調深さ
    * EAM 振幅変調設定
    * DVB ビブラート深さ
    * EVD ビブラートセット
    * MULTI 周波数倍率
    * DT ディチューン
    * WS 波形
    * FB フィードバック


    で、良かったのかな
    これをI_ADRの #07にまとめて書き込み

    音を出す時は #13と#14に音程に当たる数値を入れて
    (ピッチテーブル)の数値
    #15に0x40入れてkeyonです。
    音を止める時は
    #15を0x00でkeyoffです。


    ドキュメント参照って、一覧貼るのも面倒だなあ、どーしようか、
    パラメータの説明だとビット毎だしなあ無いと解りにくい様な気がする


    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。