IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Pyaudio : fusionner 2 frames


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Pyaudio : fusionner 2 frames
    Bonjour à tous !

    Pour un projet, je dois manipuler des données audio (sous forme frames en bytes) avec Pyaudio. C'est alors que je suis confronté à un problème : comment fusionner des frames audio de manière à avoir une seule piste de x bytes à partir de 2 pistes de x bytes (soit 2x -> x données).

    J'ai quelque peu simplifié la réalité pour l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import pyaudio
    import wave
     
    CHUNK = 1024
     
    def fusion(data1,data2) :
        output=[]
        if len(data1)!=len(data2) : raise ValueError ('Len data1 != len data2')
        for i in range(len(data1)) :
                coeff=127-data1[i]
                coeff+=127-data2[i]
                if coeff<0 : coeff=0
                elif coeff>255 : coeff=255
                output.append(coeff)
        return bytes(output)
     
    piste1 = wave.open("piste1.wav", 'rb')
    piste2 = wave.open("piste2.wav", 'rb')
     
    p1 = pyaudio.PyAudio()
     
    stream1 = p1.open(format=p1.get_format_from_width(piste1.getsampwidth()),
                    channels=piste1.getnchannels(),
                    rate=piste1.getframerate(),
                    output=True)
     
     
    data1 = piste1.readframes(CHUNK)
    data2 = piste2.readframes(CHUNK)
     
    while data1 != b'' :
        stream1.write(fusion(data1,data2))
        data2 = piste2.readframes(CHUNK)
        data1 = piste1.readframes(CHUNK)
     
    stream1.stop_stream()
    stream1.close()
     
    p1.terminate()
    Ma fonction de fusion marche à peu près mais le son est, comment dire... horrible. Je pense que c'est du au fait que j'arrondi à 0 ou 255 tout ce qui dépasse. Auriez-vous une idée pour que ça fonctionne ou une fonction qui permet de le faire ?

    Merci d'avance !
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    J'ai réussi à faire ça avec audioop.add. Mais se pose maintenant une autre question : comment le faire avec plus de 2 frames, pas seulement un nombre puissance de deux ? si j'ai 3, 4, 5 pistes à fusionner...
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 815
    Points : 7 107
    Points
    7 107
    Par défaut
    Quand tu fusionnes, tu récupères bien la valeur de la frame fusionnée ? Dans ce cas il suffit de rajouter la 3ème à la frame fusionnée dont le résultat sera une frame fusionnée, puis on rajoute la 4ème ...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Oui, mais le problème est que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fusion=audioop.add(frame1,frame2,1)
    fusion=audioop.add(fusion,frame3,1)
    Et bien la frame 3 est jouée à volume double par rapport aux autres frames. Enfin je vais me documenter, il doit bien y avoir des trucs pour changer le volume d'une frame dans ce module...
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [flash] ouvrir une page dans une frame différente
    Par viena dans le forum Intégration
    Réponses: 6
    Dernier message: 01/08/2007, 15h54
  2. ouvrir 2 frames avec un lien
    Par Slash dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 07/03/2003, 09h44
  3. Linear Frame Buffer
    Par Neo82 dans le forum Assembleur
    Réponses: 10
    Dernier message: 01/03/2003, 21h11
  4. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37
  5. Frame Rate
    Par starsky dans le forum OpenGL
    Réponses: 6
    Dernier message: 31/08/2002, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo