windows - (Python wave 模块)不能在不影响播放速度的情况下改变音频采样率

标签 windows python-2.7 audio pygame wave

我目前正在开发一个项目,其中包括使用 pygame 在按下按钮时播放声音。由于我没有找到从应用程序录制声音的好方法(我反复尝试使用 Portaudio 的 PyAudio,但无法使其工作),我被迫使用外部程序录制音频。

我在 pyaudio 混音器中导入的声音的采样率为 44.1 kHz,而程序录制的声音为 48 kHz。

问题来了:
当我录制音频时,一切都很好,但如果我想导入录制的文件以供进一步使用,它的播放速度会比平时慢。

我发现这是因为采样率,因为我只能使用 pyaudio 混音器设置一个采样率,所以我决定尝试使用以下代码将新文件的采样率修改回 44,1 kHz:

import wave
spf = wave.open('C:\Users\mavri\Desktop\My Recordings\zvuk.wav', 'rb')                  
CHANNELS = spf.getnchannels()
swidth = spf.getsampwidth()
RATE=spf.getframerate()
signal = spf.readframes(-1)
spf.close()
wf = wave.open('C:\Users\mavri\Desktop\My Recordings\zvuk.wav', 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(swidth)
wf.setframerate(44100)
wf.writeframes(signal)
wf.close()

现在问题是一样的,但是这次它影响的是音频文件,而不是pygame。音频文件比平时慢。
我尝试使用采样宽度,将它乘以新的采样率并除以 44100,但我得到的只是很多嘶嘶声,让人想起声音,但远不及它。

我的问题是:如何修改提供的代码,以便创建的新文件具有 44.1 kHz 的采样率,但播放速度保持不变?

最佳答案

我在这里找到了答案:Python - downsampling wav audio file

它需要进行一些调整才能使其工作,只需在编写帧时使用 convert[0] 而不是 convert,因为方法不接受元组。

关于windows - (Python wave 模块)不能在不影响播放速度的情况下改变音频采样率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809732/

相关文章:

python - 如何在 python 中定义匿名类型

python - 使用相同的装饰器路由到 view_func "flask"

python-2.7 - 缺少libAnalyzer

android - 使用Android播放音频流

java - Android:如何使用 ffmpeg 叠加视频和音频?

windows - 使用 'for' 循环迭代目录中的所有文件

ruby 在 windows shell 中注入(inject)击键

unity3d - Unity Video Player-Android上的音频滞后

linux - 如何在 SSH 下的 Powershell 中启动一些文件管理器?

java - Cygwin 和 Java