Phát hiện âm thanh trong Python

Phân tích dữ liệu âm thanh là phân tích và hiểu các tín hiệu âm thanh được thu bởi các thiết bị kỹ thuật số, với nhiều ứng dụng trong doanh nghiệp, chăm sóc sức khỏe, năng suất và thành phố thông minh. Các ứng dụng bao gồm phân tích sự hài lòng của khách hàng từ các cuộc gọi hỗ trợ khách hàng, phân tích và truy xuất nội dung phương tiện, hỗ trợ chẩn đoán y tế và theo dõi bệnh nhân, công nghệ hỗ trợ cho người khiếm thính và phân tích âm thanh vì an toàn công cộng

Trong phần đầu tiên của loạt bài viết này, chúng tôi sẽ nói về tất cả những gì bạn cần biết trước khi bắt đầu phân tích dữ liệu âm thanh và trích xuất các tính năng cần thiết từ tệp âm thanh/âm thanh. Chúng tôi cũng sẽ xây dựng Mạng thần kinh nhân tạo [ANN] để phân loại thể loại âm nhạc. Trong phần thứ hai, chúng ta sẽ thực hiện điều tương tự bằng cách tạo Mạng thần kinh chuyển đổi và sẽ so sánh độ chính xác của chúng

 

Mục lục

 

  • Tổng quan về tệp âm thanh
  • Ứng dụng xử lý âm thanh
  • Xử lý âm thanh với Python
  • quang phổ
  • Trích xuất tính năng từ tín hiệu Âm thanh
  • Phân loại thể loại bằng Mạng thần kinh nhân tạo [ANN]

 

Tổng quan về tệp âm thanh

 
Đoạn trích âm thanh là các tệp âm thanh kỹ thuật số ở định dạng. định dạng wav. Sóng âm thanh được số hóa bằng cách lấy mẫu chúng ở các khoảng thời gian riêng biệt được gọi là tốc độ lấy mẫu [thường là 44. 1kHz đối với âm thanh chất lượng CD có nghĩa là các mẫu được lấy 44.100 lần mỗi giây].

Mỗi mẫu là biên độ của sóng tại một khoảng thời gian cụ thể, trong đó độ sâu bit xác định mức độ chi tiết của mẫu còn được gọi là dải động của tín hiệu [thường là 16 bit có nghĩa là một mẫu có thể nằm trong khoảng 65.536 giá trị biên độ]

Lấy mẫu và tần suất lấy mẫu là gì?

Trong xử lý tín hiệu, lấy mẫu là việc giảm tín hiệu liên tục thành một chuỗi các giá trị rời rạc. Tần suất hoặc tốc độ lấy mẫu là số lượng mẫu được lấy trong một khoảng thời gian cố định. Tần suất lấy mẫu cao dẫn đến mất thông tin ít hơn nhưng chi phí tính toán cao hơn và tần số lấy mẫu thấp dẫn đến mất thông tin cao hơn nhưng tính toán nhanh và rẻ


Sóng âm thanh, màu đỏ, được thể hiện bằng kỹ thuật số, màu xanh lam [sau khi lấy mẫu và lượng tử hóa 4 bit], với mảng thu được hiển thị bên phải. Bản gốc © Aquegg. Wikimedia Commons

 

 

Ứng dụng xử lý âm thanh

 
Các ứng dụng tiềm năng của xử lý âm thanh là gì? .

  • Lập chỉ mục các bộ sưu tập nhạc theo tính năng âm thanh của chúng
  • Đề xuất âm nhạc cho các kênh radio
  • Tìm kiếm tương tự cho các tệp âm thanh [còn gọi là Shazam]
  • Xử lý và tổng hợp giọng nói — tạo giọng nói nhân tạo cho các tác nhân đàm thoại

 

Xử lý dữ liệu âm thanh bằng Python

 
Âm thanh được thể hiện dưới dạng tín hiệu âm thanh có các tham số như tần số, băng thông, decibel, v.v. Một tín hiệu âm thanh điển hình có thể được biểu thị dưới dạng một hàm của Biên độ và Thời gian.


Nguồn

 

Có những thiết bị được chế tạo giúp bạn nắm bắt những âm thanh này và thể hiện nó ở định dạng mà máy tính có thể đọc được. Ví dụ về các định dạng này là

  • định dạng wav [Tệp âm thanh dạng sóng]
  • định dạng mp3 [MPEG-1 Lớp âm thanh 3]
  • Định dạng WMA [Windows Media Audio]

Một quy trình xử lý âm thanh điển hình liên quan đến việc trích xuất các đặc điểm âm thanh có liên quan đến nhiệm vụ hiện tại, tiếp theo là các sơ đồ ra quyết định liên quan đến phát hiện, phân loại và tổng hợp kiến ​​thức. Rất may, chúng tôi có một số thư viện python hữu ích giúp công việc này dễ dàng hơn

Thư viện âm thanh Python

Python có một số thư viện tuyệt vời để xử lý âm thanh như Librosa và PyAudio. Ngoài ra còn có các mô-đun tích hợp cho một số chức năng âm thanh cơ bản

Chúng tôi sẽ chủ yếu sử dụng hai thư viện để thu và phát lại âm thanh

1. Librosa

Nó là một mô-đun Python để phân tích tín hiệu âm thanh nói chung nhưng hướng nhiều hơn đến âm nhạc. Nó bao gồm các chi tiết cơ bản để xây dựng hệ thống MIR [Truy xuất thông tin âm nhạc]. Nó đã được ghi lại rất tốt cùng với rất nhiều ví dụ và hướng dẫn

Cài đặt

pip install librosa
or
conda install -c conda-forge librosa


Để tăng thêm sức mạnh giải mã âm thanh, bạn có thể cài đặt ffmpeg đi kèm với nhiều bộ giải mã âm thanh

2. IPython. trưng bày. âm thanh

librosa.load[audio_data, sr=44100]
4 cho phép bạn phát âm thanh trực tiếp trong sổ tay jupyter

Tôi đã tải lên một tệp âm thanh ngẫu nhiên trên trang bên dưới. Bây giờ chúng ta hãy tải tệp trong bảng điều khiển jupyter của bạn

vocaroo. Máy ghi âm trực tuyến
Vocaroo là cách nhanh chóng và dễ dàng để chia sẻ tin nhắn thoại qua các mạng nội bộ.
 

Đang tải tệp âm thanh

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050


Điều này trả về một chuỗi thời gian âm thanh dưới dạng một mảng có nhiều mảng với tốc độ lấy mẫu mặc định [sr] là 22KHZ đơn âm. Chúng ta có thể thay đổi hành vi này bằng cách lấy mẫu lại ở 44. 1KHz

librosa.load[audio_data, sr=44100]


hoặc để vô hiệu hóa lấy mẫu lại

librosa.load[audio_path, sr=None]


Tốc độ lấy mẫu là số lượng mẫu âm thanh được truyền trong mỗi giây, được đo bằng Hz hoặc kHz

Phát âm thanh

Sử dụng,

librosa.load[audio_data, sr=44100]
5 bạn có thể phát âm thanh trong sổ ghi chép jupyter của mình

import IPython.display as ipd
ipd.Audio[audio_data]


Điều này trả về một tiện ích âm thanh

Trực quan hóa âm thanh

Chúng ta có thể vẽ mảng âm thanh bằng cách sử dụng 

librosa.load[audio_data, sr=44100]
6

________số 8


Ở đây, chúng ta có biểu đồ đường bao biên độ của dạng sóng


Biên độ, Bước sóng và Pha trong tín hiệu là gì?

 

 

quang phổ

 
Biểu đồ quang phổ là một cách trực quan để biểu thị cường độ tín hiệu hoặc "độ ồn" của tín hiệu theo thời gian ở các tần số khác nhau có trong một dạng sóng cụ thể. Chẳng hạn, người ta không chỉ có thể biết liệu có nhiều hay ít năng lượng ở tần số 2 Hz so với 10 Hz mà còn có thể thấy các mức năng lượng thay đổi như thế nào theo thời gian.

Một quang phổ thường được mô tả dưới dạng bản đồ nhiệt, tôi. e. , dưới dạng hình ảnh có cường độ được hiển thị bằng cách thay đổi màu sắc hoặc độ sáng

Chúng ta có thể hiển thị một quang phổ bằng cách sử dụng.

librosa.load[audio_data, sr=44100]
7

librosa.load[audio_data, sr=44100]
0


librosa.load[audio_data, sr=44100]
8 chuyển đổi dữ liệu thành phép biến đổi Fourier ngắn hạn. STFT chuyển đổi tín hiệu sao cho chúng ta có thể biết biên độ của tần số nhất định tại một thời điểm nhất định. Sử dụng STFT, chúng tôi có thể xác định biên độ của các tần số khác nhau phát tại một thời điểm nhất định của tín hiệu âm thanh.
librosa.load[audio_data, sr=44100]
9 được dùng để hiển thị biểu đồ quang phổ

Trục dọc hiển thị tần số [từ 0 đến 10kHz] và trục ngang hiển thị thời gian của clip. Vì chúng tôi thấy rằng tất cả các hành động đang diễn ra ở dưới cùng của quang phổ, chúng tôi có thể chuyển đổi trục tần số thành trục logarit

librosa.load[audio_data, sr=44100]
3


Tạo tín hiệu âm thanh

librosa.load[audio_data, sr=44100]
4


 

Trích xuất tính năng từ tín hiệu Âm thanh

 
Mỗi tín hiệu âm thanh bao gồm nhiều tính năng. Tuy nhiên, chúng ta phải trích xuất các đặc điểm có liên quan đến vấn đề mà chúng ta đang cố gắng giải quyết. Quá trình trích xuất các tính năng để sử dụng chúng để phân tích được gọi là trích xuất tính năng. Hãy để chúng tôi nghiên cứu một số tính năng chi tiết.

Các đặc trưng quang phổ [đặc trưng dựa trên tần số], thu được bằng cách chuyển đổi tín hiệu dựa trên thời gian thành miền tần số bằng cách sử dụng Biến đổi Fourier, như tần số cơ bản, thành phần tần số, tâm quang phổ, thông lượng quang phổ, mật độ quang phổ, điểm cuộn quang phổ,

1. Trung tâm quang phổ

Tâm quang phổ cho biết tần số mà năng lượng của quang phổ tập trung vào hay nói cách khác Nó cho biết vị trí của " tâm khối lượng " của âm thanh. Điều này giống như một trung bình có trọng số

trong đó S[k] là độ lớn phổ tại tần số bin k, f[k] là tần số tại bin k

librosa.load[audio_path, sr=None]
0 tính toán tâm quang phổ cho từng khung hình trong một tín hiệu

librosa.load[audio_data, sr=44100]
6


librosa.load[audio_path, sr=None]
1 sẽ trả về một mảng có các cột bằng một số khung có trong mẫu của bạn

Có một sự gia tăng trong tâm quang phổ ngay từ đầu

2. Rolloff quang phổ

Nó là thước đo hình dạng của tín hiệu. Nó đại diện cho tần số mà tần số cao giảm xuống 0. Để có được nó, chúng ta phải tính tỷ lệ thùng trong phổ công suất trong đó 85% công suất của nó ở tần số thấp hơn

librosa.load[audio_path, sr=None]
2 tính toán tần số rolloff cho từng khung hình trong một tín hiệu

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
0


3. Băng thông quang phổ

Băng thông phổ được định nghĩa là độ rộng của dải ánh sáng ở một nửa cực đại cực đại [hoặc toàn bộ chiều rộng ở một nửa cực đại [FWHM]] và được biểu thị bằng hai vạch dọc màu đỏ và λSB trên trục bước sóng

librosa.load[audio_path, sr=None]
3 tính băng thông phổ thứ tự-p

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
1


