Âm lượng Python-sounddevice

Python cung cấp cho chúng ta nhiều gói để thao tác với dữ liệu âm thanh, nhưng không phải tất cả chúng đều hoạt động. Là nhà phát triển Python, tất cả chúng ta đều quen thuộc với những thách thức thông thường - giải quyết môi trường, khả năng tương thích giữa các phiên bản và tìm gói phù hợp. Bài đăng này trình bày cách thực hiện tất cả những điều đó để làm việc với dữ liệu âm thanh. Bạn có thể tìm thấy repo GitHub tại đây với tất cả các mẫu được thảo luận bên dưới

Lưu ý rằng bài đăng này được viết bằng Python 3. 9 vì nhiều gói âm thanh chưa được nâng cấp để hoạt động với 3. 10 hoặc 3. 11. Trong bài đăng này, chúng tôi sẽ đề cập

  • Giới thiệu về dữ liệu âm thanh

  • Cách sử dụng dữ liệu âm thanh

  • Ghi dữ liệu âm thanh bằng Python

  • Phát dữ liệu âm thanh với Python

  • Cắt dữ liệu âm thanh bằng Python

  • Thao tác tỷ lệ lấy mẫu dữ liệu âm thanh với Python

  • Thay đổi âm lượng dữ liệu âm thanh bằng Python

  • Kết hợp hai tệp âm thanh với Python

  • Chồng hai tệp âm thanh bằng Python

  • Thay đổi định dạng tệp dữ liệu âm thanh bằng Python

  • Phiên âm dữ liệu âm thanh bằng API web

  • Tóm tắt các công cụ Python tốt nhất để thao tác dữ liệu âm thanh

Giới thiệu về dữ liệu âm thanh

Dữ liệu âm thanh là gì? . Ở cấp độ cơ bản, không có nhiều cách để thể hiện âm thanh. Số lượng lớn các loại tệp dữ liệu âm thanh là do số lượng cách tiếp cận để nén và đóng gói dữ liệu. Hãy xem xét hai khái niệm cơ bản trước khi chúng ta tìm hiểu sâu hơn - tốc độ lấy mẫu và các loại định dạng dữ liệu âm thanh

Tỷ lệ lấy mẫu là gì?

Tốc độ lấy mẫu, đôi khi còn được gọi là tốc độ khung hình, là số lần mỗi giây chúng tôi đo biên độ của tín hiệu. Nó được đo bằng khung hình trên giây hoặc Hertz (Hz). Một tỷ lệ lý tưởng có thể được xác định bằng Định lý lấy mẫu của Nyquist. Một số tốc độ lấy mẫu phổ biến là 16 kHz (phổ biến cho VoiP), 44. 1 kHz (phổ biến trong CD) và 96 kHz (phổ biến trong DVD và Blu-Ray)

Các loại dữ liệu âm thanh

Âm lượng Python-sounddevice

Có một cách nổi tiếng để thể hiện âm thanh - sử dụng sóng. Tuy nhiên, máy tính có thể biểu diễn dữ liệu đó theo nhiều cách. Các loại tệp dữ liệu âm thanh phổ biến nhất là

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 và
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6. Sự khác biệt chính giữa tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 và tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6 là tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 không được nén và tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6 là. Điều này làm cho tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 trở nên tuyệt vời khi bạn cần âm thanh chất lượng cao nhất và tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6 phù hợp nhất khi bạn cần phát trực tuyến nhanh

Các loại tệp khác bao gồm Định dạng tệp trao đổi âm thanh (AIFF), dữ liệu Điều chế mã xung (PCM) thô và Mã hóa âm thanh nâng cao (AAC). AIFF là định dạng tệp do Apple phát triển để sử dụng trên Mac OS giống như các tệp WAVE ban đầu được phát triển bởi Microsoft. PCM là định dạng dữ liệu âm thanh thô. AAC được coi là sự kế thừa của các tệp MP3, nhưng không được coi là định dạng phát lại. Tuy nhiên, nó đã trở thành một định dạng âm thanh phát trực tuyến phổ biến và được YouTube, iPhone và Nintendo sử dụng.

