1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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)

128 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiê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
Tác giả Trần Duy Khánh, Nguyễn Hữu Trí
Người hướng dẫn Ths. Trần Anh Dũng
Trường học Trường Đại Học Công Nghệ Thông Tin - ĐHQG TP. HCM
Chuyên ngành Kỹ Thuật Phần Mềm
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 128
Dung lượng 5,31 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 1. GIỚI THIỆU CHUNG (18)
    • 1.1. Thực trạng nhu cầu nghe nhạc hiện nay (18)
    • 1.2. Lý do chọn đề tài (18)
    • 1.3. Đối tượng nghiên cứu (18)
    • 1.4. Phạm vi nghiên cứu (19)
    • 1.5. Phương pháp nghiên cứu (19)
  • Chương 2. KIẾN THỨC NỀN TẢNG (20)
    • 2.1. Tổng quan về mô hình MVC (0)
      • 2.1.1. Khái niệm (20)
      • 2.1.2. Cấu trúc mô hình MVC (0)
      • 2.1.3. Mô hình MVC trong ứng dụng Web (0)
    • 2.2. Tổng quan về .NET (23)
      • 2.2.1. Giới thiệu (23)
      • 2.2.2. Tạo sao chọn .NET core để phát triển server (24)
    • 2.3. Angular (25)
      • 2.3.1. Giới thiệu (25)
      • 2.3.2. Ưu điểm của Angular (25)
    • 2.4. Hệ quản trị cơ sở dữ liệu MongoDB (26)
      • 2.4.1. Giới thiệu (26)
      • 2.4.2. Ưu điểm của MongoDB (27)
    • 2.5. Flask (27)
      • 2.5.1. Giới thiệu về Flask (27)
      • 2.5.2. Tại sao sử dụng Flask (27)
    • 2.6. Keras (27)
      • 2.6.1. Giới thiệu về Keras (27)
      • 2.6.2. Tại sao sử dụng Keras (27)
  • Chương 3. PHÂN TÍCH (29)
    • 3.1. Tìm hiểu công nghệ (0)
      • 3.1.1. Tổng quan về quá trình (29)
      • 3.1.2. Xử lý thu âm (29)
      • 3.1.3. Time-Domain và Frequency-Domain (31)
    • 3.2. Xây dựng hệ thống (34)
      • 3.2.1. Xây dựng kiến trúc hệ thống (34)
      • 3.2.2. Thiết kế hệ thống (35)
    • 3.3. Phân tích (50)
      • 3.3.1. Recognizer Server (50)
      • 3.3.2. Music Server (53)
  • Chương 4. THIẾT KẾ GIAO DIỆN (59)
    • 4.1. Giao diện trang chủ (59)
      • 4.1.1. Giao diện trang chủ (59)
      • 4.1.2. Giao diện chức năng Songs For You (60)
      • 4.1.3. Giao diện chức năng Genre Songs (61)
    • 4.2. Giao diện Player (62)
      • 4.2.1. Chức năng Lyric (62)
      • 4.2.2. Chức năng Karaoke (63)
    • 4.3. Giao diện trang admin (64)
      • 4.3.1. Trang admin (64)
    • 4.4. Giao diện chức năng quản lý bài hát (65)
      • 4.4.1. Danh sách bài hát (65)
      • 4.4.2. Thêm bài hát (66)
      • 4.4.3. Chức năng Sửa Thông Tin Bài Hát (67)
      • 4.4.4. Chức năng Chi tiết bài hát (68)
    • 4.5. Giao diện chức năng Quản Lý Nghệ Sĩ (69)
      • 4.5.1. Chức năng Danh sách Nghệ Sĩ (69)
      • 4.5.2. Chức năng Chi Tiết Nghệ Sĩ (70)
      • 4.5.3. Chức năng Thêm Nghệ Sĩ (71)
      • 4.5.4. Chức năng Sửa Thông Tin Nghệ Sĩ (72)
    • 4.6. Chức năng đề xuất nhạc (73)
      • 4.6.1. Chức năng Đề Xuất Nhạc Theo Bài Hát Hiện Tại (73)
      • 4.6.2. Chức năng Đề Xuất Nhạc Cho Người Dùng (74)
      • 4.6.3. Chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích Của Người Dùng 58 4.7. Chức năng Nhận Diện Bài Hát (75)
      • 4.7.1. Giao diện trang nhận diện (76)
      • 4.7.2. Giao diện trang ghi âm (77)
      • 4.7.3. Giao diện trang Kết Quả Nhận Diện (80)
    • 4.8. Chức năng Playlist (81)
      • 4.8.1. Giao diện trang Danh sách Playlist (81)
      • 4.8.2. Giao diện trang tạo Playlist (82)
      • 4.8.3. Giao diện trang Chi Tiết Playlist (83)
      • 4.8.4. Giao diện Chỉnh Sửa Thông Tin Playlist (84)
    • 4.9. Giao diện trang Đăng Nhập (85)
      • 4.9.1. Giao diện trang Đăng Nhập (85)
  • Chương 5. HIỆN THỰC HÓA CHỨC NĂNG NHẬN DIỆN (87)
    • 5.1. Quá trình thu thập dữ liệu (0)
      • 5.1.1. Xác định các API cần thiết (88)
      • 5.1.2. Cách tạo Signature cho request (89)
      • 5.1.3. Gọi API để crawl dữ liệu (90)
    • 5.2. Kết quả thu được (91)
    • 5.3. Xử lý lưu trữ và chuyển đổi âm thanh (92)
      • 5.3.1. Tính chất của âm thanh (92)
      • 5.3.2. Chuyển đổi và tìm kiếm bài hát (0)
    • 5.4. Hiện thực hóa công nghệ (102)
      • 5.4.1. Chuyển đổi và lưu trữ âm thanh (102)
      • 5.4.2. Tìm kiếm bài hát (0)
      • 5.4.3. Xử lý đa luồng (104)
      • 5.4.4. Kiểm thử độ chính xác (105)
  • Chương 6. HIỆN THỰC HÓA CHỨC NĂNG ĐỀ XUẤT NHẠC (109)
    • 6.1. Xây dựng hệ thống đề xuất (109)
    • 6.2. Hệ thống phân loại (110)
      • 6.2.1. Thu thập dữ liệu (110)
      • 6.2.2. Lọc dữ liệu (110)
      • 6.2.3. Audio Preprocessing (113)
      • 6.2.4. Mô hình mạng (0)
    • 6.3. Huấn luyện mô hình (117)
    • 6.4. Đánh giá mô hình (117)
      • 6.4.1. Các thông số để đánh giá mô hình CNN (117)
      • 6.4.2. Mô hình Resnet50 (119)
    • 6.5. Hệ thống Đề Xuất (121)
    • 6.6. Xây dựng API cho hệ thống đề xuất (122)
      • 6.6.1. Đề xuất bài hát dựa trên bài hát đang nghe của người dùng (122)
      • 6.6.2. Đề xuất dựa trên bài hát người dùng nghe nhiều (123)
      • 6.6.3. Đề xuất dựa trên thể loại người dùng nghe nhiều (124)
  • Chương 7. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (125)
    • 7.1. Ưu điểm (125)
    • 7.2. Nhược điểm (125)
    • 7.3. Kết quả đạt được (125)
      • 7.3.1. Về mặt nghiên cứu (125)
      • 7.3.2. Về mặt sản phẩm (126)
    • 7.4. Hướng phát triển (126)
  • TÀI LIỆU THAM KHẢO (17)

Nội dung

Để hoàn thành đề tài này, chúng em xin gửi lời cảm ơn chân thành đến: Ban Giám hiệu trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM vì đã tạo điều kiện về cơ sở vật chất với hệ thống th

GIỚI THIỆU CHUNG

Thực trạng nhu cầu nghe nhạc hiện nay

Hiện nay, dưới sự phát triển của xã hội, nhu cầu giải trí của con người ngày càng tăng mạnh Tại Việt Nam, có khoảng 68,17 triệu người dùng Internet mỗi ngày, và mỗi người dành trung bình khoảng 1 giờ 1 phút để nghe nhạc.

Trước nhu cầu khổng lồ về âm nhạc, thị trường âm nhạc ngày càng phát triển và liên tục ra mắt nhiều bài hát mới đến với người dùng Tuy nhiên, sự đa dạng đó cũng đặt ra các vấn đề như làm sao tìm được một bài hát khi vô tình nghe ở quán ăn hay ở một địa điểm bất kỳ, hoặc khi bạn chỉ nhớ giai điệu từ thời thơ ấu mà không thể nhớ tên bài hát là gì; và làm thế nào để gợi ý sản phẩm âm nhạc phù hợp với sở thích của từng người dùng? Giải pháp nằm ở hệ thống tìm kiếm bài hát hiệu quả và đề xuất âm nhạc được cá nhân hóa dựa trên thói quen nghe nhạc và sở thích riêng, giúp người dùng dễ dàng tìm lại bài hát và khám phá đúng nội dung âm nhạc phù hợp.

Lý do chọn đề tài

