关于音频:电脑投屏软件如何选择功能丰富的应用

投屏软件的抉择越来越丰盛,而且在进行抉择的时候要思考到手机版本和电脑版本,也能思考到大屏幕终端的一些信息,在市场上有各种各样不同的投屏软件通过软件的设计和降级之后人们有可能理解的一些问题也是比拟多样化的。所以在进行投屏抉择的时候,应该可能思考到这些电脑和手机的支持系统和状况能在进行设置的过程中理解到这些智能硬件设施的要求,可能使得这些电脑投屏抉择更加的丰盛,与此同时人们在进行抉择的时候还应该思考到其余方面的信息资源和状况,通过这些软件在进行操作应用的时候可能有更好的成果。电脑投屏软件要把握不同的因素,而且再进行理论抉择的过程中投屏操作须要依照流程步骤来进行抉择,随着互联网技术的疾速倒退投屏模式的抉择也比拟多氧化物是通过手机连样化,无论是通过手机连贯到电脑还是电脑连贯到手机,还有一些其余大屏幕间接的互动,须要理解到这些软件操作的性能,很多人会关注乐播投屏软件它可能有更多的设置灵活性,而且软件的综合性质和价值也比拟高,在进行操作的时候十分的灵便不便,而且有各种不同的领取形式,苹果手机和安卓手机就能够进行操作和连贯,而且也可能保障画面的清晰度和晦涩。针对不同的软件应用还有一些操作方面的留神问题证实要理解更多的状况可能再进行软件抉择的时候,依据这些零碎方面的内容或者是软件版本的信息来进行设置,与此同时很多专业人士还可能会关注到一些手机投屏模式的重要内容,关注到软件的系统升级,如果软件没有进行及时更新的话,很可能在进行连贯的时候产生问题。人们要可能理解到这些软件综合的信息,并且可能把握好这些相干的状况。人们要可能随时关注到乐播投屏软件的操作模式和状况,而且在进行利用的时候,如果本人并不是很理解的话,就能够通过视频观看理解到投屏的形式,同时对这些外围的技术也要可能有所把握,毕竟如果本人在进行实际操作的时候,如果没有连贯胜利或者是忽然连贯失败,就可能是因为零碎没有更新的起因,所以必须要可能达到更加好的应用条件和要求,也可能在进行手机投屏的时候,把握好这些网络的笼罩模式,还有近程操控的模式,进行更好的操作和设置。电脑投屏的信息还有一些相干的抉择十分的重要,人们在进行理解的过程之中,应该可能思考好这些软件的操作系统和内容,也可能理解到这些业余方面的状况和信息,能够更多的关注到这些投屏软件的抉择。针对乐播投屏的软件和信息人人们要可能理解到这些设施的状况,也可能在进行利用的时候达到更好的成果,这些显示器的信息还有一些零碎方面的状况都十分的重要,人们要理解到更多的问题。

February 10, 2023 · 1 min · jiezi

关于音频:Android11多应用录音

Android的共享输出安卓官网文档有提到该性能, 共享音频输出: https://developer.android.goo... 也就是在Android10的时候就反对共享音频输出了,也就是多利用能够共用录音。 介绍文字一大堆,把人搞晕了,不过其中提到: 在大多数状况下,如果新利用获取音频输出,则之前的捕捉利用将持续运行,但会受到静默解决。在某些状况下,零碎能够持续向这两个利用传送音频 从这句话来看,所谓的静默解决更多的是出于隐衷平安的思考,多利用是能够同时收到失常的音频的。 咱们晓得录音各个利用可能采样率(48K,16K...),格局(16bit,24bit,32bit...),通道数(1ch,2ch...)等都不一样,要想共享,是否须要各利用的参数保持一致? 或者能够不一样,像播放一样不同的参数的利用在AudioFlinger里有重采样?带着这个问题,咱们能够钻研下是咋实现的(从实践上来说,必定是得AF重采样的,要是各参数统一就太弱鸡了,显示不出安卓的实力)。 能够先看下这篇文档: Android Q共享音频输出: https://blog.csdn.net/u013490... 总之, 当初多利用同时录音不会报错,会持续,只是因为隐衷策略,有的利用会拿到静音数据, 可通过AudioPolicyService::updateUidStates_l() 定制你的策略;利用可通过AudioManager.AudioRecordingCallback()回调取得属性更改,是否静音,设施,源等更改信息。接下来咱们看下AF RecordThread::threadLoop()对数据转换的解决。 注:录音个别是RecordThread也有flags有AUDIO_INPUT_FLAG_MMAP_NOIRQ用MmapCaptureThread的状况,咱们以RecordThread为例AF里录音解决流程录音的threadLoop()和播放的都是很长的一个函数,大体的构造差不多,次要为: 处理事件非Active Track的解决音效链解决从HAL读数据数据转换// frameworks/av/services/audioflinger/Threads.cppAudioFlinger::RecordThread::threadLoop()| // 处理事件+ processConfigEvents_l();| // 依据active pause等状态,是否要移除+ mActiveTracks.remove(activeTrack); | // 音效链解决 咦,咋不是读数据后处理?+ effectChains[i]->process_l();| // 从HAL读数据到 mRsmpInBuffer 里+ mSource->read(| (uint8_t*)mRsmpInBuffer + rear * mFrameSize, mBufferSize, &bytesRead);|+ for (size_t i = 0; i < size; i++) {+ activeTrack = activeTracks[i];+ activeTrack->getNextBuffer(&activeTrack->mSink);+ activeTrack->mResamplerBufferProvider->sync(&framesIn, &hasOverrun);| // 如果有flag AUDIO_INPUT_FLAG_DIRECT,将数据拷到 mSink.raw+ if (activeTrack->isDirect()) { | activeTrack->mResamplerBufferProvider->getNextBuffer(&buffer);| memcpy(activeTrack->mSink.raw, buffer.raw, buffer.frameCount * mFrameSize);| activeTrack->mResamplerBufferProvider->releaseBuffer(&buffer);+ } else {| // 如果须要转换,将mResamplerBufferProvider的数据处理后给到 mSink.raw+ activeTrack->mRecordBufferConverter->convert(| activeTrack->mSink.raw,| activeTrack->mResamplerBufferProvider,| framesOut);+ }对于数据转换,如果是direct就间接把数据给到activeTrack->mSink.raw了,否则就要转换下。 这里activeTrack又是mResamplerBufferProvider,又是mRecordBufferConverter的很容易让人晕, 简略说从字面上看就晓得Provider就是数据的提供着,Converter就将提供者的数据按要求进行转换的。 ...

November 2, 2022 · 3 min · jiezi

关于音频:火山引擎-RTC-自研音频编码器-NICO-实践之路

本文作者:张德军1. 前言随着互联网技术的一直倒退,越来越多的人开始尝试应用或者依赖实时音视频产品解决团队沟通与合作问题。在通话过程中,咱们时常会遇到因为网络稳定(如拥塞、丢包、延时和抖动等)而导致的音频卡顿、掉字或者杂音等问题,影响工作效率。 为解决此类音频弱网问题,业界个别采纳前向纠错(Forward Error Correction,FEC)或者重传等网络策略优化办法,但这些办法存在冗余率过高、带宽利用效率低等毛病,而晋升音频编码器的编码效率和抗丢包能力、进步带宽利用效率,是解决音频弱网问题更为高效的一种办法。 Opus 作为 RTC 畛域宽泛应用的音频编码器,其编码品质较高,且提供肯定的抗丢包能力,然而在高丢包以及突发丢包场景,音质会显著降落,同时,其编码效率也有进一步晋升的空间。 RTC 自研 NICO(Network Intelligent Audio Coding,NICO)编码器在齐全兼容Opus 的根底上,极大进步了编码效率,并提供了超强的抗丢包能力。目前 NICO 曾经胜利集成进火山引擎 RTC,并利用于抖音和视频会议等业务,极大晋升了弱网场景音频体验。 2. 音频编解码技术简介音频编码器是一种将音频信号进行压缩和解压缩的安装。个别分为 3 大类:波形编码器、参数编码器和对立编码器。 2.1 波形编码波形编码,顾名思义就是对音频信号的波形进行数字化解决。G.711 是由 ITU-T 制订的一个典型的波形编码器,码率为 64kbps,最早利用于固定电话场景,其核心思想是将每一个 14 比特的音频采样数据压缩成 8比特 示意。G.711 利用了人耳对大能量信号不敏感的特点,幅度大的信号量化误差大,幅度小的信号量化误差小,能够将信号码率压缩 50% 左右。 2.2 参数编码随着科学家对语音信号的个性和人耳感知声音的机制了解更加深刻,参数编码器逐步在语音编码和音频编码畛域成为支流。参数编码就是指通过对信号提取若干个特征参数,并对特征参数进行量化压缩的办法。参数编码不以波形匹配为准则,而是通过对信号中的要害特色进行提取,并以高效的量化形式进行压缩,达到高质量复原信号要害信息的目标。因而,参数编码器的编码效率也要显著高于波形编码器。上面别离针对语音和音频信号的参数编码方法进行阐明。 2.2.1 语音编码下图是一个码激励线性预测(Codebook Excitation Linear Prediction,CELP)编码器零碎框图,是一个典型的参数语音编码器。次要利用了语音信号具备短时相关性和长时相关性的特点,应用线性预测的办法去除相邻样点间的相关性(即短时相关性),提取到线性预测(Linear Prediction Coding,LPC)系数,通过剖析语音信号中的长时相关性提取基音周期参数,去除语音信号中的长时相关性,而后利用随机码书拟合随机激励信号,通过剖析合成的形式获得最佳编码参数。这种形式只须要对 LPC 系数、基音周期、随机码书和两个增益参数进行量化压缩,解码端就能够复原高质量语音。参数编码器只须要不到 20kbps 的码率即可达到与 [email protected] 雷同的品质,编码效率具备显著的劣势。典型的编码器有:G.729、AMR-NB 和 AMR-WB 等。 2.2.2 音频编码下图是一个典型的频域编码器零碎框图。音乐信号和自然界的声音是通过不同的载体进行发声的,发声形式也千差万别,不太可能利用发声形式进行建模。换句话说,应用语音编码的办法编码音频信号的编码效率不高,编码品质比拟差。于是科学家另辟蹊径,通过对人耳感知声音的形式进行钻研,发现人耳对不同频率信号的感知敏感度也有所不同,因而创造了一种基于心理声学模型的编码器,尤其适宜对音乐信号和自然界声音的编码。典型的编码器有:MP3、AAC 和 HE-AAC 等。 2.3 对立编码综上可知,语音编码器只适宜编码语音信号,音频编码器只适宜编码音频信号。在理论利用场景中,咱们常常会遇到在谈话过程中会有音乐或者其余背景声音的场景。那么是否存在一种编码器,可能根据信号的类型,自适应抉择最佳编码方式,达到最佳编码品质呢?答案是必定的。对立编码器采纳对立框架高质量编码语音信号和音频信号,它可能很好的解决混合语音和音乐信号的高质量编码问题。典型的对立编码器有:Opus、EVS 和 USAC 等。 3. 自研 NICO 编码器技术优化为了解决 Opus 编码器在高丢包以及突发丢包场景中品质变差的问题,自研 NICO 编码器引入了多种编码工具和翻新技术,以进步编码器抗高随机丢包和突发丢包的能力。另外,在进步编码效率的同时,NICO 实现了与 Opus 编码器齐全兼容,解决了与现网 RTC 设施互联互通的问题。 ...

October 24, 2022 · 3 min · jiezi

关于音频:麒麟操作系统-kylinos-从入门到精通-办公环境-第三十六篇-音频视频格式转换压缩

0.根底环境类别:笔记本型号:中国长城 UF712硬件平台:飞腾处理器(ArmV8 指令集)零碎:河汉麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟零碎,linux,PKS,河汉麒麟,飞腾,arm64,arm,格局转换,ffmpeg,mencoder 1. 需要背景咱们在网上下载的各类视频,音频可能须要进行转换或压缩。在windows下,咱们的选择面绝对宽泛,而收费的咱们大家喜爱用国产的格局工厂,很遗憾格局工厂没有Linux(更没有ARM版本)。本文尝试找到一种优质的音频、视频格式转换、压缩的简略好用的办法,给大家在日常的应用过程带来不便。如果是程序员,除了应用ffmpeg、mencoder等业余的命令行工具外,一般场景下,采纳本文的办法也是一种较好的抉择。 2.mystiq视频转换软件2.1装置启动后 2.2格局转换点击增加转换工作(能够多个,批量解决)设定指标格局点击执行转换工作右击工作条,抉择关上输入文件夹,应用vlc或零碎的视频播放器查看成果 3.qwinff(ffmpeg GUI)https://qwinff.github.io/ 3.1装置装置胜利,启动后 3.2格局转换点击增加视频源,进行转换工作。点击执行工作右击工作条,抉择关上输入文件夹,应用vlc或零碎的视频播放器查看成果 4.间接应用ffmpeg或mencoder的命令行这个可能在网上搜寻相干教程,这个比拟麻烦,须要相熟命令,但如果业余做转换的,能够更快提高效率。给出一个网上检索到的参考博客 https://www.homedt.net/25440.... 5.总结mystiq与qwinff二者均是ffmpeg的图形化界面,在操作能力和格局反对上基本一致,大家能够依据集体爱好抉择喜爱的界面。二者任选其一即可。 麒麟零碎专栏:https://segmentfault.com/blog...文章发表在SegmentFault分割邮箱:1179611323@qq.com群:662512340 文章中相干材料均可通过群文件获取或向群主申请帮助发行日志:20220919 首发

September 19, 2022 · 1 min · jiezi

关于音频:再谈回声消除测评丨Dev-for-Dev-专栏

本文为「Dev for Dev 专栏」系列内容,作者为声网音视频实验室工程师 黄译庆。音频品质的优化是一个简单的系统工程,回声打消是其中一个陈词滥调的话题,一般来说,回声打消的成果受设施自身的声学设计、声学环境、以及软件系统等诸多因素的影响。传统的办法做回声对消包含线性回声对消与滤波非线性解决,但目前回声打消的前沿畛域仍面临着非线性回声对消、近端能量小于回声能量、立体声的回声问题、麦克风与参考信号时钟不统一、参考信号不精准、不足牢靠的时延预估办法等难题。声网音频技术团队基于本人的实际,推出了非凡场景下的音频测评系列文章,本文是回声打消篇──在此抛砖引玉、恳请业界同仁多加批评指正。 随着 4G/5G 的利用,实时音视频畛域也迅猛发展,实时语音品质的也越来越受到人们的关注。回声、延时、卡顿等因素成为人们关注实时语音品质的次要方面。这篇文章次要来介绍下实时语音通话中的回声打消问题。 回声是指扬声器播放的声音又被麦克风采集并发回远端的景象。所有的通信零碎必须进行回声打消,否则会重大影响通信品质。回声打消产生的问题次要分为两大类,漏回声和双讲掉字,其直观体现就是谈话人听到了本人的声音和对方声音卡顿甚至听不见。 ■图1:声学回声产生的起因 01 回声打消的几个难题 ■图2:回声打消计划 影响回声打消的因素很多,比方音量问题──当播放的信号过大的时候,很容易产生回声,根因次要有以下几种: 1、麦克风采集到的回声信号溢出(clipping)而引入非线性回声; 2、音量过大加剧硬件设施本身的振动,引入非线性成分; 3、麦克风采集到的回声信号未溢出但远大于近端语音信号,双讲时造成重大的掉字甚至听不见。 此外,延时抖动、时钟偏移、采集或播放频率不稳、非线性失真、回声门路变动、混响、硬件 3A(手机自带 3A)的解决成果等等,都是常见的影响回声打消的因素。宏观上来讲,采集或者播放设施的外观(扬声器/麦克风器件型号及排列形式) ,手机自带的 3A 解决算法(手机的厂商,零碎和型号),传输算法,环境因素以及复杂多变的通信场景,都会对回声打消带来不同的影响。 02 回声打消的评测办法回声产生的场景如此简单,那咱们怎么去进行回声打消的测评呢?在实验室场景中,咱们对回声打消的测评,次要分为两局部来进行。第一局部,人工主观测试,重点关注各类简单场景下,是否有回声问题;第二局部,主观自动化测试,重点关注大量的不同机型/零碎版本,是否有回声问题。 人工主观测试,比拟好了解。就是人工互通,去模仿各类用户可能应用的场景,去测试是否有回声的产生,常见的场景比方主播观众切换,切后盾/锁屏,开启/敞开(与音视频相干的)第三方利用、打断等,以及配合各种终端设备(耳机/外放/蓝牙耳机)/环境(宁静/嘈杂)的切换等。 那主观自动化测试如何去检测回声呢? 咱们搭建了一套用于测评 AEC 的零碎。该零碎实用于声网及业内 SDK 的所有场景,应用的语料为在消音室录制的人声语料,在用户 top 机型和常见问题机型上进行评测。设施的音量均调至官网举荐音量,以测试机 speaker 的播放残缺度、测试机 speaker 的播放响度、长短时回声占比、残留回声量等指标来掂量 AEC 品质。 03 具体的 AEC 主观测评办法该测试方法是通过测试安装对立收发测试信号,可进行回归测试,在大批量的自动化测试中也据有较好的稳定性,能大幅提高测试效率。 步骤一:将近端设施与远端设施通信连贯; 步骤二:电脑通过声卡输入音频信号到近端规范设施,供近端设施采集测试音频信号; 步骤三:在远端设施播放接管到的音频信号; 步骤四:声卡同步采集近端设施接管到的待测音频信号; 步骤五:通过检测待测音频信号响度和时长,来确定远端设施的回声打消品质。 ■图3:消音室测试环境 为了评估在现实条件下回声打消的能力,咱们在消音室外面进行测试。断绝噪声并且尽量减少回声。图 3 是测试环境部分展现,咱们在抉择的测试机上进行批量测试。 形容A1全双工无衰减A2全双工在发送方向有衰减B很短的削波C造成伤害的音节短削波D造成字损失的削波E很短的残留回声F间断回G间断回声■表1 回声打消性能类型形容 咱们依据 3GPP 对回声打消性能分类的形容(表 1)以及对回声打消性能的分类(图 4),将回声占比划分为低于 25ms 回声占比、25 ~ 150ms 回声占比以及超过 150ms 回声占比的三个级别,用以界定回声的重大水平。 ...

August 26, 2022 · 1 min · jiezi

关于音频:音频技术的下一个热点会出现在哪个领域丨一期一会-•-音频工程师专场

前言 音频技术倒退到明天,经验了从模仿音频到数字音频到历程。国内音频工程师协会创立于 1948 年,中国数字音频技术起步绝对较晚,长期被国外组织和公司垄断。随着中国的一直倒退、科技日益提高,通过近三十年的致力,咱们在语音辨认重建、音效声场重现、数字音频通信等方面,积攒了很多本人的音频技术专家和学者,曾经逐渐放大和东方的技术差距。 为了更好的促成行业交换,壮大音频畛域的中国力量,遍及公众对音频技术的了解和认知,咱们推出了面向音频领域专家的「一期一会」流动,心愿能为更多的音频技术从业者打造一个充沛交换的平台,咱们欣慰地看到大家在流动中碰撞出许多有意义、有价值的思维火花,愿「一期一会」能承载和点燃更多音频技术人的幻想。 —— 声网技术合伙人、音频编解码专家 @高泽华 本文基于「一期一会 • 音频工程师专场」中探讨内容整顿,观点仅供参考。 局部观点前瞻: ● 在音频畛域,AI 解决广泛问题,算法解决个例问题,因而 AI 和传统算法的联合是必然的。 ● “热点”的问题可能对于开发者而言意义不大,少数组织架构的利益分配机制对一线开发者往往不利。 ● 空间音频面临的一个事实问题是,并没有足够多的音源素材可利用,市场上占有率更多的设施和业务场景并不具备相应的条件。 ● 从技术角度看,VoIP 有很多事能够做,但从利用场景来看,市场需求才是决定性因素。 1、音频技术倒退进入平台期音频技术倒退曾经到了一个平台期阶段。神经网络的热潮开始消退,在音频降噪、回声打消、丢包弥补等方面的利用都有所突破,通道技术的改良靠近瓶颈,编解码和麦克风阵列的利用尚处于尝试阶段。 久远来看,业务需要的积攒和音频技术的迭代始终都在驱动着畛域的倒退,当初面临的问题是技术层面须要有新的冲破。在具体的场景下,例如虚构会议、空间音频、降噪、车载等等场景对沉迷式体验的谋求越来越显著,这都须要工匠精力去打磨。 2、被动降噪在技术侧的新冲破随着 TWS 蓝牙耳机市场的快速增长,被动降噪再次引起人们的关注。在深度学习的加持下,被动降噪(ANC)的利用范畴从智能手机、蓝牙耳机等单点降噪向 PC、智能汽车、智能家居等市场扩大。但声源拆散(声纹识别)与还原(声场重建)、多路音频的网络传输、算法的收敛等仍是一些值得关注的问题。 无论是智能车机或智能家具抑或元宇宙,随着利用场景的一直扩大,工程师对于被动降噪关注的技术方向应该偏重软件与硬件的联合。终端设备算力的一直进步和云服务的日益遍及也必然会为被动降噪技术提供更大的可施展空间;在越来越多的场景中,多个端侧设施的协同调度(回声克制)正在成为新的课题。 3、市场需求决定了 VoIP 的将来将来 VoIP 会倒退到什么水平?挪动通信曾经从 2G 倒退到 5G 时代,VoIP 也从最后的 8k 晋升到 44k 的高清通话程度。高音质也带来了新挑战,通话的稳定性是第一位的,网络的切换和抖动对 VoIP 的影响也很大;在 1v1 和 N v N 的通话场景中要解决的问题也不尽相同。只管降噪、去回声这 2 大利用课题在学界有了一些停顿,但硬件的复杂性也增大在工业界理论利用的难度。 VoIP 曾经变得更场景化、多设施化,并且场景与设施的融合度更高,谋求沉迷式体验。因而在前端解决(算力)、网络、设施的多样性和复杂性方面存在诸多制约因素。产业界思考的是稳定性。从技术角度看,VoIP 有很多事能够做,但从利用场景来看,市场需求才是决定性因素。 4、阵列技术的利用迎来新场景智能设施的倒退造成将来很多单声道的场景都会被多声道取代,因而阵列技术的利用场景会变得越来越多。但如何选取传声器或扬声器的音频信号、怎么评估阵列的成果以及声场重建等方面仍面临着挑战(如多区域、指向性、时域滤波等)。除了实验室环境,国内外的钻研机构曾经在户外音乐会、音乐广场等畛域的利用获得停顿。 5、空间音频在 RTC 畛域大有可为自从苹果推出空间音频后迅速成行业关注的焦点,利用场景也从耳机设施延长到外放音响。据理解,苹果在空间音频实现方面采纳的是杜比的计划。Facebook、微软最近也都在空间音频方面有所钻研,公开的 Demo 显示次要利用在会议场景。 因为会议场景太过简单,在做空间音频时到底要先做拆散还是先做声道,目前业界尚没有对立的实现计划;在人 & 声拆散方面,抉择哪一路音频(向用户播放给进去)次要取决于下层利用。但思考到更多的利用场景,工程师须知,空间音频要解决的问题既包含事实场景的模仿与反抗、也包含虚构场景的模仿与反抗。 目前空间音频的利用还面临一个更为事实的问题是,并没有足够多的音源素材可利用,市场上占有率更多的设施和业务场景并不具备相应的条件,尤其是海量的中低端设施和短视频利用。 ...

August 22, 2022 · 1 min · jiezi

关于音频:基于对象的实时空间音频渲染丨Dev-for-Dev-专栏

