Chức năng Playlist

Một phần của tài liệu Xây dựng website nghe nhạc kết hợp nhận diện nhạc qua giai điệu và đề xuất (khóa luận tốt nghiệp) (Trang 78)

Hình 4.8.1 Giao diện trang Playlist

STT Tên thành phần Loại Mô tả thành phần

1 Title Label Tiêu đề của component

2 Songs Component Các bài hát được đề xuất cho người dùng

3 Playlists Component Các Playlist của người dùng Bảng 4.8.1 Mô tả giao diện trang Playlist

62

Chương 5. HIỆN THỰC HÓA CHỨC NĂNG NHẬN DIỆN

5.1. Quá trình thu thập dữ liệu

⎼ Với những bài toán nhận diện và phân loại thì cần đến một lượng dữ liệu lớn để có thể tính toán và tăng độ chính xác cho thuật toán nhận diện.

⎼ Việc thu thập và phân tích dữ liệu như bài hát khó khăn hơn so với thu thập các loại dữ liệu như ảnh. Vì dung lượng của một bài hát thường sẽ tương đối lớn hơn so với một bức ảnh thông thường. Kèo theo đó là các thông số của bài hát về Channels, Loại của file Audio, SampleRate, BitsPerSample,…

⎼ Sau khi tìm hiểu thì nhóm quyết định chọn bộ dữ liệu 1177 bài hát với kích thước gần 27GB.

⎼ Quá trình thu thập trên trang ZingMp3 bao gồm các bước cơ bản sau:

● Dùng Tool Capture Request từ WebClient tới ZingMp3 để xác định các API cần thiết bao gồm:

o Lấy thông tin của bài hát: “api/v2/song/get/info”

o Lấy file audio của bài hát: “api/v2/song/get/streaming”

o Lấy file lyric của bài hát: “api/v2/lyric/get/lyric”

o Lấy List bài hát của album: “api/v2/page/get/playlist”

● Tạo Signature cho mỗi request ● Gọi API để lấy dữ liệu từ trang Web ● Tiến hành xử lý file audio và file text

63

5.1.1. Xác định các API cần thiết:

⎼ Sử dụng Google Dev Tool để xác định các gói request và response:

⎼ Một số API thu thập được: ● API lấy thông tin bài hát:

“https://zingmp3.vn/api/v2/song/get/info?id=” + SONG_ID +

“&ctime=” + CTIME + “&version=1.4.2&sig=” + SIG + “&apiKey=” + API_KEY

● API lấy file Audio của bài hát:

“https://zingmp3.vn/api/v2/song/get/streaming?id=” + SONG_ID + “&ctime=” + CTIME + “&version=1.4.2&sig=” + SIG + “&apiKey=” + API_KEY

● API lấy lyric của bài hát:

64 “https://zingmp3.vn/api/v2/lyric/get/lyric?id=” + SONG_ID +

“BGId&ctime=” + CTIME + “&version=1.4.2&sig=” + SIG + “&apiKey=” + API_KEY

● API lấy list bài hát của Playlist:

“https://zingmp3.vn/api/v2/page/get/playlist?id=” + PLAYLIST_ID + “BGId&ctime=” + CTIME + “&version=1.4.2&sig=” + SIG + “&apiKey=” + API_KEY

⎼ Trong đó các tham số:

● SONG_ID : ID của bài hát ● CTIME: thời gian gửi bài hát ● SIG: Signature của request ● API_KEY: là key tạo mã SIG

5.1.2. Cách tạo Signature cho request:

- Cách tạo mã chứng thực của ZingMp3:

SIG = Hash512(API_PATH + Hash256(“ctime=” + ctime + “id=” + id + “version=1.4.2”), SECRET_KEY).

65 - Với API_PATH, ví dụ như: /api/v2/song/get/info

5.1.3. Gọi API để crawl dữ liệu:

Sử dụng Google Colab để tiến hành crawl dữ liệu. Vì tính tự động và tiện ích có thể trực tiếp đưa vào Google Drive để lưu trữ.

66

5.2. Kết quả thu được

Sau quá trình crawl data thì nhóm thu được 1177 file MP3 thuộc 32 thể loại khác nhau và các file lyric, beat liên quan đến các bài hát.

Hình 5.2.1 Thống kê dữ liệu thu được

67

5.3. Xử lý lưu trữ và chuyển đổi âm thanh

5.3.1. Tính chất của thanh âm

− Các tính chất chính của: Cao độ, Trường độ, Cường độ, Âm sắc

− Cao độ: Độ cao thấp của âm thanh phụ thuộc vào tần số dao động của vật thể rung.

