Смешивание wav файлов с использованием numpy в python 3 - PullRequest
3 голосов
/ 26 сентября 2019

Я пытаюсь создать один аудиофайл из нескольких файлов WAV.Используя tkinter и pygame.mixer, я преобразовал нажатия клавиш в словарь, в котором хранятся аудиосэмплы и время их вызова.{sound1:10000, sound2:10001, ect...}

До сих пор я придумал способ добавить блоки молчания:

def change_speed(seconds):
    '''modifies the metronome beat to loop at different speeds. This is done by creating a new wav file.'''
    #original wav file is 0.1 seconds long, so subtract that from time added
    seconds-=0.1
    #read the original wav file
    original = scipy.io.wavfile.read('Downloads\\sounds\\metronome_original.wav')
    #use sample rate of the original file (should be 44100) to create a new block of silence
    add_secs = np.array([[0]]*round(original[0]*seconds))
    add_secs.dtype='int16'
    #concatenate new block to original
    new = np.concatenate((original[1], add_secs))
    scipy.io.wavfile.write('Downloads\\sounds\\metronome.wav', original[0], new)

Есть ли способ объединить перекрывающиеся массивы, такие как [[0,0,1,1,2,0], [0,0,0,3,2,1]], в один файл WAV?

Обновление: если быть более точным, я пытаюсь объединить два аудиосэмпла, которые перекрываются во время воспроизведения, например, диджей, который начинает играть одну песню до того, как другая закончится.Есть ли способ сделать это с помощью целочисленных или байтовых массивов, созданных в Python?Вот так: enter image description here

1 Ответ

0 голосов
/ 26 сентября 2019

Вот как бы я это сделал:

wav1 = [0,0,1,1,2,0]
wav2 = [0,0,0,3,2,1]
combined = np.hstack([wav1, wav2])

from scipy.io import wavfile
import numpy as np

N = 2400  # Samples per second.

wavfile.write('combined.wav', rate=N, data=combined.astype(np.int16))
...