菜鸟教程小白 发表于 2022-12-13 12:11:50

c# - 如何从 URL 流式传输/下载和播放音频?


                                            <p><p>我需要在 iOS 上运行的 Unity3D 中流式传输或下载并播放从 URL 获取的音频。
音频来自文本到音频服务,我需要在 Unity 上播放它:</p>

<p> <a href="http://api.ispeech.org/api/rest?apikey=...&amp;action=convert&amp;voice=eurspanishfemale&amp;text=hola+que+tal" rel="noreferrer noopener nofollow">http://api.ispeech.org/api/rest?apikey=...&amp;action=convert&amp;voice=eurspanishfemale&amp;text=hola+que+tal</a> </p>

<p>我整个早上都在谷歌搜索,但没有找到有效的解决方案...
Unity3D 文档中有一个代码片段(<a href="http://docs.unity3d.com/ScriptReference/WWW-audioClip.html" rel="noreferrer noopener nofollow">WWW-audioClip</a>、<a href="http://docs.unity3d.com/ScriptReference/WWW.GetAudioClip.html" rel="noreferrer noopener nofollow">WWW.GetAudioClip</a>),但没有用,我调试过,错误说无法打开文件。</p>

<pre><code>using UnityEngine;
using System.Collections;

public class AudioURLScript : MonoBehaviour {
    public string url = &#34;http://api.ispeech.org/api/rest?apikey=...&amp;action=convert&amp;voice=eurspanishfemale&amp;text=hola+que+tal&#34;;
    public AudioSource source;
    void Start() {
      WWW www = new WWW(&#34;file://&#34;+url);
      source = GetComponent&lt;AudioSource&gt;();
      source.clip = www.GetAudioClip(false,true);
    }
    void Update() {
      if (!source.isPlaying &amp;&amp; source.clip.isReadyToPlay)
            source.Play();

    }
}
</code></pre>

<p>谢谢</p>

<p><strong>解决方案</strong></p>

<p>这是我现在的工作解决方案。</p>

<pre><code>void Start(){
    StartCoroutine(DownloadAndPlay(&#34;http://api.ispeech.org/api/rest?apikey=...&amp;action=convert&amp;voice=eurspanishfemale&amp;text=Hola+que+tal&#34;));
}

IEnumerator DownloadAndPlay(string url)
{
    WWW www = new WWW(url);
    yield return www;
    AudioSource audio = GetComponent&lt;AudioSource&gt;();
    audio.clip = www.GetAudioClip(false, true,AudioType.MPEG);
    audio.Play();
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你没有提到你使用的平台,所以我假设是 Windows。</p>

<p>Unity Windows 运行时仅支持 WAV 或 OGG。您提供的音频服务文件的链接正在下载为 MP2 音频文件(广播中常见)。 Unity 将无法播放那个(或 MP3)。</p>

<p>作为引用,Android 和 iOS 平台支持 MP3(但不支持 MP2)。</p>

<p>因此,您的首要任务是确保您的音频源格式兼容。</p>

<p>代码示例不正确的原因有 3 个; </p>

<ol>
<li>URL 是 https:(它告诉 unity 从互联网下载)但是你预先挂起 file: 到它(它告诉 unity 从本地文件系统加载)。所以你应该选择一个或另一个。 </li>
<li>如果您选择 https 是行不通的,因为那个特定链接(我知道这只是一个示例)但它要求用户登录到该服务(并使用 cookie 知道这一点),所以它不会向您发送一个音频文件,它向您发送一个 HTML 页面,告诉用户登录或注册。</li>
<li>正如@fafase 所说,WWW 必须放在协同例程中,以便它可以下载多个框架。</li>
</ol>

<p>好的,这就是我的建议。</p>

<p>如果您能提前知道音频文件,请下载它们并转码为 OGG(如果是 Windows)或 MP3(如果是移动设备),然后将它们上传到您自己的服务器(例如 Amazon S3,或每月 10 美元的无限制网站).</p>

<p>然后,使用此代码下载并播放:</p>

<pre><code>StartCoroutine(DownloadAndPlay(&#34;http://myserver.com/audio/test.ogg&#34;));

IEnumerator DownloadAndPlay(string url)
{
    WWW www = new WWW(url);
    yield return www;

    AudioSource audio = GetComponent&lt;AudioSource&gt;();
    audio.clip = www.GetAudioClip(false, false);
    audio.Play();
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于c# - 如何从 URL 流式传输/下载和播放音频?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34042928/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34042928/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - 如何从 URL 流式传输/下载和播放音频?