Cách sử dụng dữ liệu âm thanh

Dữ liệu âm thanh ngày càng trở nên phổ biến. Nó được tạo ra trên các cuộc gọi điện thoại, bản ghi cuộc họp video từ xa, cho âm nhạc và video, v.v. Làm cách nào chúng tôi có thể sử dụng tất cả dữ liệu âm thanh đang được tạo này? . Tất nhiên, điều này chỉ bao gồm một số điều chúng tôi có thể làm với dữ liệu âm thanh, còn nhiều cách có giá trị khác để sử dụng âm thanh mà chúng tôi thậm chí chưa khám phá ra

Ghi dữ liệu âm thanh bằng Python

Hai trong số những điều cơ bản nhất bạn có thể làm với dữ liệu âm thanh trong Python là phát và ghi âm thanh. Trong hai phần tiếp theo, chúng tôi sẽ đề cập đến cách sử dụng hai thư viện âm thanh Python phổ biến để phát và ghi dữ liệu âm thanh. Trước tiên, chúng ta sẽ xem cách ghi dữ liệu âm thanh bằng

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 và
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4

Trước khi bắt đầu với mã, chúng tôi sẽ phải cài đặt các thư viện tiên quyết. PyAudio là một trình bao bọc xung quanh PortAudio. Quá trình cài đặt sẽ khác đối với Windows và Mac. Trên Mac OS, bạn có thể sử dụng

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
5 để cài đặt
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
6 sau khi cài đặt các công cụ X-Code của mình. Đối với Windows, hãy xem câu trả lời này trên StackOverflow

Cách cài đặt PyAudio (trên máy Mac)

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
2

Nếu bạn gặp sự cố, hãy sử dụng lệnh này để chỉ định vị trí bản dựng của bạn cho portaudio

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio

Để cài đặt

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
7, hãy chạy dòng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
8 trong dòng lệnh. Chúng tôi sẽ cần
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9 để tải xuống dữ liệu được phát trực tuyến và để sử dụng sau này

Sử dụng PyAudio để ghi lại âm thanh

Trong ví dụ này, chúng tôi sẽ sử dụng PyAudio và thư viện

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
70 gốc của Python để ghi lại một số âm thanh và lưu nó vào một tệp. Chúng tôi sẽ bắt đầu bằng cách nhập hai thư viện và khai báo các hằng số. Các hằng số chúng ta cần khai báo trước là kích thước khối (số lượng khung hình được lưu tại một thời điểm), định dạng (16 bit), số lượng kênh (1), tốc độ lấy mẫu (44100), thời lượng ghi của chúng tôi

Từ đó, chúng ta tạo một đối tượng PyAudio. Chúng tôi sẽ sử dụng đối tượng PyAudio để tạo luồng với các hằng số mà chúng tôi đã đặt ở trên. Sau đó, chúng tôi sẽ khởi tạo một danh sách các khung trống để giữ các khung. Tiếp theo, chúng tôi sẽ sử dụng luồng để đọc dữ liệu trong khi chúng tôi vẫn còn thời gian trong khung thời gian 3 giây và lưu nó ở kích thước khối 1024 bit

Chúng tôi cần đóng và chấm dứt luồng của mình sau 3 giây. Cuối cùng, chúng tôi sẽ sử dụng thư viện

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
70 để lưu dữ liệu âm thanh được phát trực tuyến vào tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 với các hằng số đặt trước mà chúng tôi đã khai báo ở trên

________số 8

Ghi âm bằng Python-Sounddevice

Python-Sounddevice, hoặc chỉ

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 khi bạn nhập hoặc cài đặt nó thông qua
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
74, là một thư viện phát và ghi âm đơn giản. Chúng ta có thể thấy bên dưới rằng việc tạo bản ghi đơn giản cần ít mã hơn nhiều so với
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4

