我有一个从 Web 服务器下载 PCM 数据的程序,它稍后用于通过标准 PCM 播放器播放。我希望能够允许用户在播放 PCM 数据时更改其音高。
有谁知道如何做到这一点?
最简单的解决方案是以比录制时更高的采样率播放声音 - 以 44 kHz 播放 22 kHz 文件将使音高加倍。您可以通过从声音中丢弃一些样本(质量差)或重新采样声音(如果使用像 sinc 插值这样的好算法则质量好)来实现同样的效果。
但是有一个依赖性——通过以不同的采样率回放来改变音高不仅会改变音高,还会改变声音的长度。可以独立更改持续时间和音高,但这并不容易,并且需要进行大量的信号处理才能获得良好的质量。它通常使用快速傅里叶变换在频域中完成。
我不知道 C# 的任何数字信号处理库,但这似乎是 .net 中音高转换的完整源示例。:
http ://sites.google.com/site/mikescoderama/pitch-shifting