【问题标题】:Create triangle audio wave创建三角音频波
【发布时间】:2016-07-04 19:24:34
【问题描述】:

我使用 NAudio 创建具有两个通道的不同音频波。对于正弦波,我有下一个代码:

        int sampleRate = WaveFormat.SampleRate;
        for (int n = 0; n < sampleCount; n += 2)
        {
            buffer[n + offset] = (float)(AmplitudeLeft * Math.Sin((2 * Math.PI * sample * FrequencyLeft) / sampleRate));
            buffer[n + offset + 1] = (float)(AmplitudeRight * Math.Sin((2 * Math.PI * sample * FrequencyRight) / sampleRate));
            sample++;
            if (sample >= sampleRate)
                sample = 0;
        }
        return sampleCount;

我需要一个简单的公式来创建三角音频波。

【问题讨论】:

    标签: c# geometry naudio trigonometry


    【解决方案1】:

    分工让工作更轻松:

    void makesamples_mono(float[] buffer, int offset, int sampleCount, int rate, double amp, double freq)
    {
        double one_over_half_per = freq * 2.0 / rate;
        for (int i = 0; i < sampleCount; i++)
        {
            double div = i * one_over_half_per;
            buffer[offset + 2 * i] = (float)(((((int)div) % 2 == 0) ? -amp : amp) * (1.0 - 2.0 * (div - (int)div)));
        }
    }
    
    void writesamples_stereo(float[] buffer, int offset, int sampleCount, int rate, double l_amp, double r_amp, double l_freq, double r_freq)
    {
        makesamples_mono(buffer, offset, sampleCount, rate, l_amp, l_freq);     // left channel
        makesamples_mono(buffer, offset+1, sampleCount, rate, r_amp, r_freq);   // right channel
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多