Programme de génération d'un document audio .wav

maxime2585 Messages postés 47 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir,
Je travaille sur un programme qui permet de créer un fichier son à partir d'une liste A obtenue après un filtrage via Python et composée de sous-listes contenant chacune deux éléments, l'élément d'indice 0 étant les fréquences à utiliser et l'élément d'indice 1 étant le niveau d'intensité sonore (non utilisé ici). Mon problème avec ce programme est que le fichier son généré par Python n'est pas lisible (le fichier son est crée mais vide). Je crois que cela vient de ma dernière boucle for contenant les fonctions sinus mais je n'arrive pas à résoudre le problème.
Merci d'avance pour votre aide !
Le programme en question :
import wave
import math

NomFichier = 'son essai.wav'
Monson = wave.open(NomFichier,'w') # instanciation de l'objet Monson

A=[[602.929688, -47.194477], [645.996094, -42.493034], [689.0625, -33.40897], [732.128906, -17.552778], [775.195313, -1.925487], [818.261719, -1.046774], [861.328125, -13.499054], [904.394531, -31.658836], [947.460938, -41.486362], [990.527344, -48.059921], [1033.59375, -49.857601], [1076.660156, -43.585949], [1119.726563, -30.763716], [1162.792969, -4.434253], [1205.859375, -0.142476], [1248.925781, -7.987887], [1291.992188, -35.338837]]

nbCanal = 2    
nbOctet = 1    
fech = 44100   
print(len(A))

F=[]
def frequence(A):
    for i in range(len(A)):
        freq =((A[i][0]))
        F.append(freq)
    return F

print(frequence(A))
  
N=[]  
def niveau(A): 
    for i in range(len(A)):
        niv=1
        N.append(niv)
    return N

print(niveau(A))

duree = 10

nbEchantillon = int(duree*fech)
print("Nombre d'échantillons :",nbEchantillon)

parametres = (nbCanal,nbOctet,fech,nbEchantillon,'NONE','not compressed')
Monson.setparams(parametres)    
print(parametres)

AM=[]
def amplitude(A):
    for i in range(len(N)):
        amp=127.5*N[i]
        AM.append(amp)
    return AM

print(amplitude(A))

VA=[]
def son(A):
    for i in range(len(A)):
        val= wave.struct.pack('B',int(127.5 + AM[i] *math.sin(2.0*math.pi* F[i] * i/fech)))
        VA.append(val)
    return(Monson.writeframes(sum(VA))) # écriture frame

Monson.close()
A voir également:

1 réponse

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Bonjour,

Tu n'appelles pas la fonction son, est-ce normal ?

Quelques recommandations :
  • définis tes fonctions à un endroit, le code global ensuite ;
  • tu pourrais même définir une fonction (appelons la main) et la seule chose faite dans la partie globale est l'appel à
    main()
    qui appelle les différentes fonctions de ton programme ;
  • return
    est un mot-clé de python et donc il n'y a pas de raison de mettre des parenthèse (ce n'est pas une fonction) ;
  • pour être conforme à au code style PEP8, pense à mettre une espace après les virgules et autour de tes opérateurs (
    *
    ,
    =
    , etc).


Bonne chance
0