65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的音频 DSP

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.55/5 (19投票s)

2003年9月7日

2分钟阅读

viewsIcon

223761

downloadIcon

8759

一个用于音频处理的 .NET 类库。

Sample Image - audio_process.jpg

引言

Garbe.Sound 是一个用于音频处理的小型 .NET 类库。其主要思想是为程序员提供一个用于开发音频滤波器的 RAD 环境。它包含一些基本类,并已经实现了一些滤波器,例如:

  • 增益滤波器
  • 延迟滤波器
  • 低通滤波器
  • 混音器
  • 混响
  • 头部相关传递函数 (HRTF)
  • 读取和写入波形文件(目前仅支持单声道)

该库仍然是 Beta 1 版本,但已经可以正常工作。欢迎提出任何意见! :)

使用代码

该库的一个想法是易于编程。为了做到这一点,我选择了一种系统化的类视图,其中每个滤波器都可以被视为一个具有输入和输出信号的盒子。

库中的几乎所有类都继承自 SoundObj 类,该类实现了这种基本的系统化视图。这允许您编写如下代码:

WaveReader    wr1 = new WaveReader("teste2.wav");
WaveReader    wr2 = new WaveReader("teste.wav");
Gain        ga1 = new Gain(0.5f);
Gain        ga2 = new Gain(0.5f);
Mixer        mx  = new Mixer(2);
WaveWriter    wwl = new WaveWriter("exit.wav", wr1.NumChannels, 
                                 wr1.SampleRate, wr1.BitsPerSamples, 1, true);
            
ga1.Input = wr1;
ga2.Input = wr2;
mx[0] = ga1;
mx[1] = ga2;
wwl.Input = mx;
            
for(int k = 0; k < wwl.Interations; k++)
{
    wr1.DoProcess();
    wr2.DoProcess();
    ga1.DoProcess();
    ga2.DoProcess();
    mx.DoProcess();
    wwl.DoProcess();
}

wr1.Close();
wr2.Close();
wwl.Close();

这是一个非常简单的代码,它只有 2 个信号输入(teste.wav 和 teste2.wav),将两者都放大 0.5 倍(ga1 和 ga2 对象),将两者混合成一个信号,该信号作为 exit.wav 保存。

链接

历史

  • 2003.09.02 - Beta 1

错误和评论

如果您有任何意见或发现任何错误,我很乐意听取并改进它。

© . All rights reserved.