表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
35/61

2.PCM再生のやり方ってPWM使うの?

picocalcってどうやって mp3 再生してんのかな?と思いつつソースを見ていくとGPIOをPWMに設定して制御している。

はて?PWMの先にF/Vコンバータでもつながってる?と思って回路図を見ると、ラインバッファ用ICとCRを使ってるだけ。う~ん?


ちなみにpicocalcのmicropythonドライバも音を出せる(ビープ音)。これもPWMを制御してるが、PWMクロックの分周比を設定して、可聴帯域のPWM信号を出している。

そうだよね。これが普通だけど、どうやってPCM音声だしてるん?


PCMのソースを読み進めていくと、PWMの分周比を1(つまり125MHz)、PWMカウンタ上限を2047に設定。そして44KHz の周期処理のコールバック関数内でPWMのデューティ比を設定している。12bitのDAコンバータ相当。

どうやら聞こえない高周波のPWMを出し、そのデューティ比で電圧を作っているようだ。

なるほど、バッファICの後ろのCR回路はそのために存在するのか。


更に調べるとこれはD級アンプの仕組みそのものだったようだ。大昔の知識だと「D級アンプは効率は良いが音質が悪くオーディオ用途には使えない」だったけど時代は変わったなぁ。(デジタル技術の進歩)


ということで、データをデューティに設定して 23us だけsleepするのを繰り返すドライバを組み込んで、python側でPCM用のデータを作成して鳴らしてみた。

なるほど、確かに音が聞こえてくる。不思議だなぁ。


ただ、鳴らしていると徐々に音程が下がっていく。スマホアプリのスペクトラムアナライザを使ってみると、間違いなく落ちていく。なんじゃこりゃ?

まぁ原因はよくわからんが、この処理は周期タイマからのコールバックで実装するから問題なかろう。

データのやりとりはPCMバッファを2面持てば簡単。


次はMP3の再生処理だ。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