Here is a simpler solution using pydub .
Using overlaythe module function AudioSegment, you can easily superimposeadd multiple audio to each other.
Here is the working code for combining the three audio files. Using the same concept, you can combine multiple audio with each other.
Read more about the overlayfunction here.
pydub also supports multiple audio formats.
from pydub import AudioSegment
from pydub.playback import play
audio1 = AudioSegment.from_file("chunk1.wav")
audio2 = AudioSegment.from_file("chunk2.wav")
audio3 = AudioSegment.from_file("chunk3.wav")
mixed = audio1.overlay(audio2)
mixed1 = mixed.overlay(audio3)
mixed1.export("mixed.wav", format='wav')
play(mixed1)
.
44 sound.wav
.
dtype int16
/, .
wav test.txt
import numpy as np
from scipy.io.wavfile import read
from pydub import AudioSegment
from pydub.playback import play
import wave, struct, math
sampleRate = 44100.0
duration = 1.0
frequency = 440.0
wavef = wave.open('sound.wav','w')
wavef.setnchannels(1)
wavef.setsampwidth(2)
wavef.setframerate(sampleRate)
for i in range(int(duration * sampleRate)):
value = int(32767.0*math.cos(frequency*math.pi*float(i)/float(sampleRate)))
data = struct.pack('<h', value)
wavef.writeframesraw( data )
wavef.writeframes('')
wavef.close()
rate, signal = read("sound.wav")
np.savetxt('test.txt', signal, delimiter=',')
wavedata1 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.int16)
wavedata2 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.int32)
wavedata3 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.float16)
audio_segment1 = AudioSegment(
wavedata1.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
audio_segment2 = AudioSegment(
wavedata2.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
audio_segment3 = AudioSegment(
wavedata3.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
play(audio_segment1)
play(audio_segment2)
play(audio_segment3)
mixed1 = audio_segment1.overlay(audio_segment2)
mixed2 = mixed1.overlay(audio_segment3)
mixed2.export("mixed.wav", format='wav')
play(mixed2)