Ответ 1
Вы можете использовать audiolab
:
import audiolab, scipy
a, fs, enc = audiolab.wavread('file1.wav')
b, fs, enc = audiolab.wavread('file2.wav')
c = scipy.vstack((a,b))
audiolab.wavwrite(c, 'file3.wav', fs, enc)
Я использую язык программирования python, я хочу присоединиться к wav файлу в конце другого wav файла? У меня есть вопрос на форуме, в котором предлагается объединить два wav файла. Добавляем содержимое одного wav файла при определенном смещении, но я хочу присоединиться к двум wav файлам в конце друг друга...
А также у меня была проблема с воспроизведением моего собственного wav файла, используя winsound-модуль. Я смог воспроизвести звук, но используя time.sleep в течение определенного времени, прежде чем играть в любом звуке окон, недостаток ума это, если бы я хотел для воспроизведения звука дольше, чем time.sleep(N), N sec также, звук окон wil jst перекрывается после N секунд воспроизведения winsound nd stop..
Может кто-нибудь помочь? пожалуйста, любезно предложите, как решить эту проблему...
Заранее спасибо
Вы можете использовать audiolab
:
import audiolab, scipy
a, fs, enc = audiolab.wavread('file1.wav')
b, fs, enc = audiolab.wavread('file2.wav')
c = scipy.vstack((a,b))
audiolab.wavwrite(c, 'file3.wav', fs, enc)
Python поставляется с модулем wave, который будет делать то, что вам нужно. Пример ниже работает, когда детали файлов (моно или стерео, частота кадров и т.д.) Одинаковы:
import wave
infiles = ["sound_1.wav", "sound_2.wav"]
outfile = "sounds.wav"
data= []
for infile in infiles:
w = wave.open(infile, 'rb')
data.append( [w.getparams(), w.readframes(w.getnframes())] )
w.close()
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
output.writeframes(data[0][1])
output.writeframes(data[1][1])
output.close()
Я поддерживаю pydub, который предназначен для упрощения такого рода.
from pydub import AudioSegment
sound1 = AudioSegment.from_wav("/path/to/file1.wav")
sound2 = AudioSegment.from_wav("/path/to/file2.wav")
combined_sounds = sound1 + sound2
combined_sounds.export("/output/path.wav", format="wav")
Примечание: pydub - это световая оболочка вокруг аудиопроигрывателя. Таким образом, за кулисами, он делает то, что сказал Tom10
Просто чтобы построить на @tom10 ответ:
from contextlib import closing
with closing(wave.open(outfile, 'wb')) as output:
# find sample rate from first file
with closing(wave.open(wav_files[0])) as w:
output.setparams(w.getparams())
# write each file to output
for infile in wav_files:
with closing(wave.open(infile)) as w:
output.writeframes(w.readframes(w.getnframes()))
Вместо того, чтобы хранить все данные, а затем записывать их в конце за один раз, он записывает его по частям. Он также использует contextlib.close, поэтому вам не нужно закрывать файлы.
я использую библиотеку SOX [1], а затем вызываю ее как
>>> import subprocess
>>> sound_output_path = /tmp
>>> sox_filenames = ['file.wav', 'file1.wav']
>>> subprocess.call(['sox'] + sox_filenames + ['%s/out.wav' % sound_output_path])
Я использовал бы librosa.load
и librosa.write_wav
.
Посмотрите документ здесь