没有流或缓冲区的 C# 音频输出

Posted

技术标签:

【中文标题】没有流或缓冲区的 C# 音频输出【英文标题】:C# audio output without a stream or buffer 【发布时间】:2013-04-05 02:03:47 【问题描述】:

我正在开发一个想要输出音频的程序。我会使用 System.Media.SoundPlayer,只是数据是动态实时生成的。我真的只想将扬声器设置为单字节值,并在需要时更改该值。任何缓冲区或流都会使这变得过于复杂。

【问题讨论】:

即使在最低级别也需要缓冲区,因为在音频硬件上允许您一次发送一个样本。 【参考方案1】:

你不能。 System.Media.SoundPlayer 适用于流,可以根据需要动态生成或从文件生成。

学习使用流。它们并不复杂。当然比动态生成音频要简单。

【讨论】:

覆盖Read()并一次返回一个样本并让SoundPlayer输出它是非常简单的。 @DanielMošmondor,一个样本是的,但不是 OP 要求的一个字节。 SoundPlayer 需要有效的 wav 数据并彻底验证标头。 Op 必须知道音频粒度是一个样本而不是一个字节。而且 wav 标头很容易被伪造:)

以上是关于没有流或缓冲区的 C# 音频输出的主要内容,如果未能解决你的问题,请参考以下文章

MME 音频输出缓冲区大小

如何捕获麦克风缓冲区

Web 音频上下文和缓冲区的最大输出数量是多少

ASIO SDK如何处理音频缓冲区

C# Naaudio BufferedWaveProvider 缓冲区满异常

波形音频缓冲区