SSブログ

I2SによるAudio出力 - その8 [Raspberry Pi]

また今日から工場に来ている。今の会社で光学屋は僕一人で、今たまたまいろんなところから案件が来て僕がボトルネックになっている。ところで全然話は違うんだけど、日馬富士がやめちゃうのはさみしいなあ。安馬時代の十両優勝した後ぐらいからのファンだったのに。日本的シンボルだらけの「日馬富士」という四股名を襲名(とは言わないのか)したとき、親方の強烈な期待を表してるなあ、と思ったのが、ほんのついこないだのような気がする。

まあ、それはどうでもよくて、こないだ一応完成したD/Aコンバータとshairport-syncを乗せたRaspberry Piで古いアクティブスピーカをAirPlayスピーカに改造した話にオチがついた....

アクティブスピーカというのはBoseのCompanion3という、とっくの昔にディスコンになった、小さなツィータと小型の床置きウーファのセットになったもので、ラインレベルのアナログ信号を受け付けるようになっている。ところが昔から女房がこれをあまり好きではなかった。ブーミーだ、というのである。

確かにそれほど素直な音ではないし、女房はソニーのすごく古いAPM-22ESを普段使いにしていて(結婚したとき買ったのでもう30年以上前のもの。APMシリーズはあまり評判は良くなかったようだけど、これはたまたま当たりだったのかエンクロージャの木がよくて、今でもしっかりした音が鳴るので修理を繰り返しながら使ってる。一度、ウーファユニットのエッジになってるポリウレタン(だと思った)が経時変化でどろどろに溶けてユニットごと交換した。それももう不可能だろう。おっとこのことは前にも書いてたっけ)、それに比べればぶかぶかしてぎんぎんした音になる。

それでもあのサイズでベースが何弾いているかわかるというだけでもマシだと思う。小型のスピーカは振動の物理学に依存して、どうしも低音が出ない。そこそこ値のはるスピーカでも低音はおざなりな感じのが多くて、ピチカートのベースがアタック音以外何が鳴ってるんだかわからない、というのをよく聞くような気がする。音楽的には悲惨である。

せっかくAirPlayスピーカが手に入ったのに使ってもらえないかもしれない、ということで、もったいないので一人暮らししている長女にRaspberry Piごとやることにした。ちょっと押し売りじみていて、彼女が音を聴いてなんというかわからないけど、今音の鳴らせるのがヘッドフォンしかないらしいので、使い方によっては有効だろう。

娘はunixのしきたりとか使い方を知らないので、バカチョンで使えるようにしておかないといけない。それと娘の部屋はコンクリート製の細長い箱なので、ウーファの設置場所によって音響特性が極端に変わってしまうだろう。そこでテストトーンを生成するmathematicaコードを書いた。
1127testtone.png

RaspbianのMathematicaで問題なく動く。

ノートブックファイル(ダウンロード先はDropbox)を展開して、Raspberry PiのMathematicaから開いて、一度Definitionsセクション全体を評価してもらうと
playTestNote[{lowest_, highest_}, dur_: 1, opt___]
という関数が使えるようになる。これはMathematicaのSoundNoteと同じ音程の指定のしかた(真ん中の「ド」が0で、半音ごとに整数が割り当たっている)で、lowestからhighestの音まで半音階で順番に正弦波を鳴らすだけである。一つの音程をdur秒(デフォルトで1秒)継続させる。従って全体で(highest - lowest)dur秒の間音が鳴る。オプションには
SampleRate -> 8000
SampleDepth -> 8
noteVolume -> 1
channel -> stereo
rampDuration -> 0.02
の5つある。SampleRateとSampleDepthはそのままPlay関数に渡される。noteVolumeはデフォルトだとフルスイングになるので、1以下の数字を指定するとそれだけ音量が下がる。channelはデフォルトだとステレオで、monauralを指定するとモノラルになる。

音程を直接切り替えるのではなくて、音の始まりと終わりで直線的に音量を変化させるように台形のウィンドウが正弦波にかかっている。最後のrampDurationはその音量変化の時間を指定する(デフォルトでは20msec。位相を合わせてないので、0にすると音程が変わるときにブツッと大きな雑音がする)。

これで例えば
playTestNote[{-24, 24}, 0.3, SampleRate -> 44100, 
  SampleDepth -> 16, noteVolume -> 0.71]
を実行するとヘ音記号の下2線ドからト音記号の上2線ドまでの半音階を、ステレオ16ビット44.1kHzで、最大音量の-3dBでの正弦波のデータを生成する。ノートブック上のSoundオブジェクトの「再生」ボタンをクリックするとMathematicaから音が鳴るし、生成直後に
Export["testnote.wav",%];
を実行すると、そのWAVファイルが作られる。これをターミナル(RaspbianデフォルトだとLXTerminal)から
$ aplay testnote.wav 
Playing WAVE 'testnote.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
とするとちゃんとファイル形式が認識されて、デフォルトデバイスから音が鳴るはずである。

これと、マイクロフォンを持っていって(娘はけっこうちゃんとしたコンデンサーマイクを持ってるけど僕が去年から借りっぱなしにしている)、鳴らした音をDAWソフトに取り込んで振幅表示すれば、共振共鳴がどのへんにあるかわかる。これでなるべくフラットになるような設置場所を探せばいい。まあたいていはフラットになるような場所はない、という結果だろうけど、ちょっとでもマシな姿勢を探すだけでも耳の疲れなんかが違ってくる。

完全にQが立っていたり、そもそも音が出ていなかったり、あるいは非線形の歪みがあるとダメだけど、人間の聴覚というのはよくできていて、周波数特性が多少デコボコしていても、聴いているうちに慣れてきて気にならなくなる。

気にならなくなれば聴き疲れも少ないし、超高級なオーディオ機器でなくても音楽はわかるようになる。僕の場合はまちがいなくそれで十分である。
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

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

I2SによるAudio出力 - その7macOSのバグ ブログトップ

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