• schroeder reverb matlab实现


    原理参考:Natural sounding artificial reverberation

    combFilter.m:

    function output = combFilter(delay, gain, input)

    fs = 48000;

    delaySample = int32(delayTime * fs / 1000);

    B = [1 zeros(1, delaySample - 1)];

    A=[1 zeros(1, delaySample - 2) -gain];

    output = filter(B, A, input);

    end

    calcCombGain.m:

    function gain = calcCombGain(reverbTime, delayTime)

    gain = power(10, -3 * delayTime / reverbTime)

    end

    allPassFilter.m:

    function output = allPassFilter(delay, gain, input)

    fs = 48000;

    delaySample = int32(delayTime * fs / 1000);

    B = [-gain zeros(1, delaySample - 2) 1];

    A=[1 zeros(1, delaySample - 2) -gain];

    output = filter(B, A, input);

    end

    reverb.m:

    function output = reverb(combDelayTime, combGain, allPassDelayTime, allPassGain, input)

    y = zeros(length(input), 4);

    combOut = zeros(length(input), 1);

    for i = 1:1:4

    y(:, i) = combFilter(combDelayTime(i), combGain(i), input);

    combOut = combOut + y(:, i);

    end

    allPassOut1 = allPassFilter(allPassDelayTime(1), allPassGain(1), combOut);

    output = allPassFilter(allPassDelayTime(2), allPassGain(2), allPassOut1);

    output = output * 0.25 + input;

    end

    main.m:

    clc

    clear

    T60 = 2000;

    combDelayTime = [29.23 37.67 41.49 44.31];

    combGain = calcCombGain(T60, combDelayTime);

    allPassDelayTime = [5 1.7];

    allPassGain = [0.7 0.7];

    %input = [1, zeros(48000-1, 1)];

    [input fs] = wavread('test.wav');

    y = reverb(combDelayTime, combGain, allPassDelayTime, allPassGain, input);

    wavwrite(y, fs, 'reverb.wav');

    figure(1)

    plot(y)

  • 相关阅读:
    SpringBoot自定义HttpMessageConverter
    第一次使用Linux服务器所栽之坑
    入门Nginx
    HttpClient中的Timout
    SpringBoot启动
    SpringBoot注解
    百度2017春招笔试
    学习JUnit
    Mybatis中的@SelectKey注解
    PHP中MD5函数漏洞
  • 原文地址:https://www.cnblogs.com/fellow1988/p/9801393.html
Copyright © 2020-2023  润新知