Nhờ sự phát triển của công nghệ thông tin và sự bùng nổ của Machine Learning, việc giải các bài toán xử lý âm thanh ngày càng khả thi Để vận dụng những kiến thức đã trang bị và khám phá các công nghệ hiện đại về xử lý âm thanh và Deep Learning, nhóm quyết định hiện thực hóa các công nghệ này nhằm tạo ra các sản phẩm mang lại lợi ích cho người dùng và nhà phát hành nhạc Do đó, chúng em chọn đề tài “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” làm đề tài nghiên cứu cho khóa luận tốt nghiệp.

Đối tượng nghiên cứu

Khoá luận này hướng đến nghiên cứu các đối tượng sau:

● Back-end: Net Core, Flask

− Đối tượng trong phạm vi đề tài hướng đến:

● Cá nhân, tổ chức phát hành bài hát

● Các công ty trong lĩnh vực nghe nhạc trực tuyến

Phạm vi nghiên cứu

- Phạm vi địa lý: Trong lãnh thổ Việt Nam

- Phạm vi người sử dụng: Người Việt Nam

- Phạm vi nội dung bài hát: Nhạc Việt, Âu Mỹ và Hàn Quốc

● Backend (Music Service): ASP NET

Phương pháp nghiên cứu

Nhóm đã sử dụng các phương pháp:

- Phương pháp đọc tài liệu

- Phân tích các app tương tự

KIẾN THỨC NỀN TẢNG

Tổng quan về NET

ASP.NET Core là một framework web mã nguồn mở do Microsoft phát triển, ra mắt năm 2016 và được xem là người kế nhiệm của ASP.NET Nó được thiết kế lại từ đầu để tối ưu tốc độ và tính linh hoạt, đồng thời chạy được trên nhiều nền tảng như Windows, Linux và macOS, giúp các ứng dụng web và dịch vụ đám mây dễ triển khai và mở rộng.

Mỗi ứng dụng NodeJS chạy trên một process đơn và không tạo thêm luồng mới cho mỗi request, đây là điểm khác biệt so với các môi trường thực thi khác như DotNetCore Thay vào đó, NodeJS sử dụng cơ chế bất đồng bộ I/O để xử lý các tác vụ nhập/xuất và sự kiện một cách hiệu quả, giúp tối ưu hóa hiệu suất và khả năng xử lý đồng thời mà không làm gián đoạn các request.

(non-blocking I/O) để quản lý các request thay vì chặn chúng nhằm giảm thiểu việc tốn tài nguyên xử lý Nhờ cơ chế này, Node.js có thể xử lý hàng nghìn kết nối đồng thời một cách hiệu quả, giảm thiểu thời gian chờ và tăng hiệu suất cho ứng dụng web Việc không chặn cho phép máy chủ tiếp tục xử lý các yêu cầu khác trong khi đang xử lý một yêu cầu, từ đó tối ưu hóa tài nguyên và khả năng mở rộng hệ thống, đặc biệt với lưu lượng truy cập lớn.

Hình 2.2.1 Net core và Net framework

7 thời với 1 server duy nhất mà không cần nhà phát triển phải bỏ công sức và thời gian để quản lí các luồng

2.2.2 Tạo sao chọn NET core để phát triển server

− Hợp nhất việc xây dựng web UI và web APIs

− Tích hợp những client-side frameworks hiện đại và những luồng phát triển

− Dependency injection được xây dựng sẵn

− HTTP request được tối ưu nhẹ hơn

− Có thể host trên IIS hoặc self-host trong process của riêng bạn

− Được xây dựng trên NET Core, hỗ trợ thực sự app versioning

− Chuyển các thực thể, thành phần, module như những NuGet packages

− Những công cụ mới để đơn giản hóa quá trình phát triển web hiện đại

− Xây dựng và chạy đa nền tảng (Windows, Mac và Linux)

− Mã nguồn mở và tập trung vào cộng đồng

Angular

− Dễ dàng tạo ra các Single Page Application

− Mang lại cảm giác linh hoạt, thân thiện khi cung cấp khả năng data binding tới HTML

− Tái sử dụng component một cách dễ dàng

− Tiết kiệm thời gian viết code và tích hợp nhiều chức năng hơn

− Chạy được trên nhiều loại trình duyệt

Hệ quản trị cơ sở dữ liệu MongoDB

MongoDB là hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở Khác với cơ sở dữ liệu quan hệ truyền thống dùng bảng và hàng, MongoDB lưu trữ dữ liệu dưới dạng collection và document, giúp mô hình hóa dữ liệu linh hoạt cho các ứng dụng hiện đại Dữ liệu được lưu trữ ở dạng tài liệu BSON, cho phép schema linh hoạt và dễ mở rộng Các đặc điểm nổi bật của MongoDB gồm khả năng mở rộng theo chiều ngang, sao lưu và phục hồi nhờ replica sets, và hệ thống chỉ mục cùng các truy vấn mạnh mẽ cho tìm kiếm nhanh trên kho dữ liệu lớn.

● Khác với SQL, MongoDB không cần định nghĩa sẵn các schema, các trường có thể được thêm vào trực tiếp

Trong hệ thống, mỗi document được thể hiện dưới dạng các cặp key-value, tương tự như định dạng JSON Các document có thể chứa nhiều key và value với kích thước và nội dung khác nhau, không bị giới hạn như SQL Chính tính linh hoạt và thiếu một schema cố định cho phép lưu trữ dữ liệu đa dạng, dễ mở rộng và dễ truy vấn.

Mỗi trường có thể lưu trữ nhiều loại kiểu dữ liệu từ đơn giản (như number, string) đến phức tạp (Object, Array, …)

Collection: Mỗi collection sẽ chứa nhiều Document và các phương thức hỗ trợ thao tác lên dữ liệu

Hình 2.4.1 So sánh mức độ phổ biến của MongoDB

− MongoDB lưu trữ dữ liệu dễ dàng, linh hoạt và dễ dàng mở rộng vì dữ liệu trong MongoDB không có sự ràng buộc lẫn nhau

− MongoDB có tốc độ truy vấn nhanh hơn so với các cơ sở dữ liệu quan hệ

− MongoDB có khả năng mở rộng tốt thông qua các cluster.

Flask

Bên cạnh Django, Flask là một web framework rất phổ biến, nhẹ và dễ sử dụng, phù hợp cho người mới bắt đầu cũng như các nhà khoa học dữ liệu muốn xây dựng API để hỗ trợ triển khai và tích hợp các mô hình học máy Flask cho phép phát triển API nhanh chóng và linh hoạt, giúp bạn kết nối mô hình học máy với ứng dụng web hoặc dịch vụ đám mây một cách an toàn và có thể mở rộng.

2.5.2 Tại sao sử dụng Flask

Flask là một framework Python dễ sử dụng với cú pháp đơn giản, giúp giảm thời gian xây dựng backend và cho phép lập trình viên phát triển nhanh hơn và hiệu quả hơn Nhờ tính linh hoạt và dễ tiếp cận, Flask hỗ trợ từ thiết kế đến triển khai thực tế, đẩy nhanh tiến độ phát triển ứng dụng Cộng đồng hỗ trợ Flask tương đối rộng và có nhiều tài liệu phong phú từ cài đặt đến triển khai, giúp người dùng dễ học hỏi và áp dụng Với những ưu điểm này, Flask là lựa chọn phù hợp cho các dự án từ nhỏ đến quy mô lớn.

Keras

Keras là một thư viện nguồn mở cho mạng nơ-ron, được viết bằng Python và dựa trên một kiến trúc tối giản, cho phép người dùng nhanh chóng xây dựng các mô hình Deep Learning với nhiều tính năng hữu ích.

● API đơn giản và dễ dàng mở rộng

● Hỗ trợ nhiều nền tảng và backends

● Là một framework thân thiện với người dùng có thể chạy trên cả CPU và GPU

2.6.2 Tại sao sử dụng Keras

Keras có một cộng đồng hỗ trợ lớn và tài liệu chi tiết dễ dàng cho việc nghiên cứu, cung cấp sẵn các mô hình giúp việc xây dựng mô hình máy học trở nên đơn giản hơn chỉ qua các bước cơ bản như chọn mô hình phù hợp, huấn luyện và đánh giá hiệu suất.

● Chuẩn bị data cho việc training model

● Xây dựng mô hình máy học

● Train mô hình dựa trên phương thức fit() của Keras

● Đánh giá mô hình dựa trên dữ liệu test

Ngoài ra Chúng ta có thể tăng tốc tốc độ huấn luyện mô hình bằng cách sử dụng nhiều GPU

PHÂN TÍCH

Xây dựng hệ thống

3.2.1 Xây dựng kiến trúc hệ thống

Hệ thống bao gồm các thành phần sau:

Web (client) đảm nhận giao diện cho người dùng tương tác với hệ thống, cho phép gửi yêu cầu và nhận kết quả hiển thị lên màn hình Client giao tiếp với Server theo mô hình Request/Response để yêu cầu xử lý thông tin và nhận phản hồi từ phía server Web (client) được hiện thực hóa bằng Angular, giúp xây dựng giao diện người dùng động và tối ưu hóa trải nghiệm người dùng.

⎼ Server (.NET Core): Nhận và xử lý các request về tính năng nghe nhạc từ

Client có thể tương tác với Database để thực hiện các thao tác dữ liệu và nhận kết quả trả về thông qua Response Server được hiện thực hóa bằng sự kết hợp giữa NET Core và Python, tối ưu cho hiệu suất và khả năng mở rộng Kiến trúc này cho phép giao tiếp API giữa frontend và backend, quản lý dữ liệu một cách nhất quán và đáp ứng nhanh các yêu cầu truy vấn dữ liệu từ Client.