Đầu tiên, chúng tôi nhập các thư viện chúng tôi cần,

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 và hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
77 từ
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
78. Tiếp theo, chúng tôi khai báo một vài hằng số cho tốc độ lấy mẫu và thời lượng ghi. Khi chúng tôi có những thứ đó, chúng tôi chỉ cần ghi âm, yêu cầu
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 đợi và sau đó sử dụng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9 để ghi âm thanh đã ghi

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
7

Phát dữ liệu âm thanh với Python

Phát dữ liệu âm thanh là chức năng kết hợp với ghi dữ liệu âm thanh. Chỉ có thể ghi dữ liệu sẽ gần như vô dụng. Đối với phần này, chúng tôi sẽ sử dụng cùng một thư viện mà chúng tôi đã làm ở trên,

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4 và
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3. Tuy nhiên, chúng tôi cũng sẽ cần thêm một thư viện để sử dụng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 để phát dữ liệu âm thanh,
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
34. Chúng ta cần chạy lệnh này trong terminal.
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
35 để cài đặt nó

Sử dụng Pyaudio để phát âm thanh

Một lần nữa, chúng tôi sẽ sử dụng thư viện

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
70 tích hợp cùng với
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4 để phát một số âm thanh. Chúng tôi sẽ sử dụng bản ghi mà chúng tôi đã thực hiện ở trên và cùng kích thước khối. Chúng tôi sẽ bắt đầu chức năng của mình bằng cách mở tệp và tạo một đối tượng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4

Sau đó, chúng tôi sẽ sử dụng đối tượng

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4 để mở luồng có thông số kỹ thuật được trích xuất từ ​​​​tệp sóng. Tiếp theo, chúng tôi sẽ tạo một đối tượng dữ liệu đọc các khung của tệp sóng ở kích thước khối được chỉ định. Để thực sự phát âm thanh, chúng tôi sẽ lặp qua tệp dữ liệu và ghi nó vào luồng trong khi nó không phải là bit trống. Cuối cùng, chúng tôi sẽ đóng luồng và chấm dứt đối tượng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
3

Phát âm thanh với Python-sounddevice

Một lần nữa, chúng ta thấy sự đơn giản hóa của việc phát âm thanh mà

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 cung cấp so với
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4. Hãy nhớ rằng cả việc đơn giản hóa phát và ghi cũng đi kèm với nhu cầu cài đặt và sử dụng hai thư viện bổ sung.

Trong ví dụ này, chúng tôi sẽ nhập các thư viện

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 và
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
34. Sau đó, chúng tôi sẽ cung cấp tên tệp cho
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
34 đến
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
66 cho chúng tôi dữ liệu và tốc độ lấy mẫu. Cuối cùng, chúng tôi sử dụng âm thanh thu được từ
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
3 đến
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
68 và làm cho quá trình chờ trong khi âm thanh phát xong

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6

Cắt dữ liệu âm thanh bằng Python

Bây giờ chúng tôi đã đề cập đến các thao tác phát và ghi âm thanh đơn giản nhất, hãy chuyển sang cách thay đổi dữ liệu âm thanh. Điều đầu tiên chúng tôi sẽ đề cập là cắt hoặc cắt xén dữ liệu âm thanh. Đối với ví dụ này, chúng tôi sẽ cần cài đặt thêm hai thư viện,

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 và
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
10. Chúng ta có thể cài đặt chúng bằng pip trong dòng lệnh như bình thường bằng cách sử dụng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
11

Clip âm thanh với Pydub

Như chúng ta sẽ thấy ở đây và tiếp theo trong bài đăng, thư viện

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 là một con dao quân đội Thụy Sĩ chứa các công cụ thao tác âm thanh. Để cắt dữ liệu âm thanh với
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69, chúng ta chỉ cần đối tượng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14. Để bắt đầu, chúng tôi sẽ xác định mili giây đầu tiên và mili giây cuối cùng mà chúng tôi muốn cắt bỏ. Sau đó, chúng tôi sẽ tải tệp âm thanh bằng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14

