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 :
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 ?
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()
Merci d'avance !
Partager