⎼ Database: Lưu trữ toàn bộ dữ liệu của hệ thống

Hình 3.2.1 Kiến trúc hệ thống của Website

⎼ Storage: Lưu trữ các file BLOB quá nặng mà Database không thể lưu trữ tốt 3.2.2 Thiết kế hệ thống

3.2.2.1 Đặc tả Usecase Đăng ký

Tên chức năng Đăng ký

Tóm tắt Chức năng đăng ký vào hệ thống

Dòng sự kiện chính 1 Hệ thống hiển thị biểu mẫu đăng ký

2 Người dung nhập các trường thông tin đăng ký và nhấn “Đăng ký”

3 Hệ thống kiểm tra thông tin đăng ký và thực hiện đăng ký

(Dòng sự kiện khác: Đăng ký không thành công)

4 Hệ thống hiển thị đăng ký thành công và chuyển qua trang đăng nhập

Dòng sự kiện khác 1 Đăng ký không thành công:

Hệ thống hiển thị thông báo tài khoản đăng ký không hợp lệ hoặc lỗi

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.1 Đặc tả Usecase Đăng ký

3.2.2.2 Đặc tả Usecase Đăng nhập

Tên chức năng Đăng nhập

Tóm tắt Chức năng đăng nhập vào hệ thống

Dòng sự kiện chính 1 Hệ thống hiển thị biểu mẫu đăng nhập

2 Người dùng nhập tên và tài khoản (cả 2 trường này đều bắt buộc nhập) và nhấn “Đăng nhập”

3 Hệ thống kiểm tra thông tin đăng nhập

(Dòng sự kiện khác: Thông tin đăng nhập sai)

4 Hệ thống hiển thị form chính

Dòng sự kiện khác 1 Thông tin đăng nhập sai:

Hệ thống hiển thị thông báo tài khoản đăng nhập không hợp lệ

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.2 Đặc tả Usecase Đăng nhập

3.2.2.3 Đặc tả Usecase Đăng Xuất

Tên chức năng Đăng xuất

Tóm tắt Chức năng đăng xuất ra hệ thống

Dòng sự kiện chính 1 Người dùng nhấn vào Đăng xuất

2 Hệ thống đăng xuất và trở về màn hình chính

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực hiện use case

Actor: Admin Điều kiện: người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.3 Đặc tả Usecase Đăng Xuất

3.2.2.4 Đặc tả Usecase Bảng xếp hạng

Tên chức năng Bảng xếp hạng

Tóm tắt Người dùng xem bảng xếp hạng các nghệ sĩ và bài hát dựa trên lượt nghe, thích

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Hệ thống hiển thị bảng xếp hạng

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.4 Đặc tả Usecase Bảng xếp hạng

3.2.2.5 Đặc tả Usecase Nghe nhạc

Tên chức năng Nghe nhạc

Tóm tắt Người dùng lựa chọn và phát bài nhạc mong muốn

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Play trên bài nhạc

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống Không có

22 sau khi thực hiện use case Điểm mở rộng Xem lyrics

Bảng 3.2.5 Đặc tả Usecase Nghe nhạc

3.2.2.6 Đặc tả Usecase Xem Lyrics

Tên chức năng Xem Lyrics

Tóm tắt Người dùng lựa chọn bài nhạc và xem lời bài hát

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Play trên bài nhạc

4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn

5 Hệ thống hiển thị lời bài hát khớp với thời gian

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.6 Đặc tả Usecase Xem Lyrics

Tóm tắt Người dùng lựa chọn bài nhạc và hát Karaoke

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Play trên bài nhạc

4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn

5 Hệ thống hiển thị lời bài hát khớp với thời gian

6 Người dùng chọn nút Karaoke để chuyển qua Karaoke Mode

7 Hệ thống thu âm lại đoạn Karaoke

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Thu âm

Bảng 3.2.7 Đặc tả Usecase Karaoke

3.2.2.8 Đặc tả Usecase Tương tác với bài nhạc

Tên chức năng Tương tác với bài nhạc

Tóm tắt Người dùng lựa chọn bài nhạc và tương tác với bài hát

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Like/Download trên bài nhạc

3 Hệ thống ghi nhận các hoạt động của người dùng

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use

Hệ thống ghi nhận các hoạt động của người dùng

24 case Điểm mở rộng Không có

Bảng 3.2.8 Đặc tả Usecase Tương tác với bài nhạc

3.2.2.9 Đặc tả Usecase Playlist cá nhân

Tên chức năng Playlist cá nhân

Tóm tắt Người dùng lựa chọn bài nhạc và thêm vào playlist

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Add to playlist trên bài nhạc

3 Hệ thống hiển thị danh sách Playlist

4 Người dùng thêm bài nhạc vào Playlist

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.9 Đặc tả Usecase Playlist cá nhân

3.2.2.10 Đặc tả Usecase Gợi ý âm nhạc

Tên chức năng Gợi ý âm nhạc

Tóm tắt Người dùng được gợi ý các bài hát phù hợp với bản thân

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Play trên bài nhạc

4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn

5 Hệ thống hiển thị lời bài hát khớp với thời gian

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Không có Điểm mở rộng Không có

Bảng 3.2.10 Đặc tả Usecase Gợi ý âm nhạc

3.2.2.11 Đặc tả Usecase Tìm kiếm bài hát

Tên chức năng Tìm kiếm bài hát

Tóm tắt Người dùng tìm kiếm bài hát mong muốn

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Search trên Side Nav

3 Hệ thống hiển thị ra khung search

4 Người dùng nhập nội dung tìm kiếm

5 Hệ thống hiển thị danh sách kết quả tìm kiếm

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống hiển thị danh sách kết quả tìm kiếm Điểm mở rộng Nhận diện nhạc qua giai điệu

Bảng 3.2.11 Đặc tả Usecase Tìm kiếm bài hát

3.2.2.12 Đặc tả Usecase Nhận diện nhạc qua giai điệu

Tên chức năng Nhận diện nhạc qua giai điệu

Tóm tắt Nhận diện một đoạn nhạc cần tìm kiếm

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Search trên Sidenav

3 Hệ thống hiển thị ra khung search

4 Người dùng nhấn vào nút Micro

5 Hệ thống hiển thị trang tìm kiếm qua giai điệu

6 Người dùng lựa chọn thu âm hoặc tải lên đoạn nhạc cần tìm kiếm

7 Hệ thống trả về kết quả tìm kiếm dựa trên độ chính xác

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống nhận diện và trả kết quả cho người dung Điểm mở rộng Không có

Bảng 3.2.12 Đặc tả Usecase Nhận diện nhạc qua giai điệu

3.2.2.13 Đặc tả Usecase Quản lý profile

Tên chức năng Quản lý profile

Tóm tắt Người dùng quản lý profile cá nhân

Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ

2 Người dùng nhấn vào nút Profile trên Side Nav

3 Hệ thống hiển thị ra form Profile

4 Người dùng nhập nội dung chỉnh sửa

5 Hệ thống lưu lại kết quả chỉnh sửa

Dòng sự kiện khác Không có

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Anonymous Điều kiện: Không có

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống lưu lại kết quả chỉnh sửa Điểm mở rộng Không có

Bảng 3.2.13 Đặc tả Usecase Quản lý Profile

3.2.2.14 Đặc tả Usecase Thêm bài hát

Tên chức năng Thêm bài hát

Tóm tắt Thêm bài hát vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị bài hát

3 Người dùng chọn Thêm bài hát

4 Người dùng nhập điền đầy đủ thông tin bài hát

6 Hệ thống Thêm bài hát

Dòng sự kiện khác Không thể thêm bài hát

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống thêm bài hát vào cơ sở dữ liệu

28 Điểm mở rộng Không có

Bảng 3.2.14 Đặc tả Usecase Thêm bài hát

3.2.2.15 Đặc tả Usecase Sửa bài hát

Tên chức năng Sửa bài hát

Tóm tắt Sửa bài hát vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị bài hát

3 Người dùng chọn Sửa bài hát

4 Người dùng nhập điền đầy đủ thông tin cần sửa

6 Hệ thống Sửa bài hát

Dòng sự kiện khác Không thể sửa bài hát

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống sửa bài hát trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.15 Đặc tả Usecase Sửa bài hát

3.2.2.16 Đặc tả Usecase Xóa bài hát

Tên chức năng Xóa bài hát

Tóm tắt Xóa bài hát vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị bài hát

3 Người dùng chọn Xóa bài hát

4 Hệ thống hiện hộp thoại “Xác nhận xóa”

5 Người dùng nhấn “Xác nhận”

6 Hệ thống Xóa bài hát

Dòng sự kiện khác Không thể xóa bài hát

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống xóa bài hát trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.16 Đặc tả Usecase Xóa bài hát

3.2.2.17 Đặc tả Usecase Thêm nghệ sĩ

Tên chức năng Thêm nghệ sĩ

Tóm tắt Thêm nghệ sĩ vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị nghệ sĩ

3 Người dùng chọn Thêm nghệ sĩ

4 Người dùng nhập điền đầy đủ thông tin nghệ sĩ

6 Hệ thống Thêm nghệ sĩ

