百科问答小站 logo
百科问答小站 font logo



视频快放时声音是经过了怎样的处理才保证了音高的不变? 第1页

  

user avatar   maigo 网友的相关建议: 
      

你要的功能叫做「变速不变调」。知乎上有人写过一些综述,比如:

我想稍微介绍一下其中的 PSOLA (pitch-synchronous overlap-and-add) 算法。它的大概步骤是:

  1. 测出语音的基频;
  2. 把语音分帧,每帧代表一个周期(通常让帧有重叠,并加窗,以避免帧的两端信号有跳变);
  3. 把各帧移近或移远一些,就可以升高或者降低音调(同时也会加快或减慢速度);
  4. 把各帧多重复几次,或者去掉一些帧,就可以减慢或者加快速度(同时不改变音调)。

PSOLA 算法不仅可以「变速不变调」,它可以独立地改变语音的速度和音调:

  • 不进行第 3 步,就可以单独改变速度;
  • 在第 4 步中让速度的变化与第 3 步抵消,就可以单独改变音调;
  • 在第 4 步中让速度的变化与第 3 步不抵消,就可以随心所欲地改变速度和音调。

PSOLA 算法还有一个优点是,在整个算法中不需要对波形进行重采样。这有两个好处:

  • 不会改变声音的共振峰分布,所以不会改变音色;
  • 在升高音调时不会导致频谱溢出,在降低音调时不会导致高频部分频谱为零。

当然 PSOLA 算法也有一些局限和挑战:

  1. 算法依赖于语音有基频,所以语音中的清音、打击乐器声等没有基频的声音需要用其它算法处理;
  2. 语音的基频是变化的,所以要测量瞬时基频,也就是进行 pitch tracking,这本身也是一个有难度的任务。

user avatar   s.invalid 网友的相关建议: 
      

很简单,这是通过傅里叶变换玩的一个小把戏。


我们知道,wav格式的音频数据是按一定间隔从平面坐标系的波形曲线上采样的一组坐标点;而傅里叶变换说白了就是把一小段音频数据(比如0.01秒或更短)从一组坐标点转换为一组频率——而mp3等有损压缩算法其实就是剔除那些人耳不太能注意到的、过高或过低的频率。


频率信息是不能直接播放的。重放时,我们就不得不把频率信息转换回波形采样数据,这样才能驱动声卡发声。


容易想到,只要在把频率信息转换回波形数据之前,先均匀抛弃一定比例的傅里叶变换后的数据,这就相当于保持声音数据频率的同时、缩短了声波波形的总长度(删除了一定比例的波形曲线),自然就达成了“播放语速加倍再加倍,但声音频率不变”的设计目标。


当然,抛弃一些波形曲线段之后,剩余的曲线拼接起来会“接不上茬”。这种周期性的跳变最终会以噪音的形式体现。要消除这种噪声,那可就麻烦了。




  

相关话题

  如何评价爱否的视频:完全音频发烧指南:揭露 4 大玄学真相? 
  如何评价鱼9的音频? 
  5000内搭配K712什么机器比较好呢天鹰座二代和udp-3?单买湖人G111耳放配单独解码更好吗。? 
  为什么不同的声音都不见了,只剩下一种声音? 
  如何把图像放入音频频谱图中? 
  5000内搭配K712什么机器比较好呢天鹰座二代和udp-3?单买湖人G111耳放配单独解码更好吗。? 
  人是怎么感受声音来自上方的? 
  有什么方便好用的独立音频解码器推荐? 
  如何把图像放入音频频谱图中? 
  使用电容麦的唱歌主播怎样大幅提升直播时的人声响度还没有杂音呢? 

前一个讨论
C/C++ 如何自定义printf函数的格式化符?
下一个讨论
国产动画是不是开始降维打击海外动画了?日本动画是不是走到尽头了?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利