[时间:2019-05] [状态:Open]
[关键词:音频,audio,倍速,变速,变调,soundtouch,sonic]

音频变调变速原理分析

先来一段语音处理的理论:

变速变调可分为:变速不变调和变调不变速。语音变速不变调是指保持音调和语义保持不变,语速变快或变慢。该过程表现为语谱图在时间轴上如手风琴般压缩或者扩展。那也就是说,基频值几乎不变,对应于音调不变;整个时间过程被压缩或者扩展,声门周期的数目减小或者增加,即声道运动速率发生改变,语速也随之变化。对应于语音产生模型,激励和系统经历与原始发音情况几乎相同的状态,但持续时间相比原来或长或短。严格地讲,基频和音调是两个不同的概念,基频是指声带振动的频率,音调是指人类对基频的主观感知,但是两者变化基本一致,即基频越高,音调越高,基频越低,音调越低,音调是由基频决定的。因此,语音变调不变速就是指改变说话人基频的大小,同时保持语速和语义不变,即保持短时频谱包络(共振峰的位置和带宽)和时间过程基本不变。对应于语音产生模型,变调改变了激励源;声道模型的共振峰参数几乎不变,保证了语义和语速不变。综上所述,变速改变声道运动速率,力求保持激励源不变;变调改变激励源,力求保持声道的共振峰信息不变。但是声源和声道不是相互独立的,在改变声源时,必然也会非线性的影响声道,同样地,改变声道时也会或多或少的影响声源,两者之间相互影响,相互作用。

语音变调在变声软件中较常用。而语音变速在播放器中常用,比如倍速播放(快播、慢播)。本文重点关注变速。
相对于视频基于帧的变速原理,跳帧或者插帧。音频的变速原理并不是如此简单,因为简单的抽采样点会引起声音的不连续、噪声或爆破音,主观体验较差。
所以一下简单的音频处理策略通常是行不通的:(以x2倍速为例)

1.播放设备实现,设置播放设备播放采样率加倍,这样单位时间播放的采样点数加倍,可以实现变二倍速不变调,但声音不连续。
2.播放前PCM重采样为原采样率的一半,可以实现二倍速,但是会变调。
3.丢帧,每隔一帧丢一帧,可以实现两倍速,但是也会有刺啦刺啦的噪音,而且声音会产生断续,体验十分差。

可用方案

所以为了实现较好的主观体验,只能采用相对复杂的语音处理策略。目前较为常用的音频变速解决方案有两个:soundtouch和Sonic。

ijkplayer使用的是soundtouch,EXOPlayer使用的是Sonic。

在Android上还有一种实现方式,基于AudioTrack的变速播放,代码如下:

    PlaybackParams params = audioTrack.getPlaybackParams();//params.setSpeed(1.0f);  // available//params.setSpeed(0.5f);  // availableparams.setSpeed(1.5f);  // not availableaudioTrack.setPlaybackParams(params);

详细用法建议参考PlaybackParams。

Sonic和Soundtouch用法类似,都是提供封装好的库,将原音频的PCM数据通过接口函数处理为目标格式,比如二倍速,可能PCM采样点就减半。
这里以Soundtouch提供的接口为例,说明下如下使用:

参数设置类接口:

  • setChannels(int) 设置声道,1 = mono单声道, 2 = stereo立体声
  • setSampleRate(uint) 设置采样率
  • setRate(double) 指定播放速率,原始值为1.0,大快小慢
  • setTempo(double) 指定节拍,原始值为1.0,大快小慢
  • setRateChange(double)、setTempoChange(double) 在原速1.0基础上,按百分比做增量,取值(-50 .. +100 %)
  • setPitch(double) 指定音调值,原始值为1.0
  • setPitchOctaves(double) 在原音调基础上以八度音为单位进行调整,取值为[-1.00,+1.00]
  • setPitchSemiTones(int) 在原音调基础上以半音为单位进行调整,取值为[-12,+12]

PCM处理类接口:

  • putSamples(const SAMPLETYPE *samples, uint nSamples) 输入采样数据
  • receiveSamples(SAMPLETYPE *output, uint maxSamples) 输出处理后的数据,需要循环执行
  • flush() 冲出处理管道中的最后一组“残留”的数据,应在最后执行

从上述接口来看,类似于常规的解码器或者解复用器的调用逻辑。

小结

本文简述了音频变速变调的原理,并对目前Android平台上可用的音频变速方案做了总结,包括Soundtouch、Sonic及AudioTrack三种方案,仅供后续参考。

