如何在C#中制作音频流? (一般)

时间:2015-07-11 13:54:38

标签: c# audio waveform

我一直在使用C ++对Atmel微控制器进行合成器项目,但我对时序缺乏了解,因为ctime库使用整数毫秒参数(如果它甚至可以在Atmel上工作),但我需要输出(例如)频率高达44100Hz的方波,这显然会将输出状态从-1改变为1,其周期比毫秒短88.2倍。

现在我正在学习使用C#构建PC音频应用程序。所以,有我的问题:

  1. 你如何计算应用程序在C#中完成1 / 88.2 ms的事情,例如,使用时间比较函数和只有本机库(如果实际上可行)?
  2. 如何将您的蒸汽(例如1-1值以及任何响度)输出到您的PC声音设备?

2 个答案:

答案 0 :(得分:0)

基本步骤:

准备(在内存中)"声音文件"例如两个通道(每个16位)和44.1 kHz的采样率(CD速率)。

将这些字节发送到DC转换器,通常称为"音频设备"

您可以使用NAudio等库来执行此操作。

答案 1 :(得分:0)

通常,PC音频设备要求您发送特定缓冲区大小的PCM个数据包(例如200ms)。

对于44100的采样率,您将11025个样本(每个通道)放入缓冲区,并通过存储托管库的DirectSound等API将其发送到音频设备。或者,您可以直接使用Windows Core Audi API。还有很多其他的。

无需单独控制每个样本

样本可以是8/16/24/32/64位列表中的任何内容,并存储在特定的数据类型中,例如:

  • unsigned byte 8位样本
  • 对于 16位样本
  • shortInt16
  • C#支持 24位整数原生
  • Int32float代表 32位样本

您必须告诉您的音频设备您要发送多少个频道(SampleRate)的样本(SampleSize)的样本数量(ChannelNum),同意缓冲区大小并去!