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:
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 !