声音lib python

时间:2009-06-24 21:48:58

标签: python

我正在寻找一个用于python的声音库,它可以让每个帧高出一个声音文件的音量

或可以执行隔音门的软件,更喜欢命令行软件

感谢名单!!

4 个答案:

答案 0 :(得分:3)

snack库可以做到。特别是,该库支持WAV,AU,AIFF,MP3,CSL,SD,SMP和NIST / Sphere文件。它可以播放声音,进行功率谱分析和滤波。

答案 1 :(得分:3)

Python有一个内置的wave module

import wave
import struct
import numpy

# read in the data string   
fin = wave.open("input.wav", "rb")
data_string = fin.readframes(fin.getnframes())
wav_params = fin.getparams()
fin.close()

# convert to volume
unpacked = struct.unpack("%dB"%(len(data_string)), data_string)
unpacked = [x**2 for x in unpacked]
# here's the volume
volume = [20 * numpy.log10(numpy.sqrt(i)) for i in unpacked]

noise_level = 40 # 'noise' level  

# filter out values below limit
outstring = ""
for i in range(len(data_string)):
    if volume[i] > noise_level:
        outstring += data_string[i]
    else:
        outstring += "\0"

# write result to new file
fout = wave.open("output.wav", "wb")
fout.setparams(wav_params)
fout.writeframes(outstring)
fout.close()

首次尝试..需要针对任何显着大小的文件进行优化。帽尖到this blog post

答案 2 :(得分:0)

pyo库中充满了非常有用的声音处理和合成工具。

from pyo import *

s = Server().boot()
s.start()
sf = SfPlayer('input.aif', speed=[1,.5], loop=True)
gt = Gate(sf, thresh=-24, risetime=0.005, falltime=0.01, lookahead=5, mul=.4).out()

答案 3 :(得分:0)

首先,如果我错了,请纠正我,但如果你需要每帧的音量意味着每帧的分辨率将以微秒为单位。

例如,典型的音频文件具有44,100帧速率,这意味着每秒4400帧(或1000毫秒),这使得每帧处理大约22.67微秒。这对任何应用程序都非常好。另外,Audio是一种压缩波,需要分析一组样本才能获得频率,功率等属性。

无论如何,如果你想要1ms的块分辨率,pydub模块可用于此目的。
不确定这是否是必要的。

示例代码

from pydub import AudioSegment
from pydub import utils

chunksize = 1 #ms

fname = "C:\\PATH_TO_THE_FILE\\myAudio.wav"
mysong = AudioSegment.from_wav(fname)
myAudioChunks = utils.make_chunks(mysong,chunksize)
#print "myAudioChunks =", myAudioChunks

for audioChunks in myAudioChunks:    
    loudness = audioChunks.dBFS
    print " loudness in dBFS =", loudness  

上面将给出DBFS的响度,如果你想在不同的参数中响度,这里有几个例子。

1)在RMS中获得响度

loudness = audioChunks.dBFS替换为loudness = audioChunks.rms

2)获得样本中的最大响度[即任何样本集中的最高振幅]

loudness = audioChunks.dBFS替换为loudness = audioChunks.max