Giới thiệu dự án

Theo thống kê từ We Are Social và DataReportal, Việt Nam hiện có hơn 68,17 triệu người sử dụng Internet, với thời gian nghe nhạc trực tuyến trung bình đạt 1 giờ 1 phút mỗi ngày. Sự bùng nổ của thị trường nhạc số mang lại hàng triệu tác phẩm mới mỗi năm, nhưng đồng thời tạo ra hai rào cản trải nghiệm lớn:

  1. Nghịch lý tìm kiếm âm thanh (Audio Search Friction): Người dùng vô tình nghe thấy một giai điệu bắt tai tại không gian công cộng (quán cà phê, nhà hàng) hoặc hồi tưởng một bài hát cũ nhưng không nhớ tên bài hát hay lời ca để nhập từ khóa văn bản.
  2. Quá tải thông tin và giảm độ tương thích (Information Overload): Các nền tảng streaming truyền thống thường dựa chủ yếu vào bảng xếp hạng đại chúng (Top Charts) thay vì cá nhân hóa sâu sắc theo đặc trưng âm học và sở thích thực tế của từng cá nhân.

Khóa luận tốt nghiệp "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" của nhóm sinh viên ngành Kỹ thuật Phần mềm (Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM) được phát triển nhằm giải quyết triệt để hai bài toán trên thông qua việc kết hợp công nghệ trích xuất vân tay âm thanh (Audio Fingerprinting) và Học sâu (Deep Learning).

graph TD
    A[Người dùng] -->|Tải lên / Thu âm Mic| B[Angular 13 Client]
    A -->|Tương tác nghe nhạc / Thích / Playlist| B
    B -->|Audio Stream & CRUD API| C[ASP.NET Core Web API Server]
    B -->|Truy vấn AI / Feature Vector| D[Flask AI Recommender Engine]
    C -->|Lưu trữ Metadata & Fingerprints| E[(MongoDB 5.0 Cluster)]
    C -->|Lưu trữ Tệp MP3 / FLAC / Lrc| F[Blob Storage]
    D -->|Huấn luyện Spectrograms| G[ResNet-50 / Keras Model]
    D -->|Cosine Similarity Matrix| E

Mục tiêu dự án

  1. Xây dựng nền tảng Web Music Streaming hoàn chỉnh: Cung cấp đầy đủ các tính năng phát nhạc trực tuyến chuẩn chất lượng cao, đồng bộ lời bài hát thời gian thực (Dynamic Lyrics) và chế độ Karaoke ghi âm trực tiếp trên trình duyệt.
  2. Nghiên cứu và phát triển công cụ nhận diện giai điệu thời gian thực: Ứng dụng biến đổi Fourier rời rạc (DFT) và thuật toán biến đổi Fourier nhanh (Fast Fourier Transform - FFT) để trích xuất vân tay âm thanh (Audio Fingerprint), nhận diện chính xác bài hát từ đoạn thu âm môi trường chứa tạp âm chỉ từ 5–10 giây.
  3. Phát triển hệ sinh thái đề xuất âm nhạc thông minh (Recommender System): Ứng dụng mạng nơ-ron tích chập (Convolutional Neural Network - CNN) với kiến trúc ResNet-50 kết hợp hệ số Mel-Frequency Cepstral Coefficients (MFCC) và ma trận tương đồng Cosine (Cosine Similarity) để phân loại thể loại và gợi ý bài hát cá nhân hóa theo thời gian thực.
  4. Chuẩn hóa kiến trúc micro-service/decoupled backend: Đảm bảo khả năng chịu tải cao, mở rộng linh hoạt thông qua việc phân tách server xử lý nghiệp vụ âm nhạc (.NET Core) và server tính toán máy học (Python Flask).

