Hướng dẫn how do i combine multiple wav files in python? - làm cách nào để kết hợp nhiều tệp wav trong python?

30

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang sử dụng ngôn ngữ lập trình Python, tôi muốn tham gia vào tệp WAV ở cuối tệp WAV khác? Tôi có một câu hỏi trong diễn đàn đề xuất cách hợp nhất hai tệp wav i.e thêm nội dung của một tệp wav ở một số phần bù nhất định, nhưng tôi muốn tham gia hai tệp wav ở cuối của nhau ...

Và tôi cũng đã có một đầu dò chơi tệp WAV của riêng mình, sử dụng mô -đun Winsound..Tôi đã có thể phát âm thanh nhưng sử dụng thời gian. Âm thanh dài hơn thời gian.s ngủ (n), N Sec cũng vậy, Windows Sound sẽ chồng lên nhau sau khi N giây chơi Winsound ND Stop ..

Bất cứ ai có thể giúp đỡ không ?? Xin vui lòng đề nghị làm thế nào để giải quyết những điều này ...

Cảm ơn trước

Hướng dẫn how do i combine multiple wav files in python? - làm cách nào để kết hợp nhiều tệp wav trong python?

tom10

64,9K9 Huy hiệu vàng122 Huy hiệu bạc134 Huy hiệu đồng9 gold badges122 silver badges134 bronze badges

Khi được hỏi ngày 23 tháng 5 năm 2010 lúc 4:57May 23, 2010 at 4:57

Python tàu với mô -đun sóng sẽ làm những gì bạn cần. Ví dụ dưới đây hoạt động khi các chi tiết của các tệp (mono hoặc âm thanh nổi, tốc độ khung hình, v.v.) là như nhau:

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])
for i in range(len(data)):
    output.writeframes(data[i][1])
output.close()

Miguelmorin

4.4473 Huy hiệu vàng25 Huy hiệu bạc51 Huy hiệu Đồng3 gold badges25 silver badges51 bronze badges

Đã trả lời ngày 24 tháng 5 năm 2010 lúc 20:57May 24, 2010 at 20:57

tom10tom10tom10

64,9K9 Huy hiệu vàng122 Huy hiệu bạc134 Huy hiệu đồng9 gold badges122 silver badges134 bronze badges

2

Khi được hỏi ngày 23 tháng 5 năm 2010 lúc 4:57

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")

Python tàu với mô -đun sóng sẽ làm những gì bạn cần. Ví dụ dưới đây hoạt động khi các chi tiết của các tệp (mono hoặc âm thanh nổi, tốc độ khung hình, v.v.) là như nhau:

MiguelmorinNov 14, 2012 at 17:39

4.4473 Huy hiệu vàng25 Huy hiệu bạc51 Huy hiệu ĐồngJiaaro

Đã trả lời ngày 24 tháng 5 năm 2010 lúc 20:5741 gold badges165 silver badges189 bronze badges

2

Tôi là người bảo trì Pydub, được thiết kế để làm cho loại điều này dễ dàng.
We can do this with the standard library as shown by tom10 and eggbert's answers.
Below is a shorter version:

  1. Lưu ý: Pydub là một trình bao bọc ánh sáng xung quanh âm thanh. Vì vậy, đằng sau hậu trường, nó thực chất là những gì Tom10 đã đề cập
  2. Đã trả lời ngày 14 tháng 11 năm 2012 lúc 17:39

    with wave.open(outfile, 'wb') as wav_out:
        for wav_path in infiles:
            with wave.open(wav_path, 'rb') as wav_in:
                if not wav_out.getnframes():
                    wav_out.setparams(wav_in.getparams())
                wav_out.writeframes(wav_in.readframes(wav_in.getnframes()))
    

JiaarojiaaroMar 23, 2018 at 17:26

72.3K41 Huy hiệu vàng165 Huy hiệu bạc189 Huy hiệu đồngspacether

Giải pháp Python 3: Chúng ta có thể làm điều này với thư viện tiêu chuẩn như được hiển thị bởi câu trả lời của Tom10 và Eggbert. Dưới đây là phiên bản ngắn hơn:1 gold badge21 silver badges22 bronze badges

2

Chỉ viết các tham số cho tệp sóng đầu tiên. Chúng ta có thể kiểm tra độ dài tệp wav_out để xem chúng ta chưa viết cho nó. Nếu chúng ta không viết các tham số sóng chỉ một lần.

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()))

Sau đó viết khung vào wav_out khi chúng được đọc từ wav_in.

Đã trả lời ngày 23 tháng 3 năm 2018 lúc 17:26Aug 26, 2015 at 16:52

Spacetherspacethereggbert

1.7241 Huy hiệu vàng21 Huy hiệu bạc22 Huy hiệu đồng5 gold badges27 silver badges37 bronze badges

