サウンドプログラミング3
■ このスレッドは過去ログ倉庫に格納されています
0702デフォルトの名無しさん
2007/05/15(火) 00:22:48という話をたまに聞くんだけど、それってどうなの?
例えばこんなの。(以下、シェーダー(?)ソース)
// result(i) = s(i)*0.5 + s(i-1)*0.3 + s(i-2)*0.2 + s(i-3)*0.1;
// ( result は最終的な再生音 )
// ( s(i)はi番目のサンプル )
//
// この手順をすべてのサンプルに対して適用する。
// r はs(i)と同義
r *= 0.5;
t = sample(-1); // t に一つ前のサンプルを代入
r += t * 0.3;
r += sample(-2) * 0.2;
r += sample(-3) * 0.1;
return r;
プログラム上ではこんな感じに展開される。
switch (channels や bits_per_sample とか適当に) {
case 8ビットモノラル: {
dst = (uint8_t *)dst_ptr;
src = (const uint8_t *)src_ptr;
for (i = 0; i < size; ++i) {
dst[i] = (uint8_t)(src[i]*0.5 + src[i-1]*0.3 + src[i-2]*0.2 + src[i-3]*0.1);
}
} break;
case 16ビットモノラル: {
dst = (uint16_t *)dst_ptr;
src = (const uint16_t *)src_ptr;
...
}
■ このスレッドは過去ログ倉庫に格納されています