【问题标题】:How can I play an ogg file from a website url in c#如何在 c# 中从网站 url 播放 ogg 文件
【发布时间】:2022-11-02 23:21:55
【问题描述】:

我有这个网址:https://verses.quran.com/Shuraym/ogg/067001.ogg 我需要在我的 c# WPF 应用程序上播放此音频,而无需下载它。

我一直将它用于带有 mp3 文件扩展名的 url:

            // this code use NAudio
            using (var mf = new MediaFoundationReader(url))
            using (var wo = new WasapiOut())
            {
                wo.Init(mf);
                wo.Play();

                PlayingAudioWasapiOut.Add(wo);
                while (wo.PlaybackState == PlaybackState.Playing)
                {
                    await Task.Delay(1000);
                };
            }

我尝试了适用于 mp3 url 的代码,但它不适用于 ogg url(它只是在第 1 行退出该方法而没有任何错误)。 我也试过用这个:

            using (var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(url))
            using (var waveOut = new NAudio.Wave.WaveOutEvent())
            {
                waveOut.Init(vorbisStream);
                waveOut.Play();
                PlayingAudioWaveOutEvent.Add(waveOut);

                while (waveOut.PlaybackState == PlaybackState.Playing)
                {
                    await Task.Delay(1000);
                }

            }

但它不起作用,因为它是为本地文件音频制作的。

【问题讨论】:

  • 可以在网址下载文件吗?
  • 在我的软件中,您可以下载文件以使其脱机,或者如果您想在计算机上有可用空间,则不下载它。下载文件并读取文件的部分有效,但不是直接从 URL 读取文件的部分。

标签: c# wpf audio naudio ogg


【解决方案1】:

我做到了

        internal static async Task PlayOggFileFromUrl(string lien)
    {
        var req = System.Net.WebRequest.Create(lien);
        using (Stream stream = req.GetResponse().GetResponseStream())
        {
            using (var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(stream))
            using (var waveOut = new NAudio.Wave.WaveOutEvent())
            {
                waveOut.Init(vorbisStream);
                waveOut.Play();

                while (waveOut.PlaybackState == PlaybackState.Playing)
                {
                    await Task.Delay(1000);
                }

                waveOut.PlaybackStopped += (sender, e) =>
                {
                    waveOut.Dispose();
                    vorbisStream.Dispose();
                };
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多