本文为「Dev for Dev 专栏」系列内容,作者为声网音频算法工程师 李嵩。随着元宇宙概念的引入,空间音频这项技术缓缓映入大家的眼帘。对于空间音频的根底原理,咱们做过一期科普视频 —— 「空间音频背地的原理」,想要理解的敌人能够复制文末的链接查看。 本期文章,咱们将次要探讨基于对象(object-based)的实时空间音频渲染,也就是如耳机等利用场景中,渲染对象为一个音源时的渲染思路与计划。 01 虚构声的渲染虚构声是指利用空间音频技术合成的一路虚构声源。 在现实生活中,人们能够利用双耳感知到实在声源的地位,所谓的虚构声渲染,便是模拟实在声源达到咱们耳朵的过程,使听者感触到虚构声源在空间中的地位等信息。 渲染过程中,咱们须要几个根底的信息来进行信号处理,比方:声源、房间的模型、声源和听者的地位、声源的朝向等等。在声源和听者之间没有妨碍物的状况下,声源收回的声音会间接达到听者的耳朵,咱们把这个听到的声音叫做直达声。 在直达声达到后,声源从墙壁、地板、天花板或其余障碍物反射产生的反射声也会陆续达到听者的耳朵。这些反射一开始很稠密,随着工夫的推移会越来越密集,能量也会呈指数降落。通常,咱们将一开始稠密的反射称作晚期反射,个别在 50ms 到 80ms 内;把该段时间后的密集反射叫做前期混响(具体的工夫和房间大小等环境因素无关)。 02 实时空间音频渲染的过程实现前文形容的是声源在房间内通过空气流传达到人耳的过程,接下来咱们探讨这一过程如何实现。思考到声源通过空气到人耳的传递过程个别是线性的,如图一所示,因而对于渲染来说最简略的办法是卷积已知的单声道声源和一对双耳房间的脉冲响应 (Binaural room impulse response, BRIR)。 ■图一:卷积BRIR取得双耳声 其中 BRIR 指的是在房间内从声源到人耳的双耳房间脉冲响应,包含了直达声和反射(这里的反射包含了晚期反射和前期混响)。咱们能够将其了解成当声源是一个脉冲信号(比方拍手,发令枪收回的声音等)的时候,你听到的声音。正如咱们前文所说,BRIR 与房间、声源和听者的地位无关。 图二所示是一对在某个房间内实在测量的 30° 水平角的 BRIR,其中蓝色和红色线别离代表左耳和右耳的 BRIR。咱们能够清晰的看到在时域中的直达声、晚期反射和前期混响局部。 ■图二:一对实在测量的双耳房间脉冲响应 (起源: University of Surrey, IoSR-Surrey数据库) 那么 BRIR 如何获取呢?测量是一个实在并且精确的做法,尤其是对于事实加强(AR)的场景而言。但即便在不思考个性化的状况下,在每个房间借助人工头来实在测量所有可能地位的 BRIR 都是不事实的。 另外 BRIR 的长度和房间的混响大小有很大关系,且实时卷积很长的 BRIR 须要消耗很大的算力。因而通常会应用合成的办法来模仿实在的 BRIR。 1)直达声的合成 BRIR 的第一局部是直达声的脉冲响应。直达声的合成能够通过卷积声源和头部相干脉冲响应(Head-related impulse response, HRIR)来获取。HRIR 是头部相干函数 HRTF 的时域表白。 对于 HRTF 置信大家曾经有所理解,它示意的是声源到人耳的传递方程,但并不蕴含反射(晚期反射和前期混响)局部。也就是说,如果只是用 HRTF 去渲染的一个声源,咱们所在的虚构听音场景是无反射的场景,相似消声室,雪山顶等非凡场地。 ...

July 28, 2022 · 1 min · jiezi

关于音频:音频的价值AI-Codec-的意义与算法能力的边界丨一期一会-•-音频工程师专场

前言 音频技术倒退到明天,经验了从模仿音频到数字音频到历程。国内音频工程师协会创立于 1948 年,中国数字音频技术起步绝对较晚,长期被国外组织和公司垄断。随着中国的一直倒退、科技日益提高,通过近三十年的致力,咱们在语音辨认重建、音效声场重现、数字音频通信等方面,积攒了很多本人的音频技术专家和学者,曾经逐渐放大和东方的技术差距。 为了更好的促成行业交换,壮大音频畛域的中国力量,遍及公众对音频技术的了解和认知,咱们推出了面向音频领域专家的「一期一会」流动,心愿能为更多的音频技术从业者打造一个充沛交换的平台,咱们欣慰地看到大家在流动中碰撞出许多有意义、有价值的思维火花,愿「一期一会」能承载和点燃更多音频技术人的幻想。 —— 声网技术合伙人、音频编解码专家 本文基于「一期一会 • 音频工程师专场」中探讨内容整顿,观点仅供参考。 01 对于如何讲述音频的价值互联网音频技术通过最近一、二十年的倒退,曾经从「听个响」倒退到了「听得爽」的阶段。在许多业务场景下的实现曾经达到了 90 分以上的程度,持续进步的难度开始陡增,因而持续投入的产出比(ROI)开始受到质疑。 而在音视频直播行业内卷的大前提下,工程师攀登技术顶峰的诉求未然变得曲高和寡。在 ToB 和 ToC 的畛域,如何将音频技术的价值充沛地、清晰地表达出来变得尤为重要。这里既波及到所谓的工匠精力缺失,也存在压服企业管理者的挑战。 此外,对于音频品质的评估也不足对立的规范、企业倒退过程中对短期指标的谋求等等制约,都使得音频的价值很容易被疏忽。 但整体而言,音频尤其是 WebRTC 畛域仍有许多场景化的落地工作能够持续开辟,更多细分畛域如音乐等还有许多问题有待解决。思考到技术落地的代差问题,在工程化实现的环节必然存在诸多的挑战,这也正是能够展现工程师价值的中央。 02 音频工程师的钻研与翻新从国际局势的变动来看,中美脱钩势必在技术方面呈现更多卡脖子的环节。从芯片行业就可见一斑,如芯片工艺制作(台积电)、配备资料(光刻机、蚀刻机、离子注入机)、设计 IP 核和 EDA 软件(指令集 ARM、X86 等)。 再回到音频畛域,也存在同样卡脖子的环节。那么在这些环节上,国内势必会产生对标的产品、技术和规范(如 AVS),并且会依据国内的场景、利用现状具备差异化。与此同时也会带来更多的机会,音频工程师应该多关注翻新技术、为行将到来的风口做好筹备。不要满足于在 GitHub 上找个须要的我的项目就间接「拿来主义」,要多做调研、寻求更佳的实现,造就本人翻新的能源和志愿。 03 算法能力的边界以后音频圈存在竞争加剧、算法能力存在边界等问题。除了寻找新的发力点,工程师自身也须要晋升自我涵养,来冲破能力边界或解决具体业务场景下的特定问题。 从采集到播放,每个环节的算法都还有可优化的空间。一些优化,可能会借助 AI。不过 AI 的优化,会须要从硬件底层来做,比方借助 DSP 来晋升性能,让更高复杂度的算法能够落地到挪动端(比方高通平台),从而针对局部场景实现更好的音频体验。 04 对于 AI Codec 的意义即使单纯从低码率这一个极其的方向看,把 Codec 做到极致仍然会有意想不到的利用场景会找上门来,例如哪怕是现在的 5G 时代,弱网场景仍然十分广泛。从人与人沟通体验的极致谋求来看,以后业界的倒退也只是解决了可懂度方面的问题,间隔沉迷式的体验需要还有很长的路要走。另外,AI Codec 在通用场景(音乐与语音)的后劲尚有许多能够开掘的后劲。 05 端到端的音频优化道阻且长从工程的角度来看,音频体验的改善还是要端到端地对每个环节逐个优化,能力整体上晋升用户的体验,单纯在某一个环节的优化反而意义不大。然而端到端的优化是一个系统工程,往往会消耗大量的工夫和精力,并且须要在总体上进行兼顾和调度。 06 基于场景而非具体问题跟端到端优化之话题相似,工程师在解决问题的时候肯定要基于产品的利用场景,而不要基于某个或某些具体的问题。因为前者会让人从零碎和全局的维度去思考,带来的收益远比解决具体问题大的多。 07 元宇宙与音频技术从技术倒退的角度来看,音频畛域很长时间没有突破性的翻新了。元宇宙这个风口兴许会带来新的(技术落地)场景,例如沉迷式音频的体验会成为标配;但现有的软硬件环境间隔实现元宇宙的构想还有肯定的间隔;细分到具体的技术点如空间音频,目前技术较为成熟、会很快落地。整个行业都很期待元宇宙能带来新的冲破,对工程师而言肯定多站在业务的角度进行技术的积攒。 08 技术落地的代差问题回顾音频产业倒退的历史,不难发现任何一项成熟技术的大规模利用(尤其是民用)都存在较长时间的代差。对于处在最前沿的音频工程师来说,如何克服技术自嗨和业务落地之间的 GAP 是一个较大的挑战。 但大家容易漠视的中央在于,一个行业的技术改革并不是欲速不达的,通常体现为继续质变的积攒 ── 正因为大家身在其(音频行业)中再加上技术落地的代差,造成的错觉和感知不会那么强烈才会“不识庐山真面目”。五年前谁会想到打电话的模式会是现在手机视频通话的样子?而新生代对沉迷式体验的需要正在一步步变成事实 ── 这在现在的游戏行业曾经初现端倪。 ...

July 21, 2022 · 1 min · jiezi

关于音频:Any-to-Any-实时变声的实现与落地丨RTC-Dev-Meetup

前言 「语音解决」是实时互动畛域中十分重要的一个场景,在「RTC Dev Meetup丨语音解决在实时互动畛域的技术实际和利用」流动中,来自声网、微软和数美的技术专家,围绕该话题进行了相干分享。 本文基于声网音频体验算法专家冯建元在流动中分享内容整顿。 关注公众号「声网开发者」,回复关键词「DM0428」即可下载流动相干 PPT 材料。 01 基于传统音效的实时变声算法的窘境1、变声扭转的是什么 ■图 1 要通过发音来辨认一个人,有很多维度须要思考。 首先,每个人的发音腔体各有不同,口腔的张合以及喉部的声带触动,都可能有个体声学方面的区别,这导致因为每个人的发音有不同的音色,在此基础上使用语言进行表白,就可能产生不同的韵律;其次,每个人所处的房间不同,也可能会伴有不同的混响,对辨认造成影响;此外,有时通过变声唱歌,可能还须要乐器配合以及一些乐理常识。 而且,咱们在感知声音的时候,也会受心理影响,同一个声音,有的人可能会感觉有磁性,但有些人可能会感觉比拟毛糙。心理感知依据个人经历的不同,也会有些区别。 2、人为什么会有不同的音色那么在实时场景下,如何实时变动声音呢?当韵律较长时,尽管咱们无奈扭转遣词造句,但能够扭转发音腔体的音色,因为它对实时性的要求比拟高。 举例来说,比方“明天是几号”这样一句话,能够把这些字拆成一些音素,比方“今”能够拆成 “J” 和“in” 这两个音素,它是一个清音,能够由声带触动发出声音,此时每个人的音色区别比拟大;而“是”是一个浊音,通过唇齿的气流模式实现,对于这个字来说,每个人的音色区别比拟小。这是为什么呢? ■图 2 实质上来说,声带的触动频率决定了发音的音调高下。不同的人通过不同的声带触动频率发同样一个音,其音色在清音上会有很大的不同。比方下面的例子,“明天几号”这几个字,不同的人发音可能会有比拟大的区别,而“是”这个字可能区别就比拟小。 传统的变身算法也是从这个角度来思考,不同的人有不同的基频,依据声带振动频率不同,能够调整基频的散布。不同的基频会有不同的谐波,谐波就是基频的倍数。这样就能够通过变调形式来扭转声音。 ■图 3 在发不同的音时,嘴巴的开合水平决定了发音腔体的共振状况,开合水平的不同会导致不同频响的加强或减弱,如果和口腔的共振频率达到同一频率,频段就会被加强,不同则会被减弱。这就是共振峰的原理。从清音的角度来说,声带触动产生基频,基频会有相应的谐波,谐波在不同频率的散布由腔体的开合来决定。这样,扭转基频和频响的散布就能够对音色有所调整。 3、基于传统音效的变声传统算法其实就是通过不同的效果器对不同的发音维度进行调整,图 4 所示为传统算法罕用的效果器,比方变调,当初变调的算法大部分都是通过 pitch shifting 把基频和谐波向上或者向下扩大。在这种状况下,shift 操作会同时扭转共振峰,使声音都依据频谱的能量向上或者向下挪动,从而扭转人的基频发声。 女生的基频比拟高,而男生的基频比拟低,通过这个办法就能够使两者的基频方向统一。然而男女发音时的口腔开合也会随字的变动而变动,仅仅扭转基频不能做到完满的声音转变。比方电影《神偷奶爸》,其中的小黄人说的是西班牙语,因为基频进步它变成了小孩子的声音,然而这并不天然,还须要均衡器进行调节。 后面的例子在变调的时候只扭转了基频,其实共振峰和频响能够通过均衡器或者共振峰滤波器来进行调整,这些也是调整音色的要害模块。另外,通过美声训练的人在唱歌或者谈话的时候,高频音较多,发音比拟丰满,从这个角度来说,能够通过激励器对其谐波进行加强。 ■图 4 传统算法大部分都是通过效果器的串联链路,从不同的维度对声音进行扭转。罕用的效果器软件包含 MorphVOX PRO 或者 voicemod,它们有不同的效果器,通过调整参数就能够产生不同的人物特色。抉择音效其实就是不同效果器的叠加,每个人谈话的声音最初变声进去也都是不一样的,因为根底地位就不一样,所以很难把所有人的声音都变成一样的,然而能够做方向性的调整。 我应用 MorphVOX 软件进行了男变女或者女变男的跨性别变动,在男声变女声的时候,应用默认的选项进行调整就有变成了小黄人的感觉。如果使女声变成男声,发现声音听下来有点憨,像鼻音比拟重的状况。呈现这种状况是因为女声变成男声的时候须要降调,使整个频谱往下进行压缩,这样很多高频信息就失落了。 可见,传统的效果器都有各自的缺点,导致变动不那么精确。要想得到比拟好听的声音,传统的链路形式都须要手动扭转参数,无奈做到精准的音色变换,而如果仅应用预设值进行调整,音色变换的成果并不现实。另外,每个人的声音想变成另外一个指定的人是一件很难的事件,可能只有业余的调音师能力做到。 02 ASR+TTS=VC?基于 AI 的实时变声可能性摸索1、ASR传统变声有很多局限性,那么基于 AI 的形式是否改善实时的变声成果呢?咱们晓得,ASR 技术能够实现语音转文字的性能,其实在进行变声的时候,也须要对语义信息进行保留,只进行整体的调整可能呈现漏字或者表白意义存在谬误的状况。 如图 5 所示,当初有很多的辨认框架,比方 hybrid(框架)的 Kaldi 等,这种框架会通过声学模型、发音词典以及语言模型等对声音转换进行综合的断定,要同时满足发音正确和语言正当两个条件。 ■图 5 从这个角度来说,它是一个解释性比拟强的链路,同时也便于搭建,因为有很多现成的发音词典、语言模型能够应用。它也存在肯定的毛病,就是解码过程比较复杂,这种框架蕴含多个模型,如果其中一个呈现问题,那么在辨认的时候就会呈现偏差。 针对这一问题呈现了很多端到端语音辨认框架,比方 Espnet,其准确率从通用模型的角度来说,在数据短缺的状况下,能做到比 hybrid 更好的辨认成果。而且其训练流程也比较简单,不像 hybrid 框架,须要训练声学模型、语言模型,而后进行解码。这种框架只须要语音和文本数据配对,而后间接进行端到端训练就能够了。然而它的毛病也很显著,因为要进行端到端的训练,所以其要求更高,须要更大的训练集以及更精确的标注。另外,不同的场景可能须要定制,所要求的数据更多,如果是端到端的模型,则可能没有较好的语料进行训练。 ...

June 20, 2022 · 2 min · jiezi

关于音频:AliIAC-智能音频编解码器在有限带宽条件下带来更高质量的音频通话体验

随着信息技术的倒退,人们对实时通信的需要一直减少,并逐步成为工作生存中不可或缺的一部分。每年海量的音视频通话分钟数对互联网基础设施提出了微小的挑战。只管目前寰球的互联网用户绝大多数均处于良好的网络情况,但仍有不少地区处于极差的网络条件下,除此之外,即便在网络良好区域,也仍会存在弱网景象。那么如何在无限的带宽下提供高质量的音频体验就成为了一个十分重要的钻研方向。 在过来的几十年间,语音或音频的编码技术都波及大量特定畛域的常识,例如语音生成模型。近些年,随着深度学习类算法的疾速倒退,逐步涌现出了多种基于神经网络的音频解决算法。阿里云视频云技术团队在综合剖析了理论业务场景存在的共性问题的根底上,开始摸索借助数据驱动的形式进步音频的编码效率,并提出了智能音频编解码器 AliIAC (Ali Intelligent Audio Codec),能够在无限的带宽条件下提供更高质量的音频通话体验。 什么是音频编解码器?即便没有据说过音频编解码器这个概念,在日常生活中,也肯定有应用到这项技术,从收看电视节目到应用挪动手机打电话,从刷短视频到观看直播,都会波及到音频编解码技术。 音频编码的指标是将输出音频信号压缩成比特流,其所占存储空间远小于输出的原始音频信号,而后在解码端通过接管到的比特流复原出原始音频信号,同时心愿重建的信号在主观听感上与原始信号尽可能相近,编码过程如下公式所示: $$\boldsymbol{h} \leftarrow \mathcal{F}_{\mathrm{enc}}(\boldsymbol{x})$$ 其中,\({x} \in \mathbb{R}^{T}\) 代表时域语音信号,长度为 \(T\),\(h\) 会进一步被转换为比特流 \( \tilde{\boldsymbol{h}} \in \mathbb{R}^{N} \),\( N \) 远小于 \(T\),解码过程如下公式所示: $$\boldsymbol{x} \approx \hat{\boldsymbol{x}} \leftarrow \mathcal{F}_{\mathrm{dec}}(\tilde{\boldsymbol{h}})$$ 传统的音频编解码器能够分为两大类:波形编解码器和参数编解码器(waveform codecs and parametric codecs) 波形编解码器波形编解码器的重点是在解码器端产生输出音频样本的重建。 在大多数状况下,波形编解码器较依赖于变换编码技术,能够将输出的时域波形映射到时频域。而后,通过量化技术对变换系数进行量化,最初通过熵编码模块将其转化成可用于传输的比特流。在解码器端,通过相应的反变换来重建时域波形。 个别状况下,波形编解码器看待编码的音频的类型(如:语音、音乐等)做很少或不做任何假如,所以能够解决的音频范畴很宽泛。在中高比特率时这种办法能够产生十分高质量的音频,但在低比特率下往往会引入一些由编码引起的 artifacts,导致听感变差。 参数编解码器参数编解码器的核心思想是通过看待编码的音频(如:语音)进行特定假如,并通过参数模型的模式将先验常识交融进编码的过程中。 编码器首先会预计模型的参数,而后通过量化模型进行进一步压缩,解码器则应用量化后的参数来驱动合成模式进行时域波形的重建。与波形编解码器不同的是,参数编解码器的指标不是在一一样本的根底上取得高类似度的波形重建,而是生成在感知上与原始音频相近的音频。 传统音频编解码器面临的挑战得益于 WebRTC 生态的蓬勃发展,opus 音频编解码器在业界被宽泛应用,它着重于解决宽泛的交互式音频利用场景,包含 VOIP (Voice over Internet Protocol)、视频会议、游戏内聊天,甚至近程现场音乐表演。 它由两种不同的编解码器形成,一个是用于语音的 SILK,另一个是用于音乐的 CELT。只管 opus 及其他传统音频编解码器(如:EVS、AMR-WB、speex、MELP 等)都领有着优异的成果,但在无限带宽条件下、信噪比低条件下和混响混音重大条件下均体现出了不同水平的局限性,无奈应答以后复杂多变的利用场景,带来晦涩清晰的音频通话体验。 AliIAC 智能音频编解码器思考到传统音频编解码在高码率下的优异体现及业内的支流位置,阿里云视频云音频技术团队提出了两款智能音频编解码器,E2E 版本和 Ex 版本。 其中,E2E 版本,可间接替换 opus 等传统编解码器模块,反对在 6kbps ~ 18kbps 下工作,对 16khz 音频进行编解码;Ex 版本则可在沿用传统编解码器的根底上,通过后处理的形式对 6kbps~8kbps 解码后的 16khz 音频进行修复加强,晋升可懂度和音质。 ...

May 5, 2022 · 1 min · jiezi

关于音频:RTC-科普视频丨聊聊空间音频的原理与其背后的声学原理

在当初很多的线上实时互动场景中,咱们器重的不仅仅是互动体验,还要晋升沉迷感。而在很多场景中,仅凭空间音频技术,就能够带来如临其境的体验。空间音频技术的原理是怎么的呢? 看过咱们新一期的 RTC 科普视频,你就晓得了。 空间音频技术是以算法的形式将事实中的听感,在数字世界中重建了进去。既然是重建,那么要了解这个过程,就须要先理解,事实中,咱们是如何通过耳朵、大脑来要感知到一个声音在空间中的地位的。 要解决这个问题,咱们能够将判断声音地位的过程拆解一下,即: ● 如何判断声源与你程度方位 ● 如何判断声源与你的垂直方位 ● 如何判断声源与你的间隔 事实上,咱们是依附双耳间的音量差、时间差和音色差来判断声音的方位。因为双耳位于头部两侧,如果声音是来自右侧,那么它达到右耳的工夫绝对更短,这就行程了双耳时间差;声音在流传过程中,频率会衰减,那么双耳之间听到的音色也会不同。 在室内环境中,耳朵听到的声音包含直达声、晚期反射声、前期混响声。直达声就是字面意思,从声源间接传到耳朵的声音;晚期反射,则是通过室内墙面反射后传到耳朵的,相比直达声晚 50 - 80ms;在晚期反射之后达到的声音则是前期混响。就像刚刚所说,声音流传中会有衰减,所以声源与耳朵的间隔是可能被听进去的。通常来讲,声源与耳朵的间隔增加一倍,直达声的声压就会减小 50%,而晚期反射与前期混响的声压则不会受到这么显著的影响。咱们的大脑就会基于直达声与晚期反射+前期混响的声压比来判断声源的间隔。 在这期的科普视频中,咱们对以上原理都做了解说。为了让更多人能有画面感,便于设想声音流传的过程,咱们用“水”作为类比。不过,要再次揭示各位,水波的流传与声波在空气中的流传过程有很大差异,大家不要等同视之。 另外,咱们在视频里简要地解说了如何在虚拟现实(VR)中重建空间音频。其中提到的算法,咱们并没有深刻解说,如果你感兴趣,能够查看咱们往期的文章。 最初,如果大家还心愿理解哪些技术原理,欢送给咱们留言。

April 28, 2022 · 1 min · jiezi

关于音频:AliSSR-语音超分算法让在线会议语音更明亮更自然

超分让在线会议语音更亮堂,在线会议已成为日常工作中较为广泛的沟通交流形式,接入会议的形式也出现多样化,比方电脑入会、手机入会又或是电话入会。 雪雅、曜辰|作者 家喻户晓,高采样率且高带宽的音频信号富含丰盛的频率成分,可能带给人们更身临其境的听觉体验。但在线会议中,电话入会又或是因设施等起因导致原始采集带宽过低的场景中,带给人们的直观感触体现为听对方谈话比拟闷,重大影响会议体验。在信号处理中,语音超分技术能够用来解决这类状况,它能够最大限度地从低带宽的音频信号中重建出其高频成分,让语音信号听起来更“亮堂、真切”,从而为客户提供更杰出更高音质的通话体验。 上面是一个简略的成果演示:https://www.youku.com/video/X... 作者注:视频中前半部分是窄带信号,后半局部是超分后的宽带信号。 语音超分技术的晚期钻研多围绕传统信号处理实践开展,如源滤波器模型,通过 codebook 映射或者线性映射的办法来预测高频带频谱包络 [1, 2]。近些年随着深度学习技术在信号处理畛域的利用,语音超分技术在深度学习的加持下,成果取得了显著的晋升。 最开始,连续了传统信号处理框架,神经网络替换原有框架的一部分,用来预测高频带的谱包络或者幅度谱 [3, 4],相位扩大沿用传统的办法,放弃计算复杂度低的劣势 [1],然而相位信息对于人耳主观听感有着不可疏忽的影响。 随后,受图像超分辨率算法的启发,基于端到端的神经网络模型利用到了语音超分工作 [5, 6],它间接在时域上对信号实现了预测,防止了相位问题,这些办法都是通过最小化某个损失函数(如 L2 loss) 来训练的,起初,引入了 GAN 的训练形式,联合原有的损失函数和反抗损失,达到了更好的成果 [7, 8]。 以后,咱们次要针对采样率从 8KHz 进步到 16KHz 的状况(频谱带宽从 4KHz 扩大到 8KHz)。 语音超分算法:AliSSR基于神经网络的语音超分算法近几年来获得了不错的超分成果,但其中很多算法都是双非算法(非实时非因果),同时往往波及较大的参数量和计算量,难以在理论利用场景中部署。阿里云视频云音频技术团队基于上述理论问题,研发了两种实时因果的语音超分算法:AliSSR(e2e 版本)和 AliSSR(lightweight 版本),在领有较少参数量和较低延时的同时,放弃其高质量的语音超分成果。 1. 算法原理简介A. AliSSR(e2e 版本):是基于端到端的 encoder-decoder 模型。该模型结合实际利用场景,充分考虑了编解码、下采样所带来的损失,并联合 GAN 相干的训练技巧,晋升带宽拓展的成果; B. AliSSR(lightweight 版本):传统信号处理与深度学习联合的算法模型。该模型简略易拓展,资源耗费较小。 音频技术团队研发的基于神经网络的语音超分算法无需额定数据传输, 能够实时流式地对窄带语音信号进行高质量地带宽拓展。 2. 算法性能 3. 利用场景在某些低带宽的场景中 , 例如在 PSTN 场景中,往往感觉对方声音很 “闷”,这次要是因为发送端传输的语音信号采样率低,没有高频成分的语音信息。语音超分技术通过重建语音的高频成分,为客户提供更高音质、更杰出的通话听觉体验。语音超分罕用的应用场景如下表所示。 4. 超分成果显示AliSSR 实时超分算法反对多语种、多性别。上面别离对男生英文和女生中文测试语料的超分前后成果进行展现,主观听感层面,超分之后的语音显著比窄带音频要更 “亮堂”,其中 AliSSR(e2e 版本)超分后亮堂度要比 AliSSR(lightweight 版本)更好。 样本 1:英文 https://www.youku.com/video/X...视频中的三段音频别离是:窄带语音、AliSSR 实时处理后的 e2e 版本和 lightweight 版本 ...