● Tần số dao động càng nhiều thì âm thanh có độ cao càng cao và ngược lại.

● Đơn vị đo cao độ là Hertz (Hz)

● Ví dụ, âm thấp nhất của cây đàn piano có tần số 16 Hz, âm cao nhất của nó có tần số 4000Hz.

● Như hình trên, cùng 1 Nốt nhạc nhưng các nhạc cụ cho ra cao độ khác nhau

68 − Trường độ: Độ dài ngắn của âm thanh lúc âm thanh bắt đầu được vang lên.

● Đơn vị đo trường độ là giây (s) − Cường độ: Độ to nhỏ của âm thanh.

● Đơn vị đo cường độ âm thanh là Deciben (viết tắt là db) − Âm sắc: Giọng của mỗi người có thể khác nhau

− Mỗi bài hát được cấu tạo thành từ nhiều âm thanh, bằng vào việc nhận biết chính xác các âm thanh thông qua: cao độ, trường độ, cường độ, chúng ta có thể tìm ra bài hát chỉ qua 1 đoạn giai điệu ngắn của nó. Cũng như với việc không so sánh âm sắc, nhiều bản khác nhau của 1 bài hát có thể được tìm ra

5.3.2. Chuyển đổi và tìm kiếm bài hát

a. Chuyển đổi nhạc thành các biểu đồ để phân tích

− Một bài hát có thể chuyển thành quang phổ với 2 cột: Ox – trường độ, Oy – cao độ. Độ đậm nhạt tại 1 điểm trên quang phổ chính là cường độ của nó

69 − Tại mỗi thời điểm trên quang phổ, chọn ra những điểm có cường độ lớn nhất,

chúng ta sẽ được constellation map

− Tuy nhiên, cần biến đổi các giá trị của các điểm trên CM để khi lưu trữ chúng không bị thay đổi theo thời gian bắt đầu của bản thu âm

− Giải pháp: Tại mỗi Target Zone trong CM, chọn ra một điểm nằm ngoài khoảng đó để làm điểm Mốc (f1, t1), các Điểm (f2,t2) trong Target Zone sẽ được lưu trữ dưới dạng hash: {f1, f2, t2-t1}

Hình 5.3.3 Constellation Map

70 - Như vậy 1 bài nhạc sẽ được lưu trữ thành 1 bảng hash A như hình dưới:

− Việc tìm kiếm 1 đoạn nhạc trong đó chính là tìm xem trong bảng hash A có tồn tại bảng hash B của đoạn nhạc không:

b. Cách tìm kiếm

− Chúng ta lập ra hệ trục mà ở đó: trục Ox theo thời gian của bản nhạc trong database, trục Oy theo thời gian của bản ghi âm

Hình 5.3.5 Time-Invariant Hashes

71 − Lấy t = x – y (time offset) và biểu diễn dưới dạng biểu đồ cột, nếu có 1 cột cao hơn hẳn so với các cột còn lại, cột này rất có thể là khoảng thời gian chênh lệch của bản ghi so với bản nhạc, cột càng cao càng chứng tỏ mức độ trùng khớp

5.4. Hiện thực hóa công nghệ

5.4.1. Chuyển đổi và lưu trữ âm thanh

⎼ Lựa chọn file wav để thực hiện chuyển đổi sang FFT thay vì file mp3:

● Tuy file wav có dung lượng cao hơn nhưng là loại file không nén (uncompressed) vì vậy nên bảo toàn được dữ liệu. Giúp cho kết quả FFT trở nên chính xác hơn

⎼ Lựa chọn Sample Rate: 48 kHz vì khoảng nghe được của con người là từ 0 – 20kHz => cần 44000 sample/s (Định lý Nyquist-Shannon)

⇨ Cần sample rate lớn hơn 44kHz, hiện tại có các loại chính như 44,1 kHz, 48kHz (Blueray), 96 kHz, 192kHz. Nhóm quyết định chọn 48kHz vì đây

72 là loại Sample rate cho kết quả tốt hơn 44,1kHz cũng như nhẹ hơn 96kHz, 192kHz

⎼ Lựa chọn channel: Mono thay vì stereo giúp cho quá trình lưu giữ, tìm kiếm dễ dàng hơn

⎼ Quá trình chuyển đổi:

● Âm thanh sau khi được load sẽ được chuyển về Mono

● Quá trình low pass filter sẽ lọc bỏ các tiếng ồn cũng như những âm thanh mà con người không nghe được

● Downsampling: Nén các sample lại với nhau để thu được 1 sample mới giúp cho thời gian duyệt và xử lý nhanh hơn

