Bir dere C kullanarak ses çalma#
C bir yolu# ses (örneğin, MP3) örneğin diske geçici olarak verileri kaydetmeden bir WebRequest gelen dönmesi olduğunu System.IO.Stream bir direcly oynamak için?
NAudio ile çözüm
NAudio 1.3 yardımıyla mümkün:
- Bir MemoryStream içine bir URL bir MP3 dosyası yüklenemedi
- Tamamen yüklendikten sonra dalga veri içine veri dönüştürme MP3
- Oynatma dalga verileri NAudiokullanarak's WaveOut sınıf
Yarısı bile dolu bir MP3 dosyasını çalmak edebilmek için iyi olurdu, ama bu NAudio kitaplık tasarımı sayesinde imkansız gibi görünüyor.
Ve bu işi yapacak fonksiyon:
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);
}
}
}
}
}
CEVAP
Edit: Cevap NAudio son sürümleri değişiklikleri yansıtmak için güncellendi
Mümkün NAudio açık kaynak kullanıyor .Yazdım NET Ses Kütüphanesi. Bilgisayarınızda bir ACM ÇÖZÜCÜSÜ için dönüşüm yapmak görünüyor. Bu Mp3FileReader NAudio ile birlikte şu anda ağ üzerinden akışı için uygun değildir; bu nedenle, kaynak akışı (MP3 aralıklarında bir dizin ön kurar) içinde yeniden konumlandırmak edebilmek için bekliyor. Ancak, yine de sinek sıkıştırması akış MP3 NAudio MP3Frame
AcmMp3FrameDecompressor
sınıfları kullanabilirsiniz.
Benim blog how to play back an MP3 stream using NAudio açıklayan bir makale attılar. Aslında bir iş parçacığı MP3 indirme çerçeveler, boyutunda ve BufferedWaveProvider
bunları saklamak Zorundasınız. Başka bir iş parçacığı sonra geri girdi olarak BufferedWaveProvider
kullanarak oynuyor.
Nasıl bir şube bir refspec kullanarak ...
Okunabilir derleme üretmek için kullan...
Negatif eşleme kullanarak grep (içerme...
Nasıl birden fazla dizin gnu cp komutu...
Bir resim kullanarak daha yukarı div o...