J'essaie d'enregistrer un son sous Windows et Python 2.2 afin de
pouvoir l'analyser en frequence.
J'ai joue un peu avec fastaudio
http://www.freenet.org.nz/python/pyPortAudio/
mais je ne comprends pas comment l'enregistrement qui devient une
string peut-etre sauver sous un fichier wav (en utlisant l'exemple) ?
Il n'y a pas non plus de documentation pour dsptools (
http://sourceforge.net/projects/dsptools )
Quelqu'un aurait-il un element de reponse ? Merci d'avance,
Igor.
http://www.speech.kth.se/snack/
peace
sean
J'avais fais une classe, qui fonctionnait avec Python 2.3 + ctypes, et
adressait directement windows.MCI
Si ça te dis, je met ça en-dessous...
Michel Claveau
import time
from ctypes import windll, c_buffer
class mci:
def __init__(self):
self.w32mci = windll.winmm.mciSendStringA
self.w32mcierror = windll.winmm.mciGetErrorStringA
def send(self,commande):
buffer = c_buffer(255)
errorcode = self.w32mci(str(commande),buffer,254,0)
if errorcode:
return errorcode, self.get_error(errorcode)
else:
return errorcode,buffer.value
def get_error(self,error):
error = int(error)
buffer = c_buffer(255)
self.w32mcierror(error,buffer,254)
return buffer.value
def directsend(self, txt):
(err,buf)=self.send(txt)
if err != 0:
print'Erreur',str(err),'sur',txt,':',buf
return (err,buf)
def record(self):
print"Record"
self.directsend('open new type waveaudio alias toto')
self.directsend('Set toto time format milliseconds')
self.directsend('set toto bitspersample 8') # 8 bits ou 16 bits
self.directsend('set toto samplespersec 11025') # 11025 low
qualité 22050 medium qualité 44100 high qualité (CD)
self.directsend('set toto channels 1') # 1 mono 2 stéréo
self.directsend('record toto')
time.sleep(0.1)
def finrecord(self, nomfichier):
self.directsend('stop toto')
self.directsend('save toto '+nomfichier)
self.directsend('close toto')
#self.directsend('delete toto')
message=mci()
message.record()
for i in xrange(5):
time.sleep(1)
print 5-i
print "Fin"
message.finrecord()
Ca marche. Merci beaucoup. J'ai utilise Ctypes pour python 2.2 et ca
marche sous Python 2.2 aussi.
Un petit detail, la derniere ligne devrait etre:
message.finrecord('C:\\enregistrement1.wav')
afin d'enregistrer le son dans le fichier: enregistrement1.wav
cela semble evident mais je suis un nouveau avec python.
Merci aussi a Sean pour la reference sur Snack.
Igor.
Pour la dernière ligne, je suis d'accord. Mais j'ai donné un fichier "brut",
que j'utilise indirectement.
Pour le reste, si tu envisages de pouvoir faire des analyses (fréquences,
niveau, etc.), je serais intéressé par la façon de faire. Cela pourrait
permettre de trouver les début/fin automatiquement, d'approcher (doucement)
la reconnaissance vocale, etc.
@-salutations
Michel Claveau
Il y a bien sur cet article:
http://www.onlamp.com/pub/a/python/2001/01/31/numerically.html
au lieu d'utiliser dislin, j'utilise scipy. Pour l'instant je
m'interesse a des sons tres precis mais si tu es interesse par la
chose, je te conseille de regarder des articles sur les ondelettes
(wavelet en anglais).
Merci encore,
Igor.
A ta question, oui, je ferais un petit resume de mes incursions dans ce
domaine dans ce groupe.
Igor.
Merci pour le lien, très facile, malgré l'anglais omni-présent.
L'exemple donné ayant fonctionné du premier coup, je laisse ma
xénolinguiphobie de côté...
@-salutations
Michel Claveau
MCI