CHUNG TN AUDIO ENGINE 5.1 — 25/09/2026 Thay đổi: - Dùng BlobSource có cache 4 MiB, giải mã và chuyển mã tuần tự trong Worker. - Không gọi file.arrayBuffer()/decodeAudioData() cho toàn bộ tệp; không tạo PCM toàn thời lượng; bỏ mức chặn 512 MiB PCM. - Giữ giới hạn nhận tệp 500 MiB (giao diện gọi 500 MB). - BufferTarget giữ MP3 đã nén trong RAM để tải về. Đây không phải cam kết tổng RAM cố định 4 MiB; trình duyệt, codec, bộ đệm và tệp đầu ra đều dùng bộ nhớ. - Giải mã phụ thuộc codec của trình duyệt; cần HTTPS, Worker, WebAssembly. MP3/WAV/MP4 AAC đã được kiểm tra trong Chromium. Không cần backend, COOP/COEP hay SharedArrayBuffer. - Có tiến độ, hủy xử lý và tự giải phóng Worker. Wake lock được dùng nếu trình duyệt cho phép để giảm nguy cơ màn hình ngủ, không bảo đảm hệ điều hành luôn giữ tab chạy. Kiểm tra thực tế trong Chromium headless: 1. WAV stereo PCM16 48 kHz: 524.288.000 byte (đúng 500 MiB), 2.730,666 giây. Xuất MP3 mono 24 kHz 64 kbps: 21.845.928 byte, thời lượng 2.730,744 giây kể cả padding MP3. Bộ đệm PCM lớn nhất nhìn thấy tại callback chuyển mã: 480.000 byte. Đây KHÔNG phải phép đo tổng RAM của trình duyệt. 2. MP3 mono 24 kHz dài 65 phút: xuất MP3 thành công, thời lượng đầu ra 3.900,120 giây kể cả padding. 3. WAV cắt đoạn giây 1–2, MP4 AAC -> MP3, hủy tệp dài rồi xử lý tệp nhỏ thành công. Mẫu kiểm tra là tệp tổng hợp. Chưa kiểm tra trên điện thoại thật hoặc mọi codec. Mã nguồn và giấy phép: - audio-stream-worker-source.js: mã tích hợp của website. - Mediabunny 1.60.0 và @mediabunny/mp3-encoder 1.60.0: MPL-2.0. https://github.com/Vanilagy/mediabunny/tree/v1.60.0 https://codeload.github.com/Vanilagy/mediabunny/tar.gz/refs/tags/v1.60.0 - LAME 3.100: LGPL; mã nguồn đi kèm vendor/lame-3.100-source.tar.gz (có COPYING và hướng dẫn build). https://lame.sourceforge.io/ - MPL: vendor/mediabunny-LICENSE và vendor/mediabunny-mp3-encoder-LICENSE. - Tài liệu build WASM: https://github.com/Vanilagy/mediabunny/blob/v1.60.0/packages/mp3-encoder/README.md Tái tạo bundle JavaScript (dành cho người phát triển, không cần chạy để upload website): npm install mediabunny@1.60.0 @mediabunny/mp3-encoder@1.60.0 esbuild@0.28.2 npx esbuild audio-stream-worker-source.js --bundle --minify --platform=browser --format=iife --target=es2022 --legal-comments=eof --outfile=audio-stream-worker.js Giữ thư viện cùng phiên bản. Có thể thay đổi và build lại theo giấy phép tương ứng. CHUNG TN AUDIO ENGINE 5.2 — 30/09/2026 - Thêm tua nghe thử và tốc độ 0.5–2.0, bước 0.05. Giữ cao độ bằng SoundTouchJS khi xuất; nghe thử dùng preservesPitch của trình duyệt, chất lượng thuật toán có thể khác bản xuất. - Nhánh 1× giữ Conversion; nhánh thay đổi tốc độ đọc AudioSampleSink theo từng phần, trim theo tệp gốc, đổi tempo với bộ đệm ngắn rồi mã hóa bằng AudioSampleSource. MP3 cuối vẫn giữ trong RAM để tải về; giới hạn tệp 500 MiB giữ nguyên. - Mốc cắt luôn thuộc tệp gốc; ước tính thời lượng và kích thước chia cho tốc độ. Tên tải có tốc độ nếu khác 1×. - Input thời gian dùng type=text và inputmode=text; cho nhập dấu : trên bàn phím thông thường. - Báo lỗi bitrate/sample rate trước khi mở worker; bỏ xử lý kết thúc nhầm với thông điệp không phải done/error. - SoundTouchJS 0.3.0 (LGPL-2.1), giấy phép và gói mã nguồn trong vendor/soundtouchjs-LICENSE và vendor/soundtouchjs-0.3.0.tgz. Nguồn: https://github.com/cutterbl/SoundTouchJS - Build: npm install mediabunny@1.60.0 @mediabunny/mp3-encoder@1.60.0 soundtouchjs@0.3.0 esbuild@0.28.2 Sau đó chạy lệnh esbuild phía trên; đặt audio-tempo-source.js cùng thư mục với audio-stream-worker-source.js. Kiểm tra 5.2: Chromium headless, viewport 390×844. WAV 48 kHz stereo, cắt 00:01–00:06; xuất 96 kbps mono 32 kHz ở tốc độ 1×, 0.5×, 1.25×, 2×. ffprobe đo 5.076 / 10.080 / 4.104 / 2.592 giây (bao gồm padding MP3). Âm thử 660 Hz vẫn khoảng 660 Hz ở cả bốn bản. Kiểm tra nút đặt lại tốc độ, hủy kết quả cũ khi sửa thông số, thời gian 00:99 báo lỗi, ô cắt inputmode=text, không có lỗi JavaScript. Chưa thử trên điện thoại thật. Kiểm tra 500 MiB ở 5.1 phía trên là kết quả cũ, không phải lần thử mới cho nhánh đổi tempo.