Python RPI:如何动态调整当前播放的wav文件的音量

2024-06-16 10:54:02 发布

您现在位置:Python中文网/ 问答频道 /正文

目前使用覆盆子皮3,Pyaudo,ReSpeaker 2话筒皮帽

如何在RPI中使用python调整.wav文件播放的音量?(通过耳机连接的respeaker 3.5mm音频插孔输出)

我需要RPI动态播放和调整音量,而不需要我手动更改音量

不使用命令提示符中的命令访问alsamixer。需要一些关于如何进行的建议

下面是我的代码的当前进度(此代码将在一段时间内循环播放):

            filename ="output.wav"
            
            RESPEAKER_RATE = 16000
            RESPEAKER_CHANNELS = 2
            RESPEAKER_WIDTH = 2
            RESPEAKER_INDEX = 0  
            chunk = 1024
            wf = wave.open(filename, 'rb')
            p = pyaudio.PyAudio()
            stream = p.open(
                    format = p.get_format_from_width(RESPEAKER_WIDTH),
                    channels = RESPEAKER_CHANNELS,
                    rate = RESPEAKER_RATE,
                    output = True
                )
            
           
            
            data = wf.readframes(chunk)
            while data != '':
                stream.write(data)
                data = wf.readframes(chunk)
            
            stream.stop_stream()
            stream.close()
            p.terminate()

尝试了这段代码,但并不是我想要实现的

在游戏中尝试改变它,而不是在之前改变它

from pydub import AudioSegment

song = AudioSegment.from_wav("output.wav")
song = song - 60
quieter_song_data = song.get_array_of_samples()
quieter_song_fs = song.frame_rate4

Tags: 代码fromoutputdatastreamratesongfilename
1条回答
网友
1楼 · 发布于 2024-06-16 10:54:02

在播放循环中,计算区块的体积(例如,使用均方根),然后如果它太高,则除以

用于8位音频(128为中性扬声器位置)

data = wf.readframes(chunk)
while data != '':
    data2 = (data-128)/128) # now from -1 to 1
    volume = sum(data2 ** 2) ** .5
    if volume > .6:
        data = data2/volume * .6
        data = data*128 + 128
        data = [max(min(int(d),255),0) for d in data]
        # convert data back to type stream is happy with here if needed
    stream.write(data)
    data = wf.readframes(chunk)

相关问题 更多 >