Để cắt tệp âm thanh của chúng tôi xuống, chúng tôi sẽ tạo một danh sách chỉ chứa dữ liệu từ đầu đến cuối mili giây trong tệp âm thanh của chúng tôi. Cuối cùng, chúng ta sẽ sử dụng hàm

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
16 của đối tượng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14 mà chúng ta đã trích xuất để lưu tệp ở định dạng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
1

Cắt đoạn âm thanh với FFMPEG

FFMPEG là một thư viện xử lý âm thanh nổi tiếng, thường được sử dụng trong dòng lệnh. Bạn có thể sử dụng các thư viện

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
19 và
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
20 có nguồn gốc từ Python để sử dụng FFMPEG, nhưng tôi thấy rằng việc sử dụng SDK dễ dàng và hài lòng hơn

Mặc dù chúng tôi phải cài đặt SDK này với

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
21, nhưng chúng tôi thực sự nhập nó dưới dạng chỉ
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
22. Điều đầu tiên chúng ta sẽ làm là lấy một đối tượng đầu vào. Sau đó, chúng tôi sẽ sử dụng đối tượng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
23 để gọi hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
24 và cắt bản ghi xuống còn 1 giây. Tiếp theo, chúng ta sẽ tạo đầu ra bằng cách sử dụng dữ liệu mới được cắt. Cuối cùng, chúng tôi sẽ cần gọi
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
22 để thực sự chạy lệnh gọi
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
26 và lưu tệp của chúng tôi

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
2

Thao tác tỷ lệ lấy mẫu dữ liệu âm thanh với Python

Đây là nơi mọi thứ trở nên phức tạp hơn một chút. Tốc độ lấy mẫu đóng một vai trò quan trọng trong cách âm thanh của dữ liệu âm thanh. Khi bạn thay đổi số khung hình mỗi giây đại diện cho âm thanh, rất nhiều điều thú vị có thể xảy ra. Nếu không được thực hiện đúng, nó có thể ảnh hưởng đến tốc độ, cao độ và chất lượng âm thanh của bạn. Đối với các ví dụ của chúng tôi, chúng tôi sẽ sử dụng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 và
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9. Cả hai thư viện chúng tôi đã tải xuống trước đó

Âm lượng Python-sounddevice

Pydub

Như đã đề cập ở trên,

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 có nhiều công cụ để thao tác dữ liệu âm thanh và thay đổi tốc độ mẫu một cách an toàn là một trong số đó. Đối tượng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14 có lệnh
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
41 tuyệt vời có thể được sử dụng để đặt tốc độ khung hình của đoạn âm thanh mà không thay đổi cao độ, tốc độ hoặc áp dụng bất kỳ biến dạng nào khác. Để tiết kiệm, chúng ta sẽ sử dụng lại hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
16

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
4

scipy

Nếu bạn có khuynh hướng như vậy và cũng có kỹ năng toán học, bạn có thể áp dụng thay đổi tốc độ lấy mẫu của riêng mình với

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9. Những lý do phổ biến nhất để sử dụng
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9 để tùy chỉnh mẫu của bạn là dành cho các trường hợp sử dụng nâng cao như nghiên cứu, âm nhạc hoặc hiệu ứng đặc biệt

Đọc tốc độ mẫu và dữ liệu âm thanh bằng cách sử dụng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
45. Sử dụng tốc độ mẫu đọc vào và tốc độ mẫu mới mong muốn, tạo một số lượng mẫu mới. Để thực hiện lấy mẫu lại, chúng tôi gọi hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
46 từ
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
47. Chức năng lấy mẫu lại này áp dụng biến đổi phạm vi và có thể gây biến dạng. Đây là một kỹ thuật tiên tiến hơn nhiều và có lẽ chỉ nên được sử dụng nếu cần thiết

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
2

Thay đổi khối lượng dữ liệu âm thanh bằng Python

