広告
前回はWAVEの楽曲からボーカル成分だけを消してみました。
今回はWAVE音声にdelay(残響系)のエフェクトをかけてます。
ディレイはある時刻 n における値 S(n) に過去時刻の値 S(n-m) を加算合成(やまびこ)していくことで実現できます。ディレイのかかり具合は遅延時間、やまびこの回数、減衰率で決まります。
ソースコード(delay処理部のみ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#define DELAY_TIME_RATE (0.1) /* 遅延時間 */ #define DELAY_FEEDBACK_COUNT (5) /* やまびこの回数 */ #define ATTENUATION_RATE (0.5) /* 減衰率 */ /* ...途中略... */ int delay_time = wave1->fmt.sample_per_sec * DELAY_TIME_RATE; int data_block_max = wave1->data.chunk_size/sizeof(wave_stereo_t); wave_stereo_t* val1 = (wave_stereo_t* )&wave1->data.dat[0]; wave_stereo_t* val2 = (wave_stereo_t* )&wave2->data.dat[0]; for(int t = 0; t < data_block_max; t++) { for (int c = 1; c <= DELAY_FEEDBACK_COUNT; c++) { if (t - (delay_time * c) > 0) { val2[t].left += pow(ATTENUATION_RATE, c) * val1[t - delay_time * c].left; val2[t].right += pow(ATTENUATION_RATE, c) * val1[t - delay_time * c].right; } } } |
1 |
実際に試して聞き比べてみると少し残響感がでました。ただ音量が下がってしまいますね。
ディレイ無し
ディレイ有り
広告
広告