我正在创建一个使用nAudio播放MP3流的Windows Forms程序。如果我使用waveOut.Stop();在此代码中,它保持从较早的位置开始,然后从后面开始。如果停止并启动足够的时间,则Web请求上也会存在超时。
我尝试多次更改位置以及放置waveOut.Stop();打破;在多个地方。
public void PlayMp3FromUrl(string url)
{
new Thread(delegate (object o)
{
var response = WebRequest.Create(url).GetResponse();
using (var stream = response.GetResponseStream())
{
byte[] buffer = new byte[65536]; // 64KB chunks
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
var pos = ms.Position;
ms.Position = ms.Length;
ms.Write(buffer, 0, read);
ms.Position = pos;
if (status == 1)
{ // what im waiting for...
// yeet
}
}
}
}).Start();
// Pre-buffering some data to allow NAudio to start playing
while (ms.Length < 65536 * 10)
{
Thread.Sleep(1000);
if (status == 1)
{ // what im waiting for...
// break;
}
}
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);
if (status == 1)
{
// sad face
}
}
}
}
// return;
}
我希望播放器在WaveOut.Stop()时完全停止播放;被称为//悲伤的脸所在,但事实并非如此。当我在程序中按下一个按钮时,我会调用PlayMp3FromURL,程序中的另一个按钮将状态更改为1持续100毫秒,然后将其更改为3。我不擅长此事,因此我需要帮助修复它。 我所说的停止是指流完全停止,因此在重播时,它不仅会从最后一个位置或超时处恢复播放。