Segmentation Fault

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

WAVE音声にディレイをかける

今回はWAVE音声にディレイ(残響系)のエフェクトをかけてみた。

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



ソースコード(ディレイ処理部のみ)

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



ディレイ無し


ディレイ有り