zoukankan      html  css  js  c++  java
  • unity踩过的音频坑

    支持格式

    官方说支持aif, wav, ogg, mp3,少就少吧,这些格式还并非全平台通用,放个mp3,windows,mac平台会告诉你说不支持

    file

    在build settings中修改成android后没问题了,ios没试过。


    麻烦的读取

    对于音频的读取需要手动指定,完全是坑爹的操作,react native, flutter哪个不是直接拿来用就成了?你得指定用哪种格式来读取。

    file

    上面这个错误是因为我读取参数忘记改了,一读ogg就出错。

    using (var uwr = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.MPEG))
            {
    				...
    

    应该写成AudioType.OGGVORBIS,搞笑的AudioType里面有ACC,然后看注释:

        //
        // 摘要:
        //     Type of the imported(native) data.
        public enum AudioType
        {
            //
            // 摘要:
            //     3rd party / unknown plugin format.
            UNKNOWN = 0,
            //
            // 摘要:
            //     Acc - not supported.
            ACC = 1,
    

    ACC不支持,让我有种 某天回家老婆开心的对我说:老公,咱中500万大奖了,然后再加句:逗你玩 的感觉。


    本地、远程表现不一致

    使用本地asset中的声音来播放,完全没毛病,遇到网络下载时播放,有可能声音会不完整((wtf)),一开始还以为是自己的程序有毛病,后来发现播放CBR格式mp3是OK的。
    解决办法:将mp3转换成CBR,固定码率。建议使用lame来进行转换,ffmpeg转换CBR并不方便,试了很多次,默认转换后的mp3都是VBR格式的(动态码率)。(这样说来其实mp3音频还是CBR的兼容性最好。)
    另:发现ffmpeg中码率不一致的大概率出毛病,比如:

    Input #0, mp3, from 'a duck swimming in the sink1.mp3':
      Metadata:
        encoder         : Lavf58.37.100
      Duration: 00:00:01.73, start: 0.069063, bitrate: 33 kb/s
        Stream #0:0: Audio: mp3, 16000 Hz, mono, fltp, 32 kb/s
    
    

    duration中的bitrate与stream中的并不一致,这样的文件在unity网络播放时就会出毛病,使用mediainfo时显示信息如下:

    格式                             : MPEG Audio
    格式版本                           : Version 2
    格式配置 (Profile)                 : Layer 3
    时长                             : 1 秒 728 毫秒
    码率模式                           : 动态码率 (VBR)
    码率                             : 32.0 kb/s
    声道数                            : 1 声道
    采样率                            : 16.0 kHz
    帧率                             : 27.778 FPS (576 SPF)
    压缩模式                           : 有损
    流大小                            : 6.75 KiB (97%)
    编码函数库                          : LAME3.100
    

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    [转]PostgreSQL数据类型
    Linux下执行自定义的可执行命令无效原因
    [其它]iOS 12.2支持电信VoLTE了,中国电信教你如何开通:只要三步
    本机无法访问虚拟机里面的nginx的80端口
    百度的网络接入架构图
    如何让局域网中的其他主机访问虚拟机
    java中synchronized 用在实例方法和对象方法上面的区别
    Redis登陆服务器和批量删除指定的key
    vim查找关键字的好方法
    网络攻防之动态修改表单的值
  • 原文地址:https://www.cnblogs.com/angestudy/p/13087065.html
Copyright © 2011-2022 走看看