1

Chỉ để xây dựng trên câu trả lời của @Tom10:

Thay vì lưu trữ tất cả các dữ liệu sau đó viết nó ở cuối một lần, nó viết từng chút một. Nó cũng sử dụng bối cảnh. Close để bạn không phải đóng các tệp.

Đã trả lời ngày 26 tháng 8 năm 2015 lúc 16:52

import sox    
cbn=sox.Combiner()
sounds=[]
#PROCESS SOUND PATHS TO AN ARRAY
if len(sounds)>=2:
    print(sounds)
    cbn.build(sounds,'outputfilepath.ext','concatenate')

EggberteggbertMar 29, 2019 at 16:44

2.9455 huy hiệu vàng27 Huy hiệu bạc37 Huy hiệu đồng

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)

5

Tôi đã sử dụng pysox

import librosa
import numpy as np
import librosa.display

example_audio = librosa.util.example_audio_file()
x, sr = librosa.load(example_audio, duration=5)
print('shape of x ==> ' + str(x.shape))
y, sr = librosa.load(example_audio, duration=5)
print('shape of y ==> ' + str(y.shape))
z = np.append(x,y)
print('shape of x+y = z ==> ' + str(z.shape))
librosa.output.write_wav('joined_file.wav', z, sr)

z_loaded, sr = librosa.load('joined_file.wav')
print('shape of z loaded ==> ' + str(z_loaded.shape))

Mô-đun sóng và nhiều người khác dường như không hỗ trợ các wav-law.

Pysox Reqs mà bạn cài đặt SOX và cập nhật đường dẫn của mình để bao gồm thư mục được cài đặt.

Đã trả lời ngày 29 tháng 3 năm 2019 lúc 16:44

Bạn có thể sử dụng audiolab:

Tôi sẽ sử dụng librosa.load

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")
0. Kiểm tra tài liệu ở đây

Đầu ra:Oct 13, 2017 at 7:45

Hình dạng của x ==> (110250,)penduDev

Hình dạng của y ==> (110250,)34 silver badges37 bronze badges

2

Hình dạng của x+y = z ==> (220500,)

>>> import subprocess
>>> sound_output_path = /tmp
>>> sox_filenames = ['file.wav', 'file1.wav']
>>> subprocess.call(['sox'] + sox_filenames + ['%s/out.wav' % sound_output_path])

Hình dạng của Z Loaded ==> (220500,)

Đã trả lời ngày 13 tháng 10 năm 2017 lúc 7:45May 23, 2010 at 12:30

Làm cách nào để kết hợp nhiều tệp WAV thành một?

Người tham gia wav..
Tải lên các tệp WAV (. WAV) của bạn. Chọn các tệp WAV mà bạn muốn hợp nhất ..
Đặt các tập tin WAV của bạn theo thứ tự. Chỉ cần kéo và thả các tệp của bạn theo thứ tự bạn muốn chúng xuất hiện trong âm thanh cuối cùng ..
Tải xuống tệp WAV mới của bạn. Sẽ mất vài phút cho đến khi tệp đã sẵn sàng và tự động tải xuống ..

Làm thế nào để bạn hợp nhất âm thanh trong Python?

Phương pháp 1: Sử dụng fainpy Audio_clip_paths là danh sách các đường dẫn đến các tệp âm thanh, chúng tôi khởi tạo một đối tượng audiofileclip cho mỗi clip âm thanh, sau đó chúng tôi sử dụng hàm Concatenate_Audioclips () do FINPY cung cấp để kết hợp các tệp âm thanh.Cuối cùng, chúng tôi viết clip cuối cùng với phương thức write_Audiofile ().Using MoviePy The audio_clip_paths is a list of paths to the audio files, we instantiate an AudioFileClip object for each audio clip, and then we use the concatenate_audioclips() function provided by MoviePy to combine the audio files. Finally, we write the final clip with the write_audiofile() method.

Audio Concatenate là gì?

Một lệnh để kết hợp tất cả các đối tượng âm thanh được chọn thành một âm thanh lớn.Tất cả các âm thanh phải có tần số lấy mẫu bằng nhau và số lượng kênh bằng nhau.. All sounds must have equal sampling frequencies and equal numbers of channels.

WAV có thể là đa kênh không?

Audacity sẽ cho phép bạn tạo và sau đó xuất một tệp WAV đa kênh dựa trên tệp WAV đầu vào âm thanh nổi gốc.Bạn chỉ cần sao chép và dán hoặc sao chép một bản nhạc nhiều lần bạn yêu cầu.Hoặc chỉ đơn giản là tạo các bản nhạc trống (im lặng) khi cần thiết.. You simply copy and paste or duplicate a track as many times as you require. Or simply create empty (silent) tracks where necessary.