マイク(速度=電圧)……から……スピーカ(電圧=位置)?

コンデンサマイクの原理は、基本的に圧力計である。つまり音圧=電圧として記録しているわけだけど、スピーカーは電圧=位置として再生する。これって問題じゃないの?例えば、極端な例でいえば、ゆるい矩形波(ex.風のような音)の再生をそのままスピーカで行えば、それは音圧としてはその微分成分しかでてこないというか。矩形波の出力中は前に動き続けなきゃいけないんじゃないの? 無理だけどさ。

実際は低周波はカットされているし、速度が位置になったといっても、sinがcosになる程度、つまり高域ではほぼ問題ではないので、致命的な問題にはならないものの、このマイクで空気速度(=音圧)として捉えたものがスピーカでは位置の再現となっているのが、本物じゃない感に関連しているのではないかとおもったら、ちょっとオーディオに萎えた。
本来なら、オフセットというものが存在しない発音デバイスで音圧として駆動すべきなのでは?と帰り際に思ったのです。

ちなみに、これを疑似的に再現したフィルタをfoobarプラグインで書いてみた。
コアになる部分は、こんな感じ。

for (unsigned int sa = 0; sa < sample_count; sa++) {
for (unsigned channel = 0; channel < channel_count; channel++) {
audio_sample temp = current[sa*channel_count + channel];
last_result[channel]=last_result[channel]*0.5+(1.0/2.0)*(temp);
current[sa*channel_count + channel]=last_result[channel];
last_sample[channel]=temp;
}
}

特に重要なのは

last_result[channel]=last_result[channel]*0.5+(1.0/2.0)*(temp);

で、これはまあようするに前の電圧に次の電圧を足している……という、、積分フィルタに似た形式になっている。0.5とかは、つけないと溢れてしまうので仕方なくつけているダンパー係数。

で、こうすると音がどうなるのかというと、積分フィルタ(ローパス的特性)に似て、重心が少し下がったような感じになる。極端にこのフィルタをかけると、つまり0.5を0.99くらいに、1/2を1/256くらいにすると、常にオフセットがかかるので高域の質が落ちる。ちなみに上記の係数でもやっぱり少し落ちる。低域をとるか、高域をとるか、といったところ。

今は上にあげた程度の係数で聴いているのだけど、ぼちぼちいい感じに鳴っている。いやあんまりかわんないです。調味料程度。
レコードとかも、針の振動余韻とかで、溝=原信号に対してこんな感じのフィルタかかってないかなぁ、なんて思うのですが、いかがでしょう。

(間違ってたらつっこんでください……プラグイン公開希望の方いたらおしえてください……)