Apakah ada cara di C # untuk memutar audio (misalnya, MP3) secara langsung dari System.IO. Alirkan yang misalnya adalah returend dari WebRequest tanpa menyimpan data sementara ke disk?
Solusi dengan NAudio
Dengan bantuan NAudio 1.3, dimungkinkan untuk:
- Muat file MP3 dari URL ke dalam MemoryStream
- Ubah data MP3 menjadi data gelombang setelah selesai dimuat
- Putar ulang data gelombang menggunakan kelas WaveOut NAudio
Akan lebih baik untuk dapat memutar file MP3 yang setengah dimuat, tetapi ini tampaknya tidak mungkin karena desain perpustakaan NAudio .
Dan inilah fungsi yang akan melakukan pekerjaan itu:
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);
}
}
}
}
}