March 28, 2022 · 2 min · jiezi

关于音频:语音顶会-ICASSP-2022-成果分享基于时频感知域模型的单通道语音增强算法

近日,阿里云视频云音频技术团队与新加坡国立大学李海洲传授团队单干论文 《基于时频感知域模型的单通道语音加强算法 》(Time-Frequency Attention for Monaural Speech Enhancement ) 被 ICASSP 2022 接管, 并受邀于往年 5 月在会议上向学术和工业界做钻研报告。ICASSP(International Conference on Acoustics, Speech and Signal Processing)是全世界最大的,也是最全面的交融信号处理、统计学习、及无线通信的语音畛域顶级会议。 七琦|作者本次单干论文提出了交融语音散布个性的 T-F attention (TFA) 模块,能够在简直不额定减少参数量的状况下显著进步语音加强的主观指标。 arxiv 链接:https://arxiv.org/abs/2111.07518 往期研究成果回顾: INTERSPEECH 2021:《Temporal Convolutional Network with Frequency Dimension Adaptive Attention for Speech Enhancement》 链接:https://www.isca-speech.org/a... 1.背景语音加强算法旨在去除语音信号中的背景噪声等多余信号成分,它是许多语音解决利用的根本组件,例如在线视频会议与通话,智能短视频剪辑,实时视频直播,社交娱乐与在线教育等。 2.摘要目前大多数对于语音加强的监督学习算法的钻研中,通常没有在建模的过程中明确思考时频域(T-F)示意中语音的能量散布,而其对于精确预测掩码或频谱至关重要。 在本文中,咱们提出了一个简略而无效的 T-F 注意力(TFA)模块,使得在建模过程中能够显式引入对语音散布个性的先验思考。 为了验证咱们提出的 TFA 模块的有效性,咱们应用残差时序卷积神经网络(ResTCN)作为根底模型,并应用语音加强畛域中两个罕用的训练指标 IRM [1](The ideal ratio mask)和 PSM [2] (The phase-sensitive mask)别离进行了摸索试验。 咱们的试验结果表明,利用所提的 TFA 模块能够在简直不额定减少参数量的状况下显著进步罕用的五个主观评估指标,且 ResTCN+TFA 模型始终以较大的劣势优于其余 baseline 模型。 ...

March 3, 2022 · 3 min · jiezi

关于音频:2021-技术展望丨实时互动场景下音频的技术变迁与机遇

线上会议、在线教育、电商直播等多个场景的衰亡,也使得实时互动技术从幕后走到台前,失去了更多人的关注。编解码、网络传输、计算机视觉等 RTE 相干的一系列技术也正焕发出更强的生命力。2021 年,在深度学习、5G 等技术的加持下,RTE 会进一步催生哪些可能? 声网Agora 开发者社区联结 InfoQ 独特策动,邀请了声网Agora 开发者社区中的多位技术专家,从视频传输、计算机视觉、编解码规范倒退、WebRTC、机器学习、音频技术等角度,独特撰写「2021 实时互动技术瞻望系列」,一窥技术新趋势。本文源于对声网Agora 音频体验与工程总监陈若非的采访。本系列内容由声网 Agora 开发者社区 与 InfoQ 联结策动,并由 InfoQ 审校,首发于 InfoQ。 音频技术中有很多细节会影响到实时互动的体验。随着技术和利用场景的变动,音频也正在与更多的学科、技术联合。在实时互动场景下,哪些因素会影响音频的体验?相比于视频技术,音频技术是否倒退较慢?面向 RTC 场景,音频技术又须要作出哪些扭转?......为了解答这些问题,咱们采访了声网 Agora 音频体验与工程总监陈若非,请他来聊一聊在实时互动场景下音频技术的变迁与时机。 Q:绝对于钻研网络架构、大前端等方面的工程师来讲,钻研音频的工程师比拟少。具体来讲,音频工程师都会钻研哪些相干技术? 陈若非:声音是信息和情感传递的载体,所以音频相干的钻研根本会围绕如何让信息和情感更好的被传递和感知了解开展的。音频畛域绝对业余细分,然而咱们细挖一下就会发现音频相干的钻研方向其实很多,波及到的交叉学科也很广。从交互对象来说咱们能够分为两类:人机交互的音频和人人交互的音频。从交互的实时性来分,又能够分成实时的交互和非实时的交互。人机交互次要钻研如何让机器更好的了解声音和生成声音,通过 ASR、MIR、TTS 等技术来实现人类心愿机器实现的工作。人人交互的局部更多和人的感知零碎关联,其优化指标会围绕如何让人更好的感知音频来开展。实时的人人音频交互又在此基础上提出了更多的约束条件,优化须要用更低的延时、更小的计算量和因果零碎下开展。我所在的声网就次要聚焦于实时互动音频畛域的钻研,所以咱们会从采集播放、编解码、前后解决、传输的全链路去钻研如何在尽可能低的延时和计算量下提供更好的音频互动体验。 Q:聊技术变迁之前,首先梳理一下概念,在实时互动的场景下,哪些因素会影响音频的体验? 陈若非:实时互动音频是端到端,嘴到耳的体验,所以全链路上所有的组成部分都有可能影响音频体验。咱们能够从采、播、滤、压、传五个方面去合成技术对音频体验的影响。首先说采集,不同麦克风的声学属性差别就对音频体验有决定性的影响,从拾音的间隔,方向性到精度。被拾取的声音信号通过模数转换,信号采样也会造成声音的损失,采样率越高声音的细节就会保留的更好。所以一个高质量的麦克风会从源头上提供更好的音频源。相似的,一个高质量的播放设施能够更好的保留更多声音细节。而后前后解决是音频链路上十分重要的一环,大家常听到的 3A 技术都属于这个领域,前后解决对原始采集的信号或者行将要播放的信号做二次解决,来滤除其中的干扰信号,比方回声、乐音、杂音、啸叫等,同时对指标的音频做音量和听感上的加强。另外在一些音效玩法里,咱们也会通过对信号的解决实现变声、美声等特定声音成果。再说下编解码和传输,这两者是强耦合的。原理上编码的采样率和码率越高,声音的保真度就更好,听端的体验也更好。但事实中网络的带宽是有限度的,还会经常出现丢包抖动等不利状况。好的编解码算法能够通过对声学模型和信息冗余的深刻了解,在绝对低的码率下实现高品质的声音保留,从而保障在各种弱网状况下的稳固体现。同时咱们也须要通过开发信源信道的弱网反抗技术,在保障低延时的根底上,缩小丢包抖动带来的听感影响。 Q:行业中有种认识,认为音频技术绝对于视频技术,仿佛倒退会稍慢一些?你怎么对待目前音频技术的倒退? 陈若非:技术的提高都是需要推动的。电话时代的音频技术已经经验炽热的倒退,一些经典实践如线性预测、自适应滤波,很好的解决了一些根底可用的问题,很多技术到明天还在被沿用。近几十年 VoIP 的技术也失去了长足的倒退,咱们明天看到 VoIP 的分钟数能在通信畛域占据越来越大的份额,背地也离不开音频钻研人员长期的扎实工作和继续提高。音频须要较高的技术门槛,全链路的木桶效应显著,设施耦合重碎片化重大,改良主观不易被感知,这些因素都决定了音频想要出成绩须要坐的住冷板凳,须要长期主义的保持。 近些年 AI 技术的衰亡给音频注入了新的生机,也给很多长时间不好解决的问题提供了新的思路。人机语音交互成为了一个音频畛域新的热点,相干的技术也蓬勃发展,目前在辨认、合成等畛域都获得了长足的提高。而在最近的几年,也看到了不少 AI 技术和 RTC 畛域联合的实际成绩,让人看到了进一步晋升音频体验的微小空间。从外部环境来看,在看腻了千人一面的直播后,越来越多的人开始喜爱心理包袱更小,设想空间更大的音频社交,近期的行业里也开始呈现新的浪潮。置信在这种内外因的联合下,会有更多的人开始钻研实时互动音频的体验,也十分期待这个行业会给大家带来不一样的新体验。 Q:从理论来看,目前音频在实时畛域还存在哪些技术挑战? 陈若非:实时互动音频畛域还有很多技术挑战须要咱们的攻克。我这里提两个大点。第一,碎片化。传统的手机厂商是一台台调试算法和逐个通过声学测试出厂的。如果咱们要在不同设施、环境、网络条件下提供一致性的高质量音频体验,咱们就须要寻找新的冲破。在接下来万物互联的时代,这种需要会更加强烈,而这方面技术的冲破会带来微小的价值。第二,主观性。音频体验是一个十分主观的存在,每个人的感知差别和爱好也迥异。咱们须要找到更好的办法来匹配这种个性化的爱好和提供更好的量化评估体系。 Q:基于你对业界、学界的察看,你认为音频技术面向 RTC 场景,接下来须要作出哪些扭转?(如算法、技术的联合等) 陈若非:我认为实时互动音频的将来应该有上面三个局部。第一,AI 和信号处理的深度交融。经典的信号处理和声学模型曾经能帮咱们解决很多问题,当然也不少解决不好的问题。在 AI 的无效交融下,能够无效的补充传统算法的有余,在正当的代价下更好的解决咱们的问题,而非简略视 AI 为灵丹妙药包治百病。第二,合乎时代的评估规范。目前很多音频规范是给通信设计的,真正如聚一堂的互动体验须要对应的评估规范,如何更好的评估互动性,沉迷感是咱们须要去摸索的中央。第三,真正的沉迷感和随同感。人们开始不满足于单纯的信息交互,进一步的谋求面对面的互动体验和情感随同,而随着网络和设施条件的进一步成熟,这种将来也成为可能。音频全链路都须要降级,从声场的采集到还原,甚至加强事实,来发明出真正沉迷式随同的体验,这也会将会是一条漫长的摸索之路。咱们在声网始终致力于摸索这些长年存在的行业难题,也欢送各路有想法有谋求的敌人分割我,独特交换摸索,独特敲开将来音频之门。 本系列相干浏览 2021 技术瞻望 | 走向将来的实时生成技术 2021 技术瞻望 | 弱网下的极限实时视频通信 2021 技术瞻望 | 5G 将会倒逼传输协定、算法做出更多改良 ...

November 23, 2021 · 1 min · jiezi

关于音频:详解低延时高音质丢包抖动与-last-mile-优化那些事儿

本篇是「详解低延时高音质系列」的第三篇技术分享。咱们这次要将视角放大,从整个音频引擎链路的角度,来讲讲在时变的网络下,针对不同的利用场景,如何衡量音质和互动的实时性。 当咱们在探讨实时互动场景下的低延时、高音质的时候,咱们其实要面对的是从端到端整个音频引擎链路上的音质问题。咱们在第一篇文章中,简略的描述过一条音频传输的过程,如果在该根底上再进一步细化,音频引擎的整个链路蕴含以下各步骤: 1.采集设施对声学信号进行采样,造成计算机可操作的离散音频信号; 2.因为音频信号的短时相关性,将音频信号进行分帧解决,通过 3A 解决方案解决声学、环境乐音、回声、自动增益等问题; 3.编码器对音频信号进行实时压缩,造成音频码流; 4.依据 IP+UDP+RTP+Audio Payload 的格局组包后发送端将音频数据包发向网络,重组通过网络达到接收端的数据包; 5.通过抗抖缓存和解码器重建间断的音频流,播放设施将间断的音频流播放进去。 在以上不同的音频解决环节中,都会不可避免地对音频信号产生一些伤害。咱们将上述因采集、播放而对音频信号引入的伤害称为「设施伤害」,在环节 2 引入的伤害称为「信号处理伤害」,在编码与解码过程中引入的称为「编码伤害」,环节 4 中的称为「网络伤害」。 如果要为用户提供全频带的高质量音频互动体验,就须要在上述的音频引擎链路反对全频带的解决,并在一些约束条件下(比方来自设施、网络带宽、声学环境等),将各个环节引入的伤害尽可能升高到最小。 当音频数据进入网络,它会遇到……如果将网络视作信息的公路,那么音频数据包就像是一辆辆跑在公路上的车。这辆车从北京开到上海,路径的高速公路就是骨干网络,起伏山路就是弱网环境。假如每分钟都有一辆车从北京登程上路,那么他们会遇到三个实时传输中的常见问题:丢包、延时、抖动。 丢包 “丢包”指的是有的车无奈在无效工夫内无奈达到起点,甚至可能永远也到不了起点。有的车可能永远堵在北京的三环上了,有的车可能中途出了车祸。如果咱们的一百辆车里有五辆车因为各种起因没能按时达到上海,咱们这次车队传输的“丢包率”就是 5%。是的,互联网传输也一样,它并不是百分百牢靠的,总有数据无奈按时传输到目的地。 延时 “延时”指的是每辆车从北京鸟巢开到上海的均匀工夫。显然,车队走高速公路必定要比走各种小公路快很多,而且从鸟巢登程沿着怎么的路线开上高速公路也有很大影响,万一堵在了三环可就要多花好几个小时了。所以这个值和车队抉择的行驶路线无关。互联网传输也是一样的情理,须要传输数据的两点之间常常是有很多可选门路的,而这些门路的延时往往相差很大。 抖动 “抖动”指的是车子达到的程序、距离和登程时的差别。尽管咱们的一百辆车在北京是等距离的一分钟一辆登程的,然而它们达到上海时却并不是按程序一分钟一辆达到的,甚至可能有晚登程的车比早登程的车先到的状况。互联网传输也一样,如果简略地依照收到的音视频数据程序间接播放进去,就会呈现失真的景象。 总结来讲: 1.在网络上进行实时的音频交互,编码后的音频码流依据实时传输协定组装成数据包。其中数据包从发送端依照各自的路线通过网络返回接收端。 2.寰球范畴内,不同区域或者不同时间段,用户网络连接的服务质量有时十分差,且不牢靠。 基于上述起因,数据包往往不是按精确的程序达到接收端,而是在谬误的工夫以谬误的程序达到接收端,或数据包失落等,这就会呈现实时传输畛域通常提到的问题:网络抖动(jitter),丢包(packet loss),延时(latency)。 丢包、延时、抖动,是基于互联网进行实时传输不可避免的三个问题,不论是在局域网、繁多国家地区内传输,还是是跨国、跨地区传输,都会遇到。 这些网络问题,在不同区域的散布不同,以声网Agora 监控的网络实况来看,在网络绝对较好的中国地区,99% 的音频互动须要解决丢包、抖动和网络延时等。这些音频会话中,20%因为网络问题会有超过 3% 的丢包,10%的会话有超过 8%的丢包。而在印度的体现差别较大,80%的音频互动中,大概有 40% 的会话失落。在印度地区优化 2G/3G 网络下的服务质量,仍是提供音频服务的重点。 抖动、提早、带宽的限度也是很多的,这些网络问题导致音频品质急剧下降,更甚者,影响音频信号的可懂度,即不能满足替换信息量的实质通信需要。因而,不管对于应用 WebRTC 的自研团队,还是提供实时服务的 SDK 服务,尝试修复这个过程中对音频信号引入的伤害,都是必修的课题。 丢包管制为保障牢靠的实时互动,解决丢包是必须的。如果没有提供间断的音频数据,用户会听到卡顿(glitches、gaps),升高了通话质量和用户体验。 丢包问题能够形象为,如何在不牢靠传输的网络上,实现牢靠传输。通常应用前向纠错 FEC(Forward Error Correction)和 主动重传申请 ARQ(Automatic Repeat-reQuest)两个纠错算法,依据精确的信道状态预计制订相应策略来解决丢包问题。 FEC 是发送端通过信道编码和发送冗余信息,接收端检测丢包,且在不须要重传的前提下依据冗余信息复原失落的大部分数据包。即以更高的信道带宽作为复原丢包的开销。相比ARQ的丢包复原,FEC 体验上的延时更小,但因为发送了冗余的数据包,所以信道带宽耗费较多。 ARQ 应用确认信息 ack(acknowledgements signal,即接收端发回的确认信息表征已正确接管数据包)和 timeouts,即如果发送方在超时前没有收到确认信息 ack,则通过滑动窗口协定帮忙发送端决策是否重传数据包,直到发送方收到确认信息 ack 或直到超过事后定义的重传次数。相比 FEC 的丢包复原,ARQ 延时较大(因为要期待 ack 或一直重传),带宽利用率不高。 ...

November 16, 2021 · 1 min · jiezi

关于音频:Audio-Editor-在线H5音频编辑器-使用指南

Audio Editor | 在线H5音频编辑器基于一个开源我的项目:audio.js。 第一步:导入须要编辑的音频在浏览器中关上 https://hai2007.github.io/audio-editor/ 这个地址,即可看见上面的界面: 而后,点击按钮“点击我抉择须要编辑的音频文件”后弹出上面抉择框: 抉择你须要编辑的文件即可,抉择后按“关上”按钮即可实现文件导入: 第二步:确定宰割点文件导入胜利当前,能够看见,默认在结尾和结尾各有一个切割点。音乐时长1分12秒。 假如咱们心愿把30秒~50秒这段去掉怎么办: 在上面的新增切割点前的输入框改成:0:30.0后点击按钮后,就会失去一个在30秒地位的切割点,同样的新增50秒地位的,后果如下: 当然,如果心愿微调,也能够应用鼠标拖动那些切割点。 第三步:生成片段切割点筹备好了当前,间接点击生成片段按钮即可失去片段: 舒适提醒:如果切割点批改了,能够再次点击生成片段按钮进行更新片段列表。第四步:抉择须要的片段后生成最终后果片段有了当前,依据结尾的需要,咱们心愿去掉第二段,因而,片段列表勾选改为上面的状况: 而后,点击底部的下载按钮,浏览器就会把最终的后果下载到本地: 结尾在应用中,如果遇到任何问题,都能够给咱们留言,留言请到: https://github.com/hai2007/audio-editor/issues

October 30, 2021 · 1 min · jiezi

关于音频:vue中使用aplayer插件做一个网页音乐播放器

咱们在浏览网页的时候,时常会看到一些网页音乐播放器,本文以vue为例,应用aplayer插件,做一个简略的网页播放器。咱们先看一下效果图效果图失常模式 吸底模式 当然还有迷你模式,就是能暗藏的都暗藏,这里不赘述,做相应配置就会呈现对应成果。留神,吸底模式会呈现上一曲下一曲按钮,以及歌词按钮。失常模式是没这个的。不过我集体更加喜爱失常模式。 应用步骤第一步,npm下载aplayer插件:cnpm install aplayer --save 第二步,搭配下载hls.js:cnpm i hls.js --save 第三步,在须要应用的页面引入插件,也要引入插件的款式** 代码如下间接复制粘贴即可看到成果: <template> <div id="app"> <h2>aplayer播放器</h2> <br /> <!-- 筹备一个容器用来寄存音乐播放器 --> <div id="aplayer"></div> </div></template><script>import APlayer from "APlayer"; // 引入音乐插件import "APlayer/dist/APlayer.min.css"; // 引入音乐插件的款式export default { name: "App", data() { return { audio: [ // 歌曲列表 { name: "Windy Hill", // 歌曲名字 artist: "钢琴-羽肿", // 歌曲演唱者 url: // 歌曲地址(这里用外链地址) "https://sharefs.ali.kugou.com/202110281324/e793a5ebf43ef95bb75f64d07ef246e4/G167/M02/15/07/h5QEAF1KXo2ALzKrAEtAl_Oe_Fo659.mp3", cover: "http://imge.kugou.com/stdmusic/150/20170815/20170815070007812976.jpg", // 歌曲头像 lrc: "", // 歌词 theme: "rgb(127, 218, 180)", // 播放这首歌曲时的主题色 }, { name: "女儿情", artist: "古筝-付娜", url: "https://sharefs.ali.kugou.com/202110281338/150a7c708ed5e20a47e8a9b80cf1200a/G235/M00/0F/05/i4cBAF77vP2AFdNjAChBofqgQnw363.mp3", cover: "http://imge.kugou.com/stdmusic/150/20200606/20200606220631519630.jpg", lrc: "", theme: "rgb(61, 162, 230)", }, { name: "故郷の原風景", artist: "陶笛-犹豫的泥巴", url: "https://sharefs.ali.kugou.com/202110281310/bdb53444846cecd8d45a64e2aab3b6ca/G228/M0A/1B/13/xJQEAF9kx46AZ3IaAEjEvnEtWQw706.mp3", cover: "http://imge.kugou.com/stdmusic/150/20200812/20200812134914113741.jpg", lrc: "", theme: "#baf", }, ], info: { fixed: false, // 不开启吸底模式 listFolded: true, // 折叠歌曲列表 autoplay: true, // 开启自动播放 preload: "auto", // 主动预加载歌曲 loop: "all", // 播放循环模式、all全副循环 one单曲循环 none只播放一次 order: "list", // 播放模式,list列表播放, random随机播放 }, }; }, mounted() { // 初始化播放器 this.initAudio(); }, methods: { initAudio() { // 创立一个音乐播放器实例,并挂载到DOM上,同时进行相干配置 const ap = new APlayer({ container: document.getElementById("aplayer"), audio: this.audio, // 音乐信息 ...this.info, // 其余配置信息 }); }, },};</script><style lang="less" scoped>#app { width: 100%; height: 100%; padding: 50px; #aplayer { width: 480px; // 定个宽度 }}</style>本例中只举例了罕用的配置项,残缺配置项,还是要看官网文档哦aplayer官网文档地址https://aplayer.js.org/#/zh-H...补充vue-aplayer另外再补充一个也还能够的,性能和这个aplayer插件相似的音频播放插件,不过集体感觉aplayer插件更加好用。 ...

October 28, 2021 · 1 min · jiezi

关于音频:浅谈音视频开发

音视频开发利用方向1.流媒体网络通讯开发 流媒体网络通讯开发岗位 占70%~ 80%,待业,集中在芯片,安防,数字电视,广告,行车记录仪,车载零碎,智能家居,楼宇对讲,视频会议....大部分从业者吃饭靠这个畛域。须要把握的是unix操作系统,网络socket通信, 音视频根底,264/265根底,编解码,FFmpeg,常见的网络通讯协定TCP/UDP/RTMP/RTSP/RTP/HLS,当然还有WebRTC. 为什么大部分待业岗位都在这个畛域,因为这个畛域百花齐放,大量的硬件公司,各行各业,光一个跟摄像头相干的安防产业年产值就是几万亿,只有有摄像头的中央,就须要软件开发者,而且薪水还不错,入门者大部分年薪30W+。年薪50W,百万级的程序员也有,次要钻研音视频流媒体畛域的利用。 2.数字图像处理 音视频图像处理岗位,占大概20%+。次要集中在视频剪辑,特效,医疗,教育领域. 最近几年新兴的VR/AR畛域。须要把握的次要是音视频开发根底,FFmpeg, 重点是OpenGL/ES,会大量应用OpenGL/ES去写一些轻量级的渲染引擎。你能够把它看作一个精简版的游戏渲染引擎。这个畛域有些非凡,容易跟互联网联合,一些软件容易造成垄断,比方视频剪辑畛域,就那么三四个玩家。垄断了80%以上的份额。Finalcut pro , premire, Davinci.. 造成垄断的行业,绝大多数利润会向头部集中,也就不须要那么多待业,细分畛域不多。 当然,这个畛域也有本人的一些劣势,比方比流媒体容易学习一些。将来十年前景也十分好。 3.AI 其实AI原本应该倒退很迅猛的,但受限于MYZ,疫情,芯片重大缺货。终端,边缘计算畛域,这几年还没倒退起来。这个畛域须要局部音视频根底 opencv,tensorflow,机器学习,深度学习...视频文件/封装格局 咱们播放的视频文件个别都是用一种封装格局封装起来的,封装格局的作用是什么呢?个别视频文件里不光有视频,还有音频,封装格局的作用就是把视频和音频打包起来。 所以咱们先要解封装格局,看有哪些视频流和哪些音频流,此时的音频流和视频流都还是压缩数据,不能间接用于显示的,这就须要解码。上面是播放一个视频文件时的流程图。 一、视频文件封装格局封装格局(也叫容器),就是将曾经编码压缩好的视频轨和音频轨依照肯定的格局放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也能够。说得艰深点,视频轨相当于饭,而音频轨相当于菜,封装格局就是一个碗,或者一个锅,用来盛放饭菜的容器。 上面是几种罕用的 视频文件后缀类型 与其绝对应的 封装格局。 视频文件格式视频封装格局.aviAVI(Audio Video Interleaved).wmv、.asfWMV(Windows Media Video).mpg、.mpeg、.vob、.dat、.3gp、.mp4MPEG(Moving Picture Experts Group).mkvMatroska.rm、.rmvbReal Video.movQuickTime File Format.flvFlash Video二、 音视频编码方式简介1、视频编码方式视频编码的作用: 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而升高视频的数据量。名称推出机构推出工夫目前应用畛域HEVC(H.265)MPEG/ITU-T2013研发中H.264MPEG/ITU-T2003各个领域MPEG4MPEG2001不温不火MPEG2MPEG1994数字电视VP9Google2013研发中VP8Google2008不遍及VC-1Microsoft Inc.2006微软平台三、 音频编码方式音频编码的作用: 将音频采样数据(PCM 等)压缩成音频码流,从而升高音频的数据量。 罕用的音频编码方式有以下几种: 名称推出机构推出工夫目前应用畛域AACMPEG1997各个领域(新)MP3MPEG1993各个领域(旧)WMVMicrosoft Inc.1999微软平台AC-3Dolby Inc.1992电影1 MP3MP3,英文全称 MPEG-1 or MPEG-2 Audio Layer III,是已经十分风行的一种数字音频编码和有损压缩格局,它被设计来大幅升高音频数据量。它是在 1991 年,由位于德国埃尔朗根的钻研组织 Fraunhofer-Gesellschaft 的一组工程师创造和标准化的。MP3 的遍及,曾对音乐产业造成极大的冲击与影响。 2 AACAAC,英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发,在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 规范呈现后,AAC 从新集成了其个性,退出了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。 AAC 比 MP3 有更高的压缩比,同样大小的音频文件,AAC 的音质更高。 ...

