gpt4 book ai didi

python - 如何通过使用arduino开发板和python脚本从电位计连续获取电压信号来调整音频文件的音量

转载 作者:行者123 更新时间:2023-12-03 02:13:54 29 4
gpt4 key购买 nike

我想通过调节电位器来调节正在播放的mp3文件的音量。我正在使用python脚本通过Arduino板串行读取电位计信号。借助pydub库,我可以读取文件,但无法在播放文件时调整其音量。这是我经过长时间搜索后完成的代码
我只指定了Pydub部分的一部分。有关信息,请使用vlc媒体播放器更改音量。

>>> from pydub import AudioSegment
>>> song = AudioSegment.from_wav("C:\Users\RAJU\Desktop\En_Iniya_Ponnilave.wav")

在播放文件时,我无法调整值。请有人解释如何做。

最佳答案

首先,您需要将音频信号解码为原始音频,然后将信号拆分为X帧,然后您可以操作áudio,并且在每一帧都可以更改音量,音调或速度等!

要改变音量,您只需要将原始音频 vector 乘以一个因子即可(这可以是电位计数据信号)。

如果 vector 是短整数或浮点格式,则此因子可能会有所不同!

从python中的wav文件获取原始音频数据的一种方法是使用wave lib

import wave

spf = wave.open('wavfile.wav','r')

#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
decoded = numpy.fromstring(signal, 'Float32');

现在您可以将解码的 vector 乘以一个因子,例如,如果您想增加10dB,则需要计算 10^(DbValue/20),然后在python 10**(10/20) = 3.1623
newsignal = decoded * 3.1623;

现在,您需要再次对 vector 进行编码以播放新的帧音频,可以使用“ from struct import pack”和 pyaudio做到这一点!
stream = pyaud.open(
format = pyaudio.paFloat32,
channels = 1,
rate = 44100,
output = True,
input = True)

EncodeAgain = pack("%df"%(len(newsignal)), *list(newsignal))

最后播放您的帧音频,请注意,您将在每一帧中进行播放并以一个循环播放它,此过程太快了,并且潜伏期很短!
stream.write(EncodeAgain)

PS:此示例适用于浮点格式!

关于python - 如何通过使用arduino开发板和python脚本从电位计连续获取电压信号来调整音频文件的音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21753764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com