SSブログ

SmileSoundで音の処理が重いのでFor文減らして軽くした。 [ds-DCCデコーダ]

 さて、今月は、上旬に腰を痛めて会社休んだり、中旬に家族がコロナに罹って、そこから、家族感染が広がって(私にはうつらなかったが)、3連休は休日夜間診療所に行ったりして終わり、会社はリモートで空気読めずに苦労するし、で、今日から夏休みのはずなんだが、仕事の進みがグダグダで、休み期間中に数日、休出をしないといけないというかんじで、なんか、微妙な夏です。
 まあ、ここ数年は、振り返っても、去年は確かコロナが広がっているのに、広がっていないことにされてオリンピックはするが、外に出るなと言われていたような気がするし、一昨年は恐怖の致死率を誇るコロナ蔓延のせいで夏休みもほぼ家にいた気がするので、ここ数年、ぐだぐだが続いていて今年だけではないような気もします。
 で、本題です。DesktopStationさん中心に作っているデコーダーで(名前はSmileSoundで決まりなのか?)音部分を作っていました。
 音部分というのは、フラッシュから音データをとってきて、それをWAVの出力に向け、12音分足し算するという計算のため、For文(計算ループ)の嵐です。
 12音分の音のスピードの変換や音量の変換などもあり、現状の計算では、4096データ(44.1kHzで90.6[ms](・・・92.9msが正しそうだが、どっか間違えたか?))分の計算するのに、37.2[ms]かかっていて、約40%も音の波形計算に取っています。また音を出していないときも無音を12音分計算しているため、約4%消費します。(ただし、この値はコンパイルの最適化をしていない場合です)
 デコーダが結構熱くなるようですが、デコーダ面積も小さく模型の中に入れるため、放熱を考えると、処理を軽くしたいとのことで、無音の時は計算を省いてくださいとの指令がきましたので、作りました。
 結果としては以下のグラフのようになっています。
Sound処理時間.png
 ”現状12音”が今のサウンドエンジン部分で、横軸が同時発音数なので、無音状態(0)で21.6[ms]、8音同時再生で37.2[ms]です。
 そして、今回作った"for削減_12音”では、無音状態では0.8[ms]、8音同時再生で、30[ms]となっており、感動的に処理を減らしています。(いや、いままでどんだけ無駄な計算しているんだ?という話はありますが)
 つまり誇大広告的に言うと、アルゴリズムなどの革新的な工夫により、スタンバイ状態の電力消費は当社従来比96%改善となります。
 あと、まあ、音をいっぱい出すと、発熱は今までと変わりません。なぜなら、発音時のアルゴリズムは変わっていないからです。つまり、走行音出しながら、フランジ音と、ジョイント音と、コンプレッサー音を出しながら、警笛を鳴らしたりすると、そういう時は熱くなると思います。
 デコーダを床下に床下機器もどきで付けて床下機器をダイキャストでヒートシンク的に使えれば、いい感じに冷えると思いますが、そういうのは難しいですかね。
 でも、3Dプリント用の金属フィラメントなかったっけ?

 なお、まだ、その部分を作っただけで、デコーダのスケッチには組み込まれていないので、ちゃんと動くか確認できていません・・・。

コメント(0) 

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。