Từ tập hợp các bài hát có trong cơ sở dữ liệu, hệ thống sẽ tắnh toán ựặc trưng cho mỗi bài hát và lưu trữ trong cơ sở dữ liệu bài hát, quá trình này cũng ựược sử dụng khi nhận ựược một bản nhạc truy vấn. Trước tiên, mỗi bài hát theo ựịnh dạng WAV (Waveform Audio File Format) ựược biến ựổi thành dạng ựơn âm (mono) và nén mẫu xuống 5512.5 KHz. Tiếp theo ựó, biến ựổi Fourier ngắn ựược áp dụng với kắch thước cửa sổ 2048 mẫu (0,372 giây) và ựộ dịch cửa sổ là 64 mẫu (11,6 mili giây) với dải năng lượng trong khoảng từ 300 Hz ựế 2000 Hz ựược chia thành 33 khoảng ựều nhau. Miền tần số này tương ứng với miền tần số có thể dễ dàng truyền ựi khi sử dụng ựiện thoại di ựộng. Cuối cùng, hệ thống sử dụng 32 bộ lọc ựã ựược học và ngưỡng tưng ứng ựể tạo ra ựặc trưng 32-bit cho mỗi khoảng 11,6 giây của tắn hiệu. Một bài hát ựộ dài trung bình 200 giây sẽ cần 70Kb cho biểu diễn ựặc trưng của nó.
Trong thực tế, việc lưu trữ các file nhạc theo ựịnh dạng WAV là tốn kém tài nguyên bộ nhớ, hệ thống ựã kết hợp sử dụng bộ thư viện ffmpeg [22] cho phép chuyển ựổi một bài hát từ ựịnh dạng MP3 thành ựịnh dạng WAV, từ ựó hệ thống có thể tắnh toán ựặc trưng từ tập các bài hát theo ựịnh dạng MP3.
3.1.1. Thiết kế cơ sở dữ liệu bài hát trong PostgreSQL
Công việc tìm kiếm trong một cơ sở dữ liệu meta-data/fingerprint là nhiệm vụ không dễ dàng. Với một cơ sở dữ liệu vừa phải, bao gồm 10.000 bài hát với ựộ dài trung bình là 5 phút, chúng ta có cơ sở dữ liệu khoảng 250 triệu các ựặc trưng. để nhận dạng một chuỗi ựặc trưng từ một bài hát chưa biết, hệ thống phải tìm
kiếm và thực hiện so sánh trên toàn bộ 250 triệu ựặc trưng này, một công việc khó khăn và tốn kém thời gian ngay cả với những máy tắnh hiện ựại nhất. Vì vậy, khi xây dựng chiến lược tìm kiếm cho hệ thống của mình, chúng tôi giả thiết rằng chuỗi ựặc trưng truy vấn thuộc về bài hát mà chuỗi ựặc trưng của bài hát ựó có chứa ắt nhất một ựặc trưng trong chuỗi ựặc trưng truy vấn. Cơ sở dữ liệu các fingerprint (hình 3.1), do ựó, sẽ bao gồm một bảng tra cứu (lookup table Ờ LUT) với tất cả các giá trị có thể của một ựặc trưng 32 bit ựóng vai trò là một mục từ (entry). Mỗi entry này sẽ trỏ ựến một danh sách các con trỏ là vị trắ thực của ựặc trưng ứng với entry. Trong một hệ thống tìm kiếm thực tế khi mà tài nguyên về bộ nhớ là giới hạn, một bảng tra cứu với &[ entry thường không có tắnh khả thi cũng
như tắnh thực tế. Bên cạnh ựó, có những entry sẽ không có ựặc trưng tương ứng do giới hạn về số lượng bài hát trong cơ sở dữ liệu, dẫn ựến bảng tra cứu có thể rất thưa thớt. Vì vậy, một bảng băm thường ựược sử dụng thay cho bảng tra cứu.
Cơ sở dữ liệu của hệ thống nhận dạng âm nhạc ựược mô tả như hình 3.2. Quan hệ bài hát (song) bao gồm các thuộc tắnh: ựịnh danh bài hát (song_id), tên bài hát (song_name), ựường dẫn thư mục bài hát (link), chuỗi ựặc trưng (fingerprint Ờ ựược tổ chức dưới dạng một mảng các giá trị nguyên dương 32 bit) và ựộ dài của chuỗi ựặc trưng. Quan hệ ựặc trưng (sub_fingerprint) bao gồm các thuộc tắnh ựịnh danh của ựặc trưng (subfingerprint_id), ựịnh danh của bài hát mà ựặc trưng này thuộc về (song_id), vị trắ của ựặc trưng trong chuỗi ựặc trưng (frame)và giá trị của ựặc trưng (sub_fingerprint).
để tăng tốc ựộ tìm kiếm của hệ thống, chúng tôi thực hiện ựánh chỉ mục cho các thuộc tắnh song_id, frame và sub_fingerprint. Thực nghiệm cho thấy rằng, cách ựánh chỉ mục này (ựặc biệt chỉ mục trên trường sub_fingerprint) giúp cải thiện ựáng kể tốc ựộ tìm kiếm của hệ thống.
Hình 3. 2 Mô hình cơ sở dữ liệu
3.1.2. Xây dựng các hàm mở rộng trong PostgreSQL ựể tìm kiếm bản
nhạc
Dựa trên phương pháp nhận dạng âm nhạc ựược ựưa ra bởi Y. Ke [5, 6] trong mục 1.4.4 ở chương 1 và Haitasma [10, 11], chúng tôi tiến hành xây dựng hai hàm mở rộng cần thiết cho quá trình nhận dạng:
Ớ Find_near_neighbour: Nhận ựầu vào là một chuỗi ựặc trưng truy vấn, hàm sẽ xét qua lần lượt các ựặc trưng của nó, tìm kiếm trong cơ sở dữ liệu những bài hát mà chuỗi ựặc trưng tương ứng có chứa ựặc trưng này. Kết quả trả về của hàm là một tập hợp các bài hát mà chuỗi ựặc trưng của nó có chứa ắt nhất một ựặc trưng thuộc chuỗi ựặc trưng truy vấn. Bên cạnh ựó, hàm cũng cho biết vị trắ của các ựặc trưng chung này trong mỗi bài hát trả về. Thực nghiệm ựã chỉ ra rằng số lượng bài hát như vậy có thể rất lớn và việc phải tắnh toán ựộ tương tự trên tập tất cả các bài hát này không ựáp ứng ựược thời gian tìm kiếm của hệ thống. Vì vậy, tiêu chuẩn lựa chọn theo thuật toán RANSAC [14] ựược sử dụng cho phép giới hạn lại số lượng bài hát tiềm năng. Theo ựó, nếu gọi \ là ựộ dài chuỗi ựặc trưng truy vấn (chuỗi này bao gồm \ ựặc trưng) thì một bài hát ựược lựa chọn nếu chuỗi ựặc trưng tương ứng có chứa ắt nhất ]
ựặc trưng trong chuỗi ựặc
trưng truy vấn.
Ớ Search: Từ tập hợp các bài hát và vị trắ của ựặc trưng chung trong bài hát trả về bởi hàm Find_near_neighbour, hàm thực hiện tắnh toán khoảng cách Hamming giữa chuỗi ựặc trưng của những bài hát này và chuỗi ựặc trưng truy vấn ựể ựưa ra tỉ lệ bit lỗi (tỉ số giữa số lượng các bit sai khác nhau của chuỗi ựặc trưng truy vấn và chuỗi ựặc trưng của bài hát gốc trên ựộ dài của chuỗi ựặc trưng truy vấn). Hàm cho kết quả trả về là tên của bài hát có tỉ lệ bit lỗi nhỏ nhất. Hàm tìm kiếm này cũng áp dụng thuật toán RANSAC giúp cải thiện ựáng kể tốc ựộ tìm kiếm của hệ thống. Như vậy, với hai hàm mở rộng ựược cài ựặt trực tiếp trên server này, chúng ta có thế thực hiện tìm kiếm bài hát gốc cho một chuỗi ựặc trưng truy vấn nào ựó.
3.2. Xây dựng tập dữ liệu huấn luyện
để xây dựng dữ liệu huấn luyện cho việc tìm kiếm, trước hết cần phải có một tập các bài hát gốc ựược tiến hành thu âm trong môi trường có nhiều nhiễu. Tập
các bài hát ựã thu âm này và các bài hát gốc của nó sau ựó ựược chia thành các snippet ngắn (30 giây cho mỗi snippet). Các snippet tương ứng sau khi thực hiện trắch rút ựặc trưng sẽ ựược so sánh với nhau ựể tạo thành tập dữ liệu học. Hệ thống sẽ sử dụng chương trình emtraining ựể tự ựộng ựọc một danh sách các snippet gốc và snippet ựã thu âm, tắnh toán khóa cho các snippet này, sau ựó tiến hành xây dựng tập dữ liệu học.
Trong quá trình xây dựng dữ liệu huấn luyện, việc lựa chọn tập dữ liệu học ựược phân loại theo tiêu chắ về thể loại nhạc ựể tạo nên các bộ dữ liệu huấn luyện khác nhau. Các snippet dùng làm dữ liệu học cũng như các snippet truy vấn ựều ựược tiến hành thu âm qua micro chất lượng không tốt và môi trường có nhiều tiếng ồn gây nhiễu.