Nếu bạn muốn sử dụng Python để phát hoặc ghi lại âm thanh, thì bạn đã đến đúng nơi. Trong hướng dẫn này, bạn sẽ học cách phát và ghi âm thanh trong Python bằng một số thư viện âm thanh phổ biến nhất. Trước tiên, bạn sẽ tìm hiểu về các phương pháp đơn giản nhất để phát và ghi âm thanh, sau đó bạn sẽ tìm hiểu về một số thư viện cung cấp thêm một số chức năng để đổi lấy một vài dòng mã bổ sung
Đến cuối hướng dẫn này, bạn sẽ biết cách
- Phát các tệp MP3 và WAV, cũng như một loạt các định dạng âm thanh khác
- Phát các mảng NumPy và Python có chứa âm thanh
- Ghi lại âm thanh bằng Python
- Lưu các bản ghi hoặc tệp âm thanh của bạn ở nhiều định dạng tệp khác nhau
Để biết danh sách đầy đủ các thư viện Python liên quan đến âm thanh, hãy xem trang wiki về âm thanh trong Python
Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn
Phát tệp âm thanh
Dưới đây, bạn sẽ thấy cách phát tệp âm thanh với tuyển tập thư viện Python. Một số thư viện trong số này cho phép bạn phát nhiều định dạng âm thanh, bao gồm các mảng MP3 và NumPy. Tất cả các thư viện bên dưới đều cho phép bạn phát các tệp WAV, một số thư viện có nhiều dòng mã hơn các thư viện khác
7 là gói đơn giản nhất để sử dụng nếu bạn chỉ muốn phát tệp WAV hoặc MP3. Nó không cung cấp chức năng nào khác ngoài phát lại đơn giảnimport simpleaudio as sa filename = 'myfile.wav' wave_obj = sa.WaveObject.from_wave_file[filename] play_obj = wave_obj.play[] play_obj.wait_done[] # Wait until sound has finished playing
8 cho phép bạn phát các tệp WAV và mảng NumPy, đồng thời cung cấp cho bạn các tùy chọn để kiểm tra xem tệp có còn đang phát hay khôngimport simpleaudio as sa filename = 'myfile.wav' wave_obj = sa.WaveObject.from_wave_file[filename] play_obj = wave_obj.play[] play_obj.wait_done[] # Wait until sound has finished playing
9 cho phép bạn phát các tệp WAV hoặc phát tiếng bíp từ loa, nhưng nó chỉ hoạt động trên Windowsimport simpleaudio as sa filename = 'myfile.wav' wave_obj = sa.WaveObject.from_wave_file[filename] play_obj = wave_obj.play[] play_obj.wait_done[] # Wait until sound has finished playing
0 vàimport numpy as np import simpleaudio as sa frequency = 440 # Our played note will be 440 Hz fs = 44100 # 44100 samples per second seconds = 3 # Note duration of 3 seconds # Generate array with seconds*sample_rate steps, ranging between 0 and seconds t = np.linspace[0, seconds, seconds * fs, False] # Generate a 440 Hz sine wave note = np.sin[frequency * t * 2 * np.pi] # Ensure that highest value is in 16-bit range audio = note * [2**15 - 1] / np.max[np.abs[note]] # Convert to 16-bit data audio = audio.astype[np.int16] # Start playback play_obj = sa.play_buffer[audio, 1, 2, fs] # Wait for playback to finish before exiting play_obj.wait_done[]
1 cung cấp các ràng buộc cho thư viện PortAudio để phát lại các tệp WAV trên nhiều nền tảngimport numpy as np import simpleaudio as sa frequency = 440 # Our played note will be 440 Hz fs = 44100 # 44100 samples per second seconds = 3 # Note duration of 3 seconds # Generate array with seconds*sample_rate steps, ranging between 0 and seconds t = np.linspace[0, seconds, seconds * fs, False] # Generate a 440 Hz sine wave note = np.sin[frequency * t * 2 * np.pi] # Ensure that highest value is in 16-bit range audio = note * [2**15 - 1] / np.max[np.abs[note]] # Convert to 16-bit data audio = audio.astype[np.int16] # Start playback play_obj = sa.play_buffer[audio, 1, 2, fs] # Wait for playback to finish before exiting play_obj.wait_done[]
2 yêu cầuimport numpy as np import simpleaudio as sa frequency = 440 # Our played note will be 440 Hz fs = 44100 # 44100 samples per second seconds = 3 # Note duration of 3 seconds # Generate array with seconds*sample_rate steps, ranging between 0 and seconds t = np.linspace[0, seconds, seconds * fs, False] # Generate a 440 Hz sine wave note = np.sin[frequency * t * 2 * np.pi] # Ensure that highest value is in 16-bit range audio = note * [2**15 - 1] / np.max[np.abs[note]] # Convert to 16-bit data audio = audio.astype[np.int16] # Start playback play_obj = sa.play_buffer[audio, 1, 2, fs] # Wait for playback to finish before exiting play_obj.wait_done[]
1 để phát lại âm thanh, nhưng khi cài đặtimport numpy as np import simpleaudio as sa frequency = 440 # Our played note will be 440 Hz fs = 44100 # 44100 samples per second seconds = 3 # Note duration of 3 seconds # Generate array with seconds*sample_rate steps, ranging between 0 and seconds t = np.linspace[0, seconds, seconds * fs, False] # Generate a 440 Hz sine wave note = np.sin[frequency * t * 2 * np.pi] # Ensure that highest value is in 16-bit range audio = note * [2**15 - 1] / np.max[np.abs[note]] # Convert to 16-bit data audio = audio.astype[np.int16] # Start playback play_obj = sa.play_buffer[audio, 1, 2, fs] # Wait for playback to finish before exiting play_obj.wait_done[]
4, nó cho phép bạn phát nhiều định dạng âm thanh chỉ với một vài dòng mãimport numpy as np import simpleaudio as sa frequency = 440 # Our played note will be 440 Hz fs = 44100 # 44100 samples per second seconds = 3 # Note duration of 3 seconds # Generate array with seconds*sample_rate steps, ranging between 0 and seconds t = np.linspace[0, seconds, seconds * fs, False] # Generate a 440 Hz sine wave note = np.sin[frequency * t * 2 * np.pi] # Ensure that highest value is in 16-bit range audio = note * [2**15 - 1] / np.max[np.abs[note]] # Convert to 16-bit data audio = audio.astype[np.int16] # Start playback play_obj = sa.play_buffer[audio, 1, 2, fs] # Wait for playback to finish before exiting play_obj.wait_done[]
Chúng ta hãy xem từng thư viện này để phát lại âm thanh
Loại bỏ các quảng cáoimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
7
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
7 là một “mô-đun chức năng đơn thuần Python, đa nền tảng, không phụ thuộc để phát âm thanh. ” Với mô-đun này, bạn có thể phát tệp âm thanh bằng một dòng mãfrom playsound import playsound
playsound['myfile.wav']
Tài liệu của
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
7 nói rằng nó đã được thử nghiệm trên các tệp WAV và MP3, nhưng nó cũng có thể hoạt động với các định dạng tệp khácThư viện này được cập nhật lần cuối vào tháng 6 năm 2017. Nó dường như hoạt động tốt tại thời điểm viết bài này, nhưng không rõ liệu nó có còn hỗ trợ các bản phát hành Python mới hơn hay không
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8 là một thư viện đa nền tảng để phát lại các tệp WAV [đơn âm và âm thanh nổi] mà không phụ thuộc. Đoạn mã sau có thể được sử dụng để phát tệp WAV và đợi tệp phát xong trước khi kết thúc tập lệnhimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
Các tệp WAV chứa một chuỗi bit biểu thị dữ liệu âm thanh thô, cũng như các tiêu đề có siêu dữ liệu ở định dạng RIFF [Định dạng tệp trao đổi tài nguyên]
Đối với các bản ghi CD, tiêu chuẩn ngành là lưu trữ từng mẫu âm thanh [một điểm dữ liệu âm thanh riêng lẻ liên quan đến áp suất không khí] dưới dạng giá trị 16 bit, với tốc độ 44100 mẫu mỗi giây
Để giảm kích thước tệp, có thể đủ để lưu trữ một số bản ghi [ví dụ: giọng nói của con người] ở tốc độ lấy mẫu thấp hơn, chẳng hạn như 8000 mẫu mỗi giây, mặc dù điều này có nghĩa là tần số âm thanh cao hơn có thể không được thể hiện chính xác
Một số thư viện được thảo luận trong hướng dẫn này phát và ghi lại các đối tượng
import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0, trong khi những thư viện khác sử dụng mảng NumPy để lưu trữ dữ liệu âm thanh thôCả hai đều tương ứng với một chuỗi các điểm dữ liệu có thể được phát lại ở tốc độ mẫu được chỉ định để phát âm thanh. Đối với một đối tượng
import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0, mỗi mẫu được lưu trữ dưới dạng một bộ gồm hai giá trị 8 bit, trong khi trong một mảng NumPy, mỗi phần tử có thể chứa một giá trị 16 bit tương ứng với một mẫuMột sự khác biệt quan trọng giữa hai loại dữ liệu này là các đối tượng
import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0 là bất biến, trong khi mảng NumPy có thể thay đổi, làm cho mảng sau phù hợp hơn để tạo âm thanh và xử lý tín hiệu phức tạp hơn. Để biết thêm thông tin về cách làm việc với NumPy, hãy xem các hướng dẫn về NumPy của chúng tôiimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8 cho phép bạn chơi các mảng NumPy và Python và các đối tượng import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0 bằng cách sử dụng import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
5. Đảm bảo rằng bạn đã cài đặt NumPy để ví dụ sau hoạt động, cũng như import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8. [Khi đã cài đặt import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
7, bạn có thể thực hiện việc này bằng cách chạy import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
8 từ bảng điều khiển của mình. ]Để biết thêm thông tin về cách sử dụng
import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
7 để cài đặt các gói, hãy xem Pipenv. Hướng dẫn về Công cụ đóng gói Python mớiDưới đây, bạn sẽ thấy cách tạo mảng NumPy tương ứng với âm 440 Hz và phát lại bằng cách sử dụng
import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
5import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
Tiếp theo, hãy xem cách bạn có thể sử dụng
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
9 để phát tệp WAV trên máy Windowsimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
9
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
Nếu bạn sử dụng Windows, bạn có thể sử dụng mô-đun
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
9 tích hợp để truy cập bộ máy phát âm thanh cơ bản của nó. Phát tệp WAV có thể được thực hiện trong một vài dòng mãimport winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
9 không hỗ trợ phát lại bất kỳ tệp nào ngoài tệp WAV. Nó cho phép bạn phát ra tiếng bíp cho loa của mình bằng cách sử dụng import winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
5. Ví dụ: bạn có thể phát ra âm báo 1000 Hz trong 100 mili giây bằng đoạn mã sauimport winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
Tiếp theo, bạn sẽ tìm hiểu cách sử dụng mô-đun
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 để phát lại âm thanh đa nền tảngimport numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
Như đã nêu trong tài liệu của nó,
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 “cung cấp các liên kết cho thư viện PortAudio và một số chức năng tiện lợi để phát và ghi các mảng NumPy có chứa tín hiệu âm thanh”. Để phát các tệp WAV, cần cài đặt import winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
9 và import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0 để mở các tệp WAV dưới dạng mảng NumPyVới
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0, import winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
9 và import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0 được cài đặt, giờ đây bạn có thể đọc tệp WAV dưới dạng mảng NumPy và phát lại tệp đóimport sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
Dòng chứa
import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
4 trích xuất dữ liệu âm thanh thô, cũng như tốc độ lấy mẫu của tệp như được lưu trong tiêu đề RIFF của nó và import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
5 đảm bảo rằng tập lệnh chỉ kết thúc sau khi âm thanh phát xongTiếp theo, chúng ta sẽ học cách sử dụng
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 để phát âm thanh. Với các phần phụ thuộc phù hợp được cài đặt, nó cho phép bạn phát nhiều loại tệp âm thanh và cung cấp cho bạn nhiều tùy chọn hơn để làm việc với âm thanh so với import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
7.import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
Mặc dù
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 có thể mở và lưu các tệp WAV mà không có bất kỳ phụ thuộc nào, nhưng bạn cần cài đặt gói phát lại âm thanh để phát âm thanh. import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8 được khuyến nghị mạnh mẽ, nhưng import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1, from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav['myfile.wav']
play[sound]
2 và from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav['myfile.wav']
play[sound]
3 là các lựa chọn thay thếĐoạn mã sau có thể được sử dụng để phát tệp WAV với
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav['myfile.wav']
play[sound]
Để phát lại các loại âm thanh khác, chẳng hạn như tệp MP3, nên cài đặt
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
4 hoặc from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav['myfile.wav']
play[sound]
6. Hãy xem import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 để được hướng dẫn. Thay thế cho các bước được mô tả trong tài liệu, from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav['myfile.wav']
play[sound]
8 cung cấp các ràng buộc cho import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
4 và có thể được cài đặt bằng cách sử dụng pip$ pip install ffmpeg-python
Khi cài đặt
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
4, việc phát lại tệp MP3 chỉ yêu cầu một thay đổi nhỏ trong mã trước đây của chúng tôifrom pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
Sử dụng cấu trúc
$ pip install ffmpeg-python
1, bạn có thể chơi bất kỳ loại. Ví dụ: bạn có thể phát tệp WMA bằng cách sử dụng cách sausound = AudioSegment.from_file['myfile.wma', 'wma']
Ngoài việc phát lại các tệp âm thanh,
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 cho phép bạn lưu âm thanh ở các định dạng tệp khác nhau [sẽ nói thêm về điều này sau], cắt âm thanh, tính toán độ dài của tệp âm thanh, tăng dần hoặc giảm dần và áp dụng giảm dần chéo$ pip install ffmpeg-python
4 tạo một bản sao của Đoạn âm thanh phát ngược lại, mà tài liệu mô tả là “hữu ích cho Pink Floyd, xoay quanh và một số thuật toán xử lý âm thanh. ”import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 cung cấp các ràng buộc cho PortAudio, thư viện I/O âm thanh đa nền tảng. Điều này có nghĩa là bạn có thể sử dụng import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 để phát và ghi âm thanh trên nhiều nền tảng khác nhau, bao gồm Windows, Linux và Mac. Với import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1, việc phát âm thanh được thực hiện bằng cách ghi vào $ pip install ffmpeg-python
9import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
0Như bạn có thể nhận thấy, phát âm thanh với
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 phức tạp hơn một chút so với phát âm thanh với các thư viện mà bạn đã thấy trước đó. Điều này có nghĩa là nó có thể không phải là lựa chọn đầu tiên của bạn nếu bạn chỉ muốn phát hiệu ứng âm thanh trong ứng dụng Python của mìnhTuy nhiên, vì
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 cung cấp cho bạn nhiều quyền kiểm soát cấp thấp hơn, bạn có thể nhận và đặt tham số cho thiết bị đầu vào và đầu ra của mình, đồng thời kiểm tra tải CPU và độ trễ đầu vào hoặc đầu raNó cũng cho phép bạn phát và ghi âm thanh ở chế độ gọi lại, trong đó chức năng gọi lại được chỉ định được gọi khi cần có dữ liệu mới để phát lại hoặc có sẵn để ghi. Các tùy chọn này làm cho
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 trở thành một thư viện phù hợp để sử dụng nếu nhu cầu âm thanh của bạn vượt ra ngoài khả năng phát lại đơn giảnBây giờ bạn đã biết cách sử dụng một số thư viện khác nhau để phát âm thanh, đã đến lúc xem cách bạn có thể sử dụng Python để tự ghi âm
Loại bỏ các quảng cáoGhi âm thanh
Thư viện
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 và import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 cung cấp cách ghi âm bằng Python. Bản ghi import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 vào mảng NumPy và bản ghi import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1 vào đối tượng import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0. Cả hai thứ này đều có thể được lưu trữ dưới dạng tệp WAV bằng cách sử dụng thư viện from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
8 và from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
9 tương ứngimport numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 cho phép bạn ghi lại âm thanh từ micrô của mình và lưu trữ dưới dạng mảng NumPy. Đây là một kiểu dữ liệu tiện dụng để xử lý âm thanh có thể được chuyển đổi sang định dạng WAV để lưu trữ bằng mô-đun sound = AudioSegment.from_file['myfile.wma', 'wma']
2. Đảm bảo cài đặt mô-đun from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
8 cho ví dụ sau [sound = AudioSegment.from_file['myfile.wma', 'wma']
4]. Điều này sẽ tự động cài đặt NumPy như một trong những phần phụ thuộc của nóimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
1import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
, bạn đã học cách phát âm thanh bằng cách đọc một. Thay vào đó, việc ghi âm thanh có thể được thực hiện bằng cách ghi vào luồng này
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
2Bây giờ bạn đã biết cách ghi âm bằng
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
0 và import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1, bạn sẽ tìm hiểu cách chuyển đổi bản ghi của mình [hoặc bất kỳ tệp âm thanh nào khác] sang nhiều định dạng âm thanh khác nhauLưu và chuyển đổi âm thanh
Bạn rằng bạn có thể sử dụng mô-đun
sound = AudioSegment.from_file['myfile.wma', 'wma']
2 để lưu trữ các mảng NumPy dưới dạng tệp WAV. Mô-đun import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
00 tương tự cho phép bạn chuyển đổi giữa các tệp WAV và mảng NumPy. Nếu bạn muốn lưu trữ âm thanh của mình ở một định dạng tệp khác, thì import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 và import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0 sẽ rất hữu ích vì chúng cho phép bạn đọc và ghi nhiều định dạng tệp phổ biến [chẳng hạn như MP3, FLAC, WMA và FLV]import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
00
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
Mô-đun này phụ thuộc vào
import winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
9 và cho phép bạn đọc các tệp WAV dưới dạng mảng NumPy và lưu các mảng NumPy dưới dạng tệp WAVĐể lưu một mảng NumPy dưới dạng tệp WAV, bạn có thể sử dụng
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
05import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
3Trong ví dụ này,
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
06 là một mảng NumPy chứa âm thanh, import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
07 là tốc độ lấy mẫu của bản ghi [thường là 44100 hoặc 44800 Hz] và import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
08 là độ rộng lấy mẫu của âm thanh [số byte trên mỗi mẫu, thường là 1 hoặc 2 byte import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0
import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
Thư viện
import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0 có thể đọc và viết tất cả. Mặc dù không thể phát lại âm thanh nhưng nó cho phép bạn chuyển đổi âm thanh từ và sang FLAC, AIFF và một số định dạng âm thanh ít phổ biến hơn. Để chuyển đổi tệp WAV sang FLAC, bạn có thể sử dụng đoạn mã sauimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
4Mã tương tự sẽ hoạt động để chuyển đổi giữa các định dạng tệp khác được hỗ trợ bởi
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
11Loại bỏ các quảng cáoimport numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2 cho phép bạn lưu âm thanh trong , bao gồm gần như tất cả các loại âm thanh bạn có thể gặp trong cuộc sống hàng ngày. Ví dụ: bạn có thể chuyển đổi tệp WAV của mình sang MP3 bằng mã sauimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
5Sử dụng
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
16 là cách tải tệp âm thanh tổng quát hơn. Ví dụ: nếu bạn muốn chuyển đổi lại tệp của mình từ MP3 sang WAV, bạn có thể thực hiện như sauimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
6Mã này sẽ hoạt động với mọi định dạng tệp âm thanh
So sánh các thư viện âm thanh
Dưới đây là bảng tiện dụng so sánh chức năng của các thư viện được thảo luận trong hướng dẫn này
LibraryPlatformPlaybackRecordConvertDependencies
import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
7Cross-platformWAV, MP3--Noneimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8Cross-platformWAV, array, import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0--Noneimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
9WindowsWAV--Noneimport simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
22Cross-platformNumPy arrayNumPy array-import winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
9, import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
2Cross-platform-import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
8, import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
4import numpy as np
import simpleaudio as sa
frequency = 440 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace[0, seconds, seconds * fs, False]
# Generate a 440 Hz sine wave
note = np.sin[frequency * t * 2 * np.pi]
# Ensure that highest value is in 16-bit range
audio = note * [2**15 - 1] / np.max[np.abs[note]]
# Convert to 16-bit data
audio = audio.astype[np.int16]
# Start playback
play_obj = sa.play_buffer[audio, 1, 2, fs]
# Wait for playback to finish before exiting
play_obj.wait_done[]
1Cross-platformimport winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0import winsound
filename = 'myfile.wav'
winsound.PlaySound[filename, winsound.SND_FILENAME]
0-from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
9import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file[filename]
play_obj = wave_obj.play[]
play_obj.wait_done[] # Wait until sound has finished playing
00Cross-platform--WAV, NumPy arrayimport winsound
winsound.Beep[1000, 100] # Beep at 1000 Hz for 100 ms
9, from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3['myfile.mp3']
play[sound]
9import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read[filename, dtype='float32']
sd.play[data, fs]
status = sd.wait[] # Wait until file is done playing
0Cross-platform Các thư viện được bao gồm trong hướng dẫn này được chọn để dễ sử dụng và phổ biến. Để có danh sách toàn diện hơn về thư viện âm thanh cho Python, hãy xem trang wiki về âm thanh trong Python
Phần kết luận. Phát và ghi âm thanh bằng Python
Trong hướng dẫn này, bạn đã học cách sử dụng một số thư viện âm thanh phổ biến nhất để phát và ghi âm thanh trong Python. Bạn cũng đã xem cách lưu âm thanh của mình ở nhiều định dạng khác nhau
Bây giờ bạn có thể
- Phát nhiều định dạng âm thanh, bao gồm mảng WAV, MP3 và NumPy
- Ghi âm thanh từ micrô của bạn vào mảng NumPy hoặc Python
- Lưu trữ âm thanh đã ghi của bạn ở nhiều định dạng khác nhau, bao gồm WAV và MP3
- Chuyển đổi các tệp âm thanh của bạn sang nhiều định dạng âm thanh khác nhau
Bây giờ bạn đã có thông tin cần thiết để giúp bạn quyết định sử dụng thư viện nào để bắt đầu làm việc với âm thanh trong Python. Tiếp tục và phát triển một số ứng dụng âm thanh tuyệt vời
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Phát và ghi âm thanh bằng Python
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Joska de Langen
Joska là một Ordina Pythoneer viết cho Real Python
» Thông tin thêm về JoskaMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Joanna
Mike
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi