コアダンプの数だけ強くなれるよ

見習いエンジニアの備忘log

WAVE音声にdelayをかける

前回はWAVEの楽曲からボーカル成分だけを消してみました。

www.segmentation-fault.xyz

今回はWAVE音声にdelay(残響系)のエフェクトをかけてます。

ディレイはある時刻 n における値 S(n) に過去時刻の値 S(n-m) を加算合成(やまびこ)していくことで実現できます。ディレイのかかり具合は遅延時間、やまびこの回数、減衰率で決まります。


ソースコード(delay処理部のみ)

#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;
            }
        }
    }

実際に試して聞き比べてみると少し残響感がでました。ただ音量が下がってしまいますね。

ディレイ無し


ディレイ有り