C#中的PCM数据间距变化

我有一个从Web服务器下载PCM数据的程序,它稍后用于通过标准PCM播放器播放。 我希望能够允许用户在播放时更改PCM数据的音高。

有谁知道如何做到这一点?

我不知道C#的任何数字信号处理库,但这似乎是.net中音高变换的完整源代码示例:
http://sites.google.com/site/mikescoderama/pitch-shifting

最简单的解决方案是以比录制时更高的采样率播放声音 – 以44 kHz播放22 kHz文件将使音高加倍。 您可以通过丢弃声音中的一些样本(质量差)或重新采样声音来实现相同目标(如果使用像sinc插值这样的好算法,则可以获得良好的质量)。

但是存在依赖性 – 通过以不同的采样率回放来改变音高不仅会改变音高,还会改变声音的长度。 可以独立地改变持续时间和音高,但这并不容易,并且涉及大量的单一处理以实现高质量。 它通常使用快速傅立叶变换在频域中完成。