● FFT bằng hamming window: thu được TFPs với kết quả tốt nhất

● Lọc lấy 6 điểm mạnh nhất tại các âm tần khác nhau trong cùng 1 thời điểm để thu được kết quả cuối cùng

73

5.4.2. Tìm kiếm bài hát

⎼ Từ TFPs của bản record, tạo các bảng Hash <Address, SongValue>

⎼ Đem so sánh với Database để tìm các bài hát có lượng SongValue tương đồng ⎼ Sử dụng TargetZone filter để lọc bỏ các kết quả sai

⎼ Chọn ra top các bài hát có tỉ lệ chính xác cao nhất

5.4.3. Kiểm thử độ chính xác

- Cấu hình kiểm thử: ● Core I5 gen 11th

● CPU 4 Cores – 8 Processors ● Ram 8GB

● SSD: 256GB

74 ● Usage: 6 Processors

- Nhóm sử dụng các phương thức kiểm thử sau để kiểm thử độ chính xác của mô hình:

● Kiểm thử bằng file

○ Bộ dữ liệu kiểm thử: 570 bài hát / 1000 bài hát

○ Nhóm cắt các bài hát thành đoạn 10s bắt đầu từ phút 1:00 (Đây là khoảng thời gian giữa ver 1 và điệp khúc của bài hát nhằm tránh các đoạn intro, outro)

○ Sau đó các file này được trộn với các loại tiếng ồn: ■ White-noise: tiếng nhiễu sóng

■ Rain-noise: tiếng mưa

■ Car-noise: tiếng xe ô tô chạy

■ Machine-noise: tiếng máy móc hoạt động ■ Texting-noise: tiếng gõ

■ Brown-noise: 1 loại tiếng nhiễu khác nhiễu hơn white-noise ■ Pink-noise: tương tự brown-noise

■ Pot-noise: các tiếng ồn ngẫu nhiên ■ Chair-noise: tiếng kéo ghế

○ Sau đó các file này lần lượt được dùng để kiểm thử và thu được kết quả sau:

- Thời gian tìm kiếm: Trung bình 12605.14821 ms

75 - Độ trùng khớp: trung bình 79.54%

○ Nhận xét:

■ Do các file này được cắt từ file gốc để lưu dữ liệu cũng như không bị ảnh hưởng bởi chất lượng thu âm nên độ chính xác rất cao

● Kiểm thử bằng thu âm

○ Bộ dữ liệu kiểm thử: 100 bài hát / 1000 bài hát

○ Nhóm lựa chọn 100 bài hát và tiếng hành thu âm lại đoạn 10s ngẫu nhiên 0 5000 10000 15000 20000 25000 30000 1 17 33 49 65 81 97 113 129 145 161 177 193 209 225 241 257 273 289 305 321 337 353 369 385 401 417 433 449 465 481 497 513 529 545 561 Time(ms) 0.00% 20.00% 40.00% 60.00% 80.00% 100.00% 120.00% 1 18 35 52 69 86 103 120 137 154 171 188 205 222 239 256 273 290 307 324 341 358 375 392 409 426 443 460 477 494 511 528 545 562 Score

76 ○ Sau đó các file này được đem đi kiểm thử và thu được kết quả:

- Thời gian tìm kiếm: Trung bình 11794.38 ms

- Độ trùng khớp: trung bình 38,57 % ○ Nhận xét: 0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 Time(ms) 0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 Score

77 ■ Do các file chịu ảnh hưởng lớn từ chất lượng thu âm nên độ

78

Chương 6. HIỆN THỰC HÓA CHỨC NĂNG ĐỀ XUẤT NHẠC

6.1. Xây dựng hệ thống đề xuất

Để xây dựng hệ thống, nhóm quyết định thực hiện dựa trên so sánh sự tương đồng trong đặc trưng của âm thanh. Hướng tiếp cận này có thể được xem như Content-

based Recommendation và nó đòi hỏi định nghĩa về sự tương đồng trong metric.

Metric được dùng để đo lường độ tương đồng giữa các tín hiệu âm thanh. Nhóm sử dụng CNN (Convolutional Neural Networks) cho việc trích xuất đặc trưng, nhận dạng và đo khoảng cách tương đương giữa các đặc trưng của âm thanh. CNN đặc biệt phù

hợp với việc dự đoán những đặc trưng âm nhạc như hợp âm và nhịp của bài hát. Model nhận input là quang phổ của file âm thanh và phân tích cho ra một output là một vector dự đoán thể loại nhạc của bài hát.

79

6.2. Hệ thống phân loại

