VoxCPM2 là mô hình chuyển văn bản thành giọng nói mã nguồn mở, hỗ trợ tiếng Việt, clone giọng từ audio mẫu và xuất âm thanh chất lượng cao 48 kHz.
Nếu có máy tính đủ mạnh, VGA 16GB trở lên thì cài trực tiếp trên máy và sử dụng rất ổn định. Nhưng không phải ai cũng có điều kiển sở hữu Card VGA mạnh nên trong bài viết này, chúng ta sẽ sử dụng Google Colab free để:
- Clone giọng nói từ một đoạn audio mẫu.
- Chuyển truyện dạng TXT thành giọng đọc.
- Nghe kết quả trực tiếp trên Colab.
- Điều chỉnh tốc độ đọc.
- Tải audio về dưới dạng MP3.
Google Colab miễn phí thường cung cấp GPU Tesla T4, đủ để chạy VoxCPM2 mà không cần máy tính cấu hình cao.
Chỉ nên clone giọng của chính mình hoặc người đã cho phép sử dụng.
1. Chuẩn bị
Cần chuẩn bị hai file:
- Một file giọng mẫu định dạng WAV, MP3 hoặc M4A, dài khoảng 10–20 giây.
- Một file truyện định dạng TXT, lưu bằng mã hóa UTF-8.
Audio mẫu nên sạch, không có nhạc nền, không tiếng ồn và chỉ có một người nói.
Ngoài ra, cần chép lại chính xác phần lời được nói trong audio mẫu.
2. Bật GPU trên Google Colab
Truy cập:
Tạo notebook mới, sau đó chọn:
Runtime → Change runtime type → T4 GPU → Save

Mỗi khối lệnh dưới đây được đặt trong một ô Colab riêng và chạy lần lượt từ trên xuống.
3. Cài đặt VoxCPM2
Ô 1: Cài thư viện
%pip install -q -U voxcpm soundfile

Nếu Colab yêu cầu khởi động lại phiên, hãy bấm Restart session rồi tiếp tục với ô tiếp theo.
Ô 2: Tải model VoxCPM2
import os
import re
import subprocess
import numpy as np
import soundfile as sf
from voxcpm import VoxCPM
from google.colab import files
from IPython.display import Audio, display
model = VoxCPM.from_pretrained(
"openbmb/VoxCPM2",
device="cuda",
optimize=False,
load_denoiser=False,
)
SAMPLE_RATE = model.tts_model.sample_rate
print("Đã tải VoxCPM2 thành công")

Ở lần chạy đầu tiên, Colab phải tải model nên có thể mất vài phút.
4. Upload giọng mẫu
Ô 3: Upload và chuẩn hóa audio
File mẫu các bạn nên để từ 15 – 20 giây, và phải sao chép đúng những gì file mẫu đọc ra văn bản để sử dụng ở tiếp theo nhé
uploaded = files.upload()
REF_UPLOAD = next(iter(uploaded))
REF_FILE = "/content/giong_mau.wav"
subprocess.run([
"ffmpeg", "-y",
"-i", REF_UPLOAD,
"-ac", "1",
"-ar", "16000",
REF_FILE
], check=True)
print("Đã chuẩn hóa giọng mẫu")
display(Audio(REF_FILE))
Sau khi chạy, Colab sẽ yêu cầu chọn file audio từ máy tính. Trình phát audio sẽ xuất hiện để nghe lại giọng mẫu.
5. Nhập lời của audio mẫu
Ô 4: Khai báo transcript
REF_TEXT = """
Nhập chính xác phần lời được nói trong file giọng mẫu vào đây.
""".strip()
REF_TEXT phải khớp với audio mẫu. Nếu audio nói ba câu thì cần nhập đủ cả ba câu, đúng thứ tự và hạn chế sai từ.

Đây là dữ liệu giúp VoxCPM2 clone giọng chính xác hơn.
6. Upload chương truyện
Tạo 1 file txt chứa toàn bộ nội dung cần đọc theo giọng muốn clone và kiểm tra:
- Có dấu câu đầy đủ.
- Không chứa quảng cáo hoặc địa chỉ website.
- Không có ký tự lạ.
- Các con số khó đọc nên được viết thành chữ.
- Các đoạn văn nên cách nhau bằng một dòng trống.
Ô 5: Upload và chia truyện thành đoạn
CHAPTER_NAME = "chuong_01"
uploaded = files.upload()
TEXT_FILE = next(iter(uploaded))
with open(TEXT_FILE, "r", encoding="utf-8-sig") as f:
STORY_TEXT = f.read().strip()
sentences = re.split(r"(?<=[.!?…])s+", STORY_TEXT)
chunks = []
current = ""
for sentence in sentences:
sentence = sentence.strip()
candidate = f"{current} {sentence}".strip()
if len(candidate) <= 350:
current = candidate
else:
if current:
chunks.append(current)
current = sentence
if current:
chunks.append(current)
print("Tên chương:", CHAPTER_NAME)
print("Số ký tự:", len(STORY_TEXT))
print("Số đoạn cần tạo:", len(chunks))
Không nên đưa cả chương truyện vào model trong một lần. Chia thành các đoạn khoảng 350 ký tự giúp giọng ổn định hơn và giảm khả năng bị rè hoặc tăng tốc bất thường.
7. Tạo giọng đọc cho toàn bộ chương
Ô 6: Chạy VoxCPM2
OUTPUT_DIR = f"/content/{CHAPTER_NAME}_chunks"
os.makedirs(OUTPUT_DIR, exist_ok=True)
all_audio = []
for index, text in enumerate(chunks):
chunk_file = f"{OUTPUT_DIR}/chunk_{index + 1:04d}.wav"
print(f"Đang đọc đoạn {index + 1}/{len(chunks)}")
if os.path.exists(chunk_file):
wav, _ = sf.read(chunk_file)
else:
wav = model.generate(
text=text,
prompt_wav_path=REF_FILE,
prompt_text=REF_TEXT,
reference_wav_path=REF_FILE,
cfg_value=2.0,
inference_timesteps=10,
)
wav = np.asarray(wav).squeeze()
sf.write(chunk_file, wav, SAMPLE_RATE)
all_audio.append(np.asarray(wav).squeeze())
pause = np.zeros(
int(SAMPLE_RATE * 0.45),
dtype=np.float32
)
all_audio.append(pause)
ORIGINAL_FILE = f"/content/{CHAPTER_NAME}_goc.wav"
sf.write(
ORIGINAL_FILE,
np.concatenate(all_audio),
SAMPLE_RATE
)
print("Đã hoàn thành:", ORIGINAL_FILE)
Thời gian xử lý phụ thuộc vào độ dài chương truyện và GPU được Google Colab cấp.

