在 Windows 中更改原始波形数据的音高

Posted

技术标签:

【中文标题】在 Windows 中更改原始波形数据的音高【英文标题】:Changing the pitch of raw waveform data in Windows 【发布时间】:2015-11-24 00:20:31 【问题描述】:

我正在尝试修改通过waveInOpen 通过WAVEHDR-structs 获得的波形数据。我想改变声音的音高。

我只有一个指向原始音频数据和使用字节数的指针。

我有点迷茫,因为我找不到任何关于如何做到这一点的例子。 我将非常感谢您提供了一个关于如何编辑原始波形数据的起点(或者甚至是如何更改音高的示例)。

谢谢!

【问题讨论】:

【参考方案1】:

您可以通过更改播放速率来更改音高。例如,您以 48kHz 的采样率录制了一个波形,然后当您播放它时,您告诉系统采样率为 96kHz。一切的音调都会加倍。此外,您可能不希望播放持续时间减半。改变采样率的另一种方法是添加或删除样本以达到基本相同的效果。与其他答案相反,它不像添加或删除样本那样随意。当您删除样本时,您需要应用低通滤波来防止混叠。在插入样本时,您需要应用插值过滤器。如果您没有信号处理背景,这些都不是微不足道的。最后,如果您的目标是改变音高但将持续时间保持在原始持续时间,那么您需要查看相位声码器之类的东西。

【讨论】:

更改播放速率不是一个选项,因为我正在“实时”修改波形(它是一个实时修改波形声音的语音转换器)所以我想我唯一的选择是修改波形字节。删除样本是什么意思?您的回答启发我删除每隔一个字节并用它旁边的字节替换它。这样我就把波形减半了。但这将波形变成了一种响亮的噪音。 @moccajoghurt。样本可能是 16 位的,因此您需要删除每一秒 pair 字节。除此之外,如果您不首先进行低通滤波器,那么您将获得混叠,其中不再适合带宽的原始信号的较高频率将折回。例如,如果您在 48kHz 并且在 20kHz 处有一个音调,然后删除所有其他样本,则 20kHz 变为 40kHz,比 24kHz 的奈奎斯特频率高 16kHz,因此它将折叠并显示在 8kHz。

以上是关于在 Windows 中更改原始波形数据的音高的主要内容,如果未能解决你的问题,请参考以下文章

Python改变wav文件的音高[关闭]

如何更改录制音频的音高并在后台保存?

使用 windows 编解码器解码音频文件

windows2019密码无法登录入域

51获取6050原始数据并通过匿名上位机显示波形

更改音频缓冲区的音高