6.2.1. Thu thập dữ liệu

Nhóm trực tiếp sử dụng dữ liệu thu được trên ZingMp3 để thực hiện train cho mô hình phân loại thay vì sử dụng các dữ liệu có sẵn như các dataset Free Music Archive (FMA) hoặc The Million Data Set vì ở đó chỉ bao gồm các thể loại nhạc

cơ bản như Classical, Electronic và Folk,.. Còn với thể loại nhạc đặc trưng cơ bản như là Nhạc Việt, đặc biệt hơn chúng ta muốn phân loại ra các loại như Nhạc Phim, Nhạc Rap,.. thì các dữ liệu với nhãn như trên không thể đảm bảo được. Nên nhóm quyết định sử dụng dữ liệu cùng nhãn dán là thể loại của ZingMp3 để phân loại bài hát.

6.2.2. Lọc dữ liệu

Ban đầu, trong quá trình lọc, nhóm gặp nhiều khó khăn vì phải loại bỏ đi những audio kém chất lượng và nhạc bị gắn sai nhãn. Lý do gắn sai nhãn có thể là do nghệ sĩ tự ý gắn nhãn và một số thể loại trong quá trình crawl không đáp ứng đủ mức tối thiểu và số lượng file chênh lệch lớn giữa các thể loại làm cho dữ liệu bị overfitting.

Để nâng cao chất lượng file nhạc và nâng số lượng file để train ở mỗi thì nhóm tiến hành cắt file và convert file ra thành các đoạn file wav với duration là 30s. Điều này làm tăng dung lượng lưu trữ rất lớn.

80 Sự chênh lệch dữ liệu ở các thể loại là rất lớn. Có thể dễ dàng thấy file nhạc Việt Nam lên tới 3422 file và các bài nhạc Indie thì chỉ có khoảng 6 file. Ở các thể loại nhạc có số lượng file lớn thì có sự overlap hay chồng chéo với các thể loại như Nhạc Phim Việt hay các thể loại liên quan đến Việt Nam. Điều này làm cho mô hình bị overfitting. Sau khi xem xét và phân tích, nhóm quyết định chia lại và gắn nhãn cho các file nhạc để tránh dữ liệu bị overlap. Về vấn đề có sự chênh lệch quá lớn giữa các thể loại thì nhóm đề ra hướng giải quyết như sau: Thực hiện crawl manual với những thể loại thiếu dữ liệu và đặt ra mức tối thiểu là 40 file và mức tối đa là 501 files.

81 Sau cùng nhóm chia làm 18 thể loại để phân loại nhạc với dữ liệu tối thiểu ở mỗi thể loại là 40 file wav và tối đa là 501 file wav.

82

6.2.3. Audio Preprocessing

Chúng ta cần một cách thích hợp để đưa các file Audio làm input cho mạng Neural. Do đó, chúng ta chuyển đổi file wav thành các dạng như Spectrogram. Đầu

tiên, để có thể làm như vậy thì file wav phải ở một mức sampling rate nhất định. Sau đó, chúng ta áp dụng Short Time Fourier Transform (STFT) ở mỗi sampling rate với một chiều dài window và hop nhất định. Sau đó, kết quả từ STFT được chuyển đổi

thành Mel scale hoặc MFCC.

Nhóm sử dụng Librosa để thực hiện convert ra MFCC. Việc của chúng ta là xác định các thông số đầu vào như samplerate, hop_length và window_length.

83 Kết quả của quá trình này ta rút trích được các đặc trưng từ các file wav để làm input cho Model phục vụ cho quá trình training.

6.2.4. Mô hình mạng

Để thực hiện phân loại thể loại nhạc, nhóm sử dụng mô hình mạng Resnet50 và một số mô hình khác để thực hiện đề tài này.

6.2.4.1 Thông tin về mô hình mạng:

6.2.4.1.a. Resnet50

⎼ Mô hình mạng ResNet50 bao gồm 5 stage và mỗi stage sẽ có một Convolution

Block và Identity Block.

⎼ Mỗi Convolution Block có 3 Convolution Layer và mỗi Identity Block có 3

Convolution Layer.

⎼ Và tổng thể ResNet-50 có hơn 23 triệu params có thể train. Mạng ResNet được sinh ra để giải quyết vấn đề về hiện tượng Vanishing Gradient dẫn tới quá trình học tập không tốt.

84 Hình 6.2.5 Cấu trúc chung của Resnet50

Một phần của tài liệu Xây dựng website nghe nhạc kết hợp nhận diện nhạc qua giai điệu và đề xuất (khóa luận tốt nghiệp) (Trang 78)