Hướng dẫn how to import audio file in python - cách nhập tệp âm thanh trong python

Em yêu của tôi, theo như tôi hiểu những gì bạn đang tìm kiếm, bạn đang tham gia vào một trường lý thuyết gọi là Xử lý tín hiệu số (DSP). Khu vực kỹ thuật này xuất phát từ một phân tích đơn giản về các tín hiệu thời gian rời rạc đến các bộ lọc thích ứng phức tạp. Một ý tưởng hay là nghĩ về các tín hiệu thời gian rời rạc như một vectơ, trong đó mỗi yếu tố của vectơ này là giá trị được lấy mẫu của tín hiệu thời gian liên tục ban đầu. Khi bạn nhận được các mẫu ở dạng vector, bạn có thể áp dụng các kỹ thuật tín hiệu số khác nhau cho vectơ này.

Thật không may, trên Python, việc chuyển từ các tệp âm thanh sang vectơ mảng numpy khá cồng kềnh, như bạn có thể nhận thấy ... nếu bạn không thần tượng hóa ngôn ngữ lập trình khác, tôi khuyên bạn nên thử MATLAB/OCTAVE. MATLAB làm cho các mẫu truy cập từ các tập tin đơn giản. audioread() làm cho nhiệm vụ này cho bạn :) và có rất nhiều hộp công cụ được thiết kế dành riêng cho DSP.

Tuy nhiên, nếu bạn thực sự có ý định tham gia vào Python cho việc này, tôi sẽ cung cấp cho bạn một bước để hướng dẫn bạn.


1. Nhận các mẫu

Cách dễ nhất lấy các mẫu từ tệp .wav là:

from scipy.io import wavfile

sampling_rate, samples = wavfile.read(f'/path/to/file.wav')


Ngoài ra, bạn có thể sử dụng gói wavestruct để lấy mẫu:

import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))

Trả lời câu hỏi của bạn: binary_data là một đối tượng

import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
0, không thể đọc được của con người và chỉ có thể có ý nghĩa với một máy. Bạn có thể xác thực câu lệnh này gõ
import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
1. Nếu bạn thực sự muốn hiểu thêm một chút về một loạt các nhân vật kỳ lạ này, bấm vào đây.

Nếu âm thanh của bạn là âm thanh nổi (nghĩa là có 2 kênh), bạn có thể định hình lại tín hiệu này để đạt được định dạng tương tự thu được với

import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
2

s_like_scipy = s.reshape(-1, wav_file.getnchannels())

Mỗi cột là một Chanell. Dù bằng cách nào, các mẫu thu được từ tệp .wav có thể được sử dụng để vẽ và hiểu hành vi tạm thời của tín hiệu.

Trong cả hai lựa chọn thay thế, các mẫu thu được từ các tệp được biểu diễn trong điều chế mã xung tuyến tính (LPCM)


2. Thực hiện các công cụ xử lý tín hiệu số vào các mẫu âm thanh

Tôi sẽ để phần đó cho bạn :) nhưng đây là một cuốn sách hay để đưa bạn qua DSP. Thật không may, tôi không biết những cuốn sách hay với Python, chúng thường là những cuốn sách khủng khiếp ... nhưng đừng lo lắng về điều đó, lý thuyết có thể được áp dụng theo cách sử dụng bất kỳ ngôn ngữ lập trình nào, miễn là bạn phạm vi ngôn ngữ đó.

Bất kể cuốn sách nào bạn chọn, hãy gắn bó với các tác giả cổ điển, chẳng hạn như Proakis, Oppenheim, v.v. không quan tâm đến chương trình ngôn ngữ mà họ sử dụng. Để biết hướng dẫn thực tế hơn về DPS để sử dụng Python, hãy xem trang này.

3. Phát các mẫu âm thanh được lọc

import pyaudio

p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(wav_file.getsampwidth()),
                channels = wav_file.getnchannels(),
                rate = wav_file.getframerate(),
                output = True)
# from samples to the new binary file
new_binary_data = struct.pack('{}h'.format(len(s)), *s)
stream.write(new_binary_data)

trong đó

import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
4 là số byte trên mỗi mẫu và
import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
5 là tỷ lệ lấy mẫu. Chỉ cần sử dụng cùng một tham số của âm thanh đầu vào.


4. Lưu kết quả trong tệp .wav mới

wav_file=wave.open('/phat/to/new_file.wav', 'w')