4. Tỷ lệ giao nhau bằng 0

Một cách rất đơn giản để đo độ mượt của tín hiệu là tính số lần giao nhau bằng 0 trong một đoạn của tín hiệu đó. Tín hiệu thoại dao động chậm — ví dụ: tín hiệu 100 Hz sẽ vượt qua 0 100 mỗi giây — trong khi ma sát vô thanh có thể có 3000 giao cắt 0 mỗi giây

Nó thường có giá trị cao hơn đối với âm thanh có bộ gõ cao như âm thanh trong metal và rock. Bây giờ chúng ta hãy hình dung nó và xem cách chúng ta tính toán tỷ lệ chéo bằng 0

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
2


phóng to

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
3


Dường như có 16 điểm giao cắt bằng 0. Hãy xác minh điều đó với Librosa

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
4


5. Hệ số Cepstral tần số Mel [MFCC]

Các hệ số cepstral tần số Mel [MFCC] của tín hiệu là một tập hợp nhỏ các đặc trưng [thường khoảng 10–20] mô tả chính xác hình dạng tổng thể của đường bao quang phổ. Nó mô hình hóa các đặc điểm của giọng nói con người

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
5


6. tính năng sắc độ

Một véc tơ hoặc đặc trưng sắc độ thường là một vectơ đặc trưng gồm 12 phần tử cho biết mức năng lượng của từng loại cao độ, {C, C#, D, D#, E, …, B}, có trong tín hiệu. Nói tóm lại, Nó cung cấp một cách mạnh mẽ để mô tả thước đo độ tương tự giữa các bản nhạc

librosa.load[audio_path, sr=None]
4 được sử dụng để tính toán các tính năng của Chroma

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
6


Bây giờ chúng ta đã hiểu cách chúng ta có thể xử lý dữ liệu âm thanh và trích xuất các tính năng quan trọng bằng python. Trong phần sau, chúng tôi sẽ sử dụng các tính năng này và xây dựng mô hình ANN để phân loại thể loại âm nhạc

 

Phân loại thể loại âm nhạc bằng ANN

 


Tín dụng

 

Bộ dữ liệu này đã được sử dụng cho bài báo nổi tiếng về phân loại thể loại “Phân loại thể loại âm nhạc của tín hiệu âm thanh” của G. Tzanetakis và P. Cook in IEEE Giao dịch về xử lý âm thanh và lời nói 2002

Bộ dữ liệu bao gồm 1000 bản âm thanh mỗi bản dài 30 giây. Nó chứa 10 thể loại, mỗi thể loại được đại diện bởi 100 bản nhạc. Các bản nhạc đều là các tệp âm thanh 16-bit đơn âm 22050 Hz ở định dạng. định dạng wav

Bạn có thể tải xuống tập dữ liệu từ trang web marsyas

Bộ dữ liệu bao gồm 10 thể loại i. e

  • nhạc blues
  • cổ điển
  • Quốc gia
  • vũ trường
  • Hiphop
  • nhạc jazz
  • Kim loại
  • Nhạc pop
  • reggae
  • Đá

Mỗi thể loại chứa 100 bài hát. Tổng số tập dữ liệu. 1000 bài hát

Trước khi tiếp tục, tôi khuyên bạn nên sử dụng Google Colab để làm mọi thứ liên quan đến Mạng thần kinh vì nó miễn phí và cung cấp GPU và TPU làm môi trường thời gian chạy

lộ trình

Trước hết, chúng ta cần chuyển đổi các tệp âm thanh thành hình ảnh định dạng PNG [quang phổ]. Từ những ảnh phổ này, chúng tôi phải trích xuất các tính năng có ý nghĩa, tôi. e. MFCC, Trung tâm quang phổ, Tốc độ giao nhau bằng 0, Tần số sắc độ, Giảm quang phổ

Khi các tính năng đã được trích xuất, chúng có thể được thêm vào tệp CSV để ANN có thể được sử dụng để phân loại

Nếu chúng tôi muốn làm việc với dữ liệu hình ảnh thay vì CSV, chúng tôi sẽ sử dụng CNN [Phạm vi của phần 2]

Vì vậy, hãy bắt đầu

1. Giải nén và tải dữ liệu của bạn lên google drive, sau đó gắn ổ đĩa vào Colab


Cấu trúc thư mục Google Colab sau khi tải dữ liệu

 

2. Nhập tất cả các thư viện cần thiết

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
7


3. Bây giờ hãy chuyển đổi các tệp dữ liệu âm thanh thành hình ảnh định dạng PNG hoặc về cơ bản trích xuất Spectrogram cho mọi Âm thanh

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
8


Quang phổ mẫu của một bài hát có thể loại là blues


quang phổ của một bài hát có thể loại là Blues

 

Giờ đây, vì tất cả các tệp âm thanh đã được chuyển đổi thành phổ tương ứng nên việc trích xuất các tính năng trở nên dễ dàng hơn

4. Tạo tiêu đề cho tệp CSV của chúng tôi

import librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
9


5. Trích xuất các tính năng từ Spectrogram. Chúng tôi sẽ trích xuất các hệ số cepstral tần số Mel [MFCC], Tâm quang phổ, Tốc độ giao nhau bằng 0, Tần số sắc độ và Cuộn quang phổ

librosa.load[audio_data, sr=44100]
0


6. tiền xử lý dữ liệu. Nó liên quan đến việc tải dữ liệu CSV, mã hóa nhãn, mở rộng tính năng và chia dữ liệu thành tập huấn luyện và kiểm tra

librosa.load[audio_data, sr=44100]
1


7. Xây dựng mô hình ANN

librosa.load[audio_data, sr=44100]
2


8. Phù hợp với mô hình

librosa.load[audio_data, sr=44100]
3


Sau 100 kỷ nguyên, Độ chính xác. 0. 67

 

Phần kết luận

 
Phần 1 kết thúc tại đây. Trong bài viết này, chúng tôi đã phân tích khá tốt về dữ liệu âm thanh. Chúng tôi hiểu cách trích xuất các tính năng quan trọng và cũng đã triển khai Mạng thần kinh nhân tạo [ANN] để phân loại thể loại âm nhạc.

Trong phần 2, chúng ta sẽ thực hiện tương tự bằng cách sử dụng Mạng thần kinh chuyển đổi trực tiếp trên Spectrogram

Làm cách nào để phát hiện tiếng ồn trong âm thanh bằng Python?

1 câu trả lời .
Chuyển đổi âm thanh dự kiến ​​thành một chuỗi biên độ tần số. cặp. Sau đó, ghi lại âm thanh qua micrô và chuyển đổi âm thanh đó. ghi thành một chuỗi các cặp biên độ tần số tương ứng. .
Sử dụng hệ thống nhận dạng âm thanh để xác định âm thanh dự kiến ​​trong bản ghi âm

Python phát hiện giọng nói như thế nào?

Nhận dạng từ được nói . SpeechRecognition - Gói này có thể được cài đặt bằng cách sử dụng pip install SpeechRecognition. Google-Speech-API − Nó có thể được cài đặt bằng lệnh pip install google-api-python-client. Pyaudio − It can be installed by using pip install Pyaudio command. SpeechRecognition − This package can be installed by using pip install SpeechRecognition. Google-Speech-API − It can be installed by using the command pip install google-api-python-client.

Làm cách nào để cài đặt Python nhận dạng giọng nói?

Cách dễ nhất để cài đặt tính năng này là sử dụng pip install SpeechRecognition . Nếu không, hãy tải xuống bản phân phối nguồn từ PyPI và giải nén kho lưu trữ. Trong thư mục, chạy cài đặt python. cài đặt py.

Thuật toán nào được sử dụng trong nhận dạng giọng nói trong Python?

Thuật toán nào được sử dụng trong nhận dạng giọng nói? . PLP features, Viterbi search, deep neural networks, discrimination training, WFST framework, etc.

Chủ Đề