我正在制作一个小应用程序,它从另一个应用程序接收数据并播放它逐个接收的声音。
这是我正在做的模拟:
var soundPlayer = new SoundPlayer();
var buffer = new byte[2048];
using (var fileStream = File.OpenRead(filePath))
{
var iOffset = 0;
while (true)
{
try
{
iOffset = fileStream.Read(buffer, iOffset, buffer.Length);
if (iOffset == 0)
{
Console.WriteLine("Offset end.");
break;
}
var memoryStream = new MemoryStream(buffer, 0, buffer.Length);
soundPlayer.Stream = memoryStream;
//soundPlayer.Load();
soundPlayer.Play();
Thread.Sleep(TimeSpan.FromSeconds(10));
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
break;
}
}
它按部件读取文件到内存流(每5秒2048个字节 - 连接延迟模拟)
在soundPlayer.Play()
方法之后,应用程序崩溃而没有跳转到异常代码块。
我做错了什么?
有人可以帮我吗?
谢谢,
答案 0 :(得分:0)
我认为你不能以这种方式使用SoundPlayer
。来自documentation of the SoundPlayer class:
配置为从Stream或URL加载.wav文件的SoundPlayer必须 在播放开始前将.wav文件加载到内存中。
如果您希望能够以块的形式接收音频流,则需要使用其他库。我可以推荐NAudio。另请参阅此SO帖子Play audio from a stream using C#。