Dòng sự kiện khác Không thể thêm nghệ sĩ

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống thêm nghệ sĩ vào cơ sở dữ liệu

30 Điểm mở rộng Không có

Bảng 3.2.17 Đặc tả Usecase Thêm nghệ sĩ

3.2.2.18 Đặc tả Usecase Sửa nghệ sĩ

Tên chức năng Sửa nghệ sĩ

Tóm tắt Sửa nghệ sĩ vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị nghệ sĩ

3 Người dùng chọn Sửa nghệ sĩ

4 Người dùng nhập điền đầy đủ thông tin cần sửa

6 Hệ thống Sửa thông tin nghệ sĩ

Dòng sự kiện khác Không thể sửa nghệ sĩ

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống sửa thông tin nghệ sĩ trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.18 Đặc tả Usecase Sửa nghệ sĩ

3.2.2.19 Đặc tả Usecase Xóa nghệ sĩ

Tên chức năng Xóa nghệ sĩ

Tóm tắt Xóa nghệ sĩ vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị nghệ sĩ

3 Người dùng chọn Xóa nghệ sĩ

4 Hệ thống hiện hộp thoại “Xác nhận xóa”

5 Người dùng nhấn “Xác nhận”

6 Hệ thống Xóa nghệ sĩ

Dòng sự kiện khác Không thể xóa nghệ sĩ

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống xóa nghệ sĩ trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.19 Đặc tả Usecase Xóa nghệ sĩ

3.2.2.20 Đặc tả Usecase Thêm người dùng

Tên chức năng Thêm người dùng

Tóm tắt Thêm người dùng vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị người dùng

3 Người dùng chọn Thêm người dùng

4 Người dùng nhập điền đầy đủ thông tin người dùng

6 Hệ thống Thêm người dùng

Dòng sự kiện khác Không thể thêm người dùng

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống thêm người dùng vào cơ sở dữ liệu

32 Điểm mở rộng Không có

Bảng 3.2.20 Đặc tả Usecase Thêm người dùng

3.2.2.21 Đặc tả Usecase Sửa người dùng

Tên chức năng Sửa người dùng

Tóm tắt Sửa người dùng vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị người dùng

3 Người dùng chọn Sửa người dùng

4 Người dùng nhập điền đầy đủ thông tin cần sửa

6 Hệ thống Sửa người dùng

Dòng sự kiện khác Không thể sửa người dùng

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống sửa người dùng trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.21 Đặc tả Usecase Sửa người dùng

3.2.2.22 Đặc tả Usecase Xóa người dùng

Tên chức năng Xóa người dùng

Tóm tắt Xóa người dùng vào cơ sở dữ liệu của hệ thống

Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị

2 Người dùng chọn trang quản trị người dùng

3 Người dùng chọn Xóa người dùng

4 Hệ thống hiện hộp thoại “Xác nhận xóa”

5 Người dùng nhấn “Xác nhận”

6 Hệ thống Xóa người dùng

Dòng sự kiện khác Không thể xóa người dùng

Các yêu cầu đặc biệt Không có

Trạng thái hệ thống trước khi thực thiện use case

Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống

Trạng thái hệ thống sau khi thực hiện use case

Hệ thống xóa người dùng trong cơ sở dữ liệu Điểm mở rộng Không có

Bảng 3.2.22 Đặc tả Usecase Xóa người dùng

Phân tích

3.3.1.2 Danh sách lớp đối tượng và quan hệ

STT Tên lớp/quan hệ Ý nghĩa/Ghi chú

1 Song Thông tin bài hát

2 Fingerprint Fingerprint của bài hát

Hình 3.3.1 Sơ đồ lớp hệ thống nhận diện

3 TimePrequency Thời điểm nốt nhạc xuất hiện

Bảng 3.3.1 Danh sách lớp hệ thống nhận diện

3.3.1.3 Mô tả chi tiết từng đối tượng a) Song

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id int public Mã của bài hát

2 SongId string public Id bài hát ở Music Server

Bảng 3.3.2 Danh sách thuộc tính của Song

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Create ActionResult public Tạo thêm bài hát

2 GetById Object public Trả về thông tin bài hát

3 Edit ActionResult public Sửa thông tin bài hát

Bảng 3.3.3 Danh sách phương thức của Song b) Fingerprint

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id int public Mã của fingerprint

2 FTP Object public Danh sách TimeFrequency của bài hát

3 Song_Id int public Mã của bài hát

Bảng 3.3.4 Danh sách thuộc tính của Fingerprint

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Create ActionResult public Tạo Fingerprint

2 GetById Object public Trả về fingerprint

3 GetList ActionResult public Trả về danh sách Fingerprint

Bảng 3.3.5 Danh sách phương thức của Fingerprint c) TimeFrequency

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Time int public Thời gian nốt xuất hiện

2 Frequency int public Nốt xuất hiện

Bảng 3.3.6 Danh sách thuộc tính của TimeFrequency

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Create ActionResult public Tạo Fingerprint

Bảng 3.3.7 Danh sách phương thức của TimeFrequency

Hình 3.3.2 Sơ đồ lớp Music Server

3.3.2.2 Danh sách lớp đối tượng và quan hệ

STT Tên lớp/quan hệ Ý nghĩa/Ghi chú

3 ArtistSong Mối liên hệ giữa nghệ sĩ và bài hát

5 GenreSong Mối liên hệ giữa thể loại và bài hát

7 PlaylistSong Mối liên hệ giữa danh sách phát và bài hát

Bảng 3.3.8 Danh sách lớp Music Server

3.3.2.3 Mô tả chi tiết từng đối tượng a) Song

# Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id Int public Mã của bài hát

2 Name String public Tên bài hát

3 Thumbnail String public Link ảnh thumbnail

4 Link String public Link file audio

5 LinkBeat String public Link file beat

6 LinkLyric String public Link file lyrics

7 Likes Int public Lượt thích

8 Listen Int public Lượt nghe

9 Download Int public Lượt tải

10 ReleaseDate Time public Ngày phát hành

11 IsDeleted Bool public Đã xóa

12 IsRecognizable Bool public Có thể nhận diện

Bảng 3.3.9 Danh sách thuộc tính của Song

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Get List public Danh sách bài hát

2 GetById Object public Tìm bài hát theo Id

3 Edit ActionResult public Sửa thông tin bài hát

4 Create ActionResult public Tạo bài hát

5 Delete ActionResult public Xóa bài hát

Bảng 3.3.10 Danh sách phương thức của Song b) Artist

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id Int public Mã của nghệ sĩ

2 Name String public Tên nghệ sĩ

3 Thumbnail String public Link ảnh thumbnail

4 IsDeleted Bool public Đã xóa

Bảng 3.3.11 Danh sách thuộc tính của Artist

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Get List public Danh sách nghệ sĩ

2 GetById Object public Tìm nghệ sĩ theo Id

3 Edit ActionResult public Sửa thông tin nghệ sĩ

4 Create ActionResult public Tạo nghệ sĩ

5 Delete ActionResult public Xóa nghệ sĩ

Bảng 3.3.12 Danh sách phương thức của Artist

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id Int public Mã của thể loại

2 Name String public Tên thể loại

3 IsDeleted Bool public Đã xóa

Bảng 3.3.13 Danh sách thuộc tính của Genre

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Get List public Danh sách thể loại

2 GetById Object public Tìm thể loại theo Id

3 Edit ActionResult public Sửa thông tin thể loại

4 Create ActionResult public Tạo thể loại

5 Delete ActionResult public Xóa thể loại

Bảng 3.3.14 Danh sách phương thức của Genre d) Playlist

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id Int public Mã của danh sách phát

2 Name String public Tên danh sách phát

3 UserId String public Mã người dùng

4 IsDeleted Bool public Đã xóa

Bảng 3.3.15 Danh sách thuộc tính của Playlist

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Get List public Danh sách danh sách phát

2 GetById Object public Tìm danh sách phát theo Id

3 Edit ActionResult public Sửa thông tin danh sách phát

4 Create ActionResult public Tạo danh sách phát

5 Delete ActionResult public Xóa danh sách phát

Bảng 3.3.16 Danh sách phương thức của Playlist e) User

STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú

1 Id Int public Mã của người dùng

2 FistName String public Tên người dùng

3 LastName String public Họ người dùng

7 Avatar String public Link file avatar

8 DateOfBirth Date public Ngày sinh

9 IsDeleted Bool public Đã xóa

Bảng 3.3.17 Danh sách thuộc tính của User

STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú

1 Get List public Danh sách người dùng

2 GetById Object public Tìm người dùng theo Id

3 Edit ActionResult public Sửa thông tin người dùng

4 Create ActionResult public Tạo người dùng

5 Delete ActionResult public Xóa người dùng

Bảng 3.3.18 Danh sách phương thức của User

THIẾT KẾ GIAO DIỆN

Giao diện trang chủ

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

1 Tracks Control Component Thanh điều chỉnh phát nhạc của trang web

2 Trengding Component Component Thành phần hiển thị các bài hát được nghe nhiều

3 SiveNav Component Navigation cho trang web

4 Slider Component Các bài hát được nghe nhiều

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

6 Genre Songs Component Các bài hát được đề xuất dựa trên thể loại yêu thích của người dùng Bảng 4.1.1 Mô tả thành phần trang chủ

