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

Fermé
maxime2585 Messages postés 47 Date d'inscription samedi 27 février 2016 Statut Membre Dernière intervention 8 octobre 2021 - Modifié le 10 oct. 2021 à 01:33
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 19 oct. 2021 à 17:27
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()

1 réponse

mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
Modifié le 19 oct. 2021 à 17:27
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