क्या सी # में एक तरीका है ऑडियो खेलने के लिए (उदाहरण के लिए, एमपी 3) direcly एक System.IO.Stream से। उदाहरण के लिए, वेबरेंसिटी से डेटा को अस्थायी रूप से डिस्क पर सहेजे बिना रेटुरेंड था?
NAudio के साथ समाधान
NAudio 1.3 की मदद से यह संभव है:
- एक URL से एक MemoryStream में एक एमपी 3 फ़ाइल लोड करें
- एमपी डेटा को पूरी तरह लोड होने के बाद तरंग डेटा में परिवर्तित करें
- का उपयोग करते हुए लहर डेटा प्लेबैक NAudio के WaveOut वर्ग
अच्छा होगा कि आप आधी भरी एमपी 3 फ़ाइल भी चला सकें, लेकिन नायडू लाइब्रेरी डिज़ाइन के कारण यह असंभव प्रतीत होता है ।
और यह वह कार्य है जो कार्य करेगा:
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);
}
}
}
}
}