Phạm vi và giới hạn

  • Phạm vi dữ liệu: Kho ngữ liệu âm nhạc bao gồm nhạc Việt Nam (V-Pop, Indie), Âu Mỹ (Pop, Rock, Ballad) và Hàn Quốc (K-Pop) với định dạng chuẩn âm thanh PCM 44.1 kHz, 16-bit.
  • Phạm vi kỹ thuật: Phát triển trên nền tảng Web (Web-first approach), hỗ trợ thu âm từ micro của thiết bị đầu cuối thông qua Web Audio API của trình duyệt.
  • Giới hạn: Chưa hỗ trợ nhận diện qua tiếng huýt sáo hoặc giọng hát chay sai cao độ (Humming-to-search); tập trung tối ưu vào nhận diện bản ghi âm thực tế (Acoustic Fingerprint matching).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Nền tảng truyền thống (Zing MP3, NhacCuaTui) Ứng dụng nhận diện đơn lẻ (Shazam, SoundHound) Giải pháp tích hợp của đồ án
Streaming & Karaoke Hỗ trợ stream tốt, lyric cơ bản, ít tích hợp karaoke tương tác Không hỗ trợ streaming đầy đủ; chuyển hướng sang app thứ ba Tích hợp phát nhạc, Lyric chạy từng từ, chế độ Karaoke ghi âm
Nhận diện âm thanh Hạn chế hoặc chỉ tìm kiếm qua chuỗi văn bản/giọng nói cơ bản Độ chính xác cao (>95%) nhưng hệ thống đóng, không gắn liền web player nội địa Nhận diện trực tiếp qua Web Audio API với độ trễ thấp (<1.8s)
Đề xuất cá nhân hóa Chủ yếu lọc cộng tác (Collaborative Filtering) dựa trên view/like Không có hệ thống nghe nhạc cá nhân hóa Kết hợp đặc trưng âm học (Content-based CNN Spectrogram) & Lịch sử
Khả năng tiếp cận Cài đặt ứng dụng di động cồng kềnh Bắt buộc cài đặt ứng dụng native Chạy trực tiếp trên nền web hiện đại, không cần cài đặt plugin

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must have: Phát nhạc trực tuyến (Play/Pause/Seek), quản lý nghệ sĩ/album/playlist, chức năng thu âm nhận diện bài hát qua Micro/Upload, gợi ý bài hát theo bài đang nghe.
  • Should have: Chế độ Karaoke đồng bộ thời gian thực, bảng xếp hạng trending tự động, đề xuất đa chiều (theo thể loại, lịch sử nghe).
  • Could have: Tải nhạc ngoại tuyến, tùy chỉnh chất lượng âm thanh 128kbps/320kbps/Lossless, chia sẻ liên kết mạng xã hội.
  • Won't have (lần này): Nhận diện tiếng ngân nga sai tone (Query-by-Humming), livestream âm nhạc trực tiếp.

Thiết kế hệ thống

Technology Stack & Versions

  • Frontend Web Client: Angular 13.x, TypeScript 4.5, RxJS 7.4, SCSS, HTML5 Web Audio API.
  • Core Business Backend (Music & Recognition Service): ASP.NET Core 6.0 Web API, C# 10, Entity Framework Core / MongoDB Driver.
  • AI & Machine Learning Engine: Python 3.9, Flask 2.0.x, Keras 2.8, TensorFlow 2.8, Librosa 0.9.1, NumPy, Scikit-learn.
  • Database & Storage: MongoDB 5.0 (NoSQL Document Store phân tán), File Storage Server.
  • DevOps & Environment: Docker, Docker Compose, Nginx Reverse Proxy.
classDiagram
    class Song {
        +int Id
        +string SongId
        +string Title
        +string ArtistId
        +string GenreId
        +string AudioUrl
        +string LyricUrl
        +Create() ActionResult
        +GetById(id) Object
        +Edit(id, data) ActionResult
    }
    class Fingerprint {
        +int Id
        +int Song_Id
        +List~TimeFrequency~ FTP
        +Create() ActionResult
        +GetById(id) Object
        +GetList() ActionResult
    }
    class TimeFrequency {
        +int Time
        +int Frequency
        +Create() ActionResult
    }
    class User {
        +string Id
        +string Username
        +string Email
        +List~string~ HistorySongIds
        +List~string~ FavoriteGenres
        +UpdateProfile() ActionResult
    }
    Song "1" --> "1" Fingerprint : contains
    Fingerprint "1" --> "*" TimeFrequency : hashes
    User "1" --> "*" Song : interacts