参考资料

  1. 音频倍速(变速不变调)的实现
  2. 变速变调原理与方法总结
  3. SoundTouch官网
  4. ijkplayer倍速变调问题解决方案
  5. SoundTouch实现音频变速变调

转载于:https://www.cnblogs.com/tocy/p/audio-tune-speed-change.html

音频变速播放原理分析及实现方案相关推荐

  1. 音频变速变调原理及 soundtouch 代码分析

    音频变速变调原理及 soundtouch 代码分析 作者:floer rivor 2021 年 4 月 30 日 本文字数:5066 字 阅读完需:约 17 分钟 概述 音频变速变调在不同的场景可以分 ...

  2. ijkplayer音频解码播放架构分析

    ijkplayer是一款跨平台播放器,支持Android与iOS播放,音频解码默认使用FFmpeg的avcodec软解.Android端播放音频可以用OpenSL ES和AudioTrack,而iOS ...

  3. MySQL优化原理分析及优化方案总结

    前言 今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞.查了一下,这件事并不算很新鲜了(已经过了5天的样子),本文来聊聊吧. 说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jac ...

  4. Mp4文件播放原理分析

  5. 音视频开发之旅(66) - 音频变速不变调的原理

    目录 声音的基本知识 时域压扩(TSM)的原理 波形相似叠加(WSOLA) 资料 收获 音频的原始pcm数据是由 采样率.采样通道数以及位宽而定.常见的音频采样率是44100HZ,即一秒内采样4410 ...

  6. sonic音频变速不变调的原理分析

    1.问题背景 音频的原始pcm(Pulse Code Modulation)数据是由采样频率.通道数以及采样精度(位宽)而决定.人耳能听到的频率范围是[20H~20kHz],所以常见的音频采样率是44 ...

  7. 9.ffplayer 原理、架构及代码分析——变速播放的实现

    基本原理 变速播放的实现原理很简单.抛开音频回放暂不考虑,只有视频的情况下,变速播放就是改变了视频回放的播放帧率.如果帧率是 30fps,我们以 200% 的速度播放,那么等于是把帧率提升到了 60f ...

  8. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  9. 一篇读懂无线充电技术(附方案选型及原理分析)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: 目录 一篇读懂无线充电技术(附方案选型及原理分析) 0.背景 1.无线供电特 ...

最新文章

  1. 【Java Web开发指南】JQuery基础笔记
  2. 口语学习Day4:今天带你们一起逛一下博物馆
  3. Oracle三种循环:for,while,do...while(PL/SQL)
  4. VS C++生成dll和静态调用dll的方法
  5. jmeter执行python脚本,Jmeter+Python-1问题记录jmeter执行Python3的脚本时报 ValueErro
  6. java文件调用脚本_Java中调用文件中所有bat脚本
  7. jooq_jOOQ与Hibernate:何时选择哪个
  8. 在Spring中配置多个View解析器
  9. linux root邮箱地址,linux – 如何将root的电子邮件转发到外部电子邮件地址?
  10. 【从入门到放弃-Java】并发编程-线程安全
  11. LeetCode 234. Palindrome Linked List
  12. 张朝阳寄语“校花”把参赛比做登山 走到不同阶段都是一种成就
  13. php不用框架怎么写,php框架不用写sql语句就能调用数据库里表的字段是怎么实现的...
  14. 切换至 root 身份
  15. 使用指针时的“陷阱”
  16. Vmware虚拟机红帽子Linux联网
  17. 淘宝天猫自动抢购插件下载-开发学习
  18. todo Java注解
  19. 如何选购计算机的硬盘,教你如何选配电脑—硬盘篇
  20. 华为在线笔试题-python

热门文章

  1. 达人评测 R7 PRO 6850HS 核显相当于什么显卡
  2. Adrealm:区块链的“快慢之道”|金色财经独家专访
  3. 视频编辑软件编辑星海外英文网站上线
  4. 科幻科技对话:机器人实在不能变得像人一样愚蠢
  5. JavaWeb的架构
  6. WordPress搜索引擎蜘蛛统计分析插件:Spider Analyser
  7. C语言——初识C语言(define定义常量和宏,指针,结构体)
  8. Zotero 和它的朋友们: 一个文献阅读生态
  9. 小程序 身份认证服务器,如何实现微信小程序与.net core应用服务端的无状态身份验证...
  10. 【故障处理】队列等待之enq: TX - row lock contention