WWW读取安卓外部音乐文件
需求分析
使用Everyplay(2121-1540版本)录屏,在升级SDK之后,遇到个问题,调用安卓原生的mediaplay进行播放音乐,在录屏时无法录制到声音,所以想到的解决办法是在Unity中播放音乐文件。
大概解释:
当在手机上选择一首歌(手机上的其它音乐文件)之后,直接在Unity中进行播放。这里需要注意的是这首音乐的格式,大小,存储位置是未知的。
测试环境
Windows 7 x64
Unity 5.3.6 f1 X64
华为 安卓4.2.2 (未ROOT)
三星NOTE3 安卓4.3(未ROOT)
播放其它目录的音频文件(可以是中文文件名,例:千里之外.mp3)
测试代码
以下代码中的音乐文件路径,在测试时,请换成自己的路径。
- "/storage/emulated/0/music/千里之外.mp3";
- "/storage/emulated/0/music/爱上你万岁.ogg";
- "/storage/emulated/0/music/梁静茹_宁夏.wav";
using System;
using UnityEngine;
using System.Collections;
using System.IO; /// <summary>
/// Detail : 使用WWW播放音频文件
/// Author : qingqing-zhao(569032731@qq.com)
/// CreateTime : #CreateTime#
/// </summary>
public class PlayAudioByWWW : MonoBehaviour
{
private AudioSource curAudioSource;
public AudioSource CurAudioSource
{
get
{
if (curAudioSource != null) return curAudioSource;
curAudioSource = gameObject.GetComponent<AudioSource>();
if (curAudioSource == null)
{
curAudioSource = gameObject.AddComponent<AudioSource>();
curAudioSource.playOnAwake = false;
curAudioSource.maxDistance = 1.1f;
}
return curAudioSource;
}
} public void OnGUI()
{
if (GUI.Button(new Rect(, , , ), "Stop"))
{
if (CurAudioSource != null) CurAudioSource.Stop();
}
if (GUI.Button(new Rect(, , , ), "Play-MP3"))
{
string audioPath = "/storage/emulated/0/music/千里之外.mp3"; PlayLocalFile(audioPath);
} if (GUI.Button(new Rect(, , , ), "Play-OGG"))
{
string audioPath = "/storage/emulated/0/music/爱上你万岁.ogg";
PlayLocalFile(audioPath);
} if (GUI.Button(new Rect(, , , ), "Play-wav"))
{
string audioPath = "/storage/emulated/0/music/梁静茹_宁夏.wav";
PlayLocalFile(audioPath);
}
} void PlayLocalFile(string audioPath)
{
var exists = File.Exists(audioPath);
Debug.LogFormat("{0},存在:{1}", audioPath, exists);
StartCoroutine(LoadAudio(audioPath, (audioClip) =>
{
CurAudioSource.clip = audioClip;
CurAudioSource.Play();
}));
} IEnumerator LoadAudio(string filePath, Action<AudioClip> loadFinish)
{
//安卓和PC上的文件路径
filePath = "file:///" + filePath;
Debug.LogFormat("local audioclip :{0}", filePath);
WWW www = new WWW(filePath);
yield return www; if (string.IsNullOrEmpty(www.error))
{
AudioClip audioClip = null;
//OGG文件会报:Streaming of 'ogg' on this platform is not supported
//if (filePath.EndsWith("ogg"))
//{
// audioClip = www.GetAudioClip(false, true, AudioType.OGGVORBIS);
//}
//else
{
audioClip = www.audioClip;
}
loadFinish(audioClip);
}
else
{
Debug.LogErrorFormat("www load file error:{0}", www.error);
}
}
}
代码文件:https://github.com/zhaoqingqing/blog_samplecode/blob/master/technical-research/PlayAudioByWWW.cs
我的总结
我们知道使用WWW加载Assetbundle时,是不可以有中文名和中文路径的,但上面使用的方法,为什么中文文件可以正常加载并播放?
上述仅仅是通过WWW加载文件,而加载的文件并非Unity的Assetbundle格式,所以写法上和加载Assetbundle不一样。
存在的问题
通过WWW加载ogg格式的音乐文件时,会报 “Streaming of 'ogg' on this platform is not supported “
至于这个Error的解决,目前我的解决办法是:在选择音乐时,如果是ogg格式文件弹出提示。
我尝试使用过 AudioClip audioClip = www.GetAudioClip(false, true, AudioType.OGGVORBIS); 还是得到一样的错误提示。
IOS平台
ios平台上使用此段代码,会报:unsupported URL
猜测是由于ios上对中文路径的敏感所致。
WWW读取安卓外部音乐文件的更多相关文章
- ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件
首先要导入AVFoundation框架及 #import <AVFoundation/AVFoundation.h>头文件 注意:要在真机上调试 下面是ipad上的调试效果 下面是代码,代 ...
- 使用pdf.js预览实现读取服务器外部文件
不知道大家使用百度网盘的文件预览功能,f12看过控制台没有. 发现百度网盘使用的预览文件功能全是基于开源pdf .js的 接下来正题,我们在使用pdf.js默认是读取发布容器内部的文件,读取外部的文件 ...
- JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主 ...
- 呼叫外部js文件并使用其内部方法
很久没有学习jQuery了,都快忘记了.今天学习一个小功能,使用jQuery的$.getScript()方法,是读取外部js文件,读取之后,并执行js文件内的一个方法. 首先我们创建这个js文件,如i ...
- android播放器如何获取音乐文件信息
转http://blog.csdn.net/hellofeiya/article/details/8464356, android自带的音乐播放器中,在获取音乐文件信息的时候是通过扫描得到相关信息的. ...
- qpython3 读取安卓lastpass Cookies
之前我的博客写了python读取windows chrome Cookies,沿着同样的思路,这次本来想尝试读取安卓chrome Cookies, 但是可能是chrome的sqlite3版本比较高读取 ...
- 如何用DELPHI编程修改外部EXE文件的版本信
右击里面有修改 点开直接修改就可以了吧. DELPHI 里程序的版本信息怎么是灰色的,无法更改 耐心读以下说明,应该能解决你的问题,如果不能解决,请Hi我~ 如何给自己的dll文件添加版本信息呢? 首 ...
- Android打开外部DB文件
DB文件要放在Assets文件夹下,封装一个工具类,如下: package com.XX.DB; import java.io.File; import java.io.FileOutputStrea ...
- 如何为ios酷我音乐盒下载导出的音乐文件(使用Java程序设计)
这个工具已经准备第二版,读者了解编程软件,可以直接使用,请阅读和使用这个场地 http://blog.csdn.net/jzj1993/article/details/44459983 本文所涉及内容 ...
随机推荐
- 带搜索的ComboBox
带搜索的ComboBox就是给ComboBox一个依赖属性的ItemSource,然后通过数据源中是否包含要查询的值,重新给ComboBox绑定数据源. public class EditComboB ...
- Linux驱动开发——pr_fmt的用法
作者:彭东林 邮箱:pengdonglin137@163.com 在阅读kernel代码的时候,总是看到有很多驱动都在第一行定义pr_fmt,闲来没事,分析了一下, 发现,确实挺方便的.下面记录分享一 ...
- Linux平台 Oracle 11gR2 RAC安装Part2:GI安装
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面安装GI 3 ...
- Vertica集群扩容实验过程记录
需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- 编写高质量代码:改善Java程序的151个建议(第4章:字符串___建议56~59)
建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号.concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuil ...
- Entity Framework入门系列(1)-扯淡开篇
这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...
- 听歌识曲--用python实现一个音乐检索器
听歌识曲,顾名思义,用设备"听"歌曲,然后它要告诉你这是首什么歌.而且十之八九它还得把这首歌给你播放出来.这样的功能在QQ音乐等应用上早就出现了.我们今天来自己动手做一个自己的听歌 ...
- 使用roslyn代替MSBuild完成解决方案编译
原本我是使用批处理调用 MSBuild 完成解决方案编译的,新版的 MSBuild 在 Visual Studio 2015 会自带安装. 当然在Visual Studio 2015 中,MSBuil ...
- SimpleSSO:使用Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端
目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Security.SimpleSSO模拟OpenID认证 通过authorization co ...