Python Pyaudio播放文件时的音质

Python Pyaudio播放文件时的音质,python,audio,pyaudio,Python,Audio,Pyaudio,因此,我尝试在我的raspberry pi上运行以下脚本: """PyAudio Example: Play a wave file.""" import pyaudio import wave import sys CHUNK = 1024 if len(sys.argv) < 2: print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0]) sys.exit(-1) wf = wave.

因此,我尝试在我的raspberry pi上运行以下脚本:

"""PyAudio Example: Play a wave file."""

import pyaudio
import wave
import sys

CHUNK = 1024

if len(sys.argv) < 2:
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

# read data
data = wf.readframes(CHUNK)

# play stream (3)
while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()
“PyAudio示例:播放波形文件。”“”
导入pyaudio
输入波
导入系统
区块=1024
如果len(系统argv)<2:
打印(“播放波形文件。\n\n用法:%s filename.wav”%sys.argv[0])
系统出口(-1)
wf=wave.open(sys.argv[1],'rb')
#实例化PyAudio(1)
p=pyaudio.pyaudio()
#明溪(2)
stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
速率=wf.getframerate(),
输出=真)
#读取数据
数据=wf.readframes(块)
#播放流(3)
而数据!='':
stream.write(数据)
数据=wf.readframes(块)
#停流(4)
stream.stop_stream()
stream.close()
#关闭PyAudio(5)
p、 终止()
我使用以下命令创建了一个WAV文件:
arecord-D plughw:1--duration=5-f cd-vv~/rectest.WAV

当我像这样播放时:
aplay~/rectest.wav
播放得很好,声音又响亮又清晰

当我使用脚本(运行pythonplay.py~/rectest.wav)时,音质非常糟糕。我还注意到录制时间为5秒,但当我使用脚本播放时,它需要大约8-9秒才能完成播放(似乎失真使播放时间更长)


这是怎么回事?如何修复它?

我也面临着这个问题,但我只需将增益控制静音,并将扬声器和麦克风的音量降低到白色即可摆脱它

在那之后,我的音质变得非常清晰,意味着更好

所以只要用这个命令打开声音控制器

alsamixer

然后使用您的箭头键切换b/w选项,
扬声器/麦克风的音量
增加/减少
,并使用
空格键
静音/取消静音
控制增益

您尝试过更大的
大小吗?如果文件足够小,试着将整个文件读入内存,看看是否有效。这可能是因为你的脚本没有足够快地为玩家提供信息。是的,我有。你知道我在哪里可以清楚地理解这些论点的含义吗?块、通道、帧率等?我觉得我在胡乱猜测,所以我想这些都没用。由于PyAudio只是一个Python层,后者可能会有所帮助。还有一篇文章专门讨论——这可能是问题所在——以及如何在某些平台上缓解它。