unity Audio基本知识 一

基本知识:

1.unity只能播放44khz(16位)的音频吗?

答:不是,unity默认把所有的音频数据,重新采样到44khz的文件中,但这个取决于你的压缩格式,如果你的音频是48khz(24位)的音频,你希望不被重新采样,以原有的频率输出,则需要做的就是更改采样设置:

 

  • Preserve Sample Rate - 默认情况下,此设置使采样率保持不变,保留原有的速率
  • Optimize Sample Rate - 该设置根据分析的最高频率内容自动优化采样率。
  • Override Sample Rate - 此设置允许手动重写采样率,并可用于丢弃频率内容。

注意:高频率的音频,文件大,但是质量好,适合短音频,低采样率的音频,文件小,质量稍差,适合长音频

2.常用的API

 2.1 AudioSetting:

获得音频的播放模式(是单声道还是多声道还是环绕声)

获得mixer的当前输出速率

获得当前的音频配置AudioSettings.GetConfiguration

当前音频设置更改后触发的事件AudioSettings.OnAudioConfigurationChanged

当全局音频设置被更改时,通过audiosetings调用的委托。当操作系统控制面板改变采样率或默认输出设备的改变,例如当插入一个HDMI监视器或USB耳机。也会调用

通过AudioSettings.Reset设置音频配置,

比如:

   AudioConfiguration _audioConfig = AudioSettings.GetConfiguration ();
        _audioConfig.speakerMode = AudioSettings.driverCapabilities;
        AudioSettings.Reset (_audioConfig);

 2.2 AudioConfiguration 音频配置

    public AudioSpeakerMode speakerMode;  设置音频的声道

    public int dspBufferSize;dsp缓存大小
    public int sampleRate;//设置采样率
    public int numRealVoices;//设置游戏中同时可以播放的声音的数量
    public int numVirtualVoices//游戏中管理声音的最大数量。超过这个限度,声音就会停止播放。

2.3 AudioSpeakerMode 枚举,单声道还是多声道

     2.4Microphone

      public static string[] devices;//返回设备上可用的麦克风设备,返回名字数组

      public static void End(string deviceName);停止记录,如果传递为null或者空字符串,则为默认设备,下面的都一样

      public static void GetDeviceCaps(string deviceName, out int minFreq, out int maxFreq);//获得设备的支持的采样频率,如果最 大和最小当中有0,说明该设备支持任意采样频率

      public static int GetPosition(string deviceName);得到当前音频的位置,就是说当前音频采样的位置,返回值是以时间来返回的,可以用来延迟播放,如果不需要延迟,就和0比较,比如:while(!Microphone.GetPosition(null)>0){};audiosource.play();

  不大于0表示还没有采样,如果延迟3ms就让Microphone.GetPosition(null)>3,再播放

    public static bool IsRecording(string deviceName);//麦克风是否正在记录

    public static AudioClip Start(string deviceName, bool loop, int lengthSec, int frequency);//麦克风开始记录,第一个为null或者空字符串,表示默认设备,第三个参数是录制多长时间,第二个参数表示到了指定时间,是否还继续录制,相当于录制了同时录制两种声音,第四个参数是录制的采样频率,比如44100,返回值是一个音频文件

 注意:访问麦克风的时候会有相应的权限提示

  

 3.如果在本游戏中关闭了声音,但是想要听到其它应用播放的声音,怎么做?

   https://support.unity3d.com/hc/en-us/articles/206972423-Enable-selectively-the-Override-iPod-Music-player-option-from-code

4.怎么把audioclip打包到assetbundle中?

   创建一个空物体,添加audiosource组件,把要打包的audioclip添加上去,然后打包这个空物体

5.怎么让unity实时回放麦克风输入的话?

 

6.如果有很多音频,不想为每一个音频都新建一个空物体,怎么办?

 可以在一个物体上挂载多个AudioSource组件,然后通过PlayOneShot播放

7.音频有延迟怎么办?

音频延迟25ms一下,就认为是正常的,在iOS上延迟大概20ms,但是在安卓上大概在200-300之间,解决的方法一个是在projectsetting->audio->DSP Buffer Size->Best Latency ,或者使用插件

8.怎么优化音频,使性能更好?

1.对于长音乐,一般是背景音

  1. 使用 Load Type “Streaming” 、 Compression Format “Vorbis”. 这种组合将使用最少的内存,但是需要一些CPU能力和磁盘I/O吞吐量
  2. 使用Load Type “Compressed In Memory” and Compression Format “Vorbis”. 和上面的方法唯一的区别是需要一些内存来存放音频文件.你可以调节Quality slider 来调节压缩的比率,通常 100%太高了. 推荐使用 70 %. 但是,如果你有两个以上的环境音,长音乐,这会消耗大量的CPU资源

2.对于短音乐

  1. 对于经常播放的段音乐, 使用Decompress On Load 和PCM 或者 ADPCM 的压缩格式. 选用 PCM压缩格式,在需要的时候不需要解压,所以加载的比较快.  ADPCM需要解压,比 Vorbis要快一些
  2. 对于经常播放,大小中等的音频, 使用Compressed In Memory 和ADPCM 压缩格式. ADPCM比原生的 PCM耗时要少大概3.5倍,且它的解压缩算法要比 Vorbis.更少的消耗CPU资源
  3. 对于不经常播放,比较小的音频,使用 Compressed In Memory and ADPCM. 原因同上
  4. 对于不经常播放,中等大小的音频, 使用 Compressed In Memory and Vorbis Compression Format.
发布了84 篇原创文章 · 获赞 7 · 访问量 3892

猜你喜欢

转载自blog.csdn.net/qq_37672438/article/details/105071162