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 !