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 jupyterTô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ìnhimport 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]
7librosa.load[audio_data, sr=44100]
0librosa.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]
3Tạ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ệulibrosa.load[audio_data, sr=44100]
6librosa.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ạnCó 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ệuimport librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
03. 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ự-pimport librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
14. 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
2phó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
3Dườ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
45. 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
56. 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 Chromaimport librosa
audio_data = '/../../gruesome.wav'
x , sr = librosa.load[audio_data]
print[type[x], type[sr]]# print[x.shape, sr]#[94316,] 22050
6Bâ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
73. 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
8Quang 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
95. 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]
06. 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]
17. Xây dựng mô hình ANN
librosa.load[audio_data, sr=44100]
28. Phù hợp với mô hình
librosa.load[audio_data, sr=44100]
3Sau 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