Hình 4.1.1 Giao diện trang chủ của Trang Web

4.1.2 Giao diện chức năng Songs For You

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

Bảng 4.1.1 Mô tả thành phần của chức năng Songs For You

Hình 4.1.2 Giao diện chức năng Songs For You

4.1.3 Giao diện chức năng Genre Songs

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 Bảng 4.1.2 Mô tả thành phần của chức năng Genre Songs

Hình 4.1.3 Giao diện chức năng Genre Songs

Giao diện Player

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

1 Switch Button Buttons Chuyển chức năng giữa Lyric và

2 Thumbnail Image Thumbnail của bài hát

2 Lyric Component Lời bài hát

Bảng 4.2.1 Mô tả thành phần chức năng Lyric

Hình 4.2.1 Giao diện chức năng Lyric

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

1 Switch Button Buttons Chuyển chức năng giữa Lyric và

2 Thumbnail Image Thumbnail của bài hát

3 Kara Component Kara của bài hát

Bảng 4.2.2 Mô tả thành phần chức năng Karaoke

Hình 4.2.2 Giao diện chức năng Karaoke

Giao diện trang admin

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

1 SongButton Button Chuyển sang quản lý Songs

2 ArtistButton Button Chuyển sang quản lý Artist

3 ModelButton Button Chuyển sang quản lý model

4 SearchBar Input Thanh tìm kiếm

6 Title Label Tên chức năng đang dùng

Bảng 4.3.1 Mô tả thành phần trang Admin

Hình 4.3.1 Giao diện trang Admin

Giao diện chức năng quản lý bài hát

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

1 SearchBar Input Thanh tìm kiếm

3 Title Label Tên chức năng đang dùng

Bảng 4.4.1 Mô tả thành phần chức năng Danh sách bài hát

Hình 4.4.1 Giao diện chức năng danh sách bài hát

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

1 Detail Button Hiện chi tiết bài hát

2 Edit Button Sửa thông tin bài hát

3 Delete Button Xóa bài hát

4 Thumb Img Hình ảnh của bài hát

5 Title Label Tên bài hát

6 Artist Label Tên nghệ sĩ

7 Add Button Thêm bài hát

Bảng 4.4.2 Mô tả thành phần chức năng Thêm Bài Hát

Hình 4.4.2 Giao diện chức năng Thêm Bài Hát

4.4.3 Chức năng Sửa Thông Tin Bài Hát

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

1 UploadThumbnail Button Tải lên hình ảnh của bài hát

2 Edit Button Sửa thông tin bài hát

3 Cancel Button Hủy thao tác

4 Thumb Img Hình ảnh của bài hát

5 Title Textbox Tên bài hát

6 Artist Textbox Tên nghệ sĩ

7 Save Button Lưu thông tin

Bảng 4.4.3 Mô tả thành phần chức năng Sửa Thông Tin Bài Hát

Hình 4.4.3 Giao diện chức năng Sửa Thông Tin Bài Hát

4.4.4 Chức năng Chi tiết bài hát

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

1 Thumbnail Button Hình ảnh của bài hát

2 Title Textbox Tên bài hát

3 Artist Textbox Tên nghệ sĩ

Bảng 4.4.4 Mô tả thành phần chức năng Chi Tiết Bài Hát

Hình 4.4.4 Giao diện chức năng Chi Tiết Bài Hát

Giao diện chức năng Quản Lý Nghệ Sĩ

4.5.1 Chức năng Danh sách Nghệ Sĩ

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

1 SearchBar Input Thanh tìm kiếm

3 Title Label Tên chức năng đang dùng

Bảng 4.5.1 Mô tả thành phần chức năng Danh sách Nghệ Sĩ

Hình 4.5.1 Giao diện chức năng Danh sách Nghệ Sĩ

4.5.2 Chức năng Chi Tiết Nghệ Sĩ

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

1 Thumbnail Button Hình ảnh của nghệ sĩ

2 Artist Textbox Tên nghệ sĩ

5 Songs Component Danh sách nhạc của nghệ sĩ

Bảng 4.5.2 Mô tả thành phần chức năng Chi Tiết Nghệ Sĩ

Hình 4.5.2 Giao diện chức năng Chi Tiết Nghệ Sĩ

4.5.3 Chức năng Thêm Nghệ Sĩ

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

1 Detail Button Hiện chi tiết bài hát

2 Edit Button Sửa thông tin bài hát

3 Delete Button Xóa bài hát

4 Thumb Img Hình ảnh của Nghệ Sĩ

5 Artist Label Tên nghệ sĩ

6 Add Button Thêm bài hát

Bảng 4.5.3 Mô tả thành phần chức năng Thêm Nghệ Sĩ

Hình 4.5.3 Giao diện chức năng Thêm Nghệ Sĩ

4.5.4 Chức năng Sửa Thông Tin Nghệ Sĩ

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

1 UploadThumbnail Button Tải lên hình ảnh của bài hát

2 Edit Button Sửa thông tin bài hát

3 Cancel Button Hủy thao tác

4 Thumb Img Hình ảnh của bài hát

5 Title Textbox Tên bài hát

6 Artist Textbox Tên nghệ sĩ

7 Save Button Lưu thông tin

Bảng 4.5.4 Mô tả thành phần chức năng Sửa Thông Tin Nghệ Sĩ

Hình 4.5.4 Giao diện chức năng Sửa Thông Tin Nghệ Sĩ

Chức năng đề xuất nhạc

4.6.1 Chức năng Đề Xuất Nhạc Theo Bài Hát Hiện Tại

Hình 4.6.1 Giao diện chức năng Đề Xuất Theo Bài Hát Hiện Tại

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

1 Title Label Tên mục đề xuất

2 Songs Component Danh sách bài hát đề xuất

Bảng 4.6.1 Mô tả thành phần chức năng Đề Xuất Theo Bài Hát Hiện Tại

4.6.2 Chức năng Đề Xuất Nhạc Cho Người Dùng

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 Bảng 4.6.2 Mô tả thành phần chức năng Đề Xuất Nhạc Cho Người Dùng

Hình 4.6.2 Giao diện chức năng Đề Xuất Nhạc Cho Người Dùng

4.6.3 Chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích Của Người Dùng

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 Bảng 4.6.3 Mô tả thành phần chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích

Hình 4.6.3 Giao diện chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích

4.7 Chức năng Nhận Diện Bài Hát

4.7.1 Giao diện trang nhận diện

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

1 Record Button Thực hiện thu âm bài hát

2 Import Button Import bài hát từ local

Bảng 4.7.1 Giao diện chức năng nhận diện Hình 4.7.1 Giao diện chức năng nhận diện

4.7.2 Giao diện trang ghi âm a) Ghi âm bài hát

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

1 Pause Button Tạm ngừng thu âm bài hát

2 Delete Button Xóa bản thu âm

3 TimeRemain Label Thời gian còn lại của bản thu âm

Bảng 4.7.2 Mô tả thành phần chức năng Ghi Âm Bài Hát

Hình 4.7.2 Giao diện chức năng Ghi Âm Bài Hát

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

1 Resume Button Tiếp tục thu âm bài hát

2 Preview Button Preview bản thu âm

3 Delete Button Xóa bản thu âm

4 TimeRemain Label Thời gian còn lại của bản thu âm

Bảng 4.7.3 Mô tả giao diện dừng ghi âm Hình 4.7.3 Giao diện chức năng Dừng Ghi Âm

62 c) Giao diện Preview bản Record

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

1 Recognize Button Nhận diện bài hát

2 Download Button Tải bản thu âm

3 Delete Button Xóa bản thu âm

4 Pause/Play Button Dừng/Phát bản thu âm

5 Region Button Chọn vùng muốn nghe

6 From Label Chọn thời gian từ

7 To Label Thời gian tới

Bảng 4.7.4 Mô tả giao diện Preview bản Record

Hình 4.7.4 Giao diện chức năng Preview bản Record

4.7.3 Giao diện trang Kết Quả Nhận Diện

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

1 Time Label Thời gian nhận diện bài hát

2 Match Label Độ match của bản ghi âm so với cơ sở dữ liệu

4 ZingMp3 Button Mở trang MP3 của Zing

5 MV Button Mở trang chứa MV của Zing

6 Download Button Tải bài hát

7 Thumb Img Hình ảnh của bài hát

Bảng 4.7.5 Mô tả giao diện trang kết quả Hình 4.7.5 Giao diện trang Kết Quả

Chức năng Playlist

4.8.1 Giao diện trang Danh sách Playlist

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

4.8.2 Giao diện trang tạo Playlist

Hình 4.8.2 Giao diện trang tạo Playlist

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

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

2 Description Textarea Mô tả nội dung của Playlist

3 Public Toggle Public playlist cho người dùng khác

4 Save Button Tạo mới playlist

Bảng 4.8.2 Mô tả trang tạo Playlist

4.8.3 Giao diện trang Chi Tiết Playlist

Hình 4.8.3 Giao diện trang Chi Tiết Playlist

Hình 4.8.4 Giao diện trang Chi Tiết Playlist

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

1 PlayButton Button Phát nhạc trong Playlist

2 Add To Queue Button Thêm nhạc trong Playlist vào queue

3 Edit Button Chỉnh sửa thông tin của Playlist

4 Song List Component Danh sách bài hát trong Playlist