Thiết kế cơ sở dữ liệu (MongoDB Schema)

  • Collection Songs: { _id: ObjectId, songId: String, title: String, artistId: ObjectId, genre: String, duration: Number, audioUrl: String, lyricUrl: String, releaseDate: Date, playCount: Number }
  • Collection Fingerprints: { _id: ObjectId, songId: ObjectId, hashes: [ { hash: String, offset: Number } ] }
  • Collection Users: { _id: ObjectId, username: String, email: String, passwordHash: String, listeningHistory: [ { songId: ObjectId, listenedAt: Date, durationPlayed: Number } ], favoriteGenres: [ String ] }
  • Collection Playlists: { _id: ObjectId, userId: ObjectId, name: String, songIds: [ ObjectId ], isPublic: Boolean, createdAt: Date }

Thiết kế API Endpoints chính

  • POST /api/v1/recognize/record: Nhận tệp âm thanh .wav nhị phân từ Web Audio API, trích xuất FFT và so khớp mã băm trong MongoDB.
  • GET /api/v1/recommendations/current-song/{songId}: Trích xuất vector đặc trưng và gợi ý 10 bài hát tương đồng nhất.
  • GET /api/v1/recommendations/user-taste/{userId}: Tính toán sở thích người dùng qua phân tích phân phối thể loại (Keras ResNet-50) và trả về danh sách bài hát cá nhân hóa.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình Agile/Scrum với chu kỳ 4 Sprint (mỗi Sprint kéo dài 3 tuần):

  • Milestone 1 (Sprint 1): Thu thập dữ liệu âm nhạc (hơn 10.000 bài hát), xây dựng kiến trúc MVC, cơ sở dữ liệu MongoDB và API phát nhạc cơ bản trên ASP.NET Core.
  • Milestone 2 (Sprint 2): Nghiên cứu lý thuyết xử lý tín hiệu âm thanh (Time-Domain sang Frequency-Domain), hiện thực hóa thuật toán Fast Fourier Transform và Combinatorial Hash Generation.
  • Milestone 3 (Sprint 3): Xây dựng mạng nơ-ron Keras ResNet-50 phân loại thể loại và engine gợi ý âm nhạc; phát triển giao diện Angular (Player, Dynamic Lyrics, Karaoke Mode).
  • Milestone 4 (Sprint 4): Tích hợp toàn diện các service qua RESTful API, kiểm thử hiệu năng, tối ưu hóa bộ nhớ đệm và triển khai hệ thống.

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

1. Thuật toán trích xuất vân tay âm thanh (Audio Fingerprinting Engine)

Âm thanh thu từ microphone được biểu diễn ở miền thời gian (Time-Domain) dưới dạng sóng nhị phân rời rạc với tần số lấy mẫu chuẩn $f_s = 44.100\text{ Hz}$. Để nhận dạng, hệ thống sử dụng thuật toán Fast Fourier Transform (Cooley-Tukey FFT) nhằm chuyển đổi tín hiệu sang miền tần số (Frequency-Domain) với độ phức tạp thuật toán $O(N \log N)$ thay vì $O(N^2)$ của DFT thông thường.

$$\text{DFT: } X_k = \sum_{n=0}^{N-1} x_n \cdot e^{-i 2\pi k n / N}, \quad k = 0, \dots, N-1$$

Sau khi biến đổi FFT qua các cửa sổ trượt thời gian (Spectrogram), hệ thống xác định các điểm đỉnh cực đại năng lượng (Peak Points) và tạo ra các cặp băm bất biến theo thời gian (Time-Invariant Combinatorial Hashes):