wav_file.setparams((nchannels, sampwidth, sampling_rate, nframes, "NONE", "not compressed"))

for sample in s:
   wav_file.writeframes(struct.pack('h', int(sample)))

Trong đó

import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
7 là số lượng kênh,
import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
8 là số byte trên mỗi mẫu,
import numpy as np
import wave, struct

wav_file = wave.open(f'/path/to/file.wav', 'rb')
# from .wav file to binary data in hexadecimal
binary_data = wav_file.readframes(wav_file.getnframes())
# from binary file to samples
s = np.array(struct.unpack('{n}h'.format(n=wav_file.getnframes()*wav_file.getnchannels()), binary_data))
9 là tỷ lệ lấy mẫu,
s_like_scipy = s.reshape(-1, wav_file.getnchannels())
0 là tổng số mẫu.

________ 21 Lớp

s_like_scipy = s.reshape(-1, wav_file.getnchannels())
2 giúp bạn dễ dàng nhập và thao tác các tệp âm thanh bằng Python.

Trong bài tập này, chúng tôi sẽ nhập một tệp âm thanh quan tâm bằng cách tạo một thể hiện là

s_like_scipy = s.reshape(-1, wav_file.getnchannels())
2.

Để nhập tệp âm thanh, bạn có thể sử dụng chức năng

s_like_scipy = s.reshape(-1, wav_file.getnchannels())
4 trên
s_like_scipy = s.reshape(-1, wav_file.getnchannels())
2 và chuyển tên đường dẫn của tệp âm thanh đích của bạn dưới dạng chuỗi. Tham số
s_like_scipy = s.reshape(-1, wav_file.getnchannels())
6 cung cấp cho bạn một tùy chọn để chỉ định định dạng của tệp âm thanh của bạn, tuy nhiên, đây là tùy chọn vì
s_like_scipy = s.reshape(-1, wav_file.getnchannels())
1 sẽ tự động suy ra nó.

s_like_scipy = s.reshape(-1, wav_file.getnchannels())
1 hoạt động với các tệp .wav mà không có bất kỳ phụ thuộc bổ sung nào nhưng đối với các loại tệp khác như
import pyaudio

p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(wav_file.getsampwidth()),
                channels = wav_file.getnchannels(),
                rate = wav_file.getframerate(),
                output = True)
# from samples to the new binary file
new_binary_data = struct.pack('{}h'.format(len(s)), *s)
stream.write(new_binary_data)
0, bạn sẽ cần cài đặt FFMPEG.

Một tệp âm thanh mẫu đã được thiết lập là

import pyaudio

p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(wav_file.getsampwidth()),
                channels = wav_file.getnchannels(),
                rate = wav_file.getframerate(),
                output = True)
# from samples to the new binary file
new_binary_data = struct.pack('{}h'.format(len(s)), *s)
stream.write(new_binary_data)
1, bạn có thể nghe nó ở đây.

Làm cách nào để nhập âm thanh vào Python?

Trong chương này, bạn sẽ học cách sử dụng thư viện hữu ích này để đảm bảo tất cả các tệp âm thanh của bạn ở đúng hình dạng để phiên âm ...
Giới thiệu về Pydub.....
Nhập tệp âm thanh với Pydub ..
Phát một tệp âm thanh với pydub ..
Tham số âm thanh với pydub ..
Điều chỉnh các tham số âm thanh ..
Thao tác với các tệp âm thanh với pydub ..

Bạn có thể sử dụng âm thanh trong Python không?

Kết luận: Phát và ghi âm trong Python Bây giờ bạn có thể: chơi một loạt các định dạng âm thanh lớn, bao gồm các mảng WAV, MP3 và Numpy.Ghi âm âm thanh từ micrô của bạn đến một mảng numpy hoặc python.Lưu trữ âm thanh được ghi của bạn một loạt các định dạng khác nhau, bao gồm WAV và MP3.Play a large range of audio formats, including WAV, MP3 and NumPy arrays. Record audio from your microphone to a NumPy or Python array. Store your recorded audio a range of different formats, including WAV and MP3.

Python có thể đọc các tệp MP3 không?

Phát các tệp MP3 với Python bằng cách sử dụng gói Playsound Một cách đơn giản để phát tệp MP3 bằng Python là với sự trợ giúp của thư viện Playsound.Nó có thể được sử dụng để chơi cả hai.MP3 và.Các tập tin WAV.One simple way to play an mp3 file using Python is with the help of playsound library. It can be used to play both . mp3 and . wav files.