October 14, 2021 · 2 min · jiezi

关于音频:Wwise的内存问题

1)Wwise的内存问题2)对于Planar Shadow的疑难3)PPS的LDR纹理冗余4)游戏第一次冷启动耗时长5)Lua解析指令的虚构机会占用内存吗 这是第268篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AudioQ:对于Wwise的内存问题:1. Wwise加载一个bank,内存增长次要在哪?在profiler上次要体现在哪个参数?2. 加载bank之后,开始播放event,那么这个event声音是否有缓存?播放是否卡顿? A:这个问题取决于你所应用的版本,以及你为资源设定的读取形式,还有你为资源采取的编解码。 版本方面自2019.2开始Wwise采取了动态内存治理,profiler显示的是不同用处的内存占用数据,而在这个大版本之前是须要设置固定大小的初始内存池的。 优化内存调配:https://www.audiokinetic.com/... 优化内存池:https://www.audiokinetic.com/... 你能够比拟一下2019.1之后和2019.1的内存治理文档。 你的资源采取读入内存的形式读取,就会进入内存,如果是stream流读取那就会占用io,这些都能够在Wwise的profiler里看,并不是给你暗藏起来了。 https://www.audiokinetic.com/... 卡顿取决于你是从内存读取还是流播放,两者可能都会受编解码的影响。通常如果是触发频率高、谋求疾速响应能够用PCM或者ADPCM来播放,而后Vorbis可能会因为CPU解决工夫产生提早。如果是流播放,则能够通过启用Zero Latency个性,减少prefetch来升高提早,但这个办法次要是用来解决播放长文件时的提早。太短的文件如果prefetch太长可能还导致其余报错,短的就通过编解码和采样率来做空间工夫均衡就能够了,音质别太差就行。 感激Icarus@UWA问答社区提供了答复 AddressableQ:目前模型用到了Planar Shadow立体暗影,然而因为咱们的模型是要投放到UI上,须要把暗影一起拍下来。但又不能把接管暗影的地板拍下来,求教如何让接管立体暗影的plane只显示暗影,其余中央为通明呢 ?(相干Shader文件可戳原问答查看。) A1:你并没有了解Planar Shadow的原理,它的暗影实质就是一个Mesh,不须要接管物体,间接删掉地板即可。 如果你的我的项目没显示进去暗影,那应该是其余方面的起因,跟地板无关。 感激Jee@UWA问答社区提供了答复 A2:Shader中的_WorldPos示意模型的世界坐标、WorldPos示意ShadowPos吗?如果是这样,这里写的仿佛有些问题。 能够参考下这个URP Planar Shadow: https://zhuanlan.zhihu.com/p/... Planar Shadow的实现个别就是在另一个Pass把顶点投到一个“立体”再画一遍,所以应该不会呈现题主所形容的问题。 感激羽飞@UWA问答社区提供了答复 ResourcesQ:开了PPS之后纹理呈现了冗余?LDR之类的资源,这些应该是PPS本人的资源。咱们把PPS的资源都打到了一个包里,但还是有冗余。 A:以下是APK解压后的资源。 通常是因为被场景(此场景没有打包AssetBundle)援用和从AssetBundle加载导致的。上图中的LDR结尾的纹理是用来做随机用的noise图。在URP中,通常是被RenderPipelineAsset中援用的PostProcessData援用导致的。 当GraphicsSettings中设置了RenderPipelineAsset,那么打包APK的时候,这个PostProcessData.asset是最终被打包进globalmanagers.assets中,没有打包进AssetBundle中的场景如果也援用了RenderPipelineAsset,最终援用的是globalmanagers.assets的RenderPipelineAsset实例,这样是不会冗余的。 然而如果在AssetBundle中也有打包RenderPipelineAsset,比方通过AssetBundle来动静更改RenderPipelineAsset,那么就会产生多份LDR_LLL这样的纹理了。 感激Xuan@UWA问答社区提供了答复 LoadingQ:游戏第一次冷启动的耗时比拟长,想剖析一下具体的耗费在哪里?然而UWA的测试报告的数据是从进入游戏后开始的,不晓得怎么才能够进行测试。 A1:大抵归为3点: Resource文件夹下的文件建设索引,能够想方法改用AssetBundle;预Shader解析,这个为了之后的流程性倡议还是先预加载了,当然也能够用一些其余操作陆陆续续加载;加载的第一个scene比拟大,能够思考搞个空的scene先加载上来,异步加载真正的第一个scene。感激萧小俊@UWA问答社区提供了答复 A2:能够看一下这个问答里的思路:https://answer.uwa4d.com/ques...感激OCEAN@UWA问答社区提供了答复 MemoryQ:Lua解析指令的虚构机会不会占用一部分内存? A:几K还是有的,但应该很小的,次要还是对象占用的。虚拟机占用的内存次要是堆栈的空间,虚拟机还是得解释代码,执行API之类的,还是要点空间的,但应该是很少的。感激OCEAN@UWA问答社区提供了答复 20210918更多精彩问题等你答复~ Vulkan API的性能及兼容性Unity TMP字体计划如何抉择如何实现AAB包的增量更新封面图来源于:URP Iridescence ExampleURP中的虹彩着色器示例。 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:793972859(原群已满员)

September 29, 2021 · 1 min · jiezi

关于音频:音频技术及行业的发展

音频技术的重要性: 在当今社会,工业科技反动的迅速崛起,大数据分析技术、物联网技术、音频技术等的互相交融疾速倒退,在生物、化学、人工智能等畛域有了较大的市场和钻研价值。对于音频技术在这之中起到了承前启后、不可或缺的一部分。对于音频技术在这之中起到了承前启后、不可或缺的一部分。尽管音频技术不是当下最热门、最支流的前沿技术,但在其前沿相干技术的应用,甚至是生存的方方面面都有音频技术的体现。 一、音频技术的探讨:1.感觉音频技术没有“大数据”、“云计算”、“物联网”技术火? 其实对于咱们来说,就相当于咱们平时的考试,如果能考到及格线或者到 70-80 分是绝对容易的一件事,然而想要变得更加优良,失去 90 分以上甚至说满分的状况,难度还是十分大的。所谓对于咱们人来说金无足赤,人无完人,实际上对于社会生存中的每件事,咱们能够绝对做的很好但不可能每件事都做到十分完满。对于音频技术的倒退来说,而对于音频视频技术的来说,最早能够追溯到 1877 年世界上第一台留声机的呈现,其实在那个时候就曾经开始了音频技术的倒退。 任何事物的倒退都不会出现指数倒退,事物的倒退都合乎否定之否定这一法则:事物变动倒退的方向和路线是由必定到否定再到否定之否定的周而复始的后退过程。从模式上看,事物变动倒退是波浪式后退、螺旋式回升的一个过程。随着工业科技的一次次反动,音频技术逐步倒退,变得日益成熟。当下正值人工智能、大数据、云计算和物联网的迅速交互交融倒退,音频技术在其中不可或缺,然而其中音频中很多新的技术很难在钻研进去,甚至有妨碍更好的技术取代,当然也就没有当下前沿技术倒退的这么”热“。 2.生存和学习中哪些方面咱们接触到了音频技术? 在咱们的生存和学习中,音频技术的体现随处可见。生存从来不不足声音,有声音的世界才是多姿多彩的。从几十年前收音机、电视机、“大头”电脑的呈现,随后而来的 MP3、MP4、黑白电视机、智能手机的呈现,到当初的聊天工具、播放工具、车机系统、甚至是航空航天等等都有音频技术的参加。音频技术在理论利用中次要利用于电子产品中,为了时声音听起来更加平面,音频技术从 2D 时代进入了 3D 的音频阶段。晚期的电话线只能进行电话通信,而且会受到电话线和电话声音品质的束缚。目前的通话早已不是电话线的通话模式,不仅能够进行挪动通话,还能够进行多人线上的通话和视频。这足以体现音频技术在当今世界的倒退和历史性改革。 我国的开国大典中,始终保留的黑白影视资料,始终都没有进行黑白视频的修复。随着近几年音频技术的倒退,这个缄默多年,使那个已经黯然失色的影视资料以簇新的一面从新回归到公众背后。这不仅只是修复了一部影视资料,而是体现了我国音频技术的晋升,科技实力的和综合国力失去了很大的进步。在这个历史的大改革中,音频技术在这其中经验了一次次的改革,正因为有了音频技术,咱们能够把历史长河中把一些美妙的货色保留了下来。 二、音频行业的发展趋势:1.音频品质方面倒退 随着娱乐产业的倒退,其娱乐产业链条下的音频内容有着十分广范畴的用户,其使其用户的基数十分之大。中国移动音频市场次要是由挪动电台、有声浏览和音频直播形成,新的渠道正在一直的拓宽,所领有的市场、用户的构造等都在一直壮大。通过政府和网络平台的单干和开放平台自身具备弱小的吸引力和调能源,为主播或是直播提供了便当的渠道和更加凋谢的平台。随着高报酬、高用户量的晋升,这也为音频社区的用户提供了肯定的福利和低落的激情,吸引了更多潜在的用户。 晚期倒退起来的网络音频设备早已不能满足当今用户的需要和满意度。随着科技反动的逐步更新,网络音频的应用设施逐步变得多元化,使真个行业疾速地进入全场景时代。设施的多元化,不仅仅是设施的数量上的晋升,更是音频自身品质上的进步。给用户带来的不仅仅是便捷性的作用,跟重要的是给用户带来了身心上的享受。这也是为什么我国音频用户的使用量逐步攀升的其中一个重要的起因。以后音频的格局次要有 CD 格局、WAV、MP3、MID、WMA,不同行业畛域对与音频的格局要求也不尽相同。随着音频行业的一直倒退,不同层面和畛域的人群、满足用户的各种需要和用户量的激增,这也为音频技术的带来了很多的问题,随时筹备迎接更高的挑战。 2.音频应用会员制 通过音频自身所具备的劣势,社会方方面都会与它来进行关联。各大音频技术的平台和公司进行单干切磋:喜马大学特训营、万人十亿新声打算、有声浏览、《声音画像》各类等一系列的流动或者 APP 进行线上线下的联动,进行品牌的推广,更重要的是保留、减少用户的基数,晋升用户的收听体验以及应用体验。 各类的音频相干的平台推广会员制,晋升用户的体验感触和应用的权利,给与更多的福利到会员手中。QQ 音乐采纳开明绿钻、付费音乐听书会员的权限,进行会员制的要求,将会员价值与硬件相结合,打造闭环式会员增值服务,让会员有不同的听觉享受。 三、音频的将来倒退:将来音频技术的倒退在各个领域的关系越来越严密, 5G 网络和人工智能技术为音频实现全场景笼罩提供了“万物互联”的网络反对和“语音交互”的技术支持。5G 网络传输能力大幅度晋升,超高速、大容量、低时延、大流量密度、移动性更强的 5G 网络将使信息流传不再受工夫和空间的场景限度。声音渠道不仅传递信号,同时也传递了所有随之而来的了解、沉思、同情或宽容。声音中潜藏了能唤起感觉的信息,能够将音频技术带入更为广

August 13, 2021 · 1 min · jiezi

关于音频:你真的懂语音特征吗

摘要:本文指在具体介绍语音转化声学特色的过程,并具体介绍不同声学特色在不同模型中的利用。本文分享自华为云社区《你真的懂语音特色背地的原理吗?》,作者: 白马过平川 。 语音数据常被用于人工智能工作,但语音数据往往不能像图像工作那样间接输出到模型中训练,其在长时域上没有显著的特色变动,很难学习到语音数据的特色,加之语音的时域数据通常由16K采样率形成,即1秒16000个采样点,间接输出时域采样点训练数据量大且很难有训练出实际效果。因而语音工作通常是将语音数据转化为声学特色作为模型的输出或者输入。因而本文指在具体介绍语音转化声学特色的过程,并具体介绍不同声学特色在不同模型中的利用。 首先搞清语音是怎么产生的对于咱们了解语音有很大帮忙。人通过声道产生声音,声道的形态决定了收回怎么的声音。声道的形态包含舌头,牙齿等。如果能够精确的晓得这个形态,那么咱们就能够对产生的音素进行精确的形容。声道的形态通常由语音短时功率谱的包络中显示进去。那如何失去功率谱,或者在功率谱的根底上失去频谱包络,便是能够或得语音的特色。 一、时域图 图1:音频的时域图 时域图中,语音信号间接用它的工夫波形示意进去,上图1是用Adobe Audition关上的音频的时域图,示意这段语音波形时量化精度是16bit,从图中能够失去各个音的起始地位,但很难看出更加有用的信息。但如果咱们将其放大到100ms的场景下,能够失去下图2所示的图像。 图2:音频的短时时域图 从上图咱们能够看出在短时的的工夫维度上,语音时域波形是存在肯定的周期的,不同的发音往往对应着不同的周期的变动,因而在短时域上咱们能够将波形通过傅里叶变换转化为频域图,察看音频的周期个性,从而获取有用的音频特色。 短时傅里叶变换(STFT)是最经典的时频域分析方法。所谓短时傅里叶变换,顾名思义,是对短时的信号做傅里叶变动。因为语音波形只有在短时域上才出现肯定周期性,因而应用的短时傅里叶变换能够更为精确的察看语音在频域上的变动。傅里叶变动实现的示意图如下: 图3:傅里叶变换的从时域转化为频域的示意图 上图显示的了如何通过傅里叶变动将时域波形转化为频域谱图的过程,但在因为自身傅里叶变动的算法复杂度为O(N^2),难以利用,在计算机中利用中更多的是应用疾速傅里叶变换(FFT)。其中转化的推理证实参考知乎 二、获取音频特色由上述一能够晓得获取音频的频域特色的具体方法原理,那如何操作将原始音频转化为模型训练的音频特色,其中任然须要很多辅助操作。具体流程如下图4所示: 图4:音频转化为音频特色的流程图 (1)预减轻预减轻解决其实是将语音信号通过一个高通滤波器: 其中\mu ,咱们通常取为0.97。预减轻的目标是晋升高频局部,使信号的频谱变得平坦,放弃在低频到高频的整个频带中,能用同样的信噪比求频谱。同时,也是为了打消产生过程中声带和嘴唇的效应,来弥补语音信号受到发音零碎所克制的高频局部,也为了突出高频的共振峰。 pre_emphasis = 0.97emphasized_signal = np.append(original_signal[0], original_signal[1:] - pre_emphasis * original_signal[:-1])(2)分帧因为傅里叶变换要求输出信号是安稳的,不安稳的信号做傅里叶变换是没有什么意义的。由上述咱们能够晓得语音在长时间上是不稳固的,在短时上稳固是有肯定的周期性的,即语音在宏观上来看是不安稳的,你的嘴巴一动,信号的特色就变了。然而从宏观上来看,在比拟短的工夫内,嘴巴动得是没有那么快的,语音信号就能够看成安稳的,就能够截取进去做傅里叶变换了,因而要进行分帧的操作,即截取短时的语音片段。 那么一帧有多长呢?帧长要满足两个条件: 从宏观上看,它必须足够短来保障帧内信号是安稳的。后面说过,口型的变动是导致信号不安稳的起因,所以在一帧的期间内口型不能有显著变动,即一帧的长度该当小于一个音素的长度。失常语速下,音素的持续时间大概是 50~200 毫秒,所以帧长个别取为小于 50 毫秒。从宏观上来看,它又必须包含足够多的振动周期,因为傅里叶变换是要剖析频率的,只有反复足够屡次能力剖析频率。语音的基频,男声在 100 赫兹左右,女声在 200 赫兹左右,换算成周期就是 10 ms和 5 ms。既然一帧要蕴含多个周期,所以个别取至多 20 毫秒。留神: 分帧的截取并不是严格的分片段,而是有一个帧移的概念,即确定好帧窗口的大小,每次依照帧移大小挪动,截取短时音频片段,通常帧移的大小为5-10ms,窗口的大小通常为帧移的2-3倍即20-30ms。之所以设置帧移的形式次要是为了后续加窗的操作。具体分帧的流程如下所示: 图5:音频分帧示意图 (3)加窗取出来的一帧信号,在做傅里叶变换之前,要先进行「加窗」的操作,即与一个「窗函数」相乘,如下图所示: 图5:音频加窗示意图 加窗的目标是让一帧信号的幅度在两端突变到 0。突变对傅里叶变换有益处,能够让频谱上的各个峰更细,不容易糊在一起(术语叫做加重频谱透露),加窗的代价是一帧信号两端的局部被减弱了,没有像地方的局部那样失去器重。补救的方法是,帧不要背靠背地截取,而是互相重叠一部分。相邻两帧的起始地位的时间差叫做帧移。 通常咱们应用汉明窗进行加窗,将分帧后的每一帧乘以汉明窗,以减少帧左端和右端的连续性。假如分帧后的信号为 S(n), n=0,1,…,N-1, NS(n),n=0,1,…,N−1,N 为帧的大小,那么乘上汉明窗后: 实现的代码: # 简略的汉明窗构建N = 200x = np.arange(N)y = 0.54 * np.ones(N) - 0.46 * np.cos(2*np.pi*x/(N-1))# 加汉明窗frames *= np.hamming(frame_length)(4)疾速傅里叶变换FFT因为信号在时域上的变换通常很难看出信号的个性,所以通常将它转换为频域上的能量散布来察看,不同的能量散布,就能代表不同语音的个性。在乘上汉明窗后,每帧还必须再通过疾速傅里叶变换以失去在频谱上的能量散布。对分帧加窗后的各帧信号进行疾速傅里叶变换失去各帧的频谱。疾速傅里叶变换的实现原理曾经在后面介绍过,这里不过多介绍。具体的推理和实现推介参考知乎FFT(https://zhuanlan.zhihu.com/p/... ...

August 9, 2021 · 2 min · jiezi

关于音频:声音引擎Wwise与Criware的区别

1)声音引擎Wwise与Criware的区别2)Unity加载场景闪退问题3)Animation Transition计划4)高通GPU Adreno650手机的纹理显示异样问题5)Live2D平滑突变计划 这是第253篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AudioQ:当初有两个声音引擎可供选择,Wwise与Criware,请问在平时的开发、热更、效率、解耦上比照,有更举荐的应用的吗?还是说声音组善于哪个就用哪个? A1:其实音频中间件工具的选项十分多,并不只有这两个,比方《Apex Legends》应用了Rad Miles,《风之旅人和光遇》应用了FMOD,《半条命Alyx》则基本没有应用中间件,用的是自家引擎的音频模块。 Criware的历史绝对比拟长,跟驰名游戏开发商世嘉有比拟深的渊源,甚至能够说是已经蕴含谢世嘉的官网音视频开发工具集当中,鉴于世嘉的影响力,Criware至今在日本外乡仍然有着比拟大的用户基数。 Wwise绝对历史短一些,乏味的是其开发公司Audiokinetic于2019年成为了SIE(索尼互动娱乐)的子公司。采纳Wwise的我的项目实际上十分多,而且每年在TGA获奖我的项目中都能找到约为半数的我的项目采纳Wwise开发,只不过,他们不太强制客户给本人打Logo,造成存在感不是十分高。 轻易列举几个应用了Wwise的例子(排名不分先后):《死亡搁浅》、《生化危机123重制》、《生化危机8》、《怪物猎人Rise》、《对马岛之魂》、《战神》、《崩坏3》、《原神》、《王者光荣》、《CODM》、《疑案追声》、《彩虹坠入》、《纪念碑谷2》、《Gris》、《Quantum Break》、《Control》、《巫师3》和《赛博朋克2077》等。 应该说,无论从开发的角度还是从音频组的角度,其实应用Wwise都是更好的抉择。 开发行业当先的空间音频工具集,最先反对狭义Object Based音频管线的音频工具:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=spatial_audio.htmlhttps://www.audiokinetic.com/zh/products/plug-ins/reflect/ 行业当先的汽车引擎声音设计插件:https://www.audiokinetic.com/zh/products/plug-ins/crankcase-rev/ 弱小的创作工具,简直可实现音频设计师所有的疯狂构想,数量泛滥的胜利用户案例及技术分享(如Wwise Tour,GDC):https://www.bilibili.com/video/BV1RE411K7nT 官网Q&A及Launcher的Bug reporter,为官网反对的收费问题反馈提交渠道。技术支持与创意技术服务,满足我的项目的定制化需要。官网保护的Unity/Unreal集成,通过Launcher就可将Wwise SDK集成至您的我的项目当中,开箱即用。 全平台反对,丰盛的音频编解码选项,内容丰盛的SDK文档及清晰易学的Help文档及认证教程文档,用户可依据须要调节初始化设置取得更低的音频提早。 热更领有File Packager工具集用于创立PCK治理通过热更公布的内容。Wwise 2021.1版本已反对Unity Addressables。 效率对设计师而言,具备WAQL(Wwise创作工具查询语言),可在我的项目规模达到肯定水平时不便设计师疾速查问须要配置的资源或定位造成问题的资源:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waql_introduction.html 弱小灵便的声部限度性能与Profiling工具集,不便性能优化与问题排查,从而升高工程师累赘,具备丰盛的批量解决性能。 对于工程师而言,Wwise具备WAAPI(Wwise创作工具API),可用于创立开发工具,不便设计师疾速解决巨量的数据配置,还能够帮忙他们对资源进行批量打包以配合我的项目开发须要:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi.html Wwise领有动态内存治理,无需事后申请固定大小的内存池,做到用多少占多少。内存分类零碎能够不便用户疾速定位与内存耗费相干的问题。 解耦Wwise API简略易用,事件后行为可由设计师在创作工具端进行设计,工程师无需为此操心,通常状况下,须要帮设计师调用的接口无非是: PostEventSetStateSetSwitchSetRTPCValueLoad/Unload bank更具体文档参见:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=workingwithsdks_integratingelements.html Wwise提供给了声音设计师极大的创作空间,许多对于空间音频设计的设置都放在了创作工具端,而无需程序染指进行调试,只须要像解决个别的发声体一样解决就好。 设计师也可能通过Profiling工具对性能损耗有清晰的意识,提前定位可能造成性能问题的设计从而采取重构解决。 感激Icarus@UWA问答社区提供了答复 A2:楼上解答从技术层面的确十分好,我简略说下我的认识。 不管界面是否难看,不难看前期还能改。用任何技术,你都要思考他的市场,当初Wwise的占有率必然是高的,就比方当初的音频工程师,会Wwise和会Criware哪个更容易被录取。 程序也一样,只接过Wwise和只接过Criware哪个更吃香。通过这个剖析,你就晓得你应该用什么软件了。 感激夏霖锐@UWA问答社区提供了答复 CrashQ:最近我的项目遇到一个很诡异的问题,从一个场景切换到另外一个场景的时候,在安卓64位真机会闪退,通过符号表查出来最终闪退在Unity的il2cpp/vm/liveness.cpp文件中。 在Unity,PC版本均无闪退景象。 引擎版本:Unity 2018.4.10打包机:MacOS 为了查出闪退起因,做了以下测试:1.应用Mono打包,无闪退;2.删除V8类库,齐全应用V7类库,无闪退;3.应用V8库,切换到一个空的场景,闪退。 第3点中无论应用Application.LoadLevel,Applicaiton.LoadLevelAync,SceneManager.LoadScene还是SceneManager.LoadSceneAync都会闪退,这个问题当初曾经没什么脉络了,不晓得有没有大佬遇到过这个问题呢? 闪退日志:il2cpp::vm::LivenessState::AddProcessObject(Il2CppObject, il2cpp::vm::LivenessState) 很可怜,降级完Unity当前,解体仍旧没有解决:参考网址:https://forum.unity.com/threads/il2cpp-crashes-at-garbagecollectsharedassets-and-loadlevel.316775/page-2 A:发现要降级到Unity 2018.4.35版本,在这个版本中修复了这个Bug:感激题主Lim@UWA问答社区提供了答复 AnimationQ:求教一个Animation Transition的问题。目前对于一个State A,所有从A进来的过渡线是能够进行优先级排序的。那有没有方法对进入A的所有过渡线也进行优先级排序呢? 比方对A来说,有AnyState -> A 和B -> A两条线,而且它们的条件一样。那么当条件成立时,有什么方法指定应用上述某一条线呢? 目前官网文档没有找到对应的办法,论坛里有人说能够在进入B的时候设置一个状态来Disable AnyState,而后来到B的时候再设置回来。不晓得有没有更好的办法。谢谢! A1:“对进入A的所有过渡线也进行优先级排序”这个形容有点问题。依据状态机的定义,不存在以后处于两个State,都要进入State A的状况。 ...

