มีวิธีใน C # ในการเล่นเสียง (เช่น MP3) จากSystem.IO หรือไม่สตรีมเช่นนั้นถูกดึงกลับมาจาก WebRequest โดยไม่บันทึกข้อมูลลงในดิสก์ชั่วคราวหรือไม่
โซลูชันด้วยNAudio
ด้วยความช่วยเหลือของNAudio 1.3 คุณสามารถ:
- โหลดไฟล์ MP3 จาก URL ลงใน MemoryStream
- แปลงข้อมูล MP3 เป็นข้อมูลคลื่นหลังจากโหลดเสร็จสมบูรณ์
- เล่นข้อมูลคลื่นโดยใช้คลาส WaveOutของ NAudio
คงจะดีไม่น้อยที่สามารถเล่นไฟล์ MP3 ที่โหลดมาครึ่งหนึ่งได้ แต่ดูเหมือนว่าจะเป็นไปไม่ได้เนื่องจากการออกแบบไลบรารีNAudio
และนี่คือฟังก์ชั่นที่จะทำงาน:
public static void PlayMp3FromUrl(string url)
{
using (Stream ms = new MemoryStream())
{
using (Stream stream = WebRequest.Create(url)
.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
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);
}
}
}
}
}