Component Danh sách đề xuất dựa trên các bài hát trong Playlist Bảng 4.8.3 Mô tả trang Chi Tiết Playlist

4.8.4 Giao diện Chỉnh Sửa Thông Tin Playlist

Hình 4.8.5 Giao diện Chỉnh Sửa Thông Tin Playlist

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

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

2 Description Textarea Mô tả nội dung của Playlist

3 Public Toggle Public playlist cho người dùng khác

4 Save Button Tạo mới playlist

Bảng 4.8.4 Mô tả chi tiết trang Chỉnh Sửa Thông Tin Playlist

Giao diện trang Đăng Nhập

4.9.1 Giao diện trang Đăng Nhập

Hình 4.9.1 Giao diện trang Đăng Nhập

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

1 Email Input Nhập Email của người dùng

2 Password Input Nhập Mật khẩu của người dùng

4 SignUp Button Đăng ký tài khoản mới cho người dùng

5 SignInWithGoogle Button Đăng nhập bằng tài khoản Google

6 SignInWithFacebook Button Đăng nhập bằng tài khoản Facebook

7 SignInWithApple Button Đăng nhập bằng tài khoản Apple

Bảng 4.9.1 Mô tả trang Đăng Nhập

HIỆN THỰC HÓA CHỨC NĂNG NHẬN DIỆN

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

Hình 5.2.2 Data thu được trên Google Drive

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

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

− 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

Hình 5.3.1 Minh họa tính chất của âm thanh

● 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

− 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 là sự kết hợp của nhiều âm thanh, và nhờ nhận diện chính xác các đặc trưng âm thanh như cao độ, nhịp độ và cường độ, chúng ta có thể nhận diện một bài hát chỉ từ một đoạn giai điệu ngắn Đồng thời, khi không so sánh âm sắc, ta có thể tìm thấy nhiều bản nhạc khác nhau của cùng một bài hát.

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ể được chuyển sang dạng quang phổ hai chiều, với hai trục Ox và Oy Ox đại diện cho độ mạnh (trường độ) của tín hiệu, còn Oy thể hiện cao độ của âm thanh Độ đậm nhạt tại mỗi điểm trên quang phổ phản ánh cường độ của thành phần âm tương ứng, giúp hình dung rõ ràng cấu trúc phổ của bản nhạc và cách các yếu tố âm thanh kết hợp để tạo nên cảm xúc và nhịp điệu riêng biệt.

− 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

Để đảm bảo dữ liệu lưu trữ trên CM không bị thay đổi theo thời gian bắt đầu của bản thu âm, cần biến đổi các giá trị của các điểm trên CM.

Giải pháp: tại mỗi Target Zone trong CM, chọn một điểm nằm ngoài vùng đó làm điểm Mốc có tọa độ (f1, t1) Các điểm (f2, t2) nằm trong Target Zone được lưu trữ dưới dạng hash: {f1, f2, t2 − t1} Việc gán giá trị này cho từng điểm giúp liên kết chúng với điểm Mốc và cho phép tra cứu nhanh dựa trên sự chênh lệch thời gian t2 − t1 cùng các tham chiếu f1 và f2.

- 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.6 Part of Time-Invariant Hashes

- 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 càng cao.

❖ Hướng tiếp cận tìm kiếm cơ bản

- Giả sử tìm kiếm 1 đoạn ghi âm trong 1 bài hát sau khi đã được chuyển đổi

Hình 5.3.8 Minh họa bài hát và đoạn ghi âm sau khi chuyển đổi

Hình 5.3.7 Minh hoạ cách tìm kiếm

- Với cách tìm kiếm cơ bản chính là so trùng đoạn ghi âm với từng đoạn trong bài hát

Hình 5.3.9 Tiến hành so trùng

- Cho tới khi tìm thấy 1 đoạn trùng với bản ghi âm

Hình 5.3.10 Tìm kiếm được kết quả

- Thuật toán vẫn cho kết quả tìm kiếm chính xác nhưng có độ phức tạp quá lớn khiến thời gian tìm kiếm quá lâu

- Giả sử cứ 0.1s có 3 TFP, như vậy 10s ghi âm sẽ có 300TFP

- Việc tìm kiếm 1 bài hát có S giây sẽ tiêu tốn 300 * 300 * 30 * S truy vấn

 Với M bài hát sẽ tốn 300 * 300 * 30 * S * M truy vấn

❖ Hướng tiếp cận tìm kiếm cải tiến

- Thay vì so trùng từng điểm trong 1 khoảng thời gian, thuật toán cải tiến sẽ tìm kiếm nhiều điểm trong cùng 1 khoảng thời gian

- Trước hết tiến hành flatten Constellation Map thành mảng đơn hướng dựa theo cách sắp xếp sau:

▪ Nếu 2 TFP có cùng thời gian, điểm có Frequency thấp hơn sẽ đứng trước

▪ TFP xuất hiện trước sẽ xếp trước

Hình 5.3.11 Minh họa Flatten bài hát và đoạn ghi âm

- Nhóm 5 điểm có gần nhau nhất thành 1 Target Zone

➢ Xây dựng địa chỉ (Address)

- Với mỗi TGZ, lựa chọn 1 điểm làm Anchor Point (Điểm thứ 3 trước 5 điểm trong TGZ) từ đó xây dựng địa chỉ:

[frequency of the anchor ; frequency of the point ; delta time between the anchor and the point ]

- Như vậy địa chỉ của điểm thứ 6 sẽ là [10; 30; 1], điểm thứ 7 là [10; 20; 3]

- Giá trị mà 1 địa chỉ trỏ tới chính là [time of the anchor in the song; songId]

- Với 2 điểm trên chúng ta sẽ có các cặp sau:

- Mã hóa Address dưới dạng 32 bit integer với:

▪ 9 bit cho Frequency của Anchor Point

▪ 9 bit cho Frequency của 1 TFP

- Tương tự mã hóa Value dưới dạng 64 bit integer:

▪ 16 bit cho time của Anchor Point

- Từ đó áp dụng với toàn bộ 1 bài hát sẽ thu được 1 Dictionary qua đó biến việc tìm kiếm 1 TFP trở thành O(1)

- Giả sử kết quả tìm kiếm từ Dictonary trả về M values trùng với record

- Tiến hành loại bỏ những Value xuất hiện thấp hơn 4 lần (Nghĩa là loại bỏ các Value không đến từ TGZ của Record)

➢ Lọc theo thời gian xuất hiện

- Giả sử có 2 bài hát sau vượt qua quá trình lọc

Hình 5.3.14 Minh họa 2 kết quả vượt qua quá trình lọc

- Tiến hành lọc các note trong bài hát so với đoạn ghi âm với ràng buộc:

Thời gian xuất hiện của note A trong bài hát = thời gian xuất hiện của note A trong đoạn ghi âm + Delta T (Delta T là thời gian xuất hiện note trùng đầu tiên của bản ghi âm trong bài hát)

- Bài hát có càng nhiều note thỏa điều kiện trên cho ra độ trùng khớp càng cao

▪ Giả sử có N note trùng trong Z bài hát và chúng được phân phối đồng đều Như vậy 1 bài hát sẽ có N/Z note trùng

 Lọc 1 bài hát sẽ mất: O(N/Z)

➢ Độ phức tạp sau cải tiến

- Vì sử dụng FFT với sample là 1024 nên chúng ta có 512 Frequencies khả dĩ

- Giả định: Delta T chỉ có 2 giá trị 0 hoặc 10

- Giả định: Quá trình xây dựng địa chỉ được phân phối đồng đều (Nghĩa là với mỗi địa chỉ đều có cùng số lượng Value)

- Tìm kiếm qua Dictionary mất 5 * 300 truy vấn (5 là size của TGZ và 300 là số TFP giả định xuất hiện trong 10s)

- Độ lớn của số lượng Value trả về sẽ là M = (5 * 300) * (S * 30 * 5 * 300) /

- Vì N 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

86 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

● Â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

Hình 5.4.1 Quá trình chuyển đổi file Audio

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

⎼ Đ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

⎼ Dễ dàng nhận thấy quá trình tìm kiếm bài hát là quá trình so trùng độc lập 10s record với toàn bộ cơ sở dữ liệu

Trong kiến trúc hệ thống cơ sở dữ liệu, ta có thể phân chia một cơ sở dữ liệu thành D phần riêng biệt và thực thi tìm kiếm song song trên các phần này Việc này sử dụng D task dựa trên D bằng số lượng processors của một server, từ đó tận dụng tối đa sức mạnh xử lý đồng thời của phần cứng Phương pháp phân mảnh dữ liệu và tìm kiếm song song giúp rút ngắn thời gian trả lời, giảm độ trễ và tăng thông lượng hệ thống Mỗi cơ sở dữ liệu con nhận truy vấn và thực thi song song, sau đó kết quả được gộp lại để trả về đáp án cuối cùng.

 Như vậy thời gian tìm kiếm có thể được giảm xuống D lần

Hình 5.4.2 Quá trình tìm kiếm 1 file nhạc

Because the song library is large and building a single server with D processors is impractical for vertical scaling, a fingerprinting server can be partitioned into E servers, each with M processors, so that M × E ≥ D, enabling horizontal scaling.

 Như vậy quá trình tìm kiếm đa luồng vẫn được đảm bảo với lượng kinh phí thấp hơn

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

