SORU
8 EKİM 2008, ÇARŞAMBA


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:

  1. Bir MemoryStream içine bir URL bir MP3 dosyası yüklenemedi
  2. Tamamen yüklendikten sonra dalga veri içine veri dönüştürme MP3
  3. 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
8 EKİM 2008, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011