WWW读取安卓表面音乐文件

须要分析

运用伊夫ryplay(2121-1540版本)录屏,在进步SDK之后,境遇个难题,调用安卓原生的mediaplay进行播放音乐,在录屏时不知道该怎么办摄像到声音,所以想到的消除办法是在Unity中播放音乐文件。

约莫解释:

当在小弟大上选拔一首歌(手提式有线电话机上的别的音乐文件)之后,直接在Unity中开始展览播放。那里须求注意的是那首音乐的格式,大小,存款和储蓄地点是雾里看花的。

须要分析

采用伊夫ryplay(2121-1540本子)录屏,在升级SDK之后,蒙受个难点,调用安卓原生的mediaplay举办播报音乐,在录屏时心慌意乱录制到声音,所以想到的消除办法是在Unity中播放音乐文件。

大致解释:

当在手提式有线电话机上选用一首歌(手提式有线话机上的别的音乐文件)之后,直接在Unity中展开始播放报。那里需求小心的是那首音乐的格式,大小,存款和储蓄地点是未知的。

测试环境

Windows 7 x64

Unity 5.3.6 f1 X64

华为 安卓4.2.2 (未ROOT)

三星NOTE3 安卓4.3(未ROOT)

广播别的目录的音频文件(可以是中文文件名,例:千里之外.mp3)

 

测试环境

Windows 7 x64

Unity 5.3.6 f1 X64

华为 安卓4.2.2 (未ROOT)

三星NOTE3 安卓4.3(未ROOT)

播音别的目录的音频文件(能够是华语文件名,例:千里之外.mp4)

 

测试代码

以下代码中的音乐文件路径,在测试时,请换到团结的门径。

  • “/storage/emulated/0/music/千里之外.mp5”;
  • “/storage/emulated/0/music/爱上您万岁.ogg”;
  • “/storage/emulated/0/music/梁静茹_宁夏.wav”;

    using System;
    using UnityEngine;
    using System.Collections;
    using System.IO;

    ///

    /// Detail : 使用WWW播放音频文件
    /// Author : qingqing-zhao(569032731@qq.com)
    /// CreateTime : #CreateTime#
    ///

    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(100, 200, 150, 90), "Stop"))
        {
            if (CurAudioSource != null) CurAudioSource.Stop();
        }
        if (GUI.Button(new Rect(300, 200, 150, 90), "Play-MP3"))
        {
            string audioPath = "/storage/emulated/0/music/千里之外.mp3";
    
            PlayLocalFile(audioPath);
        }
    
        if (GUI.Button(new Rect(100, 300, 150, 90), "Play-OGG"))
        {
            string audioPath = "/storage/emulated/0/music/爱上你万岁.ogg";
            PlayLocalFile(audioPath);
        }
    
        if (GUI.Button(new Rect(300, 300, 150, 90), "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

测试代码

以下代码中的音乐文件路径,在测试时,请换到温馨的路线。

  • “/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;

    ///

    /// Detail : 使用WWW播放音频文件
    /// Author : qingqing-zhao(569032731@qq.com)
    /// CreateTime : #CreateTime#
    ///

    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(100, 200, 150, 90), "Stop"))
        {
            if (CurAudioSource != null) CurAudioSource.Stop();
        }
        if (GUI.Button(new Rect(300, 200, 150, 90), "Play-MP3"))
        {
            string audioPath = "/storage/emulated/0/music/千里之外.mp3";
    
            PlayLocalFile(audioPath);
        }
    
        if (GUI.Button(new Rect(100, 300, 150, 90), "Play-OGG"))
        {
            string audioPath = "/storage/emulated/0/music/爱上你万岁.ogg";
            PlayLocalFile(audioPath);
        }
    
        if (GUI.Button(new Rect(300, 300, 150, 90), "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加载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); 
依旧获得平等的荒谬提醒。

 

留存的标题

通过WWW加载ogg格式的音乐文件时,会报 “Streaming of ‘ogg’ on this
platform is not supported “

至于那些Error的解决,方今自身的化解办法是:在甄选音乐时,假使是ogg格式文件弹出提醒。

自家尝试采纳过    AudioClip audioClip =  www.GetAudioClip(false, true,
AudioType.OGGVORBIS); 
还是得到相同的谬误提醒。

 

IOS平台

ios平台上选拔此段代码,会报:unsupported UOdysseyL

猜度是出于ios上对中文路径的灵活所致。

IOS平台

ios平台上行使此段代码,会报:unsupported U福特ExplorerL

估量是由于ios上对中文路径的机灵所致。

相关文章