【问题标题】:send array of bytes to System.Media.SoundPlayer in c#在 c# 中将字节数组发送到 System.Media.SoundPlayer
【发布时间】:2015-01-12 09:29:16
【问题描述】:

我想向扬声器发送字符串字节,如下所示:

byte[] bt = {12,32,43,74,23,53,24,54,234,253,153};// example array
var ms = new MemoryStream(bt);
var sound = new System.Media.SoundPlayer();
sound.Stream = ms;
sound.Play();

但我得到了这个例外: my problem pic http://8pic.ir/images/g699b52xe5ap9s8yf0pz.jpg

【问题讨论】:

  • 演讲者应该用那个 random 系列字节做什么?您需要形成一个有效的 WAV 流。
  • SoundPlayer 类需要一个 .wav 文件,而不是随机的字节流。您的字节流没有对应于 .wav 文件的标头,因此出现错误。所以你已经向我们展示了你的尝试,你能告诉我们更多关于你正在尝试做什么以及为什么吗?
  • 但接下来我想从麦克风获取字节串
  • 我想保存模拟波可以生成的字节,并通过 TCP/IP 发送它们并由另一个扬声器播放

标签: c# byte wav soundplayer


【解决方案1】:

WAV 流的第一个字节包含有关长度等信息。 您还必须在前几个字节中发送此“WAV-Header”。

http://de.wikipedia.org/wiki/RIFF_WAVE

正如您将看到的,完全可以在标头中组合这几个字节并在原始音频数据之前发送它们,

【讨论】:

  • 你的意思是我必须先附加 wav-header 我的字节字符串,如果我想把它们发送到扬声器????
  • 是的,前几个字节是 RIFF-WAV Header,见链接
  • 标头还包括原始数据的长度。
【解决方案2】:

您可以使用一些库从麦克风读取数据或将其播放到扬声器。 我成功地与: NAudio - http://naudio.codeplex.com/

我不建议自己构建 WAV 文件,这样做可能会花费太多精力。 请注意,这个库(可能还有其他一些库,Bass - http://www.un4seen.com 也被广泛使用)还内置了保存和读取 WAV 文件的功能。

【讨论】:

  • 所以你的意思是我从麦克风获取波形文件并使用 TCP/IP 发送这个波形文件并在其他计算机上发送到它的扬声器?如果我可以丢弃 heaer 和 footer wawe 文件它点浪费带宽
  • 如果您不需要保存数据,只需发送并播放 - 您可以通过网络发送数据包轻松完成,为此我直接使用了 NAudio。我不确定用 Media.SoundPlayer 播放它们有多容易 - 但用 NAUdio 播放它们并不难
  • 亲爱的阴影我发现alvas.net/alvas.audio,articles.aspx你可以考虑这个。这是一个很好的例子
【解决方案3】:

NAudio 是发挥该功能的最佳应用。使用提供的示例应用程序。它可能会有所帮助。

【讨论】:

  • alvas.net/alvas.audio,articles.aspx 这非常适合用于波形文件示例。
猜你喜欢
  • 1970-01-01
  • 2014-04-19
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2020-05-25
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多