8. Nghe kết quả
Ô 7: Phát audio
display(Audio(ORIGINAL_FILE))
Nên kiểm tra phần đầu, giữa và cuối chương để phát hiện:
- Từ bị đọc sai.
- Đoạn bị rè.
- Khoảng nghỉ chưa hợp lý.
- Tốc độ đọc quá nhanh hoặc quá chậm.
9. Điều chỉnh tốc độ và xuất MP3
Ô 8: Chỉnh tốc độ
SPEED = 1.05
FINAL_FILE = f"/content/{CHAPTER_NAME}_hoan_chinh.mp3"
subprocess.run([
"ffmpeg", "-y",
"-i", ORIGINAL_FILE,
"-filter:a", f"atempo={SPEED}",
"-codec:a", "libmp3lame",
"-b:a", "192k",
FINAL_FILE
], check=True)
print("Đã xuất:", FINAL_FILE)
display(Audio(FINAL_FILE))
Có thể thay đổi tốc độ như sau:
| Giá trị | Kết quả |
|---|---|
0.95 | Chậm hơn 5% |
1.00 | Giữ nguyên |
1.05 | Nhanh hơn 5% |
1.10 | Nhanh hơn 10% |
1.15 | Nhanh hơn 15% |
Đối với truyện kể, tốc độ 1.00 đến 1.10 thường phù hợp.
Nếu muốn thay đổi tốc độ, chỉ cần sửa SPEED rồi chạy lại ô 8. Không cần tạo lại giọng từ đầu.
10. Tải audio về máy
Ô 9: Download MP3
files.download(ORIGINAL_FILE)
Nếu trình duyệt không tự tải file:
- Bấm biểu tượng thư mục ở cạnh trái Colab.
- Tìm file có tên như
chuong_01_hoan_chinh.mp3. - Bấm dấu ba chấm bên cạnh file.
- Chọn Download.
Nên tải file về ngay sau khi hoàn thành vì dữ liệu trong Google Colab chỉ được lưu tạm thời.
11. Đọc file tiếp theo
Nếu Colab vẫn đang hoạt động và model chưa bị ngắt, không cần chạy lại từ đầu.
Để đọc chương mới:
- Chạy lại ô 5. từ ô 5 các bạn bấm chạy lại để upload file đọc tiếp theo và tiếp tục các bước để tải về.
- Đổi tên chương:
CHAPTER_NAME = "chuong_02"
- Upload file TXT của chương mới.
- Chạy lại ô 6, ô 7, ô 8 và ô 9.
Không cần upload lại giọng mẫu và không cần tải lại model.
12. Ngày hôm sau có phải làm lại không?
File lưu trong thư mục /content của Google Colab là dữ liệu tạm thời. Khi phiên làm việc bị ngắt, model, giọng mẫu và audio đã tạo có thể bị xóa.
Khi quay lại vào ngày hôm sau, thông thường cần:
- Bật lại T4 GPU.
- Chạy lại ô 1 và ô 2.
- Upload lại giọng mẫu.
- Nhập lại
REF_TEXT. - Upload chương truyện mới.
- Chạy tạo audio.
Do đó, nên giữ file giọng mẫu trên máy và tải tất cả chương đã hoàn thành về ngay sau khi tạo.
13. Một số lỗi thường gặp
Lỗi unexpected keyword argument 'seed'
Xóa tham số:
seed=42
Lỗi model is not defined
Phiên Colab đã bị khởi động lại. Chạy lại từ ô 1.
Lỗi hết bộ nhớ GPU
Khởi động lại phiên Colab và giảm độ dài mỗi đoạn từ 350 xuống khoảng 250 ký tự.
Giọng clone không giống
Hãy dùng audio mẫu:
- Dài khoảng 10–20 giây.
- Không có nhạc nền.
- Không có tiếng người khác.
- Ít tiếng vang.
- Có transcript chính xác.
Giọng bị rè hoặc tăng tốc
Giảm độ dài mỗi đoạn xuống 250–300 ký tự hoặc đổi:
cfg_value=1.6
Kết luận
VoxCPM2 là một lựa chọn đáng chú ý để tạo giọng đọc và clone giọng tiếng Việt miễn phí trên Google Colab. Chỉ với một đoạn audio mẫu ngắn, người dùng có thể chuyển cả chương truyện thành MP3 mà không cần sở hữu GPU mạnh.
Mã nguồn và tài liệu chính thức:
VoxCPM2 sử dụng giấy phép Apache 2.0, nhưng người dùng vẫn phải bảo đảm có quyền sử dụng nội dung truyện và giọng nói được nhân bản.





















