设置系统时间对samplerate有什么要求

设置系统时间对samplerate有什么要求,第1张

采样率、采样速率。

简单来说,samplerate就是模拟信号转为数字信号时的采样频率,本身是一种采样率,所以设置系统时间对samplerate有采样率和采样速率的要求。

你先在声卡驱动面板里面的。的这个 ASIO缓冲区里面 先调整好这 大小的。需要退出那些什么播放器和机架这些的。关闭一下声卡电源。重新打开再设置好的。设置好的。SAM里面会默认这缓冲的大小的了。

音频变速播放原理分析及实现方案

[关键词:音频,audio,倍速,变速,变调,soundtouch,sonic]

音频变调变速原理分析

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

语音变调在变声软件中较常用。而语音变速在播放器中常用,比如倍速播放(快播、慢播)。本文重点关注变速。

相对于视频基于帧的变速原理,跳帧或者插帧。音频的变速原理并不是如此简单,因为简单的抽采样点会引起声音的不连续、噪声或爆破音,主观体验较差。

所以一下简单的音频处理策略通常是行不通的:(以x2倍速为例)

1.播放设备实现,设置播放设备播放采样率加倍,这样单位时间播放的采样点数加倍,可以实现变二倍速不变调,但声音不连续。

2.播放前PCM重采样为原采样率的一半,可以实现二倍速,但是会变调。

3.丢帧,每隔一帧丢一帧,可以实现两倍速,但是也会有刺啦刺啦的噪音,而且声音会产生断续,体验十分差。

可用方案

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

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

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

详细用法建议参考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三种方案,仅供后续参考。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7857289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存