- 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:

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

Để tối ưu hóa nội dung nhạc và SEO, nhóm các bài hát thành các đoạn 10 giây, bắt đầu từ phút 1:00, đây là khoảng thời gian giữa ver 1 và điệp khúc nhằm loại bỏ các phần intro và 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

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

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

■ 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

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

ScoreHình 5.4.4 Kết quả kiểm thử bằng file

Các file được tách từ bản gốc nhằm lưu trữ dữ liệu một cách tối ưu và không bị ảnh hưởng bởi chất lượng thu âm, nhờ vậy độ chính xác được duy trì ở mứ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

○ 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 %

Time(ms)Hình 5.4.5 Kết quả kiểm thử bằng thu âm

■ Do các file chịu ảnh hưởng lớn từ chất lượng thu âm nên độ chính xác giảm so với kiểm thử file

HIỆN THỰC HÓA CHỨC NĂNG ĐỀ XUẤT NHẠC

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

Để xây dựng hệ thống, nhóm quyết định triển khai dựa trên so sánh sự tương đồng giữa các đặc trưng âm thanh Phương pháp này coi các đặc trưng âm thanh là các vector đặc trưng (ví dụ MFCC, đặc trưng phổ, nhịp độ và nhịp điệu) và đánh giá mức độ giống nhau giữa chúng bằng các thước đo như cosine similarity hoặc khoảng cách Euclidean, từ đó thực hiện phân loại, nhận diện hoặc ghép nhạc với cơ sở dữ liệu tương ứng Khi có vectơ đặc trưng, hệ thống có thể so sánh với các mẫu đã gắn nhãn để xác định lớp hoặc nhãn phù hợp, giúp tối ưu hóa hiệu suất nhận diện và mở rộng phạm vi ứng dụng cho các bài toán như nhận diện giọng nói, nhận diện nhạc hoặc phân loại môi trường âm thanh.

Trong hệ thống Content-based Recommendation, việc xác định sự tương đồng được thể hiện thông qua một metric đo lường mức độ giống nhau giữa các tín hiệu âm thanh Metric này dùng để đánh giá mức độ tương đồng giữa các tín hiệu âm thanh nhằm phục vụ cho gợi ý nhạc dựa trên đặc trưng âm thanh Nhóm nghiên cứu ứng dụng CNN (Convolutional Neural Networks) để trích xuất đặc trưng, nhận diện và đo khoảng cách giữa các đặc trưng của âm thanh CNN được xem là phù hợp để dự đoán các đặc trưng âm nhạc như hợp âm và nhịp của bài hát Mô hình nhận đầu vào là quang phổ của file âm thanh và cho ra đầu ra ở dạng một vector dự đoán thể loại nhạc của bài hát.

Hình 6.1.1 Các bước xây dựng hệ thống đề xuất dựa trên CNN

Hệ thống phân loại

Nhóm trực tiếp thu thập dữ liệu từ ZingMp3 để đào tạo mô hình phân loại nhạc thay vì sử dụng các tập dữ liệu có sẵn như Free Music Archive (FMA) hay The Million Song Dataset, vì các nguồn này chủ yếu chứa các thể loại nhạc ở mức độ cơ bản như Classical, Electronic và Folk nên khó khai thác nhãn phân loại chi tiết cho nhạc Việt Với mục tiêu nhạc Việt và các thể loại nhạc đặc thù, nhóm hướng tới phân loại thành các nhãn như Nhạc Việt, nhạc trẻ, nhạc truyền thống và các thể loại liên quan khác nhằm nâng cao độ chính xác của hệ thống phân loại nhạc.

Đối với các thể loại như phim và nhạc rap, dữ liệu được gắn nhãn như trên không đảm bảo độ chính xác Vì vậy nhóm quyết định sử dụng nhãn thể loại từ ZingMp3 để phân loại các bài hát, nhằm nâng cao độ tin cậy của kết quả và tối ưu hóa quá trình tìm kiếm cho người dùng.

Trong quá trình lọc dữ liệu, nhóm gặp nhiều khó khăn khi phải loại bỏ audio chất lượng kém và nhạc bị gắn nhãn sai Nguyên nhân nhãn sai có thể là nghệ sĩ tự ý gắn nhãn hoặc một số thể loại trong quá trình crawl không đáp ứng mức tối thiểu, khiến dữ liệu bị lệch và dễ dẫn tới overfitting khi huấn luyện Để nâng cao chất lượng dữ liệu nhạc và tăng số lượng file cho quá trình train ở mỗi giai đoạn, nhóm cắt các file thành các đoạn 30 giây và chuyển đổi sang định dạng wav Phương án này làm tăng đáng kể dung lượng lưu trữ.

Sự chênh lệch dữ liệu giữa các thể loại nhạc là rất lớn Ví dụ, số lượng file nhạc Việt Nam lên tới 3.422 file, trong khi các bài nhạc Indie chỉ khoảng 6 file Ở các thể loại có số lượng file lớn, tồn tại hiện tượng overlap hay chồng chéo thể loại do gán nhãn sai lệch, sự pha trộn phong cách giữa các dòng nhạc và những hệ thống phân loại khác nhau Điều này ảnh hưởng đến chất lượng phân tích dữ liệu, khả năng đề xuất nội dung và tối ưu hóa hiển thị trên các nền tảng nghe nhạc, vì vậy cần có biện pháp làm sạch dữ liệu, chuẩn hóa thẻ và thống kê dữ liệu một cách nhất quán.

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ấn đề chính là sự chênh lệch quá lớn giữa các thể loại nhạc và đặc trưng âm thanh, khiến việc chuẩn hóa và phân tích dữ liệu gặp khó khăn Để khắc phục, nhóm sẽ tái phân bổ dữ liệu và gắn nhãn một cách nhất quán, đồng thời cân bằng giữa các nhãn Quy trình mới nhằm tối ưu hóa chất lượng dữ liệu cho huấn luyện mô hình nhận diện âm thanh, tăng độ tin cậy của phân tích và cải thiện hiệu quả xử lý dữ liệu trong hệ thống quản lý nhạc.

Hình 6.2.1 Thống kê các file wav ở các thể loại

Để xử lý 95 loại, nhóm đề ra hướng giải quyết như sau: thực hiện crawl manual đối với các thể loại thiếu dữ liệu Đồng thời, nhóm đặt mức tối thiểu là 40 file và mức tối đa là 501 file.

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

Hình 6.2.2 Thống kê các file wav ở các thể loại sau khi lọc

Chúng ta cần một phương pháp hợp lý để đưa các file Audio làm input cho mạng neural Do đó, các file wav được chuyển đổi sang các dạng đại diện như spectrogram Trước hết, wav phải có một mức sampling rate nhất định Sau đó, áp dụng Short-Time Fourier Transform (STFT) cho mỗi mức sampling rate với một chiều dài window và một giá trị hop nhất định Kết quả của STFT sau đó được chuyển đổi sang Mel scale hoặc MFCC để làm đặc trưng đầu vào cho mạng neural.

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

Hình 6.2.3 Thống kê các file wav ở các thể loại sau khi lọc

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:

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

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

ResNet-50 có hơn 23 triệu tham số có thể huấn luyện, giúp mạng học sâu thực hiện các nhiệm vụ phức tạp với hiệu quả cao Mạng ResNet được thiết kế để khắc phục hiện tượng vanishing gradient, vấn đề làm cho quá trình huấn luyện không tốt và khó đạt được kết quả mong đợi.

Hình 6.2.4 Sử dụng thư viện Librosa để trích xuất đặc trưng của Audio

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

Hình 6.2.6 Cấu trúc từng layer của Resnet50

Identity Block là lớp chuẩn được sử dụng trong ResNets và tương ứng với trường hợp Input có cùng số chiều với Output

Convolution Block được sử dụng trong trường hợp ngược lại khi Input và

Output không đồng nhất Sự khác biệt nằm ở lớp CONV2D ở shortcut path

Hình 6.2.7 Cấu trúc của Identity Block

Hình 6.2.8 Cấu trúc của Convolution Block

Huấn luyện mô hình

Đầu tiên, sau khi tiền xử lý dữ liệu, ta chia dữ liệu thành tập training, validation và test theo tỷ lệ 0.55 : 0.20 : 0.25 Để huấn luyện mô hình hiệu quả, thiết lập batch size là 32 và số epochs là 30 Việc chọn batch size phù hợp giúp tối ưu việc sử dụng RAM và ngăn ngừa tình trạng tràn RAM trong quá trình training Sự phân chia dữ liệu và cấu hình tham số này ảnh hưởng trực tiếp tới hiệu suất và độ ổn định của mô hình.

Ban đầu nhóm sử dụng GPU NVIDIA GeForce GTX 1050 với VRAM 2.3 GB và CPU AMD Ryzen 7 3750H, quá trình training gặp nhiều khó khăn Sau đó nhóm quyết định training trên Google Colab, nơi có hỗ trợ GPU Tesla 15 GB RAM và 3.3, giúp cải thiện tốc độ và hiệu quả của quá trình huấn luyện.

Đánh giá mô hình

6.4.1 Các thông số để đánh giá mô hình CNN

Các chỉ số TP, FP, TN và FN lần lượt có ý nghĩa là:

● TP (True Positive): Tổng số trường hợp dự báo khớp với Positive