// Xử lý trích xuất và khớp mã vân tay âm thanh trong ASP.NET Core Web API
[HttpPost("match-stream")]
public async Task<IActionResult> MatchAudioStream([FromForm] IFormFile rawAudio)
{
    if (rawAudio == null || rawAudio.Length == 0)
        return BadRequest(new { message = "Audio buffer is empty." });

    using var stream = rawAudio.OpenReadStream();
    var pcmData = await AudioUtils.ExtractPcmSamplesAsync(stream, targetSampleRate: 44100);
    
    // Thực hiện biến đổi FFT và trích xuất Landmark Points
    var spectralPeaks = AudioProcessor.ComputeCooleyTukeyFft(pcmData, windowSize: 4096, overlap: 2048);
    var targetHashes = FingerprintEngine.GenerateCombinatorialHashes(spectralPeaks, fanOut: 5);

    // Truy vấn so khớp mã băm trong MongoDB
    var matchedSong = await _fingerprintRepository.FindBestMatchingSongAsync(targetHashes, minConfidence: 0.75);
    
    if (matchedSong == null)
        return NotFound(new { message = "Không tìm thấy bài hát tương ứng với giai điệu." });

    return Ok(new { 
        songId = matchedSong.Id, 
        title = matchedSong.Title, 
        artist = matchedSong.ArtistName,
        confidence = matchedSong.MatchingScore 
    });
}

2. Trích xuất đặc trưng âm học và phân loại thể loại bằng Deep Learning

Hệ thống sử dụng thư viện Librosa để phân tích các đoạn trích âm thanh 30 giây thành dạng Log-Mel Spectrogram và 20 tham số MFCC. Mô hình ResNet-50 được điều chỉnh lớp phân loại cuối cùng (Fine-tuned Transfer Learning) để nhận diện 10 thể loại âm nhạc chính.

import librosa
import numpy as np
from tensorflow.keras.models import load_model

model = load_model('models/resnet50_music_genre_classifier.h5')
GENRES = ['ballad', 'pop', 'rock', 'hiphop', 'indie', 'edm', 'jazz', 'rnb', 'acoustic', 'classical']

def extract_features_and_predict(audio_path):
    # Load audio với tần số lấy mẫu 44.1 kHz, cắt 30s
    y, sr = librosa.load(audio_path, sr=44100, duration=30.0)
    
    # Trích xuất Mel-Spectrogram (128 mel-bands, FFT 2048)
    melspec = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=2048, hop_length=512, n_mels=128)
    log_melspec = librosa.power_to_db(melspec, ref=np.max)
    
    # Chuẩn hóa kích thước đầu vào phù hợp với cấu trúc ResNet-50 (128x1292x3)
    feature_input = np.resize(log_melspec, (1, 128, 1292, 3)) / 255.0
    
    # Dự đoán xác suất phân phối thể loại
    predictions = model.predict(feature_input)
    genre_vector = predictions[0]
    predicted_genre = GENRES[np.argmax(genre_vector)]
    
    return predicted_genre, genre_vector

def calculate_cosine_similarity(vec_a, vec_b):
    # Tính toán độ tương đồng Cosine giữa 2 vector bài hát
    dot_product = np.dot(vec_a, vec_b)
    norm_a = np.linalg.norm(vec_a)
    norm_b = np.linalg.norm(vec_b)
    return dot_product / (norm_a * norm_b + 1e-7)
+-----------------------------------------------------------------------------------+
|                           KIẾN TRÚC RESNET-50 CLASSIFIER                          |
|                                                                                   |
|  Audio File (.wav) -> Librosa Mel-Spectrogram -> Resize (128, 1292, 3)            |
|       |                                                                           |
|       v                                                                           |
|  [Conv2D 7x7, s=2] -> [BatchNorm] -> [ReLU] -> [MaxPool 3x3]                      |
|       |                                                                           |
|       v                                                                           |
|  [Stage 1: 3 Residual Blocks] -> (Output: 64 channels)                            |
|       |                                                                           |
|       v                                                                           |
|  [Stage 2: 4 Residual Blocks] -> (Output: 128 channels)                           |
|       |                                                                           |
|       v                                                                           |
|  [Stage 3: 6 Residual Blocks] -> (Output: 256 channels)                           |
|       |                                                                           |
|       v                                                                           |
|  [Stage 4: 3 Residual Blocks] -> (Output: 512 channels)                           |
|       |                                                                           |
|       v                                                                           |
|  [GlobalAveragePooling2D] -> [Dense 512, ReLU] -> [Dropout 0.4] -> [Softmax (10)] |
+-----------------------------------------------------------------------------------+