Bốn điều tiếp theo chúng tôi sẽ đề cập đều sử dụng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69. Một phần vì nó dễ sử dụng nhất, một phần vì nó là ứng dụng duy nhất được cập nhật đủ để hoạt động với các phiên bản Python mới nhất

Thay đổi âm lượng với đối tượng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14 từ
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 cực kỳ dễ dàng. Sau khi nhập các thư viện và chức năng chúng tôi cần và mở tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5, điều duy nhất chúng tôi cần làm là cộng hoặc trừ đối tượng đại diện cho tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 đang mở

Chức năng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
68 lần lượt phát cả hai âm thanh để chúng ta có thể nghe thấy âm thanh đó to hơn và âm thanh kia nhỏ hơn. Chúng tôi có thể lưu các tệp bằng hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
16 như chúng tôi đã làm cho đến nay

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
0

Kết hợp hai tệp âm thanh với Python

Chúng tôi cũng có thể sử dụng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 để kết hợp hai tệp dữ liệu âm thanh trong Python. Khi chúng tôi mở các tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 bằng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14, tất cả những gì chúng tôi phải làm để nối chúng là thêm chúng. Chúng tôi có thể phát âm thanh để đảm bảo rằng chúng tôi đã nhận được âm thanh đó và sau đó xuất thành tệp

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
1

Chồng hai tệp âm thanh bằng Python

Bạn sẽ nghĩ rằng việc chồng dữ liệu âm thanh sẽ khó hơn là kết hợp chúng, nhưng đối tượng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14 từ thư viện
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 khiến việc này trở nên khá dễ dàng. Tất cả những gì chúng ta làm là gọi hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
00 và chuyển cho nó âm thanh mà chúng ta muốn phủ và vị trí (tính bằng mili giây) mà chúng ta muốn phủ nó tại

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
2

Thay đổi định dạng tệp dữ liệu âm thanh bằng Python

Chúng tôi đã đề cập đến rất nhiều cách để thao tác dữ liệu âm thanh trong Python, từ cách phát và ghi âm cơ bản đến việc chồng các âm thanh khác nhau. Điều gì sẽ xảy ra nếu chúng ta chỉ cần tệp âm thanh của mình ở định dạng khác?

Hàm

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
16 của đối tượng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
14 mà chúng ta đã sử dụng trong các phần trên có khả năng xác định định dạng của đối tượng đầu ra. Tất cả những gì chúng ta phải làm để lưu nó dưới dạng định dạng khác là chuyển định dạng đó sang hàm
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
16. Trong ví dụ bên dưới, tôi đã mở một tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
5 và lưu nó dưới dạng tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
6

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
3

Phiên âm dữ liệu âm thanh bằng API web

Cuối cùng, chúng ta đi đến phần cuối cùng của thao tác dữ liệu âm thanh sẽ được trình bày trong bài hướng dẫn này về dữ liệu âm thanh trong Python. Có bản phiên âm của tệp âm thanh có thể hữu ích vì nhiều lý do. Bạn có thể sử dụng nó để trực quan hóa dữ liệu của mình, tìm kiếm từ khóa từ thư viện tệp âm thanh hoặc nhận thông tin đầu vào cho các mô hình Hiểu ngôn ngữ tự nhiên (NLU)

Để phiên âm âm thanh của bạn bằng API Web, bạn cần đăng ký khóa API Deepgram miễn phí và chạy

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
07 trong thiết bị đầu cuối của mình

Chúng tôi sẽ sử dụng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
08 để thực hiện yêu cầu API không đồng bộ. Trước khi tạo chức năng của mình, chúng tôi cần đảm bảo rằng chúng tôi có khóa API và tên tệp. Hàm này sẽ khởi tạo SDK Deepgram, mở tệp cục bộ và gửi tệp đó đến điểm cuối phiên âm. Sau đó, nó sẽ đợi phản hồi và kết xuất nó vào một tệp JSON được định dạng bằng một tab gồm 4 khoảng trắng. Sau đó, chúng tôi sẽ in kết quả JSON ra thiết bị đầu cuối và lưu nó dưới dạng tệp
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
09. Cuối cùng, chúng tôi sẽ sử dụng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
08 để chạy chức năng

pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
4

Tóm tắt các công cụ Python tốt nhất để thao tác dữ liệu âm thanh

Dữ liệu âm thanh bao gồm một lượng lớn dữ liệu thường không được nghĩ đến khi phân tích và thao tác dữ liệu. Trong bài đăng này, chúng tôi đã giới thiệu cách sử dụng một số thư viện Python cập nhật nhất để thao tác dữ liệu âm thanh

Chúng tôi đã học cách phát và ghi dữ liệu âm thanh bằng

import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
4 và
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
7. Cách cắt bớt dữ liệu với
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 và
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
22 cũng như cách lấy mẫu lại dữ liệu với
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 và
import pyaudio
import wave

chunk = 1024
sample_format = pyaudio.paInt16
channels = 1
fs = 44100 # frames per channel
seconds = 3
filename = "output_pyaudio.wav"

p=pyaudio.PyAudio()

print("Recording ...")

stream = p.open(format = sample_format,
                channels = channels,
                rate = fs,
                frames_per_buffer =  chunk,
                input = True)

frames = []
for i in range(0, int(fs/chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

stream.stop_stream()
stream.close()
p.terminate()

print(".. Ending Recording")
with wave.open(filename, 'wb') as wf:
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()
9. Sau đó, chúng tôi đã thấy cách chúng tôi có thể sử dụng
pip install --global-option='build_ext' --global-option="-I$(brew --prefix)/include" --global-option="-L$(brew --prefix)/lib" pyaudio
69 như một con dao âm thanh của quân đội Thụy Sĩ để thay đổi âm lượng, kết hợp hoặc phủ tệp và thay đổi định dạng tệp. Cuối cùng, chúng tôi đã thấy cách chúng tôi có thể dễ dàng sử dụng SDK Deepgram để sao chép dữ liệu âm thanh

Đọc thêm

  • Ghi chú Bài giảng về Dữ liệu Âm thanh từ Penn

  • Định dạng tệp âm thanh

Nếu bạn có bất kỳ phản hồi nào về bài đăng này hoặc bất kỳ điều gì khác xung quanh Deepgram, chúng tôi rất mong nhận được phản hồi từ bạn. Vui lòng cho chúng tôi biết trong các cuộc thảo luận GitHub của chúng tôi

Thêm với các thẻ này

  • #trăn

Chia sẻ phản hồi của bạn

Bài viết này có hữu ích hay thú vị với bạn không?

Đừng điền vào đây nếu bạn là con người. Đừng điền vào đây nếu bạn là con người.

Cảm ơn bạn. Bạn có thể cho chúng tôi biết những gì bạn thích về nó?

Cảm ơn bạn. Chúng ta có thể làm gì tốt hơn?

Chúng tôi cũng có thể muốn liên hệ với bạn để cung cấp thông tin cập nhật hoặc câu hỏi liên quan đến phản hồi của bạn và sản phẩm của chúng tôi. Nếu không phiền, bạn có thể tùy ý để lại địa chỉ email cùng với ý kiến ​​của mình

Làm cách nào để ghi lại âm thanh trong Python?

Ghi âm thanh . bản ghi python-sounddevice vào mảng NumPy và bản ghi pyaudio vào đối tượng byte. Cả hai thứ này đều có thể được lưu trữ dưới dạng tệp WAV bằng thư viện scipy và wave tương ứng. The python-sounddevice and pyaudio libraries provide ways to record audio with Python. python-sounddevice records to NumPy arrays and pyaudio records to bytes objects. Both of these can be stored as WAV files using the scipy and wave libraries, respectively.

Làm cách nào để cài đặt Sounddevice trong Python?

Cài đặt .
cài đặt conda -c conda-forge python-sounddevice
python3 -m pip cài đặt thiết bị âm thanh
python3 -m pip gỡ cài đặt sounddevice