June 9, 2021 · 1 min · jiezi

关于语言检测:INTERSPEECH2020-语音情感分析论文之我见

摘要:本文为大家带来InterSpeech2020 语音情感剖析25篇论文中的其中8篇的总结。本文分享自华为云社区《INTERSPEECH2020 语音情感剖析论文总结一》,原文作者:Tython。 1. Learning Utterance-level Representations with Label Smoothing for Speech Emotion Recognition(INTERSPEECH2020)(1)数据处理:IEMOCAP四分类,leave-one-speaker-out,unweighted accuracy。openSMILE对短时帧提取147维LLDs特色。 (2)模型办法:采纳LSTM对一句话的多个segment的特色序列建模,输入的特色序列通过NetVLAD进行聚类压缩,由原来的ND的维度降为KD,再对降维后的特色进行softmax分类。在类别标签上,作者采纳标签平滑(label smoothing)策略,即在训练过程中,退出非匹配的(X,y)数据对,也叫作label-dropout(dropping the real labels and replace them with others),并调配一个权值小的标签。以此晋升模型的适应性,缩小过拟合。 (3)NetVLAD源自图像特征提取办法的一种VLAD,通过对图像的特征向量聚类,得聚类核心并做残差,将一个若干部分特色压缩为特定大小全局特色的办法。具体可参考https://zhuanlan.zhihu.com/p/... (4)试验:NetVLAD可看作一种pooling办法,最初WA达62.6%,高出weighted-pooling2.3个百分点。label smoothing前后的成果别离是59.6%和62%,相差两个百分点。 (5)总结:最大的奉献在于对每个frame的特色进行NetVLAD做相似池化操作,筛选有用特色;另外在训练形式上也引入label smoothing操作,晋升成果两个点。 2. Removing Bias with Residual Mixture of Multi-View Attention for Speech Emotion Recognition(INTERSPEECH2020)(1)数据处理:IEMOCAP数据四分类,Session1-4训练,Session5测试。特征提取23维的log-Mel filterbank。 (2)模型办法:一个Utterance分成N帧,顺次输出BLSTM(Hidden layer 512 nodes),失去N*1024大小的矩阵,输出第一个Attention layer 1。将该layer的输入合上原始的矩阵一起别离输出三个Attention_i_Layer_2,该三个attention层分别独立并受超参数gama管制。而后将三个输入求和,并输出一个全连贯层(1024 nodes),最初softmax层做分类。 (3)试验:采纳WA,UA作为评估指标,然而文章定义UA谬误,UA的定义理论为WA。而WA的定义也存疑。试验成果UA达80.5%,实为segment-level的Accuracy。并没有通用的句子级的Accuracy,也是评估的一个trick。 (4)总结:论文的翻新次要对通过BLSTM的特色进行多个Attention操作,作为MOMA模块,获得显著的成果晋升。然而该晋升只体现在segment-level的准确率,参考意义不大。 3. Adaptive Domain-Aware Representation Learning for Speech Emotion Recognition(1)数据处理:IEMOCAP数据四分类,leave-one-speaker-out。STFT汉明窗提取频谱特色,窗长别离为20ms, 40ms,窗移10ms。 (2)模型办法:输出同一频谱图,分成两局部,一部分到Domain-Aware Attention模块(time pooling, channel pooling and fully connected layer, respectively),另一部分至Emotion模块,做time pooling, channel-wise fully connected(各channel别离全连贯)。而后Domain模块输入一个向量,将向量变成对角矩阵,与Emotion模块的输入矩阵相乘,使得畛域信息融入到emotion embedding。最初多任务学习,别离求Domain loss和Emotion loss。这里的Domain并不是指不同畛域的数据,而是指性别、年龄等额定信息。 ...

April 1, 2021 · 1 min · jiezi

关于音频:你真的懂-MP4-格式吗

MP4 文件格式又被称为 MPEG-4 Part 14,出自 MPEG-4 规范第 14 局部 。它是一种多媒体格局容器,宽泛用于包装视频和音频数据流、海报、字幕和元数据等。(顺便一提,目前风行的视频编码格局 AVC/H264 定义在 MPEG-4 Part 10)。MP4 文件格式基于 Apple 公司的 QuickTime 格局,因而,QuickTime File Format Specification 也能够作为咱们钻研 MP4 的重要参考。 作者:张武星审核:泰一 OverviewMP4 文件由 box 组成,每个 box 分为 Header 和 Data。其中 Header 局部蕴含了 box 的类型和大小,Data 蕴含了子 box 或者数据,box 能够嵌套子 box。 下图是一个典型 MP4 文件的根本构造: 图中看到 MP4 文件有几个次要组成部分: fytpFile Type Box,个别在文件的开始地位,形容的文件的版本、兼容协定等。 moovMovie Box,蕴含本文件中所有媒体数据的宏观形容信息以及每路媒体轨道的具体信息。个别位于 ftyp 之后,也有的视频放在文件开端。留神,当扭转 moov 地位时,外部一些值须要从新计算。 mdatMedia Data Box,寄存具体的媒体数据。 Moov InsiderMP4 的媒体数据信息次要寄存在 Moov Box 中,是咱们须要剖析的重点。moov 的次要组成部分如下: ...

February 24, 2021 · 3 min · jiezi

关于音频:倍频程与钢琴调式的距离

单从倍频程和钢琴调式这两个名词看,间隔的确有点远,一个偏科技一个偏娱乐。然而距离远不代表没有关系,上面就让咱们给它们俩拉拉关系吧。 作者:良逸,阿里云技术专家,阿里云音视频通信 QoS 研发 什么是倍频程首先什么是倍频程?从中文字义上看,就是“X 倍频率的范畴”,是截至频率和起始频率之比成倍数关系的频段。与之绝对应的另一个概念是等宽频程,意思是截止频率和起始频率之差相等的频段。具体定义如下: 为什么要用倍频程?咱们晓得人耳的听觉的频率感知范畴在 20Hz-20000Hz,范畴十分的广,剖析的时候,须要将这个频率范畴划分成不同的频段(频带)来剖析,怎么划分呢?于是有了上文的两种划分形式,一种是等宽频程,意味着每个划分的频带宽度是相等的;另一种是倍频程,意味着每个划分的频带宽度与上一个紧邻的频带宽度合乎等比数列。 如果采纳等宽频程,要体现出低频到高频的声音信息须要的数据量十分大,效率比拟低,而且人耳对高下频率的敏感水平是不一样的,通常人耳对低频局部的频率变动比拟敏感,而对高频局部的频率变动不太敏感,所以采纳倍频程更合乎人耳的听力特点,而且进步了频带数据的剖析效率。 还有一个跟倍频程无关的概念是核心频率,每频程的下限与上限频率的“几何平均值”称为该频程的核心频率 f0 。特定的核心频率 f0 就代表了一个特定的频段, f0 作为基准频率,只有确定了基准频率,整个 20Hz-20000Hz 的频率范畴,就能够依照倍频程的定义分段开展。通常显示倍频程,是以其带宽的核心频率线性距离的,这叫做倍频程格局。这会导致倍频程在频谱图对应的横轴上呈现雷同的距离,即便它们距离不是平均的。如下图所示(援用网络公开测试后果,数据起源见图片下方):图片数据起源:https://community.sw.siemens.... 同一个白噪声体现为窄带(蓝色)和倍频程(紫色)格局,x轴是倍频程格局。留神到,与较高频率的倍频程段相比,较低频率处的倍频带的填充数据较少。如上表格所示,这是因为较高频率的倍频带笼罩的频率范畴,相比拟低频率的倍频带要宽。如果将x轴线性绘制的话,成果如下图所示(援用网络公开测试后果,数据起源见图片下方):图片数据起源:https://community.sw.siemens.... 与倍频程格局相比,上图绘制了与之前雷同的白噪声数据,但x轴是线性格局。能够看出,功率谱(蓝色)在所有频率下具备雷同的密度,但每个倍频带(紫色)笼罩的频率范畴越来越大。 另外,因为选取不同的基准频率,最终开展的频段格局也不一样,那如何来选取基准频率呢?标准化组织依据不同的利用场景就给出了不同的倍频程的规范定义。在声学测量中个别采纳 1/3 倍频程来对频谱进行剖析,国标《GB 3240-1982 声学测量中的罕用频率》中对其规范频率有如下的定义: 八度音阶从这里开始咱们看一下倍频程跟音乐有什么关系。咱们搜寻“倍频程”英文翻译的时候,会发现如下后果:为什么倍频程跟八度音阶都是 Octave 一个词呢?其实倍频程是借用了八度音阶的实践,因为历史上人们对音乐的认知要早于信号频谱剖析的实践的把握。依据人们的教训,音调升高一个八度,频率就增加一倍,近代频谱剖析技术呈现后,恰好发现这个刚好满足倍频法则。因而就按频率从新定义八度音阶。其实八度音阶在频率这个概念呈现前就有了。 咱们大家都晓得,简谱中的八度音阶是这个样子的:高音 do 跟低音 do 之间相差 8 度音,也晓得女生个别比男生声音高 8 度。 这里还要说一下音高的概念,音高的英文是 pitch,而 pitch 又翻译成基音,而且 Opus 编码器外面有个性能叫 Pitch Detection,翻译成基因检测,那基音跟音高是啥关系呢?物体触动产生的声音,其中蕴含很多频率成分,最低的那个频率称为基频,对应产生的声音就叫基音,其余的谐波频率成分产生的声音就叫泛音。其中基音决定了人耳听到的声音的音高,而泛音造成了不同的音色,不同乐器有不同的音色,就是因为其产生的泛音成分不一样。与倍频程相干的频率划分,以及与八度音阶相干的音高,都是指的基音的频率,与泛音没有关系。 十二平均律咱们再看一下八度音阶的特点。咱们会发现 mi 和 fa,及 si 和低音 do 之间是半音关系,其它每个音之间是全音关系。所谓半音关系意味着,半音关系的音高比全音关系的音高少一半。如果把八度音阶,按半音的频宽开展的话,将会产生 12 个半音宽的频带,这就是所谓的十二平均律,又叫十二等程律,当初的钢琴就是依据十二平均律定音的。终于跟钢琴扯上关系了。咱们又晓得一个八度音阶,对应的低频和高频相差1倍,即一个倍频程,那等程分成 12 份的话,那对应的就是 1/12 倍频程。音乐畛域的标准化又来了,下图就是国际标准音高与频率对照表:此表规定 A4 的频率 440Hz 作为基准频率,依照 1/12 倍频程的关系将频谱开展,就失去了每个规范钢琴琴键对应的音高频率。同样钢琴上的地方 C,对应的就是 C4 的键 261.63Hz。 ...

December 22, 2020 · 1 min · jiezi

关于音频:听歌识曲也太牛了吧只音奥秘在此……

摘要: 抖音等短视频软件的衰亡,让一些不为公众所知的歌曲一夜爆红,当咱们遇到中意的音乐却苦恼于找不到资源时,“听歌识曲”的性能趁势而生。而这类技术是如何实现歌曲的精准辨认的呢?跟我一起来通过华为云微认证DIY小试验,揭开抖音小视频背景歌名辨认的技术神秘吧!近几年来,抖音、快手等短视频软件的衰亡使得一些不为公众所知的歌曲一夜爆红。它不仅激发了流行音乐的热度,还搅热了一众音乐发烧友的心,但当遇到中意的音乐却找不到确切的资源,另一“挠心壁垒”就呈现了!好在,“听歌识曲”的性能迅速在各大音乐平台上线,它不仅为宽广音乐爱好者提供了最为便捷的搜寻形式,还能够通过高效的声纹识别和匹配声纹数据库能够疾速的帮忙用户定位到具体歌曲。 明天,我来介绍一个对于“听歌识曲”的小试验,它能够通过借助华为云服务和华为云学院微认证的试验平台,手动DIY,揭秘抖音小视频“听歌识曲”技术的全过程。 微认证《抖音小视频背景歌名辨认》,面向短视频及音乐发烧友,以及对人工智能声纹识别方向感兴趣的社会人群,联合云数据库和Python,配合语音解决相干技术实现背景歌名的疾速辨认,能够带你学会华为云数据库RDS及语音解决的相干概念及实际,把握RDS及Python联结部署试验晋升对应技术实操能力。 这个试验通过Python华为云据库RDS服务,将短视频转换为音频格式并提取声纹数据,并与声纹数据库中的声纹特色进行比照,从而获取到背景歌名,实现对抖音小视频背景歌名的辨认。听起来是不是十分乏味有干货呢?持续跟我一起学习吧! 从抖音“听歌识曲”看“语音解决技术”以往辨认歌名,咱们都是靠耳朵分别歌词,之后再通过搜索引擎查问歌词来获取对应的歌曲名。但因为歌曲的音调与演唱技巧的不同,通常会导致人在分别歌词时产生误差,导致无奈精确的找到对应歌曲。 抖音“听歌识曲”与“语音解决技术” 针对这种状况,咱们通过语音解决技术来解决这个问题 语音解决又叫作语音信号处理,它是用于钻研语音发声的一个过程。通过语音解决技术,咱们能够进步“抖音小视频背景歌名辨认”的准确率。简略来说,咱们通过提取的语音特色与现有数据库进行匹配,进而通过与语音特色进行比照,失去对应的歌曲名。 在进行语音解决之前,咱们首先要进行声纹识别。声纹识别作为生物辨认的一种,也可称为谈话人辨认,从谈话人收回的语音信号中提取声纹特色信息。通常具备两个阶段,即声音注册和声音验证。 语音解决之“声纹注册”和 “声纹验证” 当咱们对声音进行注册后,能够通过提取语音特色,取得声纹导入数据库中建设对应的声纹数据库。当获取到语音文件之后,通过预处理获取到声纹特色,通过与声纹数据库的特色比照,从而失去最佳的辨认后果。 “抖音小视频背景歌名辨认”计划架构 在理解了“语音辨认”技术背景后,该如何进行“抖音小视频背景歌名辨认”呢? 简略来说,咱们能够通过装置Python3,创立合乎试验要求的华为云数据库RDS,配置对应Python3所需环境变量以及相干组件确保Python3失常应用,创立华为云数据库RDS及对应弹性公网IP,确保Python3可能和华为云数据库RDS进行数据连贯,即可实现“抖音小视频背景歌名辨认”的工作。 “抖音小视频背景歌名辨认”计划架构 想要通过这个简略的DIY小试验,轻松把握“抖音小视频背景歌名辨认”背地的神秘吗?想要系统性理解云数据库,学习Python吗?快来华为云学院,一站式在线学习、试验与考试吧!考取华为云微认证官网认证证书,还可为职场降级蓄力加油哦!https://edu.huaweicloud.com/certifications/728fe3c3f88b44689775aa3d2f356246 点击关注,第一工夫理解华为云陈腐技术~

November 18, 2020 · 1 min · jiezi

关于音频:网易云信亮相LiveVideoStackCon2020分享RTC中AI音频算法产品化经验

10月31日-11月1日,LiveVideoStackCon2020音视频技术大会在北京隆重举办。本次大会以“多媒体开启新视界”为主题,聚焦在音频、视频、图像等技术的最新摸索与利用实际,笼罩教育、娱乐、医疗、安防、游览、电商、社交、游戏、智能设施等行业畛域,数十位业内出名讲师与来自全国各地的音视频工程师、多媒体工程师、图像算法工程师、运维与物联网工程师等分享了技术创新与最佳实际。 本次大会中,人工智能相干话题非常火爆,AI曾经渗透到多媒体技术的各个环节,无论内容生产、编解码、音视频前后解决等,AI都有一席之地,甚至被寄予厚望。网易云信资深音频算法工程师郝一亚博士受邀参会,在“音频技术:迫近人耳极限”专题会场进行了题为《RTC中AI音频算法的产品化》的主题演讲,并在“5G、AI,新技术与新改革”圆桌论坛中分享了AI在音视频畛域利用的实践经验。 主题分享中,郝一亚博士首先介绍了AI在音频解决中日渐弱小的力量。随着AI在计算机视觉等畛域的胜利利用,CNN、RNN等深度学习网络被迅速利用到了音频畛域,AI在音频降噪、场景分类、回声管制、盲源拆散等方向着施展着越来越重要的作用。 尽管AI在音频畛域的价值日渐显著,但在目前的算法中,特地是RTC音频中,还没有被大范畴的利用起来。针对音频解决中AI的挑战与局限,郝一亚博士概括为三点。一是计算复杂度。AI模型通常须要微小的计算量,就目前咱们大部分终端设备的计算能力来说压力很大,对RTC中的实时性提出了考验。二是泛化能力。AI算法是基于无限的数据集训练进去的,泛化能力无限始终是问题所在。而RTC中笼罩的业务场景十分多,AI算法要笼罩所有场景更是难上加难。三是鲁棒性。RTC丰盛的利用场景中会有很多突发状况,对于AI算法鲁棒性的要求也十分高。 因为算力、数据和AI模型自身的限度,当初AI还达不到替换传统信号处理办法的阶段,但音频AI在成果上的劣势曾经被证实。郝一亚博士提出,在RTC畛域,要想更好地施展出AI的劣势,无效躲避有余,进行“模块化”解决是一个无效的路径。把端到端、长链路的解决拆分,别离找到适合的AI模块,让业余的“人”做业余的事。 以音频降噪中的AI算法为例,传统降噪算法中蕴含了很多模块,其中“噪声预计”模块很适宜做深度学习训练,特地是针对一些稳态噪声。在这里,不必端到端地去训练整个AI模型,而是把这一模块训练成独自的噪声预计模型。通过模块化的解决,实现了轻量级模型、简略的训练指标以及更适宜DNN模型,从而最大水平的施展了AI的劣势。 郝一亚博士认为,将来越来越多的AI技术将融入到RTC中,一些新的暴发点可能是更先进的神经网络模型,更高效的GPU等,然而,有一项关键点不会变,那就是大量的数据。目前,网易云信已装备了全套工具和环境采集多种起源的数据集用于训练AI算法,曾经在音频降噪和视频超分等场景中实际利用。 2015年10月至今,网易云信始终专一于即时通讯和音视频技术畛域的前沿摸索和利用实际,已帮忙100万企业开发者胜利发送10000亿条音讯,日活冲破3亿,在百家争鸣的PaaS市场中实现稳中增长。近期,网易云信再度加码技术能力,全面降级的音视频通话2.0产品上线,AI等新兴技术已融入产品开始服务客户。将来,网易云信将保持不断创新,摸索交融通信畛域的新技术、新产品、新利用,与行业共创美妙新时代。

November 5, 2020 · 1 min · jiezi

关于音频:对话斜杠青年郝一亚看见别样的30岁

郝一亚,往年30岁,现任网易智慧企业资深音频算法工程师,乒乓球国家二级运动员/留美博士/曾就任于Facebook、Apple、Zoom/街舞爱好者&街舞老师/创建过本人的dance crew/加入过歌手世界巡演...... 在真正意识一亚之前,我曾经想好了用“斜杠青年n次方”来形容他,因为仅仅是我据说的,他的标签就很多了。在与他面对面交谈了1个小时之后,外加一张娃娃脸形象,我粗浅地意识到,“斜杠青年”或者只是咱们对多角色人群的一种宽泛的定义,而一亚让咱们看到的,是多个角色之间的奇妙交融,是他给了程序员一个新的定义。 01 谈读博 开始时机缘巧合,完结时有迹可循 身为同样留学美国,但本科一毕业就急不可待踏入社会,切实不想再持续读书的我,对于可能在美国这样宽进严出的教育制度下读完工程业余博士的人,心田始终都充斥了钦佩与好奇:一是如何决定要不要读博,二是该如何顺利读完博,三是读博到底有哪些价值。 本来认为,一亚是早在大学期间就对本人有了明确的布局,可谁知他说,“真的是机缘巧合”。 “其实我真的感觉很神奇,每个人都会经验到这种,某个时刻接触到某个货色很感兴趣,最初就成为职业。” 起初,一亚并没有十分纠结于申请研究生或是博士,在他看来,做好两手筹备,能力为本人争取更多的选择权。尽管UTD(德克萨斯州大学达拉斯分校)提供的研究生我的项目与本人本科学习的方向不同,他还是抉择了那里,意识了做语音辨认的顶级大神,紧接着选修课程、退出实验室、和学长一起做我的项目、发现自己的有余,同时也激发出本身的求知欲望。在一步步地深刻摸索中,最终决定在Hearing Aid助听器方面的语音算法方向上持续实现博士学位。 回想起读博阶段的经验,我问一亚有苦楚过么?他点点头说,有太多的常识须要整顿,大部分工夫都泡在实验室,无时无刻不在期待胜利的后果。可是,失去“和预期不同”的后果概率仍然存在,一旦产生,几个月的致力也就付之东流,这种后果也须要本人承当。 对于该不该读博士,每个人都有本人的衡量标准。兴许只是想快点工作,接触更加实在的社会;又或者是单纯的喜爱学术。兴许所在的业余就须要读很多很多年书,兴许职业属性更偏差于钻研而非实际...... 一亚说,读博是机缘巧合,我猜想他是在用这个词形容读博的开始。在每个人的人生中,很多事件的开始都是机缘巧合,可过程和后果,却往往是有迹可循。毕竟,读博本就须要对学术的敬畏、钻研,和耐性的修炼。 在整整3年博士钻研过程中的所有付出,都为一亚的大厂offer之路,打下了完满的根底。 02 谈大厂 不同的格调,我取其精华 每年录取率不到2%的Facebook和Apple,是寰球有数工程师向往的殿堂,而其非常严格且高强度的8轮面试也已经令许多人谈虎色变。一亚在美国的前两份工作经验,正是在FB和Apple拿到的。 回忆起那些缓和的面试经验,他特别感谢实验室的几位“贵人”,要不是过后他们一起建设了学习小组,每天互相分享、脑暴,他绝不会在博士第二年就实现疾速积攒,达到应聘规范。 Reality Lab的前身,Oculus,是美国三大VR/AR公司之一,后被FB收买,一亚退出时,整个实验室有300多人,一半以上都是博士,这倒是让他很疾速地融入了这个学术气氛超强的团队。尽管每天都会在公司实现吃吃喝喝的一套操作,周五下午还是喝着啤酒的休息日,但任何一件事件都不影响大家交换、脑暴,因而团队产出仍然很高,这可能是一亚在美国工作感触最深的一点。 在Apple,一亚参加了Airpods的【耳机音频算法的研发】,说得艰深一些,就是咱们佩戴耳机时所享受的降噪、回声打消、音量控制等性能,都是通过各式各样的音频算法叠加起来而达成最终的应用成果。 如果说FB的关键词是交融、分享、合作,那么一亚在Apple体验到的正是另一种格调:分工细化,每个人专一于本人的事件,但领有十分欠缺的生态链。作为一家从设计到开发到售卖全副可能本人解决的大企业来说,它的运作模式正是其精髓所在。 03 谈转变 我向往的“balance”,没有那么难 “去的时候还是奥巴马,走的时候已是川普”,这句话道出了多少留学生的心声。在各种起因之下,一亚去年抉择回国倒退,而他最最看重,也是最终抉择退出网易的起因,正是“要match音视频开发节奏”。这里的节奏并不是指一次开发的快或慢,而是在一亚的认知中,音视频技术的开发并不是一件短平快的事件,正相反,它须要一直地积攒、打磨和优化。因而,作为国内举世无双做游戏做了十余年的网易,成了他的不二之选。 在正式退出网易之前,一亚也放心过广泛留学生最放心的问题:工作vs生存的均衡,和团队气氛。不过令他本人都有些惊喜的是,相比于在国外,工作之余各回各家的共事关系,可能在网易园区里和共事一起寻找乐子,反而让他有更亲热的感觉。 原来在FB的时候,一亚的团队有“Dynamic Talk”的常规,就是每天花40~60分钟左右分享一个话题,能够是来自各种畛域的热门话题,也能够是paper,人不知;鬼不觉,有很多灵感都来自于这里。 一亚很观赏这种模式,也期待能将其引入当初的团队。或者是“英雄所见略同”,在退出网易的时候,他的部门主管正在主导策动相似的分享我的项目,倒不见得是十分成熟的一堂课,然而团队里的每个人都轮流分享本人的常识。当初,每周四早晨的程序员分享曾经成为了他们团队,乃至整个智慧企业的固定节目,有的时候,还能吸引到很多感兴趣的市场、产品共事前去参加,一起爆发灵感。 咱们总以为,程序员的日子是每天加班到深夜,难有生存可言,可是一亚让我感觉,真正的balance并不只在于职业属性或工作强度,更在乎于咱们对工夫的治理和盲目调配。最直白的例子:明天犯懒的你,能不能督促本人今天补回来。 除了一亚,不止有一个程序员和我探讨过他们丰盛的“业余生活”。爬山、越野、摄影、跳舞、健身、玩打游戏、做咖啡,或者是做奶爸......但同时,在工程师这个角色中,他们体现得丝毫不逊色。 04 谈街舞 喜爱、保持、表白 一亚对街舞的青睐和业余水平,是足以让他成为“斜杠”的。在美国的时候,他就退出了Kinjaz和GRV两大世界级顶尖舞团一起深造,并且创建本人的dance crew,本人编舞、教课,在读博和工作以外的工夫,还会跟一些驰名歌手的世界巡回演出。 回到中国之后,一亚会利用工作日中午和周末的工夫保持练舞,同时在网易的舞社负责老师,还会抽空给国外的小伙伴进行线上授课。 在面对“博士”这个title之后,我又一次表白了钦佩和好奇,因为能将一个非常繁忙、辛苦的职业以外的喜好做到如此极致,真的很不容易。 “高中一次表演,第一次接触了locking,从此就埋下了种子,而后就开始找老师练习。然而,我从没下定决心,说肯定要做到什么水平,就是凭着对街舞的喜爱,一步步走过去”。 咱们晓得,将一个喜好做到肯定水平的业余,不止是天份、致力、工夫,再将本人的业余传授给他人,更是难上加难。一亚说,他享受教课,看到学生们喜爱本人的作品,从不会到会,从会到实现,去加入表演,去较量,每个人脸上弥漫的那种率真,是打到他心坎儿里的高兴。 这两年,他逐步地将本人想表白的情感融入到舞蹈之中。 无论是身处校园的那份蓬勃的青春,或是初入职场合面对的压力与抑郁,还有与恋人经验了风雨后终于走到一起的珍惜和向往,他都要设计在舞蹈中。艺术的魅力就在于此,不须要太多语言,即使语言齐全不通,只有旋律一起,身材一舞,就都懂了。 聊起他通过舞蹈向女朋友求婚的故事,他说,“当初回头看看就是真的很有意义,跳舞能把本人的一些想法和传播的货色编进去。 咱们常问,当前无奈被AI代替的是什么职业?艺术就是机器永远无奈代替的。 05 谈一些刻板印象 我是30岁,会跳街舞的程序员 “Nerd”,是我和一亚聊到公众对程序员刻板印象时,他提到的一个词。在他眼里,这可不是一个贬义词,因为程序员之所以会被认为很“呆”,正是因为他们有着很强的思维逻辑,偶然喜爱钻牛角尖,然而这并不是好事呀!岂但不是好事,还能和其余喜好联合,达到1+1>2的成果。 那么,在技术和舞蹈中,找到了哪些共同点呢? 拿他本身举例,在编舞的过程中,一亚会把本人身为程序员的超强逻辑能力交融到舞蹈中,对整个档次有本人的要求,在教课的时候也可能更系统地训练大家,如何一步一步来,将每个动作的到位水平定义,使展示进去的成果更加参差。 同时,跳舞是抒发情感的形式之一,很重要的一点就是让观众看懂,“身为工程师很重要的一个职责就是:做一个产品,要思考到这个产品用户怎么去用,我做了这个货色,怎么给共事表白。舞蹈是让观众感知你要传播的货色,这个意识我也一样会交融在工作中。” 还记得在文章一开始我提到,一亚领有一张娃娃脸吗?从那么多张插图中,也不难看出,他的脸上如同自身就洋溢着一种“涉世未深”的感觉。至今,不意识他的人都很容易将他认成本科生,甚至在给他布置任务的时候,都要一步一步尝试着来,令他啼笑皆非。 其实,从外貌猜想人生经验,这也是一种咱们时常会犯错的刻板印象。不过一亚心田十分分明,就像看待“nerd“这个词一样,它并不一定是件好事,而且如果真的想要扭转一些人对本人的刻板印象,那么势必须要通过本人的实际行动,让大家理解到,一个不同的本人。 写在最初 在1个多小时的访谈完结后,我对一亚有了全新的意识。 对于斜杠青年、每个角色做到极致、工夫治理、自我束缚等等,这些事件在他口中能够如云淡风轻。或者,他从未打算过要成为一名斜杠青年,只是刚刚好,他在酷爱的事件之间、经验之间、角色之间,游走地熟能生巧,从新定义了一种30岁程序员的生存。 当然,他走过的每一步经验,每一次思考,每一个抉择都造就了明天,一个别样的30岁。是的,心愿大家都能记住,他是个会跳舞的程序员,他往年30岁,并且三十而已。 ...

