{
  "aboutHtml": "<p>Qwen-Audio-3.0-TTS-Plus chuyển văn bản viết thành lời nói giàu biểu cảm, với phiên bản Plus tập trung vào chất lượng tổng hợp, độ tự nhiên và cách thể hiện giọng chi tiết. Qwen nêu các ứng dụng chính là sáng tạo nội dung, sách nói, lồng tiếng phim và video, cùng sản xuất giọng nói chuyên nghiệp. Hồ sơ cập nhật của mô hình mô tả hỗ trợ rộng hơn cho ngôn ngữ ít tài nguyên và phương ngữ Trung Quốc, tăng tính chân thực của phương ngữ và kiểm soát mạnh hơn đối với cảm xúc, sắc thái, tính cách, tốc độ nói, âm lượng và phong cách. Nhà phát triển cũng công bố cải thiện độ rõ, độ phân giải và độ ổn định trong điều kiện âm học có nhiễu hoặc tiếng vang.</p><p>Plus là phiên bản tập trung vào chất lượng của họ chuyển văn bản thành giọng nói này; Flash được định vị riêng cho tương tác thời gian thực. Chuẩn bị lời thuyết minh dưới dạng kịch bản để đọc, xác định đối tượng nghe, nhịp độ và hướng cảm xúc. Với đoạn sách nói, yêu cầu minh họa có thể dùng phát âm rõ, nhịp vừa phải và sự ấm áp tiết chế; với thuyết minh video, có thể yêu cầu mở đầu nghiêm túc rồi giải thích năng động hơn. Đây là lựa chọn cách thể hiện những lời đã cung cấp. Mô hình tổng hợp giọng nói, không phải dịch vụ chép lời hay công cụ tạo một cảnh thị giác hoàn chỉnh.</p><p>Các giọng hệ thống chính thức cho Plus gồm Long An Ling Xin, được mô tả là ấm áp và đồng cảm, cùng Long An Lu Feng, được mô tả là tươi sáng và vui vẻ. Cả hai được liệt kê cho tiếng Quan thoại và tiếng Anh. Nhà phát triển cũng cung cấp hơn 500 giọng nền cho phiên bản này, có bản nghe thử để đánh giá trước khi chọn. Nhà phát triển khuyến nghị giọng hệ thống để tổng hợp nhất quán hơn. Chọn giọng trong danh sách Plus cụ thể và khớp ngôn ngữ kịch bản với các ngôn ngữ mà giọng đó hỗ trợ; giọng Flash không thể thay thế chỉ vì thuộc cùng họ rộng hơn.</p><p>Mô hình hỗ trợ nhân bản giọng từ mẫu. Các ngôn ngữ giọng nhân bản được công bố gồm tiếng Trung, Anh, Nhật, Hàn, Nga, Pháp, Đức, Bồ Đào Nha, Thái, Indonesia, Việt, Tây Ban Nha, Ý, Mã Lai, Filipino và Ả Rập. Các biến thể tiếng Trung gồm Quan thoại, Quảng Đông, Trùng Khánh, Đông Bắc, Cam Túc, Quý Châu, Chiết Giang, Hà Bắc, Hà Nam, Hồ Bắc, Hồ Nam, Giang Tây, Ninh Ba, Ninh Hạ, Thanh Đảo, Thiểm Tây, Sơn Tây, Sơn Đông, Thượng Hải, Tứ Xuyên và Vân Nam, với phương ngữ được điều khiển bằng chỉ dẫn. Bảng mô hình của nhà phát triển phân biệt nhân bản với tạo giọng từ mô tả văn bản: Plus hỗ trợ nhân bản, còn chế độ thiết kế giọng riêng đó không được hỗ trợ.</p><p>Mẫu tham chiếu phù hợp để nhân bản là lời nói rõ ở tốc độ bình thường, không có nhạc, tiếng ồn nền, người nói chồng lấn hay tiếng hát. Nhà phát triển khuyến nghị 10–20 giây và cho phép tối đa 60 giây, trong tệp không lớn hơn 10 MB. Định dạng tham chiếu là WAV 16-bit, MP3 và M4A, với tần số lấy mẫu tối thiểu 16 kHz. Cần ít nhất năm giây lời nói rõ liên tục, và các khoảng ngừng còn lại không nên dài hơn hai giây. Với âm thanh stereo, chỉ kênh đầu tiên được xử lý. Mã định danh giọng được tạo gắn với Plus và được dùng để tổng hợp khi sẵn sàng; để tái tạo cùng mẫu tham chiếu qua Flash phải tạo riêng một giọng Flash.</p><p>Chỉ dẫn bằng ngôn ngữ tự nhiên có thể định hình sắc thái, nhịp độ, cảm xúc và âm sắc của cả giọng hệ thống lẫn giọng nhân bản. Dùng mô tả âm thanh cụ thể thay vì yêu cầu mơ hồ về một giọng hay. Thẻ cảm xúc nội tuyến có thể đặt phong cách trong kịch bản, còn thẻ biểu đạt có thể chèn hiệu ứng giọng ở vị trí đã chọn. Ví dụ, [serious] thay đổi cách thể hiện phần sau, còn [sighing] chèn tiếng thở dài mà không thay đổi phong cách cảm xúc xung quanh. Thẻ điều khiển có hiệu lực đến thẻ điều khiển tiếp theo hoặc khi tự động phân đoạn câu. Tính năng dùng thẻ này chỉ được công bố cho truyền trực tuyến một chiều, nên có phạm vi khác với chỉ dẫn dùng khi nhập văn bản hai chiều.</p><p>Các lựa chọn đầu ra của nhà phát triển là PCM, WAV, MP3 và Opus, với tần số lấy mẫu được liệt kê là 8.000, 16.000, 22.050, 24.000, 44.100 và 48.000 Hz. MP3 và 22.050 Hz là mặc định được công bố. Âm lượng có thể đặt từ 0 đến 100, tốc độ và cao độ từ 0,5 đến 2,0; MP3 và Opus còn cho phép bitrate từ 6 đến 510 kbps. Chọn dạng biểu diễn cần cho phát lại hoặc biên tập, rồi giữ các thiết lập nhất quán giữa các phần của tác phẩm dài. Đầu ra truyền trực tuyến gồm khung âm thanh và siêu dữ liệu câu, với dấu thời gian từng từ cho các giọng đủ điều kiện, bao gồm giọng nhân bản.</p><p>Luồng nhập văn bản WebSocket được công bố cho phép 20.000 ký tự mỗi thông điệp và tổng cộng 200.000 ký tự, đồng thời yêu cầu khoảng thời gian giữa các lần gửi không lớn hơn 23 giây. Luồng có thể nhận toàn bộ kịch bản hoặc các đoạn văn bản theo thứ tự và kết thúc khi nhập xong. Nhà phát triển cũng công bố việc hủy lượt tổng hợp hiện tại. Đây là các giới hạn và hành vi của giao thức đó, không phải giới hạn thời lượng tạo âm thanh áp dụng chung. Với lời thuyết minh dài, tổ chức kịch bản thành các phần mạch lạc và giữ thứ tự cùng văn bản bên cạnh âm thanh tạo ra để lắp ghép và rà soát nhất quán.</p><p>Về phát âm, nhà phát triển cung cấp gợi ý ngôn ngữ đích, chú thích pinyin và thay thế văn bản để xử lý cách đọc không mong muốn của chữ số, chữ viết tắt, ký hiệu hoặc từ. SSML là chế độ đánh dấu riêng có ràng buộc về điều kiện sử dụng: tài liệu Qwen hỗ trợ cho giọng nhân bản trong lời gọi không truyền trực tuyến hoặc truyền trực tuyến một chiều, và chỉ một lần gửi văn bản khi bật. Tài liệu không xác lập SSML cho mọi giọng hệ thống hay cho truyền trực tuyến hai chiều. Quy trình Plus thực tế bắt đầu với giọng tương thích và kịch bản hoàn chỉnh, sau đó thêm lựa chọn thể hiện và phát âm chính xác cho đoạn được đọc.</p>",
  "aboutText": "Qwen-Audio-3.0-TTS-Plus chuyển văn bản viết thành lời nói giàu biểu cảm, với phiên bản Plus tập trung vào chất lượng tổng hợp, độ tự nhiên và cách thể hiện giọng chi tiết. Qwen nêu các ứng dụng chính là sáng tạo nội dung, sách nói, lồng tiếng phim và video, cùng sản xuất giọng nói chuyên nghiệp. Hồ sơ cập nhật của mô hình mô tả hỗ trợ rộng hơn cho ngôn ngữ ít tài nguyên và phương ngữ Trung Quốc, tăng tính chân thực của phương ngữ và kiểm soát mạnh hơn đối với cảm xúc, sắc thái, tính cách, tốc độ nói, âm lượng và phong cách. Nhà phát triển cũng công bố cải thiện độ rõ, độ phân giải và độ ổn định trong điều kiện âm học có nhiễu hoặc tiếng vang.\n\nPlus là phiên bản tập trung vào chất lượng của họ chuyển văn bản thành giọng nói này; Flash được định vị riêng cho tương tác thời gian thực. Chuẩn bị lời thuyết minh dưới dạng kịch bản để đọc, xác định đối tượng nghe, nhịp độ và hướng cảm xúc. Với đoạn sách nói, yêu cầu minh họa có thể dùng phát âm rõ, nhịp vừa phải và sự ấm áp tiết chế; với thuyết minh video, có thể yêu cầu mở đầu nghiêm túc rồi giải thích năng động hơn. Đây là lựa chọn cách thể hiện những lời đã cung cấp. Mô hình tổng hợp giọng nói, không phải dịch vụ chép lời hay công cụ tạo một cảnh thị giác hoàn chỉnh.\n\nCác giọng hệ thống chính thức cho Plus gồm Long An Ling Xin, được mô tả là ấm áp và đồng cảm, cùng Long An Lu Feng, được mô tả là tươi sáng và vui vẻ. Cả hai được liệt kê cho tiếng Quan thoại và tiếng Anh. Nhà phát triển cũng cung cấp hơn 500 giọng nền cho phiên bản này, có bản nghe thử để đánh giá trước khi chọn. Nhà phát triển khuyến nghị giọng hệ thống để tổng hợp nhất quán hơn. Chọn giọng trong danh sách Plus cụ thể và khớp ngôn ngữ kịch bản với các ngôn ngữ mà giọng đó hỗ trợ; giọng Flash không thể thay thế chỉ vì thuộc cùng họ rộng hơn.\n\nMô hình hỗ trợ nhân bản giọng từ mẫu. Các ngôn ngữ giọng nhân bản được công bố gồm tiếng Trung, Anh, Nhật, Hàn, Nga, Pháp, Đức, Bồ Đào Nha, Thái, Indonesia, Việt, Tây Ban Nha, Ý, Mã Lai, Filipino và Ả Rập. Các biến thể tiếng Trung gồm Quan thoại, Quảng Đông, Trùng Khánh, Đông Bắc, Cam Túc, Quý Châu, Chiết Giang, Hà Bắc, Hà Nam, Hồ Bắc, Hồ Nam, Giang Tây, Ninh Ba, Ninh Hạ, Thanh Đảo, Thiểm Tây, Sơn Tây, Sơn Đông, Thượng Hải, Tứ Xuyên và Vân Nam, với phương ngữ được điều khiển bằng chỉ dẫn. Bảng mô hình của nhà phát triển phân biệt nhân bản với tạo giọng từ mô tả văn bản: Plus hỗ trợ nhân bản, còn chế độ thiết kế giọng riêng đó không được hỗ trợ.\n\nMẫu tham chiếu phù hợp để nhân bản là lời nói rõ ở tốc độ bình thường, không có nhạc, tiếng ồn nền, người nói chồng lấn hay tiếng hát. Nhà phát triển khuyến nghị 10–20 giây và cho phép tối đa 60 giây, trong tệp không lớn hơn 10 MB. Định dạng tham chiếu là WAV 16-bit, MP3 và M4A, với tần số lấy mẫu tối thiểu 16 kHz. Cần ít nhất năm giây lời nói rõ liên tục, và các khoảng ngừng còn lại không nên dài hơn hai giây. Với âm thanh stereo, chỉ kênh đầu tiên được xử lý. Mã định danh giọng được tạo gắn với Plus và được dùng để tổng hợp khi sẵn sàng; để tái tạo cùng mẫu tham chiếu qua Flash phải tạo riêng một giọng Flash.\n\nChỉ dẫn bằng ngôn ngữ tự nhiên có thể định hình sắc thái, nhịp độ, cảm xúc và âm sắc của cả giọng hệ thống lẫn giọng nhân bản. Dùng mô tả âm thanh cụ thể thay vì yêu cầu mơ hồ về một giọng hay. Thẻ cảm xúc nội tuyến có thể đặt phong cách trong kịch bản, còn thẻ biểu đạt có thể chèn hiệu ứng giọng ở vị trí đã chọn. Ví dụ, [serious] thay đổi cách thể hiện phần sau, còn [sighing] chèn tiếng thở dài mà không thay đổi phong cách cảm xúc xung quanh. Thẻ điều khiển có hiệu lực đến thẻ điều khiển tiếp theo hoặc khi tự động phân đoạn câu. Tính năng dùng thẻ này chỉ được công bố cho truyền trực tuyến một chiều, nên có phạm vi khác với chỉ dẫn dùng khi nhập văn bản hai chiều.\n\nCác lựa chọn đầu ra của nhà phát triển là PCM, WAV, MP3 và Opus, với tần số lấy mẫu được liệt kê là 8.000, 16.000, 22.050, 24.000, 44.100 và 48.000 Hz. MP3 và 22.050 Hz là mặc định được công bố. Âm lượng có thể đặt từ 0 đến 100, tốc độ và cao độ từ 0,5 đến 2,0; MP3 và Opus còn cho phép bitrate từ 6 đến 510 kbps. Chọn dạng biểu diễn cần cho phát lại hoặc biên tập, rồi giữ các thiết lập nhất quán giữa các phần của tác phẩm dài. Đầu ra truyền trực tuyến gồm khung âm thanh và siêu dữ liệu câu, với dấu thời gian từng từ cho các giọng đủ điều kiện, bao gồm giọng nhân bản.\n\nLuồng nhập văn bản WebSocket được công bố cho phép 20.000 ký tự mỗi thông điệp và tổng cộng 200.000 ký tự, đồng thời yêu cầu khoảng thời gian giữa các lần gửi không lớn hơn 23 giây. Luồng có thể nhận toàn bộ kịch bản hoặc các đoạn văn bản theo thứ tự và kết thúc khi nhập xong. Nhà phát triển cũng công bố việc hủy lượt tổng hợp hiện tại. Đây là các giới hạn và hành vi của giao thức đó, không phải giới hạn thời lượng tạo âm thanh áp dụng chung. Với lời thuyết minh dài, tổ chức kịch bản thành các phần mạch lạc và giữ thứ tự cùng văn bản bên cạnh âm thanh tạo ra để lắp ghép và rà soát nhất quán.\n\nVề phát âm, nhà phát triển cung cấp gợi ý ngôn ngữ đích, chú thích pinyin và thay thế văn bản để xử lý cách đọc không mong muốn của chữ số, chữ viết tắt, ký hiệu hoặc từ. SSML là chế độ đánh dấu riêng có ràng buộc về điều kiện sử dụng: tài liệu Qwen hỗ trợ cho giọng nhân bản trong lời gọi không truyền trực tuyến hoặc truyền trực tuyến một chiều, và chỉ một lần gửi văn bản khi bật. Tài liệu không xác lập SSML cho mọi giọng hệ thống hay cho truyền trực tuyến hai chiều. Quy trình Plus thực tế bắt đầu với giọng tương thích và kịch bản hoàn chỉnh, sau đó thêm lựa chọn thể hiện và phát âm chính xác cho đoạn được đọc.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "d1d46945e00cb9f01ad2cad0a2faf951a3da105ae0eba4b3ea835c4bef6f99a3",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">Qwen: Qwen-Audio-3.0-TTS Plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen/qwen-audio-3.0-tts-plus</code><button type=\"button\" id=\"copy-id\">Sao chép ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Các phần của thẻ mô hình\"><button type=\"button\" data-card-jump=\"overview\">Bắt đầu</button><button type=\"button\" data-card-jump=\"methods\">Đầu vào &amp; phương thức</button><button type=\"button\" data-card-jump=\"pricing\">Bảng giá</button><button type=\"button\" data-card-jump=\"examples\">Ví dụ</button><button type=\"button\" data-card-jump=\"results\">Kết quả</button><button type=\"button\" data-card-jump=\"aliases\">Bí danh</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Phương thức API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|qwen%2Fqwen-audio-3.0-tts-plus\">Tổng hợp giọng nói</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Bắt đầu</h3><p class=\"mdesc-full\">Qwen-Audio-3.0-TTS-Plus là mô hình chuyển văn bản thành giọng nói của Qwen, tập trung vào âm thanh chi tiết, tự nhiên và giàu biểu cảm cho thuyết minh, sách nói và lồng tiếng. Mô hình hỗ trợ giọng đặt sẵn hoặc giọng nhân bản dành riêng cho phiên bản, đầu ra truyền trực tuyến, cùng chỉ dẫn hoặc thẻ để định hình cách thể hiện.</p><dl class=\"card-io\" data-card-io><div><dt>Đầu vào được chấp nhận</dt><dd>Văn bản</dd></div><div><dt>Kết quả</dt><dd>Âm thanh</dd></div></dl><details class=\"card-about\"><summary>Về mô hình</summary><p class=\"note-s\" data-model-method-boundary>Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus chuyển văn bản viết thành lời nói giàu biểu cảm, với phiên bản Plus tập trung vào chất lượng tổng hợp, độ tự nhiên và cách thể hiện giọng chi tiết. Qwen nêu các ứng dụng chính là sáng tạo nội dung, sách nói, lồng tiếng phim và video, cùng sản xuất giọng nói chuyên nghiệp. Hồ sơ cập nhật của mô hình mô tả hỗ trợ rộng hơn cho ngôn ngữ ít tài nguyên và phương ngữ Trung Quốc, tăng tính chân thực của phương ngữ và kiểm soát mạnh hơn đối với cảm xúc, sắc thái, tính cách, tốc độ nói, âm lượng và phong cách. Nhà phát triển cũng công bố cải thiện độ rõ, độ phân giải và độ ổn định trong điều kiện âm học có nhiễu hoặc tiếng vang.</p><p>Plus là phiên bản tập trung vào chất lượng của họ chuyển văn bản thành giọng nói này; Flash được định vị riêng cho tương tác thời gian thực. Chuẩn bị lời thuyết minh dưới dạng kịch bản để đọc, xác định đối tượng nghe, nhịp độ và hướng cảm xúc. Với đoạn sách nói, yêu cầu minh họa có thể dùng phát âm rõ, nhịp vừa phải và sự ấm áp tiết chế; với thuyết minh video, có thể yêu cầu mở đầu nghiêm túc rồi giải thích năng động hơn. Đây là lựa chọn cách thể hiện những lời đã cung cấp. Mô hình tổng hợp giọng nói, không phải dịch vụ chép lời hay công cụ tạo một cảnh thị giác hoàn chỉnh.</p><p>Các giọng hệ thống chính thức cho Plus gồm Long An Ling Xin, được mô tả là ấm áp và đồng cảm, cùng Long An Lu Feng, được mô tả là tươi sáng và vui vẻ. Cả hai được liệt kê cho tiếng Quan thoại và tiếng Anh. Nhà phát triển cũng cung cấp hơn 500 giọng nền cho phiên bản này, có bản nghe thử để đánh giá trước khi chọn. Nhà phát triển khuyến nghị giọng hệ thống để tổng hợp nhất quán hơn. Chọn giọng trong danh sách Plus cụ thể và khớp ngôn ngữ kịch bản với các ngôn ngữ mà giọng đó hỗ trợ; giọng Flash không thể thay thế chỉ vì thuộc cùng họ rộng hơn.</p><p>Mô hình hỗ trợ nhân bản giọng từ mẫu. Các ngôn ngữ giọng nhân bản được công bố gồm tiếng Trung, Anh, Nhật, Hàn, Nga, Pháp, Đức, Bồ Đào Nha, Thái, Indonesia, Việt, Tây Ban Nha, Ý, Mã Lai, Filipino và Ả Rập. Các biến thể tiếng Trung gồm Quan thoại, Quảng Đông, Trùng Khánh, Đông Bắc, Cam Túc, Quý Châu, Chiết Giang, Hà Bắc, Hà Nam, Hồ Bắc, Hồ Nam, Giang Tây, Ninh Ba, Ninh Hạ, Thanh Đảo, Thiểm Tây, Sơn Tây, Sơn Đông, Thượng Hải, Tứ Xuyên và Vân Nam, với phương ngữ được điều khiển bằng chỉ dẫn. Bảng mô hình của nhà phát triển phân biệt nhân bản với tạo giọng từ mô tả văn bản: Plus hỗ trợ nhân bản, còn chế độ thiết kế giọng riêng đó không được hỗ trợ.</p><p>Mẫu tham chiếu phù hợp để nhân bản là lời nói rõ ở tốc độ bình thường, không có nhạc, tiếng ồn nền, người nói chồng lấn hay tiếng hát. Nhà phát triển khuyến nghị 10–20 giây và cho phép tối đa 60 giây, trong tệp không lớn hơn 10 MB. Định dạng tham chiếu là WAV 16-bit, MP3 và M4A, với tần số lấy mẫu tối thiểu 16 kHz. Cần ít nhất năm giây lời nói rõ liên tục, và các khoảng ngừng còn lại không nên dài hơn hai giây. Với âm thanh stereo, chỉ kênh đầu tiên được xử lý. Mã định danh giọng được tạo gắn với Plus và được dùng để tổng hợp khi sẵn sàng; để tái tạo cùng mẫu tham chiếu qua Flash phải tạo riêng một giọng Flash.</p><p>Chỉ dẫn bằng ngôn ngữ tự nhiên có thể định hình sắc thái, nhịp độ, cảm xúc và âm sắc của cả giọng hệ thống lẫn giọng nhân bản. Dùng mô tả âm thanh cụ thể thay vì yêu cầu mơ hồ về một giọng hay. Thẻ cảm xúc nội tuyến có thể đặt phong cách trong kịch bản, còn thẻ biểu đạt có thể chèn hiệu ứng giọng ở vị trí đã chọn. Ví dụ, [serious] thay đổi cách thể hiện phần sau, còn [sighing] chèn tiếng thở dài mà không thay đổi phong cách cảm xúc xung quanh. Thẻ điều khiển có hiệu lực đến thẻ điều khiển tiếp theo hoặc khi tự động phân đoạn câu. Tính năng dùng thẻ này chỉ được công bố cho truyền trực tuyến một chiều, nên có phạm vi khác với chỉ dẫn dùng khi nhập văn bản hai chiều.</p><p>Các lựa chọn đầu ra của nhà phát triển là PCM, WAV, MP3 và Opus, với tần số lấy mẫu được liệt kê là 8.000, 16.000, 22.050, 24.000, 44.100 và 48.000 Hz. MP3 và 22.050 Hz là mặc định được công bố. Âm lượng có thể đặt từ 0 đến 100, tốc độ và cao độ từ 0,5 đến 2,0; MP3 và Opus còn cho phép bitrate từ 6 đến 510 kbps. Chọn dạng biểu diễn cần cho phát lại hoặc biên tập, rồi giữ các thiết lập nhất quán giữa các phần của tác phẩm dài. Đầu ra truyền trực tuyến gồm khung âm thanh và siêu dữ liệu câu, với dấu thời gian từng từ cho các giọng đủ điều kiện, bao gồm giọng nhân bản.</p><p>Luồng nhập văn bản WebSocket được công bố cho phép 20.000 ký tự mỗi thông điệp và tổng cộng 200.000 ký tự, đồng thời yêu cầu khoảng thời gian giữa các lần gửi không lớn hơn 23 giây. Luồng có thể nhận toàn bộ kịch bản hoặc các đoạn văn bản theo thứ tự và kết thúc khi nhập xong. Nhà phát triển cũng công bố việc hủy lượt tổng hợp hiện tại. Đây là các giới hạn và hành vi của giao thức đó, không phải giới hạn thời lượng tạo âm thanh áp dụng chung. Với lời thuyết minh dài, tổ chức kịch bản thành các phần mạch lạc và giữ thứ tự cùng văn bản bên cạnh âm thanh tạo ra để lắp ghép và rà soát nhất quán.</p><p>Về phát âm, nhà phát triển cung cấp gợi ý ngôn ngữ đích, chú thích pinyin và thay thế văn bản để xử lý cách đọc không mong muốn của chữ số, chữ viết tắt, ký hiệu hoặc từ. SSML là chế độ đánh dấu riêng có ràng buộc về điều kiện sử dụng: tài liệu Qwen hỗ trợ cho giọng nhân bản trong lời gọi không truyền trực tuyến hoặc truyền trực tuyến một chiều, và chỉ một lần gửi văn bản khi bật. Tài liệu không xác lập SSML cho mọi giọng hệ thống hay cho truyền trực tuyến hai chiều. Quy trình Plus thực tế bắt đầu với giọng tương thích và kịch bản hoàn chỉnh, sau đó thêm lựa chọn thể hiện và phát âm chính xác cho đoạn được đọc.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Có trên Ailoot · đầu vào &amp; phương thức</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Tổng hợp giọng nói</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code></dd></div><div><dt>Đầu ra</dt><dd><code>audio</code></dd></div><div><dt>Định dạng đầu ra</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>qwen/qwen-audio-3.0-tts-plus</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Độ dài tối thiểu: 1</div><div>Đơn vị: ký tự Unicode</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>longanlingxin, longanlufeng</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>mp3</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Tổ hợp tư liệu đầu vào</summary><p class=\"note-s\"><b>text_to_speech</b> · Bắt buộc: input</p></details><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>model, input, voice, response_format</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>voice_ids</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>longanlingxin, longanlufeng</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>response_format</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>mp3</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>max_input_characters</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>null</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>other_options</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>false</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>input</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>text</td></tr></tbody></table></div><p>Vòng đời: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Chọn giọng nói chính xác từ hồ sơ mô hình này.</p><p class=\"note-s\">Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Lượng tính phí</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Lượng tính phí\"><span class=\"card-cell-label\">Lượng tính phí</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Ultra</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Lượng tính phí\"><span class=\"card-cell-label\">Lượng tính phí</span>Mỗi điểm mã Unicode được tính là một ký tự, bao gồm ký tự Hán (Han).</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi 1K ký tự đầu vào</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Ký tự đầu vào</span> <b>$0.04</b> <span class=\"price-unit\">mỗi 1K ký tự đầu vào</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>Chi tiết giá cước tham chiếu</h4><p class=\"note-s\">Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Qwen: Qwen-Audio-3.0-TTS Plus</summary><h4>Giá theo cấu hình</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Điều kiện tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Qwen: Qwen-Audio-3.0-TTS Plus · Cấu hình mặc định</th><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>Cấu hình mặc định</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Ký tự đầu vào</span> <b>0,00004 US$</b> <span class=\"price-unit\">mỗi ký tự đầu vào</span></div></td></tr></tbody></table></div></details></div><p class=\"note-s\">Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. <a href=\"/docs/vi/billing/reserve/\">Cách hoạt động của cơ chế tạm giữ và quyết toán →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot Ultra · Tổng hợp giọng nói</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-2362-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2362-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2362-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2362-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen/qwen-audio-3.0-tts-plus&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;longanlingxin&quot;, &quot;longanlufeng&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Nhận và lưu kết quả</h3><h4>Ailoot Ultra · Tổng hợp giọng nói</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>Lượt đọc nội dung khác</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-2363-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2363-panel-0\" aria-selected=\"true\" tabindex=\"0\">Thư viện phương tiện</button><button class=\"cg-tab\" id=\"model-code-2363-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2363-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Trạng thái tác vụ</button><button class=\"cg-tab\" id=\"model-code-2363-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2363-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Chi tiết tài nguyên</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2363-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2363-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2363-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2363-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2363-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2363-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Lưu tất cả kết quả đã hoàn tất</h5><p class=\"note-s\">Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.</p><p class=\"note-s\">Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh.</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>bytes</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Lỗi và bước tiếp theo</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Phản hồi</th><th>Điều kiện</th><th>Bước tiếp theo</th></tr></thead><tbody><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span><code>server_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Bí danh</h3><h4>Bí danh mô hình</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=qwen%2Fqwen-audio-3.0-tts-plus&amp;route=Ultra&amp;caller=qwen%2Fqwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen/qwen-audio-3.0-tts-plus</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\">Dùng các đường dẫn phương thức hiển thị ở trên.</p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=qwen%2Fqwen-audio-3.0-tts-plus&amp;route=Ultra&amp;caller=qwen%2Fqwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen/qwen-audio-3.0-tts-plus</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|qwen%2Fqwen-audio-3.0-tts-plus",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen/qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Chọn giọng nói chính xác từ hồ sơ mô hình này.",
            "Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau."
          ],
          "input": {
            "content_type": "application/json",
            "input": "văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "longanlingxin",
              "longanlufeng"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00004",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "f97459395132c904c87d",
            "label": "Qwen: Qwen-Audio-3.0-TTS Plus",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Cấu hình mặc định"
                },
                "label": "Qwen: Qwen-Audio-3.0-TTS Plus · Cấu hình mặc định",
                "units": [
                  {
                    "amount": "0.00004",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "c9d83494b95201f9ee8ab13d",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen/qwen-audio-3.0-tts-plus\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"longanlingxin\", \"longanlufeng\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00004",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.04000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00004",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "qwen/qwen-audio-3.0-tts-plus",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "849a65c47b60eb087f336aa5e6745e4fc475b09204565fc9e6e1aa5469b934c8",
    "input_html_sha256": "8d2913b3ff8c8c109254502ba20085c5f0adcb96f5df2a0cc564019f416f485d",
    "private_audit_sha256": "550c4c6a548cede74f448285668d6415fe05867d95ebe5f877ad0849d7f10236",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/qwen-qwen-audio-3-0-tts-plus/",
    "description": "Qwen-Audio-3.0-TTS-Plus là mô hình chuyển văn bản thành giọng nói của Qwen, tập trung vào âm thanh chi tiết, tự nhiên và giàu biểu cảm cho thuyết minh, sách nói và lồng tiếng. Mô hình hỗ trợ giọng đặt sẵn hoặc giọng nhân bản dành riêng cho phiên bản, đầu ra truyền trực tuyến, cùng chỉ dẫn hoặc thẻ để định hình cách thể hiện.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/qwen-qwen-audio-3-0-tts-plus/index.md",
    "title": "Qwen: Qwen-Audio-3.0-TTS Plus — Ailoot",
    "url": "https://ailoot.ai/models/vi/qwen-qwen-audio-3-0-tts-plus/"
  },
  "rawModel": {
    "about": "Qwen-Audio-3.0-TTS-Plus chuyển văn bản viết thành lời nói giàu biểu cảm, với phiên bản Plus tập trung vào chất lượng tổng hợp, độ tự nhiên và cách thể hiện giọng chi tiết. Qwen nêu các ứng dụng chính là sáng tạo nội dung, sách nói, lồng tiếng phim và video, cùng sản xuất giọng nói chuyên nghiệp. Hồ sơ cập nhật của mô hình mô tả hỗ trợ rộng hơn cho ngôn ngữ ít tài nguyên và phương ngữ Trung Quốc, tăng tính chân thực của phương ngữ và kiểm soát mạnh hơn đối với cảm xúc, sắc thái, tính cách, tốc độ nói, âm lượng và phong cách. Nhà phát triển cũng công bố cải thiện độ rõ, độ phân giải và độ ổn định trong điều kiện âm học có nhiễu hoặc tiếng vang.\n\nPlus là phiên bản tập trung vào chất lượng của họ chuyển văn bản thành giọng nói này; Flash được định vị riêng cho tương tác thời gian thực. Chuẩn bị lời thuyết minh dưới dạng kịch bản để đọc, xác định đối tượng nghe, nhịp độ và hướng cảm xúc. Với đoạn sách nói, yêu cầu minh họa có thể dùng phát âm rõ, nhịp vừa phải và sự ấm áp tiết chế; với thuyết minh video, có thể yêu cầu mở đầu nghiêm túc rồi giải thích năng động hơn. Đây là lựa chọn cách thể hiện những lời đã cung cấp. Mô hình tổng hợp giọng nói, không phải dịch vụ chép lời hay công cụ tạo một cảnh thị giác hoàn chỉnh.\n\nCác giọng hệ thống chính thức cho Plus gồm Long An Ling Xin, được mô tả là ấm áp và đồng cảm, cùng Long An Lu Feng, được mô tả là tươi sáng và vui vẻ. Cả hai được liệt kê cho tiếng Quan thoại và tiếng Anh. Nhà phát triển cũng cung cấp hơn 500 giọng nền cho phiên bản này, có bản nghe thử để đánh giá trước khi chọn. Nhà phát triển khuyến nghị giọng hệ thống để tổng hợp nhất quán hơn. Chọn giọng trong danh sách Plus cụ thể và khớp ngôn ngữ kịch bản với các ngôn ngữ mà giọng đó hỗ trợ; giọng Flash không thể thay thế chỉ vì thuộc cùng họ rộng hơn.\n\nMô hình hỗ trợ nhân bản giọng từ mẫu. Các ngôn ngữ giọng nhân bản được công bố gồm tiếng Trung, Anh, Nhật, Hàn, Nga, Pháp, Đức, Bồ Đào Nha, Thái, Indonesia, Việt, Tây Ban Nha, Ý, Mã Lai, Filipino và Ả Rập. Các biến thể tiếng Trung gồm Quan thoại, Quảng Đông, Trùng Khánh, Đông Bắc, Cam Túc, Quý Châu, Chiết Giang, Hà Bắc, Hà Nam, Hồ Bắc, Hồ Nam, Giang Tây, Ninh Ba, Ninh Hạ, Thanh Đảo, Thiểm Tây, Sơn Tây, Sơn Đông, Thượng Hải, Tứ Xuyên và Vân Nam, với phương ngữ được điều khiển bằng chỉ dẫn. Bảng mô hình của nhà phát triển phân biệt nhân bản với tạo giọng từ mô tả văn bản: Plus hỗ trợ nhân bản, còn chế độ thiết kế giọng riêng đó không được hỗ trợ.\n\nMẫu tham chiếu phù hợp để nhân bản là lời nói rõ ở tốc độ bình thường, không có nhạc, tiếng ồn nền, người nói chồng lấn hay tiếng hát. Nhà phát triển khuyến nghị 10–20 giây và cho phép tối đa 60 giây, trong tệp không lớn hơn 10 MB. Định dạng tham chiếu là WAV 16-bit, MP3 và M4A, với tần số lấy mẫu tối thiểu 16 kHz. Cần ít nhất năm giây lời nói rõ liên tục, và các khoảng ngừng còn lại không nên dài hơn hai giây. Với âm thanh stereo, chỉ kênh đầu tiên được xử lý. Mã định danh giọng được tạo gắn với Plus và được dùng để tổng hợp khi sẵn sàng; để tái tạo cùng mẫu tham chiếu qua Flash phải tạo riêng một giọng Flash.\n\nChỉ dẫn bằng ngôn ngữ tự nhiên có thể định hình sắc thái, nhịp độ, cảm xúc và âm sắc của cả giọng hệ thống lẫn giọng nhân bản. Dùng mô tả âm thanh cụ thể thay vì yêu cầu mơ hồ về một giọng hay. Thẻ cảm xúc nội tuyến có thể đặt phong cách trong kịch bản, còn thẻ biểu đạt có thể chèn hiệu ứng giọng ở vị trí đã chọn. Ví dụ, [serious] thay đổi cách thể hiện phần sau, còn [sighing] chèn tiếng thở dài mà không thay đổi phong cách cảm xúc xung quanh. Thẻ điều khiển có hiệu lực đến thẻ điều khiển tiếp theo hoặc khi tự động phân đoạn câu. Tính năng dùng thẻ này chỉ được công bố cho truyền trực tuyến một chiều, nên có phạm vi khác với chỉ dẫn dùng khi nhập văn bản hai chiều.\n\nCác lựa chọn đầu ra của nhà phát triển là PCM, WAV, MP3 và Opus, với tần số lấy mẫu được liệt kê là 8.000, 16.000, 22.050, 24.000, 44.100 và 48.000 Hz. MP3 và 22.050 Hz là mặc định được công bố. Âm lượng có thể đặt từ 0 đến 100, tốc độ và cao độ từ 0,5 đến 2,0; MP3 và Opus còn cho phép bitrate từ 6 đến 510 kbps. Chọn dạng biểu diễn cần cho phát lại hoặc biên tập, rồi giữ các thiết lập nhất quán giữa các phần của tác phẩm dài. Đầu ra truyền trực tuyến gồm khung âm thanh và siêu dữ liệu câu, với dấu thời gian từng từ cho các giọng đủ điều kiện, bao gồm giọng nhân bản.\n\nLuồng nhập văn bản WebSocket được công bố cho phép 20.000 ký tự mỗi thông điệp và tổng cộng 200.000 ký tự, đồng thời yêu cầu khoảng thời gian giữa các lần gửi không lớn hơn 23 giây. Luồng có thể nhận toàn bộ kịch bản hoặc các đoạn văn bản theo thứ tự và kết thúc khi nhập xong. Nhà phát triển cũng công bố việc hủy lượt tổng hợp hiện tại. Đây là các giới hạn và hành vi của giao thức đó, không phải giới hạn thời lượng tạo âm thanh áp dụng chung. Với lời thuyết minh dài, tổ chức kịch bản thành các phần mạch lạc và giữ thứ tự cùng văn bản bên cạnh âm thanh tạo ra để lắp ghép và rà soát nhất quán.\n\nVề phát âm, nhà phát triển cung cấp gợi ý ngôn ngữ đích, chú thích pinyin và thay thế văn bản để xử lý cách đọc không mong muốn của chữ số, chữ viết tắt, ký hiệu hoặc từ. SSML là chế độ đánh dấu riêng có ràng buộc về điều kiện sử dụng: tài liệu Qwen hỗ trợ cho giọng nhân bản trong lời gọi không truyền trực tuyến hoặc truyền trực tuyến một chiều, và chỉ một lần gửi văn bản khi bật. Tài liệu không xác lập SSML cho mọi giọng hệ thống hay cho truyền trực tuyến hai chiều. Quy trình Plus thực tế bắt đầu với giọng tương thích và kịch bản hoàn chỉnh, sau đó thêm lựa chọn thể hiện và phát âm chính xác cho đoạn được đọc.",
    "alias_of": null,
    "aliases": [],
    "author": "Alibaba",
    "available": null,
    "canonical_model": "qwen/qwen-audio-3.0-tts-plus",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.04000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00004",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "qwen/qwen-audio-3.0-tts-plus",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen/qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Chọn giọng nói chính xác từ hồ sơ mô hình này.",
            "Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau."
          ],
          "input": {
            "content_type": "application/json",
            "input": "văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "longanlingxin",
              "longanlufeng"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00004",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "f97459395132c904c87d",
            "label": "Qwen: Qwen-Audio-3.0-TTS Plus",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Cấu hình mặc định"
                },
                "label": "Qwen: Qwen-Audio-3.0-TTS Plus · Cấu hình mặc định",
                "units": [
                  {
                    "amount": "0.00004",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "c9d83494b95201f9ee8ab13d",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen/qwen-audio-3.0-tts-plus\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"longanlingxin\", \"longanlufeng\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00004",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.04000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00004",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen/qwen-audio-3.0-tts-plus",
        "route_label": "Ultra"
      }
    ],
    "name": "Qwen: Qwen-Audio-3.0-TTS Plus",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "qwen-audio-3.0-tts-plus",
          "Service deployment scope": "International",
          "character_counting_rule": "Han characters incl Chinese/Japanese kanji/Korean hanja=2; other characters=1; SSML markup excluded; actual synthesized text counts",
          "maker_published_model_id": "qwen-audio-3.0-tts-plus"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.00004",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "Model ID": "qwen-audio-3.0-tts-plus",
              "Service deployment scope": "International",
              "character_counting_rule": "Han characters incl Chinese/Japanese kanji/Korean hanja=2; other characters=1; SSML markup excluded; actual synthesized text counts",
              "maker_published_model_id": "qwen-audio-3.0-tts-plus"
            },
            "key": "input_character",
            "label": "input character",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "qwen-audio-3.0-tts-plus",
          "Service deployment scope": "Mainland China",
          "character_counting_rule": "Han characters incl Chinese/Japanese kanji/Korean hanja=2; other characters=1; SSML markup excluded; actual synthesized text counts",
          "maker_published_model_id": "qwen-audio-3.0-tts-plus"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000038506",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "Model ID": "qwen-audio-3.0-tts-plus",
              "Service deployment scope": "Mainland China",
              "character_counting_rule": "Han characters incl Chinese/Japanese kanji/Korean hanja=2; other characters=1; SSML markup excluded; actual synthesized text counts",
              "maker_published_model_id": "qwen-audio-3.0-tts-plus"
            },
            "key": "input_character",
            "label": "input character",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "public_id": "qwen/qwen-audio-3.0-tts-plus",
    "short": "Qwen-Audio-3.0-TTS-Plus là mô hình chuyển văn bản thành giọng nói của Qwen, tập trung vào âm thanh chi tiết, tự nhiên và giàu biểu cảm cho thuyết minh, sách nói và lồng tiếng. Mô hình hỗ trợ giọng đặt sẵn hoặc giọng nhân bản dành riêng cho phiên bản, đầu ra truyền trực tuyến, cùng chỉ dẫn hoặc thẻ để định hình cách thể hiện."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Qwen-Audio-3.0-TTS-Plus là mô hình chuyển văn bản thành giọng nói của Qwen, tập trung vào âm thanh chi tiết, tự nhiên và giàu biểu cảm cho thuyết minh, sách nói và lồng tiếng. Mô hình hỗ trợ giọng đặt sẵn hoặc giọng nhân bản dành riêng cho phiên bản, đầu ra truyền trực tuyến, cùng chỉ dẫn hoặc thẻ để định hình cách thể hiện.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "191f6f488716b1d20fc8529566189a3881084b98f8f656adb4c1e2b2ed142c0f",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "2e27ae4e9b33918c02c38dcd2eb8ddb514085b32baf582332e098d4d60a3860f"
}