Kiểm thử và đánh giá thực nghiệm

1. Kiểm thử độ chính xác nhận diện âm thanh

Hệ thống thực hiện kiểm thử trên bộ mẫu 500 bài hát với 3 kịch bản: Tệp âm thanh gốc, bản thu âm sạch từ Micro và bản thu âm môi trường nhiều tạp âm (tạp âm đường phố, tiếng nói chuyện, SNR $\approx 10\text{ dB}$).

Kịch bản kiểm thử Thời lượng mẫu Tỉ lệ nhận diện chính xác (%) Thời gian phản hồi trung bình (ms)
Tệp nhạc số gốc (Clean Audio File) 5 giây 98.6% 650 ms
Tệp nhạc số gốc (Clean Audio File) 10 giây 99.8% 890 ms
Thu âm qua Micro (Môi trường tĩnh) 5–8 giây 93.4% 1.120 ms
Thu âm qua Micro (Có tiếng ồn 10dB) 8–10 giây 87.2% 1.480 ms

2. Đánh giá mô hình phân loại Keras ResNet-50

Mô hình được huấn luyện qua 100 Epochs với tập dữ liệu phân loại 10 thể loại âm nhạc:

  • Training Accuracy: 94.2%
  • Validation Accuracy: 89.6%
  • Test Loss: 0.312 (Categorical Crossentropy)
  • Precision / Recall trung bình: 0.89 / 0.88

Đổi mới và đóng góp

  1. Ứng dụng thành công giải thuật Cooley-Tukey FFT & Combinatorial Hashing trên nền tảng Web: Giảm chi phí tính toán biến đổi Fourier từ $O(N^2)$ xuống $O(N \log N)$, cho phép hệ thống phân tích và sinh mã băm 44.100 mẫu/giây với độ trễ xử lý dưới 50ms ngay trên server.
  2. Cơ chế đề xuất lai 3 tầng (3-Layer Hybrid Recommendation):
    • Tầng 1 (Content-based via ResNet-50 Spectrogram): Khắc phục hoàn toàn bài toán khởi đầu lạnh (Cold-Start Problem) đối với các bài hát mới phát hành chưa có lượt nghe.
    • Tầng 2 (User Listening History Vectorization): Tự động tổng hợp vector sở thích từ 50 bài hát nghe gần nhất.
    • Tầng 3 (Cosine Similarity Ranking): Tính toán khoảng cách ngữ nghĩa giữa các vector bài hát, trả về top 20 gợi ý trong thời gian thực ($< 120\text{ ms}$).
  3. Mô hình kiến trúc phân tán hiệu năng cao: Tách biệt hoàn toàn Music Business Server (ASP.NET Core) và Machine Learning Server (Flask). Tận dụng Non-blocking I/O và kiến trúc Document của MongoDB giúp tốc độ truy vấn metadata nhanh hơn 35% so với mô hình RDBMS truyền thống trên tập dữ liệu lớn.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-world Use Cases)

  • Khám phá bài hát tại địa điểm công cộng: Người dùng mở trình duyệt trên điện thoại hoặc laptop, bấm nút thu âm trên giao diện web trong 7 giây; hệ thống tự động xác định bài hát, phát ngay lập tức và đưa vào danh sách yêu thích.
  • Luyện tập ca hát và giải trí gia đình: Chuyển sang giao diện Karaoke Mode, hiển thị lời nhạc chạy đồng bộ từng từ theo nhịp phách, tự động thu âm giọng hát và cho phép người dùng nghe lại bản thu (Preview Record).
  • Đề xuất nhạc tự động (Smart Autoplay): Khi bài hát hiện tại kết thúc, hệ thống dựa vào vector đặc trưng âm học để chọn bài hát tiếp theo có cùng âm hưởng và thể loại mà không làm gián đoạn cảm xúc người nghe.

Hướng dẫn triển khai hệ thống (Deployment Architecture)