October 10, 2020 · 1 min · jiezi

关于音频:SDL开发笔记二音频基础介绍使用SDL播放音频

若该文为原创文章,未经容许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108596396红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门) Qt开发专栏:三方库开发技术(点击传送门)上一篇:《SDL开发笔记(一):SDL介绍、编译应用以及工程模板》下一篇:敬请期待 前言 对于Qt利用来说,为了更大的跨平台通用性,应用SDL播放音频,同时也能做更多的裁减操作。 声波 声音是通过空气流传的一种间断的波,简称声波。声音的强弱体现在声波压力的大小上,音调的音调体现在声音的频率上。 声音信号由两个基本参数是频率和复读。信号的频率指的是信号每秒变动的次数,用Hz示意。频率范畴为20Hz~20Khz的信号成为音频信号。该范畴内的音频声音幅度在0~120dB之间,可被人感知到。声音转换为数字信号,则成为音频信号。 音频信号 音频信号(acoustic signals)是带有语音、音乐和音效的有法则的声波的频率、幅度变动信息载体。依据声波的特色,可把音频信息分类为规定音频和不规则声音。其中规定音频又能够分为语音、音乐和音效。规定音频是一种间断变动的模拟信号,可用一条间断的曲线来示意,称为声波。 声音的三个因素是音调、音强和音色。声波或正弦波有三个重要参数:频率 0、幅度An和相位n ,这也就决定了音频信号的特色。 对音频信号进行采样,模拟信号数字化后,就是数字音频信号了。 数字音频信号 数字音频计算机数据的存储是以0、1的模式存取的,那么数字音频就是首先将音频文件转化,接着再将这些电平信号转化成二进制数据保留,播放的时候就把这些数据转换为模仿的电平信号再送到喇叭播出,数字声音和个别磁带、播送、电视中的声音就存储播放形式而言有着本质区别。相比而言,它具备存储不便、存储老本低廉、存储和传输的过程中没有声音的失真、编辑和解决十分不便等特点。 数字音频信号,就是咱们最终解决的音频数据。 音频数字信号信号具备几个特色: 量化级 简略地说就是形容声音波形的数据是多少位的二进制数据,通常用bit做单位,如16bit、24bit。16bit量化级记录声音的数据是用16位的二进制数,因而,量化级也是数字声音品质的重要指标。咱们形容数字声音的品质,通常就形容为24bit(量化级)、48KHz采样,比方规范CD音乐的品质就是16bit、44.1KHz采样。 声道 能够简略的了解为通过一个振膜采样到的音频数据就是一个声道,两个振膜就是两个声道,以此类推。振膜个别有大、中、小三种尺寸,尺寸越大,对声波越敏感,老本也越高。一个麦克风外面有的有一个振膜,有的有两个振膜。一个振膜的麦克风进行的是Mono单声道录音,两个振膜的麦克风进行的是Stereo双声道立体声录音。五声道盘绕立体声录音就是麦克风1录取东北方向的声音,麦克风2录取东南方向的声音,麦克风3录取东北方向的声音,麦克风4录取西北方向的声音,麦克风5录取正前方的声音。另外还有四声道盘绕立体声录音和七声道盘绕立体声录音。 采样率 简略地说就是通过波形采样的办法记录1秒钟长度的声音,须要多少个数据。44KHz采样率的声音就是要花费44000个数据来形容1秒钟的声音波形。原则上采样率越高,声音的品质越好。 比特率一种数字音乐压缩效率的参考性指标,示意记录音频数据每秒钟所须要的均匀比特值(比特是电脑中最小的数据单位,指一个0或者1的数),通常咱们应用Kbps(艰深地讲就是每秒钟1024比特)作为单位。CD中的数字音乐比特率为1411.2Kbps(也就是记录1秒钟的CD音乐,须要1411.2×1024比特的数据),近乎于CD音质的MP3数字音乐须要的比特率大概是112Kbps~128Kbps。 压缩率 通常指音乐文件压缩前和压缩后大小的比值,用来简略形容数字声音的压缩效率。 SDL音频播放流程解析 根本流程如下: 步骤一:初始化子系统 初始化音频系统,其余多余的零碎不必初始化。 步骤二:依据音频信息关上音频设备 填充好SDL_AudioSpec音频信息,关上音频设备,此时会返回最靠近的音频设备,若没有靠近的则第二个参数返回0,此时咱们间接第二个参数如0,无需返回。 步骤三:开始播放 应用SDL_PauseAudio(0)进行播放。 步骤四:循环补充数据 依据缓冲区数据长度和文件残余的数据长度进行补充,若缓冲区数据没了,就补充一次,应用SDL_Delay进行1ms的提早,用以后缓存区残余未播放的长度大于0联合后面的提早进行期待。 步骤四(附加):回调函数 开始播放后,会有音频其余子线程来调用回调函数,进行音频数据的补充,通过测试每次补充4096个字节。 步骤五:敞开音频设别步骤六:退出SDL零碎 SDL播放音频相干变量struct SDL_AudioSpec SDL_AudioSpec是蕴含音频输入格局的构造体,同时它也蕴含当音频设备须要更多数据时调用的回调函数,此构造体是要害。 typedef struct SDL_AudioSpec{ int freq; // DSP频率—每秒采样数 SDL_AudioFormat format; // 音频数据格式 Uint8 channels; // 通道数1-单声道,2-立体声 Uint8 silence; // 音频缓冲静音值(计算) Uint16 samples; // 根本是512、1024设置不适合可能会导致卡顿’ Uint16 padding; // 对于某些编译环境是必须的 Uint32 size; // 音频缓冲区大小(字节)(计算) SDL_AudioCallback callback; // 为音频设备提供数据回调(空值应用SDL 本身事后定义的SDL_QueueAudio ()回调函数) void *userdata; // 传递给回调的Userdata(对于空回调疏忽)} SDL_AudioSpec; 举例:播放pcm音频“匆匆那年-44100-16位-双通道.pcm” ...

September 15, 2020 · 3 min · jiezi

关于音频:回声消除的昨天今天和明天

导读:回声打消是音频通话中最为简单的模块,对于音频通话质量起到至关重要的作用。始终以来,网易云信致力于提供良好的回声打消性能,为用户提供优异的音频通话质量。本篇文章中网易云信音视频开发专家将和大家独特回顾回声打消的历史,剖析回声打消的现状,并瞻望回声打消进一步倒退的方向。 文|网易云信音视频开发专家 历  史 回声是一种物理和生理独特作用产生的声学景象。原始声被反射后反射声和原始声的延时超过100ms时,人耳能够听到拆散的两个声音,个别在空阔的山谷这一类中央容易听到回声。 通话中听到的回声个别有两种,线路回声和声学回声。 线路回声是因为在长途电话线网络中,存在二四线转换的问题。本地电话—般是用二线电路连贯到中心局的,而短途线路的话,须要用四线电路,这两者之间须要用混合变换器进行连贯。混合变换器的引入使得传输的信号在混合变换器阻抗不匹配的状况下产生电路回声。 而咱们当初在数字通话中提到的回声个别是指声学回声,声学回声的起因是扬声器收回的声音被麦克风获取后传回远端,这样一来远端谈话者就能够听见本人收回的声音。 声学回声问题在晚期电话利用中并不凸显,次要是因为应用低延时的模仿技术并且通信间隔广泛较短。20 世纪中叶当前,因为卫星零碎倒退的须要提出了回声打消问题,已经采取的解决一种办法是应用切换的形式来隔断回音信号,这种办法尽管可能无效地隔断回声,然而却无奈平时一样天然地交谈。 随着通话回声日益受到重视,人们采取了各种各样的措施来对回声进行克制或打消。上个世纪六十年代以前,因为客观条件和技术的限度,人们采纳一种叫回声抑制器的办法来实现回声打消。 回声克制就是对回声进行肯定水平衰减以进步通信品质,然而回声抑制器只对很小的时间延迟才有良好的成果。随着卫星通信和IP 电话的倒退,呈现了传输时延超过100--300ms的电路,对于这么大的时延,回声抑制器的工作成果很差,于是人们开始钻研新的回声打消技术,基于自适应滤波器的回声打消技术逐步成为支流方向。 从20世纪80年代以来,随着回声打消技术从简略的回声抑制器到自适应回声消除器的倒退,国际电联ITU先后制 定了打消线路回声的G165(Echo Canceller),打消音频终端回声的G167(Acoustic Echo Canceller)及打消数字网络回波的G168(Digital Network Echo Canceller)等回声消除器相干规范。 现  状 实践上来说基于自适应滤波器架构并不是回声打消的惟一抉择,然而因为技术的限度和历史因循使得目前的回声打消根本都是以自适应滤波器架构为根底。 从回声打消的工作原理来看,它是一个典型的零碎辨识利用,辨识回声门路,利用参考信号和回声门路的卷积产生回声的预计,而后从混合输入中去除回声预计。应用自适应滤波器进行零碎辨识是一个很天然的抉择。 通过长时间的技术倒退,钻研人员在自适应滤波器的性能钻研上获得大量问题,对于回声打消罕用的自适应算法个性理解的比拟深刻。 一些罕用自适应滤波器算法个性如下: 1. 最小均方(LMS,least-mean-square)算法,是随机梯度算法族 中的一员。该算法在随机输出维纳滤波器递推计算中应用确定性梯度,其基本原理是使误差信号的均方误差最小,它的核心思想是用平方误差代替均方误差。LMS算法简略,运算量小,很容易在通用的数字信号处理器上实现,然而LMS算法的收敛速度依赖于输出信号矢量的自相干均值的特征值扩散度,扩散度很大时,收敛速度将很慢。对于相关性较强的语音信号,LMS算法的收敛速度会很慢。 为了克服经典的LMS算法收敛慢和对噪声较敏感的毛病,人们将滤波器系数矢量用输出信号的功率进行归一化,失去归一化最小均方(NLMS)算法。归—化技术缩小了收敛速度对输出信号功率的依赖性,其代价是计算量减少。但阶数增大时,减少的计算量绝对较少。简言之,在计算复杂性方面,NLMS算法的计算效率与LMS算法相当。同时,当输出信号为语音时,NLMS算法比LMS算法的收敛速度快,且稳定性好。因而,NLMS算法比LMS算法更适宜于回声消除器的利用。3.PNLMS算法及其改良算法是对NLMS算法步长管制的批改。它的收敛速度较快,对稠密回声门路很无效。IPNLMS算法是对PNLMS算法的改良,对回声门路 稠密性的要求不高。 4.AP算法能够看成是NLMS算法的扩大。因为应用了更多的输出向量,收敛速率失去比NLMS算法更快的收敛速度。AP算法的失调与输出矢量数(即AP算法的阶数)无关。随着阶数的减少,收敛速度放慢,然而收敛速度放慢的幅度在减小。减少阶数来进步收敛速度是以减少算法的计算复杂度为代价的。AP算法的计算复杂度比NLMS高很多。AP算法的收敛速度和计算量介于 NLMS算法和RLS算法之间。 5.和随机梯度算法不同,RLS算法属于最小二乘算法。RLS算法的收敛速度比 LMS算法快—个数量级。随着迭代次数趋于有限,RLS算法的额定均方误差收敛于零。然而,因为用了矩阵求逆计算,RLS算法的运算量大,对于冲激响应超过百毫秒的回声信号的打消问题来说,其运算量大难以实现。 目前的回声打消模块大部分都是基于以上某一类算法或者其变种,在较为靠近现实状况下,现有自适应滤波算法均能失去较为称心的回声打消成果,然而这只是理论通话中少数工夫下的一个现实状态,理论通话状况简单的多。 本端噪声烦扰,信号门路中的非线性变换,单方同时讲话,非实时操作系统带来的数据延时抖动等,都是一个通用回声打消模块须要解决的问题。 例如当存在显著的近端声音时,基于现有各种自适应滤波算法的回声消除器的性能将产生好转,甚至不能保障自适应滤波算法的收敛。这就是回声打消在理论利用中的必须解决的关键问题,通常称为双端发声(Double-talk)问题。以后针对这一状况,最罕用的办法就是退出双端通话检测器(Double Talk Detector,DTD),当单方同时讲话时让自适应滤波器锁定或者慢变来避免自适应过程发散。 如何在实时通话状况下对这些附加问题上给出称心的逻辑和精密调整对于产品化十分重要,也是目前导致产品性能差别的次要起因。以后商用产品中的回声打消模块少数状况下都能获得称心的成果,然而在某些非凡状况下都会有解决不善的中央,对更高通话品质的要求仍然是钻研更好的回声打消模块的能源。 未  来 因为通话回声问题的复杂性,对回声打消模块成果晋升的需要始终存在。以后计划的固有问题使得前述一些关键问题很难获得突破性停顿。因为近年来设施算力的进步以及技术的倒退,一些新的计划也被提出。以Volterra滤波器为根底的非线性滤波器解决方案,基于ICA和深度学习的回声打消算法钻研等也开始呈现,基于线性自适应滤波器架构的回声打消算法面临挑战。 然而还没有另外一个架构能像以后的自适应滤波器架构一样被广为应用,短期内回声打消算法仍然还会作为一个常见技术话题存在。 网易云信在回声打消逻辑改善和新计划钻研上继续推动钻研,致力于为用户提供更好的音频通话成果。 *各渠道文章转载需注明起源及作者

August 14, 2020 · 1 min · jiezi

关于音频:Active-Noise-Cancelling主动噪声消除

咱们生存中充斥着各种噪声,而随着科技的提高,各种音频降噪技术也不断涌现。被动降噪(Active Noise Cancelling)技术属于降噪技术的其中一种,其基本原理是通过播放“反波(Anti-Signal)”在声学环境中来对消噪声。被动降噪曾经被广泛应用到了耳机中,各种“被动降噪耳机”也应接不暇。本篇文章,咱们会具体介绍什么是被动降噪,被动降噪背地的原理是什么,并从“AirPods开发者”的角度介绍怎么业余地评测一款被动降噪耳机。 Introduction 在咱们日常的生存当中,充斥着各种噪声。Fig.1列举了六种生存中比拟常见的噪声。在这些噪声中,飞机噪声、空调/风扇噪声,机器噪声绝对比拟安稳,没有显著的稳定,此类噪声咱们称之为Stationary Noise [1] (Goodman, N. R., 1961)。而餐厅噪声、交通噪声和施工噪声通常是Non-Stationary Noise [2] (Rangachari, 2006)。在Non-Stationary Noise中,比拟具备代表性的要数餐厅里的乐音Babble Noise,驰名的Cocktail Party Effect [3] (Arons, 1992) 就是基于Babble Noise的。Babble Noise是指多个谈话者的交谈声组成的背景噪声,此类噪声不仅仅是非安稳的,而且和咱们所需语音的成分类似,导致在进行语音加强Speech Enhancement(语音为所需信号时的噪声克制)时难度增大。 针对不同类型的噪声,各种不同的降噪算法也相继呈现。降噪算法可分为传统信号处理算法 (Conventional Signal Processing Algorithm),以及基于机器学习的算法(Learning-based Algorithm)。Fig.2中展现了局部基于传统信号处理算法的分类,被动降噪(Active Noise Cancelling)是其中的一种。 Active Noise Cancelling-ANC 被动降噪Active Noise Cancelling (ANC) 其实早在1936年就被Paul Lueg 提出 [4]。始终到1986年,由美国音频硬件制造商Bose Corporation生产出了第一款ANC 耳机 [5] (Tokhi, 2002),并装备给了飞行员实现首飞。从那时候起,各种ANC耳机便如雨后春笋个别不断涌现。 A. ANC的算法基本原理 ANC的基本原理并不难理解,外围是依据噪声信号生成一个反波 (Anti-Signal) 作为打消信号 (Cancelling Signal),在声场(Acoustic) 中播放这个打消信号来对消掉噪声。咱们以一个正弦信号 (Sine Signal) 为例, ...

July 29, 2020 · 2 min · jiezi

实践实现纯前端下的音频剪辑处理

前言最近在做一个项目,需要对webRTC录制的音频进行处理,包括音频的裁剪、多音频合并,甚至要将某个音频的某一部分替换成另一个音频。 原本笔者打算将这件工作交给服务端去完成,但考虑,其实无论是前端还是后台,所做的工作是差不多的,而且交给服务端还需要再额外走一个上传、下载音频的流程,这不仅增添了服务端的压力,而且还有网络流量的开销,于是萌生出一个想法:为什么音频处理这件事不能让前端来做呢? 于是在笔者的半摸索半实践下,产生出了这篇文章。废话少说,先上仓库地址,这是一个开箱即用的前端音频剪辑sdk(点进去了不如就star一下吧) ffmpegffmpeg是实现前端音频处理的非常核心的模块,当然,不仅是前端,ffmpge作为一个提供了录制、转换以及流化音视频的业界成熟完整解决方案,它也应用在服务端、APP应用等多种场景下。关于ffmpeg的介绍,大家自行google即可,这里不说太多。 由于ffmpeg在处理过程中需要大量的计算,直接放在前端页面上去运行是不可能的,因为我们需要单独开个web worker,让它自己在worker里面运行,而不至于阻塞页面交互。 可喜的是,万能的github上已经有开发者提供了ffmpge.js,并且提供worker版本,可以拿来直接使用。 于是我们便有了大体的思路:当获取到音频文件后,将其解码后传送给worker,让其进行计算处理,并将处理结果以事件的方式返回,这样我们就可以对音频为所欲为了:) 开启美妙之旅前的必要工作需要提前声明的是,由于笔者的项目需求,是仅需对.mp3格式进行处理的,因此下面的代码示例以及仓库地址里面所涉及的代码,也主要是针对mp3,当然,其实不管是哪种格式,思路是类似的。 创建worker创建worker的方式非常简单,直接new之,注意的是,由于同源策略的限制,要使worker正常工作,则要与父页面同源,由于这不是重点,所以略过 function createWorker(workerPath: string) { const worker = new Worker(workerPath); return worker;}postMessage转promise仔细看ffmpeg.js文档的童鞋都会发现,它在处理音频的不同阶段都会发射事件给父页面,比如stdout,start和done等等,如果直接为这些事件添加回调函数,在回调函数里去区分、处理一个又一个音频的结果,是不大好维护的。个人更倾向于将其转成promise: function pmToPromise(worker, postInfo) { return new Promise((resolve, reject) => { // 成功回调 const successHandler = function(event) { switch (event.data.type) { case "stdout": console.log("worker stdout: ", event.data.data); break; case "start": console.log("worker receive your command and start to work:)"); break; case "done": worker.removeEventListener("message", successHandler); resolve(event); break; default: break; } }; // 异常捕获 const failHandler = function(error) { worker.removeEventListener("error", failHandler); reject(error); }; worker.addEventListener("message", successHandler); worker.addEventListener("error", failHandler); postInfo && worker.postMessage(postInfo); });}通过这层转换,我们就可以将一次postMessage请求,转换成了promise的方式来处理,更易于空间上的拓展 ...

October 8, 2019 · 3 min · jiezi

前端面试每日-31-第168天

今天的知识点 (2019.10.01) —— 第168天[html] 你知道有哪些常见的视频(音频)编码格式和视频(音频)格式吗?[css] 怎么去掉点击a链接或者图片出现的边框?[js] 如何解决在手机上长时间点击会选中图片?[软技能] 写js代码时你喜欢哪种命名方式?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!!欢迎在 Issues 和朋友们一同讨论学习! 项目地址:前端面试每日3+1 【推荐】欢迎跟 jsliang 一起折腾前端,系统整理前端知识,目前正在折腾 LeetCode,打算打通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star, 同时欢迎微信扫码关注 前端剑解 公众号,并加入 “前端学习每日3+1” 微信群相互交流(点击公众号的菜单:进群交流)。 学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布面试题(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢迎大家到Issues交流,鼓励PR,感谢Star,大家有啥好的建议可以加我微信一起交流讨论!希望大家每日去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!)交流讨论欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个[Star] https://github.com/haizlin/fe...

October 1, 2019 · 1 min · jiezi

剧本杀继狼人杀之后的下一个风口

“剧本杀”简介2018年上半年,随着几款连麦推理社交游戏的上架,“剧本杀”一词开始迅速走红,有望成为继狼人杀之后的下一个风口级游戏。“剧本杀”最初源自线下游戏“谋杀之谜”,是一款 LARP (实时角色扮演)游戏。不同游戏的剧本内容各不相同,但是玩法基本大同小异:游戏开始阶段,每一名玩家选择扮演剧本中的一个角色,其中有一名玩家会在其他玩家不知情的情况下扮演凶手,其他玩家需要在故事情节以及所搜寻到的证据的分析推理下,共同找出真凶。行业发展过程剧本杀最初起源于一款风靡欧美的线下派对游戏,派对中的玩家们需要在故事情节的推动下共同找出凶手。随后,该游戏被引入国内,成为了各个线下桌游店里的热门游戏之一。2016年,视频行业快速发展,芒果TV推出了中国首档明星推理综艺秀《明星大侦探》,主打“烧脑剧情”和“悬疑推理”的综艺模式。在该节目第三季播出结束后,芒果播放量突破32亿次,也因此收获了大批“剧本杀”粉丝。随后,创业团队纷纷抓住这次机遇,将线下“剧本杀”迁移至线上。目前,线上比较火的“剧本杀”游戏有《戏精大侦探》、《我是谜》、《百变大侦探》等,同时《我是谜》和《戏精大侦探》都获得了数百万元的天使轮投资。 “剧本杀”搜索指数 从“剧本杀”的百度搜索指数来看,7月整体流量增长近一倍,也预示着“剧本杀”大有复制当年“狼人杀”的趋势,有望成为下一个游戏风口。游戏环节分析不同的“剧本杀”游戏有不同细度的阶段划分方式,但是主体框架会包括以下五个环节: “剧本杀”游戏环节 选择角色玩家进入游戏房间后,默认进入语音群聊,同时需要选择想要扮演的剧本中的角色。在语音群聊的过程中,可对自己进行禁麦和解禁的操作,房间一般还支持文字聊天。此阶段花费时间较短,待所有玩家角色选择完毕,即可进入下一阶段。 人物剧本本阶段,,所有玩家阅读个人人物剧本,剧本内容包含人物过往经历、重要线索、时间点等情节。剧本阅读完毕,玩家们在语音群聊房间内依次自我介绍,并讲述过往经历及重要线索。 搜集线索所有玩家共同阅读线索信息,同时就具体线索展开讨论。此阶段包含对多个角色的线索搜集及玩家讨论的过程,直至所有的线索搜集并讨论完成,方可结束。此阶段为整个游戏花费时间最长的阶段,所以语音聊天也是玩家体验的核心关键点。 圆桌讨论搜证阶段结束后,玩家们再次共同讨论并寻找故事真凶。此阶段不提供任何剧本及线索,所以各玩家首先需要回忆之前各个阶段的逻辑推理再作讨论。 最终投票就圆桌阶段讨论的结果,玩家们共同投票,选择凶手。投票阶段一般会计时,玩家需要在计时结束前完成投票。投票结束后,公布结局真相,并给出答案解析,游戏结束。目前主流的“剧本杀”游戏,玩家的主体精力基本放在“搜集线索”环节,需要进行多次搜证并对线索加以讨论。在房间人数上大多采用多人局,最多支持8人,其中《我是谜》app还提供了1-2人局,在极大程度解决了用户匹配的问题。游戏基本采用纯音频形式进行游戏,未来或许会出现类似“狼人杀”的视频面杀形式。用户分析对于“剧本杀”游戏的玩家群体,从技术竞技性、社交追求度和游戏排他性可以大致分为以下几类:竞技型玩家、社交型玩家、语音型玩家。 “剧本杀”游戏用户群体细分 对于竞技性玩家群体,他们喜爱游戏本身,对游戏剧本的内容,游戏结果以及整体流程体验会更加看重,极度追求技术,渴望和高手切磋。同时,此类玩家大多有线下“剧本杀”桌游的经历,对游戏的各个环节和打法比较了解。社交型玩家通常会青睐社交属性较重的游戏产品,也包括在线狼人杀等其他连麦社交游戏。这类玩家会更看重社交方面的体验,热爱在游戏过程中结交朋友,而对于游戏本身的关注所占比例较少。语音型玩家对于游戏本身、剧本内容,或游戏技术上没有过高的要求,但是对于包含语音连麦功能的游戏都极度热爱,包括各类吃鸡手游、在线狼人杀等等,对连麦时语音的质量也会有更加严格的把控。游戏关键要素在各大应用商店“剧本杀”的评论反馈中,可以看到很多玩家的好评,例如“玩法很新颖”、“有一种自己演电影的感觉”、“很锻炼逻辑思维能力”等,但仍有一些玩家发声表明了现在“剧本杀”存在的一些问题,例如“希望剧本的筛选能更用心”、“有些人麦的回音很大”、“无法闭麦”等。总结下来,主要是以下四个问题:剧本内容”剧本杀”是以剧本内容为主要打法的社交产品,剧本内容的质量、可玩性也成为了能否吸引玩家的重要因素。有不少玩家表示,玩“剧本杀”游戏的过程在极大程度上锻炼了自己的逻辑思维能力,在角色扮演过程中也会比较深入地代入角色情感,游戏体验很好。然而现在游戏的剧本来源主要依靠粉丝网友的投稿,有部分玩家表示希望剧本的筛选能更加严格,剧本的内容可玩性也有待提高。目前,各大平台开始设定奖励机制吸引优质写手,签约长期合作的剧本作者,这也是未来提高剧本质量的理想途径。实时互动对于“剧本杀”这类强互动性的实时语音连麦游戏来说,除了阅读剧本,搜集线索的过程,90%以上的游戏体验核心都在语音聊天上。而由于各种各样的原因,例如网络不稳定、运营商网络出现故障等等,可能导致语音通话过程不顺畅,聊天时延过长等问题,导致玩家不能实时语音交流互动,这也将是一个较为致命的产品体验痛点。音质效果玩家在游戏过程中,大部分时间都通过语音连麦聊天的方式和其他玩家交流,这种方式对于语音通话的质量也产生了更高的标准。在应用商店的用户评论处可以看到这样的评价:“玩了几局,发现每局都有人麦的回音很大,而有回音的这个人开麦以后完全听不到在说什么,特别乱,经常大家什么都没弄明白就投票了。”由此可见,与声音音质有关的杂音、丢音、回声、噪声等问题都会严重影响玩家的游戏体验。稳定流畅移动端在线游戏体验流畅的前提是拥有稳定的网络条件,由于在线“剧本杀”正处于快速增长阶段,用户数量的激增会导致网络拥塞、丢包等各种问题。所以在应用商店里,经常能够看到诸如“希望能早点修复莫名其妙离线等bug”、“一直显示请求超时,偶尔才能刷新出新东西”、“游戏过程中会断开连接”、“一直加载失败,链接超时”等反馈,种种声音表明,网络异常问题导致的游戏过程断续,导致玩家无法体验最基本的游戏流程。如何解决网络问题,为玩家提供稳定流畅的体验,也急需提上日程。网易云信方案及优势主流的“剧本杀”游戏,从用户场景上划分为剧本玩家实时游戏房间和观众观战房间。剧本玩家实时游戏是整个剧本杀游戏最为核心的场景,涉及到多个玩家语音连麦群聊、两个玩家一对一单聊、聊天室内文字交流互动等,这些场景对实时性的要求很高,同时对于语音聊天是否稳定流畅、是否有杂音噪音等都有很严格的标准。而在观众观看场景下,由于“剧本杀”游戏本身属性原因,观众在游戏房间内没有语音连麦及发表文字的权限,所以这一场景的体验关键点,主要在于直播画面是否同步、语音是否流畅清晰。针对以上两个场景的不同特性,以及在技术实现上的不同要求,网易云信推出了完整的一套“剧本杀”游戏方案,整体框架如下图所示: “剧本杀”音视频游戏房间技术框架 网易云信在实现方案上主要突显三大能力:实时音视频、IM即时通讯和互动直播。其中,实时音视频能力为游戏房间内的剧本玩家提供了真实的连麦互动体验,IM聊天室提供文字聊天互动能力,互动直播技术保证观众观看游戏过程的流畅体验。在游戏过程的实时互动性上,网易云信提供的技术方案保证端到端平均延时低于200ms,确保语音连麦互动的实时性,为“剧本杀”游戏的各个玩家提供酣畅淋漓的即时互动体验。在语音连麦聊天的音质上,采用48kHz音频采集,全频带音质,打造业界最高标准;同时,针对玩家语音连麦时可能出现的噪声、回声等情况,采用语音智能降噪,自动增益,回声消除等算法,打造无损音质,为玩家还原最真实、清晰的音质。对于网络不稳定、信号较差的问题,方案提供了智能网络探测,智能Qos保障,音视频码率自适应等多种核心算法保障,同时可抗800ms网络抖动,定制化的FEC/ Jitter Buffer/ QoS策略,确保70%丢包仍可正常通话,保障游戏进程的稳定流畅性。针对“剧本杀”游戏包含的不同场景模式,网易云信提供的技术实现方案完美解决了从开发到实现的诸多难题,让开发者能够迅速开发出在线“剧本杀”游戏。同时,在保证游戏稳定运行的前提下,能够为游戏玩家们提供极致的游戏体验。随着音视频技术的不断演进,从“在线狼人杀”、“在线抓娃娃”,到现在的“在线剧本杀”,泛娱乐行业内一个个风口级产品如雨后春笋般出现。这种从线下游戏迁移至线上app的模式,是目前泛娱乐行业出现频率较高的新兴玩法,也是网易云信所十分看好的。针对不同场景化游戏,网易云信都分别为其量身定制了不同的技术实现方案,未来,我们也将持续关注行业新动态,希望能为开发者解决更多的难题。想要阅读更多行业洞察和技术干货,请关注网易云信博客。

June 28, 2019 · 1 min · jiezi

BBR在实时音视频领域的应用

小议BBR算法 BBR全称Bottleneck Bandwidth and RTT,它是谷歌在2016年推出的全新的网络拥塞控制算法。要说明BBR算法,就不能不提TCP拥塞算法。 传统的TCP拥塞控制算法,是基于丢包反馈的协议。基于丢包反馈的协议是一种被动式的拥塞控制机制,其依据网络中的丢包事件来做网络拥塞判断。即便网络中的负载很高时,只要没有产生拥塞丢包,协议就不会主动降低自己的发送速度。 TCP在发送端维护一个拥塞窗口cwnd,通过cwnd来控制发送量。采用AIMD,就是加性递增和乘性递减的方式控制cwnd,在拥塞避免阶段加性增窗,发生丢包则乘性减窗。这个拥塞控制算法的假定是丢包都是拥塞造成的。 TCP拥塞控制协议希望最大程度的利用网络剩余带宽,提高吞吐量。然而,由于基于丢包反馈协议在网络近饱和状态下所表现出来的侵略性,一方面大大提高了网络的带宽利用率;但另一方面,对于基于丢包反馈的拥塞控制协议来说,大大提高网络利用率同时意味着下一次拥塞丢包事件为期不远了,所以这些协议在提高网络带宽利用率的同时也间接加大了网络的丢包率,造成整个网络的抖动性加剧。TCP拥塞控制算法的假定是丢包都是拥塞造成的,而事实上,丢包并不总是拥塞导致,丢包可能原因是多方面,比如:路由器策略导致的丢包,WIFI信号干扰导致的错误包,信号的信噪比(SNR)的影响等等。这些丢包并不是网络拥塞造成的,但是却会造成TCP 控制算法的大幅波动,即使在网络带宽很好的情况下,仍然会出现发送速率上不去的情况。比如长肥管道,带宽很高,RTT很大。管道中随机丢包的可能性很大,这就会造成TCP的发送速度起不来。 Google 的BBR出现很好的解决了这个问题。BBR是一种基于带宽和延迟反馈的拥塞控制算法。它是一个典型的封闭反馈系统,发送多少报文和用多快的速度发送这些报文都是每次反馈中不断调节。BBR算法的核心就是找到两个参数,最大带宽和最小延时。最大带宽和最小延时的乘积就是BDP(Bandwidth Delay Product), BDP就是网络链路中可以存放数据的最大容量。知道了BDP就可以解决应该发送多少数据的问题,而网络最大带宽可以解决用多大速度发送的问题。如果网络比作一条高速公路,把数据比作汽车,最大带宽就是每分钟允许通行的汽车数量,最小RTT就是没有拥堵情况下,汽车跑一个来回需要的时间,而BDP就是在这条路上排满汽车的数量。 BBR如何探测最大带宽和最小延时BBR是如何探测最大带宽和最小延时呢?首先有一点就是最大带宽和最小延时是无法同时得到的。 如图所示,横轴是网络链路中的数据量,纵轴分别是RTT和带宽。可以发现在RTT不变的时候,带宽一直在上升,没有达到最大,因为这个时候网络没有拥塞,而带宽停止上涨的时候RTT持续变大,一直到发生丢包。因为这个时候,网络开始拥塞,报文累积在路由器的buffer中,这样延时持续变大,而带宽不会变大。图中BDP的竖线所标识的就是理想情况下最大带宽和最小延时。很明显,要找到BDP, 很难在同一时刻找到最小的RTT和最大带宽。这样最小RTT和最大带宽必须分别探测。探测最大带宽的方法就是尽量多发数据,把网络中的buffer占满,带宽在一段时间内不会增加,这样可以得到此时的最大带宽。探测最小RTT的方法就是尽量把buffer腾空,让数据交付延时尽量低。由此,BBR就引入了基于不同探测阶段的状态机。 状态机分为4个阶段,Startup,Drain,ProbeBW, ProbeRTT。Startup类似于普通拥塞控制里的慢启动,增益系数是 2ln2,每一个来回都以这个系数增大发包速率,估测到带宽满了就进入 Drain状态,连续三个来回,测得的最大瓶颈带宽没有比上一轮增大 25%以上,就算带宽满了。进入 Drain状态,增益系数小于 1,也就降速了。一个包来回,把 Startup状态中产生的拍队排空,怎样才算队列空了?发出去还没有 ACK 的数据包量 inflight,与 BDP 进行比较,inflight < BDP 说明空了,道路不那么满了,如果 inflght > BDP 说明还不能到下一个状态,继续 Drain。ProbeBW是稳定状态,这时已经测出来一个最大瓶颈带宽,而且尽量不会产生排队现象。之后的每个来回,在 ProbeBW状态循环(除非要进入下面提到的 ProbeRTT状态),轮询下面这些增益系数,[5/4, 3/4, 1, 1, 1, 1, 1, 1],如此,最大瓶颈带宽就会在其停止增长的地方上下徘徊。大部分时间都应该处于 ProbeBW状态。前面三种状态,都可能进入 ProbeRTT状态。超过十秒没有估测到更小的 RTT 值,这时进入 ProbeRTT状态,把发包量降低,空出道路来比较准确得测一个 RTT 值,至少 200ms 或一个包的来回之后退出这个状态。检查带宽是否是满的,进入不同的状态:如果不满,进入 Startup状态,如果满,进入 ProbeBW状态。BBR算法不会因为一次或者偶然的丢包就大幅降低吞吐量,这样就比TCP就有较强的抗丢包能力。 如图所示,cubic在丢包率上升的时候,吞吐量下降很快。而BBR在5%以上的丢包才会出现明显的吞吐量下降。BBR与基于丢包反馈的cubic和基于延时反馈的vegas算法的本质区别在于,BBR无视随机丢包,无视时延短暂波动,采用了实时采集并保留时间窗口的策略,保持对可用带宽的准确探知。事实上,丢包并不一定会造成带宽减少,延迟增加也不一定会造成带宽减少,cubic无法判断是否拥塞造成的丢包,vegas对延时增加过于敏感,会导致竞争性不足。BBR可以区分出噪声丢包和拥塞丢包,这样意味着,BBR比传统TCP拥塞控制算法具有更好的抗丢包能力。 BBR在实时音视频领域的应用实时音视频系统要求低延时,流畅性好,而实际网络状态却是复杂多变的,丢包,延时和网络带宽都在时刻变化,这就对网络拥塞控制算法提出了很高的要求。它需要一种带宽估计准确,抗丢包和抖动能力好的拥塞控制算法。目前Google的webrtc提供了GCC控制算法,它是一种发送侧基于延迟和丢包的控制算法,这个算法的原理在很多地方都有详细描述,这里不再赘述。GCC用于实音视频的主要问题还在于在带宽发生变化时,它的带宽跟踪时间比较长,这样就会造成带宽突变的时候无法及时准确探测带宽,可能造成音视频卡顿。既然BBR有良好的抗丢包能力,自然也被想到应用到实时音视频领域。但是,BBR并不是为处理实时音视频设计的,所以需要对一些问题做一些优化。第一,BBR在丢包率达到25%以上,吞吐量会断崖式下降。这是由BBR算法的pacing_gain数组[5/4, 3/4, 1, 1, 1, 1, 1, 1]的固定参数决定的。在pacing_gain数组中,其增益周期的倍数为5/4,增益也就是25%,可以简单理解为,在增益周期,BBR可以多发送25%的数据。在增益期,丢包率是否抵消了增益比25%?也就是说,x是否大于25。假设丢包率固定为25%,那么,在增益周期,25%的增益完全被25%的丢包所抵消,相当于没有收益,接下来到了排空周期,由于丢包率不变,又会减少了25%的发送数据,同时丢包率依然是25%...再接下来的6个RTT,持续保持25%的丢包率,而发送率却仅仅基于反馈,即每次递减25%,我们可以看到,在pacing_gain标识的所有8周期,数据的发送量是只减不增的,并且会一直持续下去,这样就会断崖式下跌。 怎样才能对抗丢包,这就需要在每个周期考虑丢包率,把丢包率补偿进去。比如丢包率达到25%的时候,增益系数就变成50%,这样就可以避免由于丢包带来的反馈减损,然而,你又如何判断这些丢包是噪声丢包还是拥塞丢包呢?答案在于RTT,只要时间窗口内的RTT不增加,那么丢包就不是拥塞导致的。第二,BBR的最小RTT有个10s超时时间,在10s超时后,进入ProbeRTT 状态,并持续最小200ms,此状态下,为了排空拥塞,inflight只允许有4个包,这会导致音视频数据在这段时间内堆积在发送队列中,使得时延增加。可行的解决办法是,不再保留ProbeRTT状态,采用多轮下降的方式排空拥塞,然后采样最小RTT,也就是在infight > bdp的时候,设置pacing gain为0.75,用0.75倍带宽作为发送速率,持续多轮,直到inflight < bdp, 此外,最小RTT的超时时间改成2.5s,也就是说不采用非常激进的探测方式,避免了发送速率的大幅波动,可以改善探测新的带宽过程中发送队列中产生的延时。第三,开始提到pacing gain数组上探周期为1.25倍带宽,随后是0.75倍带宽周期,这两个RTT周期之间会出现发送速率的剧烈下降,这可能会使音视频数据滞留在buffer中发不出去,引入不必要的延时。解决办法可以考虑减小上探周期和排空周期的幅度,比如使用[1.1 0.9 1 1 1 1 1 1]这种pacing gain参数,这样做的优点就是可以保证媒体流的平稳发送,发送速率不会大幅波动,缺点是,网络带宽改善的时候,上探时间会变长。第四,BBR探测新带宽收敛慢的问题原始的BBR算法的收敛性受到pacing gain周期影响,带宽突降的时候,BBR需要多个轮次才会降到实际带宽。这是由于BBR每轮只能降速一次,而pacing gain的6个RTT的保持周期大大加长了这个时间。解决的办法就是随机化pacing gain的6个保持周期,如果是0.75倍周期,就一次降速到位,这样可以极大的减少BBR的收敛时间。最后,BBR算法看似简单,但是应用到实时音视频却没有那么简单,需要大量的实验优化,谷歌也在webrtc中引入BBR,目前仍在测试中。本文提到的改进方法是网易云信在这方面的一些尝试,希望能够抛砖引玉,有更多有兴趣的人能够为BBR应用到实时音视频领域出力。 ...

June 28, 2019 · 1 min · jiezi

视频编解码的理论和实践2Ffmpeg视频编解码

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。 相关阅读推荐《视频直播关键技术:流畅、拥塞和延时追赶》《视频直播技术详解:直播的推流调度》《音视频通话:小议音频处理与压缩技术》《视频编解码的理论和实践1:基础知识介绍》 1、Ffmpeg介绍《视频编解码的理论和实践1:基础知识介绍》介绍了视频编码的基础知识,本篇文章,我们一起看看实际应用中的视频编码是如何操作的。在实际工程项目中,ffmpeg是应用最多的多媒体处理框架,它提供了音视频采集、编解码、图像处理,格式转换等功能,并且拥有很强的扩展能力,通过ffmpeg可以很容易集成第三方库(例如:x264、openh264等),通过这种能力,它可以实现更强大的功能。Ffmpeg由下面几个部分构成:Libavformat:音视频格式处理Libavcodec:音视频编解码Libavfilter:音视频滤镜Libavdevice:音视频设备采集Libswscale:图像缩放、转换Libswresample:音频重采样Ffmpeg:一个命令行的转码工具Ffplay:一个命令行播放器Ffprobe:简单的媒体格式分析工具 2、Ffmpeg视频编码视频编码是ffmpeg提供的基本功能之一,通过ffmpeg可以很容易实现视频编码操作。使用ffmpeg进行视频编码之前需要把x264、openh264等第三方编解码库集成到ffmpeg中才能使用。编码步骤如下:(1) 注册编码器(2) 根据名字或者ID查找你想使用的编码器(例如x264、x265、openh264等)(3) 创建一个编码器上下文对象(4) 在编码器上下文对象中设置编码器参数(5) 打开编码器(6) 读取一帧图像进行编码,一直重复该过程,直到处理结束(7) 关闭编码器示例代码如下:avcodec_register_all(); // 注册所有可用的编码器codec = avcodec_find_encoder_by_name(“libx264”); // 查找编码器ctx = avcodec_alloc_context3(codec); // 创建编码器上下文ctx->width = 1280; // 设置编码器参数ctx->height = 720;// ….其他的参数设置avcodec_open2(ctx, codec, NULL); // 打开编码器while(read_frame(frame)){ AVPacket pkt; // 存放编码之后的数据int got_output = 0; // 是否成功编码得到一个图像avcodec_encode_video2(ctx, &pkt, frame, &got_output); // 编码if(got_output){ // 得到编码后的数据,进行后续操作}}avcodec_free_context(&ctx); // 关闭编码器 可以看到,ffmpeg隐藏了大部分的编码细节,调用者不需要了解预测、变换、量化、熵编码等细节,这些细节都已经被ffmpeg封装好了,开发者只要把编码参数设置好,然后调用相关的接口函数,即可实现视频编码功能。当然,这知识最基本的编码功能,要想在画面质量和压缩率之间取得平衡,必须了解视频编码的细节,然后设置相应的参数。 3、Ffmpeg视频解码Ffmpeg自带了H264的视频解码器,开发者可选择直接使用ffmpeg自带的H264解码器或者第三方的解码库进行视频解码。和视频编码一样,解码操作的大部分细节都已经被ffmpeg隐藏起来了,开发者只需要设置好相关的解码参数,然后调用接口函数就可以实现解码功了。解码流程如下:(1) 注册解码器(2) 查找解码器(3) 创建解码器上下文对象(4) 设置解码参数(5) 打开解码器 (6) 读取数据进行解码,直到结束(7) 关闭解码器代码示例如下:avcodec_register_all(); //注册解码器codec = avcodec_find_decoder_by_name(“h264”); // 查找解码器ctx = avcodec_alloc_context3(codec); // 创建解码器上下文对象//…设置解码参数avcodec_open2(ctx, codec, NULL); // 打开解码器while(read_packet(pkt)){ ...

June 26, 2019 · 1 min · jiezi

视频编解码的理论和实践1基础知识介绍

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。 相关阅读推荐《视频直播关键技术:流畅、拥塞和延时追赶》《视频直播技术详解:直播的推流调度》《音视频通话:小议音频处理与压缩技术》 1、视频介绍视频的本质是图像序列,根据视觉暂留的原理,每秒播放20~25张图像,就会形成连续平滑的视觉效果,人眼将无法区分其中单幅的图像,就这样连续的画面叫做视频。每秒播放的图像数量叫作帧率。图像是由像素构成的,在彩色图像中,每个像素由R、G、B三个分量构成,每个分量用一个字节存储。分辨率用于描述图像的尺寸,例如分辨率1280x720就表示图像宽度是1280个像素、高度是720个像素。 2、压缩视频的原因为什么要对视频进行压缩?假如有一段时长为60秒视频,它的分辨率是1280x720,帧率是25,那么这段视频的大小等于:60 x 25 x 1280 x 720 x 3 = 4147200000字节,大约是3955MB,如此庞大的数据,如果不进行压缩,那么磁盘空间将会很快被占满。多媒体数据占了互联网数据量的80%以上,其中大部分都是图像视频数据,未压缩之前的视频非常庞大,不利于存储和传输,因此很有必要对视频进行压缩,视频压缩也叫作视频编码,它利用视频中存在的空间冗余和时间冗余,剔除人眼不敏感的信息,达到数据压缩的目的。3、视频压缩的依据视频能够进行压缩的根本原因是信息冗余,视频中存在两种冗余信息:(1) 空间冗余。对于视频的每一帧图像,在一定尺度范围内,像素的变化是非常平缓的,像素之间非常相似,这就是空间冗余。(2) 时间冗余。视频是由连续变化的图像构成的,在一个很短的时间内,相邻图像之间的变化很小,因此相邻图像很相似,这就是时间冗余。 4、视频编码的原理和细节由于视频中存在大量的信息冗余,想要对视频进行压缩,就必须找到去除冗余信息的方法,标准的视频编码过程包含下面几个步骤:(1) 预测编码。所谓预测就是利用前面像素值来推算当前的像素值。根据前面的知识我们知道,在空间或者时间上相邻的像素是很相似,因此只要预测方法合适,预测值和实际值会很接近,假设当前像素的实际值是X,预测值是P,那么X和P之间的残差A=X-P。如果我们只对残差数据进行编码,那么将会大大压缩数据量。这就是预测编码的原理。预测编码可以分为空间预测(帧内预测)和时间预测(帧间预测)两种。预测编码可以分为下面几个步骤:i. 利用前面已经编码并重构像素块预测当前像素块的值ii. 求当前像素和预测像素的差值iii. 对像素差值进行编码iv. 把编码后的数据传输到解码端,在解码端按照同样的方法对像素值进行预测,再加上残差,就可以重构得到原始图像了。为了得到最佳的预测值,编码器通常需要使用不同预测方法进行预测,然后根据某个评判标准(一般是SAD、STAD、RDO等)得到最优的预测值(注意不是预测值越接近实际值就越优,所谓最优是计算复杂度、失真和码率之间的综合考量),特别对于帧间预测来说,在预测的时候要在参考帧中找到当前块的匹配块,需要大量的计算,因此预测模块一般是编码器中计算量最大的模块,而预测方法的好坏也直接决定了视频的压缩率。(2) 变换编码。变化编码本身不会对数据进行压缩,变换的目的是把空域信息转换为频域信息,去除了信息之间的相关性,在接下来的编码操作中可以得到更高的压缩比,变化编码是为下一步的量化编码做准备的。在视频编码中常见的变换方法是DCT变换和哈达玛变换。(3) 量化编码。量化是视频产生失真的根本原因。经过预测编码、变换编码之后得到的数据被称为变换系数,虽然变换系数相对于原始数据数来说已经很小了,但是系数值的变化范围仍然很大,利用量化把变换系数的连续取值转换成有限的离散值,这样可大大提高压缩率。假设有这样一组数据[16,96,100,600,50],量化参数是25,那么量化之后数据是round([16 / 25, 96 / 25, 100 / 24, 600 / 25, 50 / 25]) = [0,4,4,24,2],可以看到,量化之前的数据范围是16~600,需要大量的比特数才能表示,量化之后的数据范围是0~24,只需要少量比特数就可以表示,实现了压缩数据的目的。编码是一个不可逆的操作,它是失真产生的根本原因。(4) 环路滤波。环路滤波和压缩没有很大关系,却和视频的画面质量有很大关系。视频编码是以块为单位进行的,在经过量化模块时,可能每个块选择的量化系数不同,导致每个块产生的失真不一样,造成像素块的边界不连续,因此人眼观看视频的时会有方块效应(也就是有很多马赛克现象)。为了提高视频质量,有必要对方块效应进行消除,这就是环路滤波模块的功能。经过量化操作之后的数据块,再经过反量化、反变换,然后进行重构,接着进入去方块滤波进行去方块操作,得到的像素块就可以作为参考像素块给预测模块使用。环路滤波是一个可选模块。(5) 熵编码。熵编码的目的是去除统计冗余,实现数据的进一步压缩。这么说可能有点抽象,举个例子,假设有这样一组数据[0,4,4,24,2],如果使用定长编码来进行编码,这段数据可以表示为[00000,00100,00100,11000,00010],每个数据需要5 bit来表示,这段数据的总长度是5 bit x 5=25 bit;如果我们使用哈夫曼来编码,这个数组中每个元素概率值分别如下:数值0的概率是20%,数值4的概率是40%,数值24的概率是20%,数值2的概率是20%,即[20%,40%,20%,20%],根据每个元素的概率构造哈夫曼树(节点中括号内的是数组元素值),如下图所示,因此这段数据可以表示为[0,10,110,111],数据的总长度是11 bit。 由此可见使用哈夫曼编码可以去除统计冗余,实现数据压缩的目的,哈夫曼编码就是一种熵编码方法,但是由于哈夫曼编码对错误非常敏感,不适合实际应用,因此实际应用中通常使用变长编码(CAVLC)和算术编码(CABAC)作为熵编码算法。算术编码利用一个0到1之间的浮点数来描述一个信号序列,然后用这个浮点数来表示这个信号序列,极大的压缩了数据。算术编码可以使用一个简单的例子说明,假设有一个二进制串“10101110”,符号0和1的概率值都是50%,算术编码的过程如下:(1) 设置定一个区间,通常这个区间我们设定为[0,1),然后使用low指向区间的下界,用high指向区间的上界,现在low指向0,rhigh指向1.(2) 输入每一个符号,按照符号的不同对low和high进行调整,调整方法如下面公式所示,最后把low指向的浮点数作为这个符号串的码字,表示这个二进制串,可以看到算术编码的压缩效率比哈夫曼编码高很多,在x264中使用CABAC(上下文自适应的二进制算数编码)作为熵编码算法。 以上就是编解码技术的基础知识介绍,该系列第二篇文章将会介绍视频编解码技术的实践。更多即时通讯、音视频技术的干货文章,请关注网易云信博客。

June 26, 2019 · 1 min · jiezi

音频可视化中的信号处理方案

声明: 原创文章,未经允许不得转载。音频可视化是一个“听”起来非常“美”好的话题,其复杂程度很大程度上依赖视觉方案(一些例子),不同的视觉方案决定了你的技术方案选型,比如three.js,pixi.js等引擎。 不管你选用什么渲染方案,处理音频信号部分是相通的,本文会围绕音频信号的处理进行阐述,期望能够给大家普及一下音频相关的基础知识(由于能力所限难免疏错,欢迎指出)。 前五部分主要是一些理论性的基础概念,如果你不敢兴趣可以直接跳过。 github地址:sound-processor三个示例:demo1; demo2; demo3; 一、什么是声音?声音来源于 振动,通过声波传播,人耳中无数 毛细胞 会将振动信号转换成电信号并通过听觉神经传递给大脑,形成人主观意识上的“声音”。声波进入人耳后,因为耳蜗的特殊构造,不同部位对声音的敏感程度是不一样的: 高频声音会被耳蜗近根部位置所感知,低频声音在近端部位置被感知,因此人对不同频率声的感受是非线性的,这是后续声学计权的基础。二、声学计权声学计权常见的有频率计权和时间计权,其作用在于模拟人耳对不同频率声音的非线性感受: 对低频部分声音不敏感;最灵敏的区域在1~5K Hz之间;上限在15~20K Hz之间;人耳听觉范围如图所示: 2.1 频率计权频率计权是作用在音频信号的频谱上的,常用的有:A、B、C、D四种: 其中 A计权 是最接近人主观感受的,它会削弱低频和高频部分中人耳不敏感的部分,所以音频可视化里要选择A计权方式,详细说明可阅读wiki。2.2 时间计权现实里声音一般是连续的,人对声音的主管感受也是声音累加的结果(想象一下,第一波声波引起耳膜振动,振动还没停止,第二波声音就来了,因此实际耳膜的振动是声波在时间上累加的结果),时间计权就是就连续时间内声音的平均值。对于变化较快的信号,我们可以使用125ms的区间来求平均,对于变化缓慢的可以采用1000ms的区间。 三、声音测量声音测量最常用的物理量是声压,描述声压的大小通常用声压级(Sound Pressure Level,SPL)。人耳可听的声压范围为2×10-5Pa~20Pa,对应的声压级范围为0~120dB。 常见声音的声压声压常常用分贝来度量,这里要说明一点,分贝本身只是一种度量方式,代表测量值和参考值的对数比率: 声压级的定义: 其中P是测量幅值,P ref代表人耳能听见1000 Hz的最小声压:20 uP。四、倍频程首先,连续的信号包含了大量的数据,我们没有必要全部处理,因此我们一般会进行采样,将连续的频率划分成一个一个区间来分析,频程就代表一段频率区间,倍频程代表频率划分的一种方案。具体来说倍频程中一段区间的上限频率与下限频率之比是常数: 具体可以看这篇文章《什么是倍频程》当N等于1,就是1倍频程,简称倍频程,如果N等于2,则为1/2倍频程。频程划分好之后,将分布于频程内的频谱求均方值得到的就是倍频程功率谱: 五、webaudio对音频的处理在web端做音频可视化离不开webaudio的API,其中最重要的就是getByteFrequencyData(文档),这个方法能获取时域信号转换之后的频域信号,详细过程如下: 获取原始的时域信号;对其应用Blackman window (布莱克曼窗函数),其作用是补偿DFT造成的信号畸变和能量泄漏;快速傅里叶变换,将时域变成频域;Smooth over time,这一步是在时间维度对信号进行加权平均(webaudio只采用了2帧);按照上文的声压公式转换为dB;归一化,webaudio采用的归一化方式如下: 六、音频可视化中的信号处理方案结合上述内容,我们觉得比较合理的处理方式如下: 6.1 滤波有人会问,getByteFrequencyData内部不是已经应用了窗函数滤波吗,为什么还要再滤波? 因为webaudio内部的窗函数主要是用于补偿信号畸变和能量泄漏,其参数都是固定的。而在音频可视化的场景下,往往视觉感受要优先于数据精确性,因此我们加了一个高斯滤波来滤除突刺和平滑信号,“平滑”的程度是可以通过参数任意控制的。 6.2 计权视觉呈现应该要和人的主观听觉关联,所以计权是必要的,JavaScript的计权实现audiojs/a-weighting。另外我们也提供了额外的时间计权,内部会统计5个历史数据进行平均。 6.3 频程划分我们会根据传入的上下限频率区间和置顶的输出频带数自动进行频程划分,核心代码: // 根据起止频谱、频带数量确定倍频数: N// fu = 2^(1/N)*fl => n = 1/N = log2(fu/fl) / bandsQtylet n = Math.log2(endFrequency / startFrequency) / outBandsQty;n = Math.pow(2, n); // n = 2^(1/N) const nextBand = { lowerFrequency: Math.max(startFrequency, 0), upperFrequency: 0}; for (let i = 0; i < outBandsQty; i++) { // 频带的上频点是下频点的2^n倍 const upperFrequency = nextBand.lowerFrequency * n; nextBand.upperFrequency = Math.min(upperFrequency, endFrequency); bands.push({ lowerFrequency: nextBand.lowerFrequency, upperFrequency: nextBand.upperFrequency }); nextBand.lowerFrequency = upperFrequency;}七、sound-processorsound-processor 是一个极小(gzip < 3KB)的处理音频信号的库,作为音频可视化的底层部分,使用相对科学的方法处理原始音频信号并输出符合人类主观听觉的信号,内部的处理流程如下: ...

May 31, 2019 · 1 min · jiezi

谈起音视频,前端能做些什么

@(音视频)[Audio|Video|MSE]音视频随着互联网的发展,对音视频的需求越来越多,然而音视频无乱是播放还是编解码,封装对性能要求都比较高,那现阶段的前端再音视频领域都能做些什么呢。[TOC]音频或视频的播放html5 audio提起音视频的播放,我萌首先想到的是HTMLMediaElement,video播放视频,audio播放音频。举个栗子:<audio controls autoplay loop=“true” preload=“auto” src=“audio.mp3”></audio>controls指定浏览器渲染成html5 audio.autoplay属性告诉浏览器,当加载完的时候,自动播放.loop属性循环播放.preload当渲染到audio元素时,便加载音频文件.移动端的浏览器并不支持autoplay和preload 属性,即不会自动加载音频文件,只有通过一些事件触发,比如touch、click事件等触发加载然后播放.媒体元素还有一些改变音量,某段音频播放完成事件等,请阅读HTMLMediaElement.当然如果你的网页是跑在WebView中,可以让客户端设置一些属性实现预加载和自动播放。AudioContext虽然使用html5的audio可以播放音频,但是正如你看到存在很多问题,同时我萌不能对音频的播放进行很好的控制,比如说从网络中获取到音频二进制数据,有的时候我萌想顺序播放多段音频,对于使用audio元素也是力不从心,处理起来并不优雅。举个栗子:function queuePlayAudio(sounds) { let index = 0; function recursivePlay(sounds, index) { if(sounds.length == index) return; sounds[index].play(); sounds[index].onended = recursivePlay.bind(this, sounds, ++index); }}监听audio元素的 onended 事件,顺序播放。为了更好的控制音频播放,我萌需要AudioContext.AudioContext接口表示由音频模块连接而成的音频处理图,每个模块对应一个AudioNode。AudioContext可以控制它所包含的节点的创建,以及音频处理、解码操作的执行。做任何事情之前都要先创建AudioContext对象,因为一切都发生在这个环境之中。可能理解起来比较晦涩,简单的来说,AudioContext 像是一个工厂,对于一个音频的播放,从音源到声音控制,到链接播放硬件的实现播放,都是由各个模块负责处理,通过connect 实现流程的控制。现在我萌便能实现音频的播放控制,比如从网络中获取。利用AJAX中获取 arraybuffer类型数据,通过解码,然后把音频的二进制数据传给AudioContext创建的BufferSourceNode,最后通过链接 destination 模块实现音频的播放。 export default class PlaySoundWithAudioContext { constructor() { if(PlaySoundWithAudioContext.isSupportAudioContext()) { this.duration = 0; this.currentTime = 0; this.nextTime = 0; this.pending = []; this.mutex = false; this.audioContext = new (window.AudioContext || window.webkitAudioContext)(); } } static isSupportAudioContext() { return window.AudioContext || window.webkitAudioContext; } play(buffer) { var source = this.audioContext.createBufferSource(); source.buffer = buffer; source.connect(this.audioContext.destination); source.start(this.nextTime); this.nextTime += source.buffer.duration; } addChunks(buffer) { this.pending.push(buffer); let customer = () => { if(!this.pending.length) return; let buffer = this.pending.shift(); this.audioContext.decodeAudioData(buffer, buffer => { this.play(buffer); console.log(buffer) if(this.pending.length) { customer() } }, (err) => { console.log(‘decode audio data error’, err); }); } if(!this.mutex) { this.mutex = true; customer() } } clearAll() { this.duration = 0; this.currentTime = 0; this.nextTime = 0; }}AJAX调用function xhr() { var XHR = new XMLHttpRequest(); XHR.open(‘GET’, ‘//example.com/audio.mp3’); XHR.responseType = ‘arraybuffer’; XHR.onreadystatechange = function(e) { if(XHR.readyState == 4) { if(XHR.status == 200) { playSoundWithAudioContext.addChunks(XHR.response); } } } XHR.send();}使用Ajax播放对于小段的音频文件还行,但是一大段音频文件来说,等到下载完成才播放,不太现实,能否一边下载一边播放呢。这里就要利用 fetch 实现加载stream流。fetch(url).then((res) => { if(res.ok && (res.status >= 200 && res.status <= 299)) { readData(res.body.getReader()) } else { that.postMessage({type: constants.LOAD_ERROR}) }})function readData(reader) { reader.read().then((result) => { if(result.done) { return; } console.log(result); playSoundWithAudioContext.addChunks(result.value.buffer); })}简单的来说,就是fetch的response返回一个readableStream接口,通过从中读取流,不断的喂给audioContext 实现播放,测试发现移动端不能顺利实现播放,pc端浏览器可以。PCM audio实现audioContext播放时,我萌需要解码,利用decodeAudioDataapi实现解码,我萌都知道,一般音频都要压缩成mp3,aac这样的编码格式,我萌需要先解码成PCM数据才能播放,那PCM 又是什么呢?我萌都知道,声音都是由物体振动产生,但是这样的声波无法被计算机存储计算,我萌需要使用某种方式去刻画声音,于是乎便有了PCM格式的数据,表示麦克风采集声音的频率,采集的位数以及声道数,立体声还是单声道。Media Source ExtensionsMedia Source Extensions可以动态的给Audio和Video创建stream流,实现播放,简单的来说,可以很好的播放进行控制,比如再播放的时候实现 seek 功能什么的,也可以在前端对某种格式进行转换进行播放,并不是支持所有的格式的。通过将数据append进SourceBuffer中,MSE把这些数据存进缓冲区,解码实现播放。这里简单的举个使用MSE播放 audio的栗子:export default class PlaySoundWithMSE{ constructor(audio) { this.audio = audio; if(PlaySoundWithMSE.isSupportMSE()) { this.pendingBuffer = []; this._mediaSource = new MediaSource(); this.audio.src = URL.createObjectURL(this._mediaSource); this._mediaSource.addEventListener(‘sourceopen’, () => { this.sourcebuffer = this._mediaSource.addSourceBuffer(‘audio/mpeg’); this.sourcebuffer.addEventListener(‘updateend’, this.handleSourceBufferUpdateEnd.bind(this)); }) } } addBuffer(buffer) { this.pendingBuffer.push(buffer); } handleSourceBufferUpdateEnd() { if(this.pendingBuffer.length) { this.sourcebuffer.appendBuffer(this.pendingBuffer.shift()); } else { this._mediaSource.endOfStream(); } } static isSupportMSE() { return !!window.MediaSource; }}HTML5 播放器谈起html5播放器,你可能知道bilibili的flv.js,它便是依赖Media Source Extensions将flv编码格式的视频转包装成mp4格式,然后实现播放。从流程图中可以看到,IOController实现对视频流的加载,这里支持fetch的 stream能力,WebSocket等,将得到的视频流,这里指的是flv格式的视频流,将其转封装成MP4格式,最后将MP4格式的数据通过appendBuffer将数据喂给MSE,实现播放。未来上面谈到的都是视频的播放,你也看到,即使播放都存在很多限制,MSE的浏览器支持还不多,那在视频的编码解码这些要求性能很高的领域,前端能否做一些事情呢? 前端性能不高有很多原因,在浏览器这样的沙盒环境下,同时js这种动态语言,性能不高,所以有大佬提出把c++编译成js ,然后提高性能,或许你已经知道我要说的是什么了,它就是ASM.js,它是js的一种严格子集。我萌可以考虑将一些视频编码库编译成js去运行提高性能,其中就不得不提到的FFmpeg,可以考虑到将其编译成asm,然后对视频进行编解码。写在最后我萌可以看到,前端对音视频的处理上由于诸多原因,可谓如履薄冰,但是在视频播放上,随着浏览器的支持,还是可以有所作为的。招纳贤士今日头条长期大量招聘前端工程师,可选北京、深圳、上海、厦门等城市。欢迎投递简历到 tcscyl@gmail.com / yanglei.yl@bytedance.com ...

November 17, 2018 · 2 min · jiezi

5步告诉你QQ音乐的完美音质是怎么来的,播放器的秘密都在这里

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由QQ音乐技术团队发表于云+社区专栏一、问题背景与分析不久前,团队发现其Android平台App在播放MV视频《凤凰花开的路口》时,会带有如电流声一般的杂音,这影响了用户体验。 研发同学在初步定位时,发现有如下特征:Android平台杂音问题必现;iOS、PC平台能正常播放,没有噪音。然而,各平台都是统一用HLS格式播放,即源头都是一样的。对于该问题,我们的定位思路如下:梳理视频播放流程;找到切入点排查。二、播放流程概览分析播放流程如上图(图中内容从左往右),概括其关键步骤如下:播放器初始化:创建读数据线程:read_thread;创建存放audio解码前数据的队列:audioq;创建存放audio解码后数据的队列:sampq。数据读取:①创建context;②探测协议类型:avformat_open_input;③探测媒体类型:avformat_find_stream_info;④获取音视频流:av_find_best_stream;⑤打开媒体解码器:stream_component_open;⑥读取媒体数据,获得AVPacket:av_read_frame(ic, pkt);⑦音视频数据分别送入audioq中;重复⑥、⑦步骤到数据完毕。音频解码:在audio_thread中对audioq中的数据进行decoder_decode_frame解码;解码后的帧AVFrame存放到sampq中;音频播放:aout_thread_n中,通过调用回调接口sdl_audio_callback,对sampq中的音频帧数据进行解码成PCM数据;写入PCM数据到buffer数组,并由AudioTrack播放。三、问题分解与切入在梳理出播放流程后,标记出找到有可能出错的环节,方便进行“分层定位”(图中黄色标记)播放下载文件是否有问题;数据读取是否有问题;音频解码逻辑是否有问题;AudioTrack的设置是否有问题;接下来,根据难易程度,对上述环节逐个验证。1、播放下载文件是否正常把Android平台播放的ts文件与各平台的进行比对,发现两者一样,该环节正常。2、AudioTrack设置是否正常通过日志检查AudioTrack以下配置参数:采样率位深频道以上参数设置的值与音频流的相符合,该环节正常。3、音频解码逻辑是否有问题验证解码逻辑是否有问题,可以通过对PCM数据进行分析来确认。 对aout_thread_n进行修改,将PCM数据额外输出到本地,并与正常的PCM数据进行对比。正常PCM数据频谱图:异常PCM数据频谱图:正常PCM数据波形图:异常PCM数据波形图:对比分析可得出:从频谱图中看出,异常的PCM在人耳十分敏感的频响(1000~8000Hz )区域内的音频数据严重缺失,导致“杂音问题”从波形图中看出,异常的与正常的无声区和有声区都吻合,若解封装、解码逻辑出现异常,极大几率是呈现无波动(一条直线的形式)情况。因此可以先大胆假设解码、解封装逻辑是符合预期的若解码逻辑正常,再结合之前已经验证文件下载正常。可以推测是数据读取环节出现异常。4、数据读取是否有问题通过对数据读取的各步骤增加日志后,发现在av_find_best_stream音频流选择时出现异常: ffmpeg -i 发现,该视频ts分片有2个音频流 通过强制分别读取两条音频流数据播放,发现:第一条正常播放(PCM数据正常)第二条播放杂音(PCM数据异常)Android平台选择了第二条进行播放基于此,也就验证了在第3步中的假设是正确的。由上分析,可以得出结论:Android平台选择了第二条数据有问题的流进行播放。四、问题根源:音频流选择1、选择方式分析代码,大致如下所列,av_find_best_stream函数选择音频流,该函数会根据2个主要参数进行选择:各音频流的在探测媒体类型(avformat_find_stream_info)时,额外解码出来的帧数(选择多的)各音频流的比特率(选择高的)int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, AVCodec **decoder_ret, int flags){ for (i = 0; i < nb_streams; i++) { count = st->codec_info_nb_frames; //音频流探测中解码的帧数 bitrate = avctx->bit_rate;//音频流的比特率 multiframe = FFMIN(5, count); //先比较解码帧数,再比较音频流比特率,谁大谁选 if ((best_multiframe > multiframe) || (best_multiframe == multiframe && best_bitrate > bitrate) || (best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count)) continue; best_count = count; best_bitrate = bitrate; best_multiframe = multiframe; ret = real_stream_index;//最后选择的流index best_decoder = decoder; } return ret;}在该视频中,我们可以看到: codec_info_nb_framesbit_rateaudio_stream 138122625audio_stream 239126375第二条流的解码帧数和比特率要比第一条高,因此选择了第二条流播放2、对比同类方案分析了以上选择规则后,我们对各平台、框架进行了选择规则的对比:备注:ExoPlayer对多音频流的ts分片支持不完善(issue),因此测试时需要调整相关接口。但选择规则依然以上述所示(DefaultTrackSelector)iOS和PC平台采用闭源组件,因此测试时使用了“互换两条音频流顺序”的方法进行测试。互换后,两平台都播放了杂音音频流 ffmpeg -i INPUT_FILE -map 0:0 -map 0:2 -map 0:1 -c copy -y OUTPUT_FILEQuickTime同样是闭源,互换音频流后无法明显差别,通过合成第三条音频流,来验证是它是对所有音频流全播放 ffmpeg -i INPUT_FILE_1 -i INPUT_FILE_2 -map 0:0 -map 0:1 -map 0:2 -map 1:0 -c copy OUTPUT_FILE3、总结从以上数据看到,iOS和PC平台会默认选择第一条流,而在Android平台的FFmpeg和ExoPlayer会根据音频流属性来选择数值更好的一条。“默认选择第一条”方案能更容易地把音源问题暴露。“比较音频流属性”方案能更大几率地选择质量更好的流来提升用户体验。但以上2个选择方案都无法识别“内容异常”的音频流。五、问题解决方案因此,处理该问题,需要从音源上进行修复和规避,我们的建议是从源头杜绝,从终端规避:编辑重新上架正常音源;短期内增加双音频流的检测上报,帮助后台、编辑进行复查;长远看由后台开发工具,分别对存量视频进行双音频流检测和对增量视频保证只转码单音频流;参考资料https://ffmpeg.org/doxygen/2.8/https://github.com/google/Exo…https://www.jianshu.com/p/daf...https://www.jianshu.com/p/a6a...http://km.oa.com/articles/sho...https://codeday.me/bug/201707…相关阅读wamp2.0配置Zend Optimizer藏匿在邮件里的“坏小子”打造一个个人阅读追踪系统 【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识 ...

October 11, 2018 · 1 min · jiezi