● TN (True Negative): Tổng số trường hợp dự báo khớp với Negative

Hình 6.4.1 Các định nghĩa trong đánh giá

● FP (False Positive): Tổng số trường hợp dự báo các quan sát thuộc nhãn dán Negative thành Positive

● FN (False Negative): Tổng số trường hợp dự báo các quan sát thuộc nhãn Positive thành Negative

Trong quá trình xây dựng mô hình phân loại, ta muốn biết tỷ lệ các trường hợp được dự báo đúng trên tổng số trường hợp, tức là độ chính xác Độ chính xác là thước đo cho biết mức độ hiệu quả dự báo của mô hình trên bộ dữ liệu và giúp đánh giá, so sánh các mô hình khác nhau để chọn phương án phù hợp với bài toán.

Precision là thước đo cho biết trong số các hồ sơ được dự báo là Positive có bao nhiêu hồ sơ là đúng thực sự Mức Precision càng cao cho thấy mô hình phân loại các hồ sơ BAD càng chính xác, từ đó cải thiện hiệu quả tổng thể của hệ thống và giảm sai sót khi nhận diện hồ sơ xấu.

Recall đo lường tỉ lệ dự báo chính xác các trường hợp Positive trên toàn bộ các mẫu thuộc nhóm Positive

F1 Score là trung bình điều hòa giữa Precision và Recall, đại diện cho sự cân bằng giữa độ chính xác của các dự đoán và khả năng phát hiện các trường hợp thật sự Do đó, F1 Score thể hiện rõ hơn chất lượng mô hình khi cần tối ưu cả Precision và Recall đồng thời.

- Với Acc là 0.79 thì mô hình đánh khá chính xác

- Với 82,7 % các trường hợp đoán Positive thì đúng là nhãn Positive ( Precision Score)

- 73% các trường hợp đoán Positive trên tổng số nhãn Positive

Confusion Matrix là một kĩ thuật để khái quát hiệu suất của một thuật toán phân loại Việc tính toán Confusion Matrix cho phép đánh giá các thành phần dự đoán như đúng nhãn và sai nhãn, từ đó nhận diện lỗi trong quá trình huấn luyện và cải thiện mô hình phân loại Nhờ phân tích ma trận nhầm lẫn, chúng ta có thể xác định các lớp dễ bị nhầm lẫn, tối ưu hóa tham số và điều chỉnh chiến lược huấn luyện để nâng cao độ chính xác và độ tổng quát của mô hình Confusion Matrix cung cấp cái nhìn toàn diện về hiệu suất trên tập dữ liệu và là công cụ quan trọng trong quá trình tối ưu hoá mô hình phân loại.

Hình 6.4.2 Confusion Matrix của mô hình Resnet50

● Dựa vào Matrix ta có thể thấy Nhạc Phim Việt có tỉ lệ đoán đúng cao, theo sau là nhạc Pop, V-Pop, Electron-Dance, R-B Soul

● Ở các thể loại như Kpop hay Nhạc Trữ Tình thì dễ bị đoán sai hơn

● Tập dữ liệu test cũng không được trải đều giữa các thể loại

Hệ thống Đề Xuất

Hệ thống đề xuất được xây dựng dựa trên tính toán Cosine Similarity giữa kết quả dự đoán của mô hình phân loại Vì kết quả dưới dạng vector, ta có thể tính khoảng cách giữa các bản nhạc để xác định mức độ tương đồng Đầu tiên, chúng ta chọn một tập nhạc mẫu cho mỗi thể loại để làm nguồn đề xuất Tiếp theo, kết quả dự đoán của nhạc được tính toán từ mạng neural network Để đo sự tương đồng giữa hai bản nhạc với kết quả Prediction là x = [x1, x2, …, xn] và y = [y1, y2, …, yn], ta sử dụng công thức cosine similarity: cos(x, y) = (x · y) / (||x|| · ||y||) Với chỉ số này, hệ thống sẽ gợi ý các bản nhạc có mức độ tương đồng cao nhất dựa trên kết quả dự đoán và tập nhạc đã gắn nhãn cho mỗi thể loại.

Hình 6.5.1 Minh họa Cosine Distance/Similarity

Giá trị nhận được của hàm nằm trong khoảng từ -1 đến 1 Ta sẽ sắp xếp các giá trị từ lớn nhất xuống nhỏ nhất và dựa trên đó để chọn các bản nhạc từ mảng đã được sắp xếp Với hệ thống này, nhóm sẽ chọn 5 bài hát từ mảng Distance dựa trên thứ tự ưu tiên của các giá trị đã sắp xếp. -**Support Pollinations.AI:** -🌸 **Ad** 🌸Powered by Pollinations.AI free text APIs [Support our mission](https://pollinations.ai/redirect/kofi) to keep AI accessible for everyone.

Xây dựng API cho hệ thống đề xuất

Xây dựng hệ thống đề xuất dựa trên Flask

STT Method URL Chú thích

1 GET {{BACKEND_URL}}/recommend?name_file= Đề xuất dựa trên bài hát hiện tại

2 GET {{BACKEND_URL}}/models Lấy danh sách Model trong hệ thống

3 GET {{BACKEND_URL}}/currentModel Lấy thông tin của Model hiện tại

4 GET {{BACKEND_URL}}/userRecommend?userId

Lấy đề xuất dựa trên bài hát yêu thích của người dùng

5 GET {{BACKEND_URL}}/genre?userId= Lấy đề xuất dựa trên thể loại yêu thích của người dùng

6.6.1 Đề xuất bài hát dựa trên bài hát đang nghe của người dùng

Hình 6.6.1 Minh hoạ quá trình đề xuất bài hát tương ứng với bài hát hiện tại

Khi người dùng nghe một bài nhạc, Client gửi thông tin bài hát đang phát tới hệ thống đề xuất Hệ thống thực hiện phân loại và trả về một vector đặc trưng đại diện cho bài hát đó Từ vector này, hệ thống tính toán khoảng cách giữa bài hát hiện tại và các bài hát có trong thư viện, xây dựng một mảng khoảng cách và xác định Top 5 bài hát có mức độ tương đồng gần nhất Các bài hát nằm trong Top 5 sẽ được gửi về cho Client để gợi ý hoặc phát tiếp.

6.6.2 Đề xuất dựa trên bài hát người dùng nghe nhiều

Hệ thống phân tích lịch sử nghe nhạc của người dùng để xác định Top 3 bài hát được nghe nhiều nhất Dữ liệu trong cơ sở dữ liệu lưu số lần nghe hoặc tổng thời gian phát của mỗi bài hát, nhằm xây dựng danh sách các bài hát phổ biến theo người dùng Dựa trên Top 3 bài hát này và hành vi nghe của người dùng, hệ thống sẽ đưa ra đề xuất tương tự với quá trình đề xuất bài hát hiện tại ở mục trên để tối ưu hóa trải nghiệm nghe nhạc và gợi ý các bài hát phù hợp với sở thích người dùng.

Hình 6.6.2 Minh họa quá trình đề xuất bài hát tương ứng với bài hát hiện tại

6.6.3 Đề xuất dựa trên thể loại người dùng nghe nhiều

Hệ thống gợi ý nhạc dựa trên lịch sử nghe nhạc của người dùng, xác định Top 3 bài hát được nghe nhiều nhất bằng cách lưu số lần nghe hoặc tổng thời lượng nghe trong cơ sở dữ liệu, và dự đoán thể loại nhạc mà người dùng nghe nhiều nhất để cá nhân hóa đề xuất Sau đó, nó chọn ra các bài hát có lượt nghe và lượt thích cao nhất để đề xuất cho người dùng, nhằm tối ưu hóa trải nghiệm nghe nhạc và tăng sự tương tác trên nền tảng.

Hình 6.6.3 Minh họa quá trình đề xuất thể loại tương ứng với lịch sử nghe nhạc của người dùng

Ngày đăng: 17/08/2022, 21:16

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] V. V. –. T. S. o. AI, "Deep Learning (for Audio) with Python," 2020. [Online]. Available: https://youtu.be/fMqL5vckiU0. [Accessed 12/3/2022] Sách, tạp chí
Tiêu đề: Deep Learning (for Audio) with Python
[2] A. A. S. G. D. S. Adiyansjaha, "Music Recommender System based on Genre using Convolutional Neural Networks". [Accessed 18/3/2022] Sách, tạp chí
Tiêu đề: Music Recommender System based on Genre using Convolutional Neural Networks
[7] Christophe, “How does Shazam works,” 2015. [Online]. Available: http://coding- geek.com/how-shazam-works/. [Accessed 12/9/2021] Sách, tạp chí
Tiêu đề: How does Shazam works
[8] Li-Chun Wang, “An Industrial-Strength Audio Search Algorithm,” 2003. [Online]. Available: https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf.[Accessed 14/9/2021] Sách, tạp chí
Tiêu đề: An Industrial-Strength Audio Search Algorithm
[9] Trey Cooper, “How Shazam Works,” 2018. [Online]. Available: https://medium.com/@treycoopermusic/how-shazam-works-d97135fb4582.[Accessed 20/9/2021] Sách, tạp chí
Tiêu đề: How Shazam Works
[3] NAudio. [Online]. Available: https://github.com/naudio/NAudio Link
[5] Keras. [Online]. Available: https://keras.io/api/models/ Link

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w