| import torch |
| import torchaudio |
| import soundfile as sf |
| from omnivoice import OmniVoice, OmniVoiceGenerationConfig |
|
|
| |
| model = OmniVoice.from_pretrained( |
| "/home/thien/chum/omnivoice", |
| device_map="cuda:0", |
| dtype=torch.float16, |
| ) |
|
|
| |
| |
| voice_prompt = model.create_voice_clone_prompt( |
| ref_audio="/home/thien/chum/omnivoice/manhdung.wav", |
| ref_text="trường quê em do bố của em xây kỹ nên sạch sẽ đẹp đẽ và rất kiên cố mọi người ơi", |
| ) |
|
|
| print("Đang xử lý text và infer từng câu...") |
| |
| |
| config = OmniVoiceGenerationConfig(num_step=32, guidance_scale=5) |
|
|
| raw_text = """ |
| Trước đó khi xem anime, mấy cái ấn "bá bá bá" trong một giây có vẻ rất đơn giản, nhưng khi thực sự bắt tay vào làm, Kyushin mới cảm nhận được độ khó. |
| |
| Một mặt phải chú ý giữ đúng tư thế kết ấn, mặt khác còn phải phân tâm kiểm soát Chakra vận chuyển trong cơ thể. Kyushin mới luyện tập một lần đã cảm thấy đầu đầy mồ hôi. |
| |
| Bất quá cũng may, cơ thể này không hoàn toàn không có nền tảng. Người tộc Uzumaki có thể chất tốt hơn, tương tự ở khoảng bốn, năm tuổi đã bắt đầu tu luyện. |
| |
| Kyushin hiện tại tròn sáu tuổi rưỡi. Với nền tảng từ ký ức tu luyện trước đó, việc tu luyện tiếp theo dần trở nên thuận lợi. |
| |
| Tuy nhiên, hiện tại Kyushin chỉ có thể đảm bảo kết ấn theo đúng trình tự mới tương đối thuận lợi. Nếu xáo trộn trình tự, đôi khi còn bị dừng lại. |
| |
| Đây là vấn đề về độ thuần thục. Các vị trưởng lão trong tộc yêu cầu đối với "Ấn" là, bất kể trình tự nào, khi kết ấn, Chakra trong cơ thể phải tự động vận chuyển. Như vậy mới được coi là hợp cách, mới có thể tiến vào bước tiếp theo học tập nhẫn thuật cơ bản... |
| |
| """ |
|
|
| |
| import re |
| import numpy as np |
|
|
| |
| sentences = [s.strip() for s in re.split(r'(?<=[.!?\n])\s+', raw_text) if s.strip()] |
|
|
| audio_chunks = [] |
| for i, sentence in enumerate(sentences): |
| print(f"Đang đọc câu {i+1}/{len(sentences)}: {sentence}") |
| audio = model.generate( |
| text=sentence, |
| language="vietnamese", |
| voice_clone_prompt=voice_prompt, |
| generation_config=config, |
| speed=1.2, |
| ) |
| audio_chunks.append(audio[0]) |
| |
| silence = np.zeros(int(24000 * 0.1), dtype=np.float32) |
| audio_chunks.append(silence) |
|
|
| |
| final_audio = np.concatenate(audio_chunks) |
|
|
| sf.write("output.wav", final_audio, 24000) |
| print("Đã lưu xong file output.wav!") |
|
|
|
|