VVVFをMP3スケッチにつなげるその6 [ds-DCCデコーダ]
本日は昨日のDCCfestの飲み会で飲みすぎて二日酔いになりつつ、家族で、横浜のシルバニアファミリーのレストランに行きました。途中、馬車道からコスモワールドを見ると、水陸両用バスが走ってました。まあ、見ただだけで満足で乗っていません。
さて、なごでんの日記様のMP3デコーダに吊り掛け音(スピーカー)を入れるのをやっておりますが、なかなか進みません。
Yaasan様から、ノコギリ波にしなさいというお達しがありましたので、とりあえず、周波数可変で、8周期ごとに繰り返すノコギリ波のスケッチを作ってみましたが、全然。ダメみたいです。(昨日のDCCfestでは、もっと音のこだわりがすごい人がたくさんいらっしゃいましたので、隅で小さくなっておりました。)
で、ダメ元でキャリア周波数32000Hz固定でノコギリ波周期を可変にするようスケッチの大改造(というと大げさ)を行ったら、素晴らしい音(人によってはそれなり?)になったと思うので、紹介します。
なお、今回の改造により、Timer1使う理由がないのではないかという突っ込みが出ます・・・。申し訳ないです。(PWMとDutyを一緒に変えるわけではなくなったので・・・。)
今回の実験環境は以下です。なぜ電車でGoコントローラでやるかというと、ツマミを回すよりも一定の加速をしやすいからです。
右から電車でGoコントローラ、S88_Masconコントローラ基板(開発中)、DCC/MM2シールド(S88_Mascon用にスケッチを変更しているもの)、デコーダ開発ボード(Mp3とVVVF音ようアンプを積んでいて、Timer1,Timer2を入れ替えているもの)、です。
液晶の右下○○Kと書かれているところがスピード(のつもり)です。1段で19K、2段で39Kと上がっていくようにしています。
動画は以下です。スケッチはこちらです。
この動画と音は一緒ですよね?(同じには聞こえないって?)
なお、どういう風にスケッチを変えたかですが、
今までは、
・全体の周波数はPWM周波数を変えつつ、個々の倍音は細かく周波数をサイクルで変更しながら鳴らしたり、
・全体の周波数はPWM周波数を変えつつ、Dutyを配列にして、次々に波形を変えて、ノコギリ波になるように試行錯誤しておりました。
今回は、
CDなどと同じように初めから人の耳に聞こえない高周波の周波数(32KHz)をまずキャリア周波数にして、固定にします。
ノコギリ波の生成はInt型(16bit)の変数を一つ作って、周波数に合わせて、一回の割り込み(32KHz=31usごとに来る)で、少しずつDutyを上げてノコギリ波形を作っていきます。
unsigned int型を使っているので65535まで足されると、次は0にもどりますので、足し続けるルーチンでノコギリ波になります。ただし、PWMDutyは256段なので、8ビット右にシフトしつつ、シフトした場所に1が充てんされていることもあるので、0xffでマスクしてやります。
割り込み内でIf文などを使っていないので、多分バグりにくい処理になっているかと思います。
まあ、
・MP3のファンクションを鳴らすとやっぱり一瞬途切れます。
・PWM周波数変更時の途切れは原理上無くなりました。
・CV48の音のバリエーションは無しになりました。
さて、なごでんの日記様のMP3デコーダに吊り掛け音(スピーカー)を入れるのをやっておりますが、なかなか進みません。
Yaasan様から、ノコギリ波にしなさいというお達しがありましたので、とりあえず、周波数可変で、8周期ごとに繰り返すノコギリ波のスケッチを作ってみましたが、全然。ダメみたいです。(昨日のDCCfestでは、もっと音のこだわりがすごい人がたくさんいらっしゃいましたので、隅で小さくなっておりました。)
で、ダメ元でキャリア周波数32000Hz固定でノコギリ波周期を可変にするようスケッチの大改造(というと大げさ)を行ったら、素晴らしい音(人によってはそれなり?)になったと思うので、紹介します。
なお、今回の改造により、Timer1使う理由がないのではないかという突っ込みが出ます・・・。申し訳ないです。(PWMとDutyを一緒に変えるわけではなくなったので・・・。)
今回の実験環境は以下です。なぜ電車でGoコントローラでやるかというと、ツマミを回すよりも一定の加速をしやすいからです。
右から電車でGoコントローラ、S88_Masconコントローラ基板(開発中)、DCC/MM2シールド(S88_Mascon用にスケッチを変更しているもの)、デコーダ開発ボード(Mp3とVVVF音ようアンプを積んでいて、Timer1,Timer2を入れ替えているもの)、です。
液晶の右下○○Kと書かれているところがスピード(のつもり)です。1段で19K、2段で39Kと上がっていくようにしています。
動画は以下です。スケッチはこちらです。
この動画と音は一緒ですよね?(同じには聞こえないって?)
なお、どういう風にスケッチを変えたかですが、
今までは、
・全体の周波数はPWM周波数を変えつつ、個々の倍音は細かく周波数をサイクルで変更しながら鳴らしたり、
・全体の周波数はPWM周波数を変えつつ、Dutyを配列にして、次々に波形を変えて、ノコギリ波になるように試行錯誤しておりました。
今回は、
CDなどと同じように初めから人の耳に聞こえない高周波の周波数(32KHz)をまずキャリア周波数にして、固定にします。
ノコギリ波の生成はInt型(16bit)の変数を一つ作って、周波数に合わせて、一回の割り込み(32KHz=31usごとに来る)で、少しずつDutyを上げてノコギリ波形を作っていきます。
unsigned int型を使っているので65535まで足されると、次は0にもどりますので、足し続けるルーチンでノコギリ波になります。ただし、PWMDutyは256段なので、8ビット右にシフトしつつ、シフトした場所に1が充てんされていることもあるので、0xffでマスクしてやります。
割り込み内でIf文などを使っていないので、多分バグりにくい処理になっているかと思います。
まあ、
・MP3のファンクションを鳴らすとやっぱり一瞬途切れます。
・PWM周波数変更時の途切れは原理上無くなりました。
・CV48の音のバリエーションは無しになりました。
2016-11-13 22:07
コメント(0)
トラックバック(0)
コメント 0