音の高低をほぼリアルタイムに変更するプログラム

デジタル屏風では音楽に光が連動する光音競演コンピュータの開発・販売を行っています。加齢による難聴が高音(周波数が多い)から進展するということで、周波数をほぼリアルタイムに少なくすることで困り事が解決できるのではないか、ということでまずはほぼリアルタイムに音の周波数を少なくするプログラムを作ってみました。参考にしたのは、「C言語ではじめる音のプログラミング」(青木直史著)です。

本書籍の中に「ピッチシフタ」としてサンプルプログラムが紹介されています。リサンプリングで単位時間あたりの音データの量を調整することで、音データの周波数を調整するというものです。そこで0.1秒ごとの音の最初の2/3(0.067秒)を0.1秒に展開することを試してみました。筆者の声をPCのマイクから入力し、それをPCのスピーカーに出力するものです。動作させてみるとかなり低音を出すことが出来ました。入力した0.1秒の入力音のうち、後ろの0.033秒は音がカットされているのですが、その点は違和感なく再生できています。しかし周波数の2/3倍化によってかなりの低音となるので、もうちょっとゆるめの倍率で調整した方が良いように思いました。

プログラムのデバッグ過程では、音のサンプルが欠落したときに、大きな雑音が発生することがわかりました。8KHzの量子化を行った場合、0.125(1/8)秒には1024の音サンプルがあることになります。これが1024ではなく、667の音サンプルだったりすると、間断なく(計測はしていませんが0.125秒おき)に大きな雑音が発生するのです。この事象はサンプルの数を1024にすることで解消しました。音データを操作するときの注意点です。

Follow me!