+-------------------------------------------------------------------------+
|                         DOCKER DEPLOYMENT TOPOLOGY                      |
|                                                                         |
|                [ Nginx Reverse Proxy - Port 80/443 ]                     |
|                                  |                                      |
|         +------------------------+------------------------+             |
|         |                                                 |             |
|         v                                                 v             |
|  [ Angular 13 SPA ]                           [ ASP.NET Core API ]      |
|  (Container 1: Port 80)                       (Container 2: Port 5000)  |
|                                                           |             |
|         +-------------------------------------------------+             |
|         |                                                 |             |
|         v                                                 v             |
|  [ Flask AI Engine ]                          [ MongoDB Cluster ]       |
|  (Container 3: Port 5050)                     (Container 4: Port 27017) |
+-------------------------------------------------------------------------+
  • Yêu cầu phần cứng máy chủ (Server Minimum Specs):
    • CPU: 4 Cores (Intel Xeon hoặc AMD EPYC 2.5 GHz trở lên).
    • RAM: 8 GB DDR4 (khuyến nghị 16 GB để cache Spectrogram vectors).
    • Storage: 50 GB SSD NVMe cho Database và Audio Fingerprint indices.
  • Quy trình triển khai qua Docker Compose:
    1. Build Image Angular: docker build -t music-client ./frontend
    2. Build Image ASP.NET Core: docker build -t music-server ./backend-dotnet
    3. Build Image Python Flask: docker build -t music-ai ./backend-flask
    4. Khởi chạy toàn bộ hệ sinh thái: docker-compose up -d

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Tạp âm quá lớn (SNR < 5dB): Khi môi trường có tiếng ồn lấn át hoàn toàn tín hiệu nhạc (ở quán bar lớn hoặc ngoài đường cao tốc), độ chính xác nhận diện giảm xuống còn 68%.
  • Phụ thuộc vào dữ liệu gốc (Exact Match): Giải thuật Audio Fingerprint dựa trên các đỉnh tần số cố định nên chưa hỗ trợ nhận diện các bản cover hát lại với tone giọng hoặc nhịp điệu (tempo) bị biến đổi quá nhiều.
  • Tài nguyên tính toán của AI Engine: Quá trình sinh Mel-Spectrogram qua Librosa tốn tài nguyên CPU nếu nhiều người dùng cùng yêu cầu phân tích tệp âm thanh đồng thời.

Hướng phát triển trong tương lai

  1. Tích hợp mô hình Contrastive Learning (CLMR / Wav2Vec 2.0): Nâng cấp engine nhận diện và đề xuất bằng mô hình học biểu diễn âm thanh tự giám sát, cho phép nhận diện tiếng huýt sáo và bản cover.
  2. Mở rộng sang ứng dụng đa nền tảng: Sử dụng Flutter hoặc React Native để đóng gói ứng dụng di động, kết hợp tính năng nhận diện chạy ngầm trên thanh thông báo hệ thống.
  3. Triển khai kiến trúc Event-Driven với Apache Kafka: Đưa các tác vụ tính toán Fingerprint và huấn luyện lại sở thích người dùng vào hàng đợi xử lý bất đồng bộ (Asynchronous Message Queue).

Đối tượng hưởng lợi

  • Sinh viên chuyên ngành CNTT / Kỹ thuật Phần mềm: Tài liệu tham khảo toàn diện về cách kết hợp kiến trúc MVC hiện đại, xử lý tín hiệu số (DSP) và Deep Learning trong một ứng dụng thực tiễn.
  • Lập trình viên Web & AI Engineers: Nắm vững mẫu thiết kế (Design Pattern) tích hợp giữa ASP.NET Core Web API hiệu năng cao và các mô hình AI viết bằng Python/Keras qua RESTful API.
  • Doanh nghiệp phát hành âm nhạc & Nền tảng nội dung số: Giải pháp công nghệ hoàn chỉnh với chi phí bản quyền mở, giúp tối ưu hóa việc phân loại bài hát tự động và gia tăng thời gian giữ chân người dùng (Retention Rate) nhờ hệ thống gợi ý thông minh.
  • Nhà nghiên cứu lĩnh vực Information Retrieval (MIR): Cung cấp dữ liệu thực nghiệm về độ chính xác của biến đổi FFT và kiến trúc ResNet-50 trên tập dữ liệu âm nhạc đa thể loại.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy hệ thống là gì?

