出于测试目的,我已经实现了c#代码只是为了播放缓冲区的单个片段(通过在while循环中执行它我可以读取来自socket和play的整个数据) 我使用了这三个版本的nAudio(v1.2,v1.3,v1.7)这三个版本在该上下文中给出了不同的错误,我已将它们列在下面(我也很困惑为什么会发生这种情况)。 我附上了我的源代码。
使用NAudio 1.3
时
当使用NAudio 1.7
时我使用1.7代替1.6,因为它支持采样率变化(在源中提到)。然后我得到上面的错误。 每次我得到错误行相同的行。 由于我是C#和.net平台的新手,我需要你帮助纠正这个问题。谢谢你,期待着回应。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using NAudio.Wave;
using System.IO;
using System.Threading;
namespace audioTest2
{
class Program
{
public static void Main()
{
while (true)
{
Console.WriteLine("Waiting for broadcast");
UdpClient listener = new UdpClient(5000);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5000);
byte[] buffer = listener.Receive(ref groupEP);
using (Stream ms = new MemoryStream())
{
buffer = listener.Receive(ref groupEP);
Console.WriteLine("read : " + buffer.Length);
ms.Write(buffer,0,buffer.Length);
ms.Position = 0;
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new Mp3FileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}
}
}
}
}
}
}
}
答案 0 :(得分:0)
我强烈建议您查看NAudio源代码附带的MP3流媒体演示(在NAudioDemo项目中)。在阅读MP3文件时,您不需要WaveFormatConversionStream
或BlockAlignReduction
流,您应该避免使用函数回调 - 请改用WaveOutEvent
。此外,Mp3FileReader
类是为您可以重新定位的整个MP3文件而设计的。您需要的方法是在MP3帧到达时解析它们,单独解码它们,并以某种方式缓冲音频(例如使用{ {1}})。