2009-06-24 9 views
3

im la recherche d'un lib sonore pour python qui me peut tall par image le volume d'un fichier sonson python lib

ou un logiciel qui peut faire un noise gate, un logiciel en ligne de commande preferd

Thanx! !

Répondre

3

La bibliothèque snack peut le faire. En particulier, cette bibliothèque prend en charge les fichiers WAV, AU, AIFF, MP3, CSL, SD, SMP et NIST/Sphere. Il peut jouer le son, faire l'analyse du spectre de puissance et le filtrage.

+0

c'est un très bon outil mais ce n'est pas fait pour moi ... pouvez-vous recommander l'outil anntuer? –

+0

Je ne sais pas. Vous devez être plus précis sur ce dont vous avez besoin si vous voulez de l'aide. – Eolmar

3

Python a intégré 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() 

première tentative de passe .. doit être optimisé pour les fichiers de taille importante. Chapeau à this blog post

0

La bibliothèque pyo est pleine d'outils de synthèse et de manipulation du son très utiles.

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() 
0

Tout d'abord, corrigez-moi si je me trompe, mais si vous avez besoin de volume par image signifie la résolution de chaque trame ira en microsecondes. Par exemple, un fichier audio typique a une fréquence d'images de 44.100, ce qui signifie 44.100 images par seconde (ou 1000 ms), ce qui place chaque traitement d'image en environ 22,67 microsecondes. Ce qui est très bien pour n'importe quelle application. En outre, Audio est une onde de compression qui nécessite un ensemble d'échantillons à analyser pour obtenir son attribut tel que fréquence, puissance, etc.

Quoi qu'il en soit, si vous voulez une résolution de morceau de 1ms, le module pydub peut être utilisé à cette fin.
Je ne sais pas si c'est nécessaire.

Exemple de code

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 

Au-dessus donnera en volume DSBF, si vous voulez en volume ici différents paramètres sont quelques exemples.

1) Pour obtenir le volume sonore dans RMS

remplacer loudness = audioChunks.dBFS avec loudness = audioChunks.rms

2) Pour obtenir un niveau sonore maximal dans l'échantillon [ie plus grande amplitude dans un jeu d'exemples]

remplacer loudness = audioChunks.dBFS avec loudness = audioChunks.max