Hệ thống yêu cầu máy chủ cài đặt Docker phiên bản 20.10+ và Docker Compose v2. Máy chủ cần tối thiểu 4GB RAM (khuyến nghị 8GB), 2 vCPU và hỗ trợ môi trường chạy .NET 6 Runtime cùng Python 3.9. Phía client chỉ cần trình duyệt web hiện đại (Google Chrome, Firefox, Safari, Edge) có cấp quyền truy cập Microphone thông qua giao thức HTTPS.

2. Giới hạn khả năng mở rộng (Scalability) của hệ thống là bao nhiêu và giải pháp mở rộng ra sao?

Trong cấu hình đơn server, hệ thống đáp ứng tốt khoảng 500 kết nối đồng thời (Concurrent Users) và xử lý 50 yêu cầu nhận diện/giây. Để mở rộng lên hàng triệu người dùng, hệ thống có thể scale ngang (Horizontal Scaling) tầng ASP.NET Core và Flask bằng Kubernetes (K8s), kết hợp MongoDB Sharding để phân tán hàng chục triệu mã băm Fingerprint.

3. Hệ thống tích hợp với các dịch vụ âm nhạc hiện có như thế nào?

Kiến trúc RESTful API chuẩn hóa cho phép hệ thống dễ dàng tích hợp với các nhà cung cấp bên thứ ba (Spotify Web API, YouTube Audio Stream) hoặc các hệ thống quản lý quyền sở hữu trí tuệ để đồng bộ kho bài hát và metadata tự động thông qua Webhooks và JSON payloads.

4. Chi phí vận hành và bảo trì ước tính như thế nào?

Nhờ sử dụng 100% các công nghệ mã nguồn mở (ASP.NET Core, Angular, Python, MongoDB Community Edition, Docker), hệ thống loại bỏ hoàn toàn chi phí bản quyền phần mềm (Licensing Fee). Chi phí duy nhất là hạ tầng máy chủ Cloud (như AWS, DigitalOcean hoặc GCP), ước tính khoảng $40 – $100/tháng cho quy mô 50.000 người dùng tích cực hàng tháng (MAU).

5. Tại sao dự án chọn kết hợp ASP.NET Core với Flask thay vì chỉ dùng một ngôn ngữ duy nhất?

ASP.NET Core là một trong những framework backend nhanh và tối ưu nhất hiện nay, vượt trội trong việc xử lý các tác vụ Web I/O, quản lý xác thực người dùng và truyền stream dữ liệu âm thanh. Trong khi đó, Python và Keras/Librosa là chuẩn công nghiệp về xử lý âm thanh số và Học sâu. Việc phân tách 2 server chuyên biệt phát huy tối đa thế mạnh của từng nền tảng, đảm bảo hiệu năng và tính module hóa của hệ thống.


Kết luận

Đồ án khóa luận tốt nghiệp "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" đã giải quyết thành công bài toán giao thoa giữa nền tảng ứng dụng web hiện đại và các thuật toán thông minh trong xử lý tín hiệu âm thanh và Học sâu.

Bằng việc kết hợp kiến trúc linh hoạt của Angular 13, sức mạnh xử lý của ASP.NET Core 6.0, thuật toán biến đổi Fourier nhanh (Cooley-Tukey FFT) và mạng Keras ResNet-50, nhóm tác giả đã xây dựng nên một sản phẩm hoàn chỉnh, vừa đảm bảo tính học thuật nghiên cứu sâu sắc, vừa mang giá trị ứng dụng thực tiễn cao cho thị trường giải trí số. Đây là nền tảng vững chắc để tiếp tục phát triển thành các giải pháp thương mại hóa quy mô lớn trong lĩnh vực Music Information Retrieval (MIR) tại Việt Nam.