• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 12:11:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

http://api.ispeech.org/api/rest?apikey=...&action=convert&voice=eurspanishfemale&text=hola+que+tal

我整个早上都在谷歌搜索,但没有找到有效的解决方案... Unity3D 文档中有一个代码片段(WWW-audioClipWWW.GetAudioClip),但没有用,我调试过,错误说无法打开文件。

using UnityEngine;
using System.Collections;

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

    }
}

谢谢

解决方案

这是我现在的工作解决方案。

void Start(){
    StartCoroutine(DownloadAndPlay("http://api.ispeech.org/api/rest?apikey=...&action=convert&voice=eurspanishfemale&text=Hola+que+tal"));  
}

IEnumerator DownloadAndPlay(string url)
{
    WWW www = new WWW(url);
    yield return www;
    AudioSource audio = GetComponent<AudioSource>();
    audio.clip = www.GetAudioClip(false, true,AudioType.MPEG);
    audio.Play();
}



Best Answer-推荐答案


你没有提到你使用的平台,所以我假设是 Windows。

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

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

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

代码示例不正确的原因有 3 个;

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

好的,这就是我的建议。

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

然后,使用此代码下载并播放:

StartCoroutine(DownloadAndPlay("http://myserver.com/audio/test.ogg"));  

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

    AudioSource audio = GetComponent<AudioSource>();
    audio.clip = www.GetAudioClip(false, false);
    audio.Play();
}

关于c# - 如何从 URL 流式传输/下载和播放音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34042928/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap