从MemoryStream读取数据时SoundPlayer崩溃

时间:2018-03-20 15:51:41

标签: c# audio console-application

我正在制作一个小应用程序,它从另一个应用程序接收数据并播放它逐个接收的声音。

这是我正在做的模拟:

        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()方法之后,应用程序崩溃而没有跳转到异常代码块。

我做错了什么?

有人可以帮我吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

我认为你不能以这种方式使用SoundPlayer。来自documentation of the SoundPlayer class

  

配置为从Stream或URL加载.wav文件的SoundPlayer必须   在播放开始前将.wav文件加载到内存中。

如果您希望能够以块的形式接收音频流,则需要使用其他库。我可以推荐NAudio。另请参阅此SO帖子Play audio from a stream using C#