Orux AI / 모델 노트
Qwen3 TTS: 수업 원문을 잃지 않고 나누기
Qwen3 TTS용 이중언어 수업 원고를 로컬에서 나눕니다. 3개 실제 출력과 원문 재결합, 초과 거부 검사 및 양식 한도·Credits 요금을 제공합니다. UTF-16 길이와 청구 문자를 구분하며 발음 실험으로 포장하지 않습니다. 실제 음성 생성은 하지 않았습니다.

목차
음성 합성 전에 수업 원고를 검토 가능한 부분으로 나눈다
영어 지시에서 중국어 관찰 과제로 넘어가는 야외 수업 원고는 음성 양식에 통째로 넣기 전에 준비가 필요합니다. 문구를 보존하고 각 입력을 정한 경계 안에 두며 순서를 쉽게 검토해야 합니다. 글자 수마다 기계적으로 자르면 지시 중간이 끊길 수 있습니다.
이 글은 현재 Orux qwen3-tts-flash를 위한 오프라인 Python 분할기를 제공하고 speech-2.8-hd를 다른 목록 선택지로 확인합니다. 예제는 순서가 있는 세 텍스트를 만들고 모든 원문 문자를 보존하며 너무 긴 부분을 자르거나 버리지 않고 거부합니다. 음성을 생성하거나 발음을 평가하지 않았고 자연스러운 이중언어 낭독을 보장하지 않습니다. 이는 후속 청취 과제입니다.
두 양식의 낭독 필드는 최대 600자를 선언합니다. 도구는 로컬 UTF-16 코드 단위 상한을 쓰며 데모는 80으로 줄였습니다. 보수적인 예제 준비 규칙이지 과금 문자 정의나 모델의 원래 문맥 한도가 아닙니다. 입력 제한·문자 표현·청구 수량을 구분하세요.

원고를 넘기기 전에 두 양식을 확인한다
qwen3-tts-flash는 input과 Cherry 음성을, speech-2.8-hd는 text와 male-qn-qingse 음성을 열거합니다. 2026년 11월 1일 공개 양식에서 두 텍스트 한도는 600입니다. 같은 음성 과제라도 이 구체적 계약의 필드명을 서로 바꾸면 안 됩니다.
다른 곳에서 소개한 모든 음성, 고급 발음 마크업, 문장별 언어 지정이나 정확한 타이밍 지원은 확인하지 않았습니다. 음성 이름이 특정 영단어나 중국어 지명을 정확히 읽는 증거는 아닙니다. 생성 승인 뒤 짧은 승인 원고를 청취하고, 제안 원고를 이미 통과한 녹음처럼 다루지 마세요.
원고를 검토용 원본으로 보관합니다. 텍스트 산출물에는 부분 번호와 정확한 문구를, 나중 음성 목록에는 승인 음성과 결과 파일을 연결합니다. 교사가 한 문장을 바꾸면 재생성 대상을 찾기 쉽지만 새 녹음과 기존 녹음이 매끄럽게 이어진다는 보장은 없습니다.
이 작은 도구의 문장 경계를 정의한다
중국어 마침표·물음표·느낌표와, 공백이나 문자열 끝이 뒤따르는 영어 마침표·물음표·느낌표를 인식합니다. 따라서 단순 소수 3.5의 점은 나누지 않습니다. 모든 약어·인용·언어 관습을 이해하는 도구가 아니므로 사람이 분할을 검토해야 합니다.
공백을 다듬거나 구두점을 정규화하지 않고 조각을 만들며, 상한 안에서 이웃 조각을 합칩니다. 한 조각이 너무 길면 억지로 자르지 않고 오류를 내어 수동 편집을 요청합니다. 모든 문서의 자동 수락보다 원문 보존과 단순한 경계를 우선합니다.
공백뿐인 입력은 거부하며 상한은 1~600의 정수입니다. 데모의 80은 짧은 예제가 여러 부분 경로를 실행하도록 고른 값입니다. 권장 오디오 길이나 80단위의 초 환산이 아닙니다. 속도·쉼·실제 길이는 녹음에서 측정해야 합니다.
완전한 분할기를 로컬에서 실행한다
chunk_lesson.py로 저장하고 python3 chunk_lesson.py를 실행하세요. 표준 라이브러리만 쓰고 API Key나 통신이 필요 없습니다. 식물을 꺾지 않고 잎을 관찰하는 가상 교육 원고이며 모델 응답, 수업 실험이나 실제 교사 녹음이 아닙니다.
"""Local text preparation only. No TTS request or billed-character measurement."""
import json
import re
def units(text):
return len(text.encode("utf-16-le")) // 2
def chunks(text, limit=600):
if not isinstance(text, str) or not text.strip():
raise ValueError("A nonempty lesson is required")
if type(limit) is not int or not 1 <= limit <= 600:
raise ValueError("Choose a local cap from 1 to 600 UTF-16 units")
pieces = re.split(r"(?<=[。!?])|(?<=[.!?])(?=\s|$)", text)
result, current = [], ""
for piece in pieces:
if not piece:
continue
if units(piece) > limit:
raise ValueError("One segment exceeds cap; edit it manually")
if current and units(current + piece) > limit:
result.append(current)
current = ""
current += piece
if current:
result.append(current)
assert "".join(result) == text
assert all(0 < units(x) <= limit for x in result)
return result
if __name__ == "__main__":
lesson = ("Welcome to the field lesson. Observe the leaf before naming it. "
"先观察叶子的边缘,再记录它的形状。不要采摘植物。 "
"Write one observation in your notebook. Then compare it with your partner.")
output = chunks(lesson, limit=80)
assert len(chunks("Ready 🌿. Next step.", 12)) == 2
assert units("🌿") == 2 and len("🌿") == 1
for text, limit in [("x" * 81, 80), ("", 80), (lesson, 601)]:
try:
chunks(text, limit)
except ValueError:
pass
else:
raise AssertionError("Invalid lesson accepted")
print(json.dumps([{"part": i+1, "utf16_units": units(t), "text": t}
for i, t in enumerate(output)], ensure_ascii=False, indent=2))실제 로컬 출력:
[
{
"part": 1,
"utf16_units": 63,
"text": "Welcome to the field lesson. Observe the leaf before naming it."
},
{
"part": 2,
"utf16_units": 65,
"text": " 先观察叶子的边缘,再记录它的形状。不要采摘植物。 Write one observation in your notebook."
},
{
"part": 3,
"utf16_units": 35,
"text": " Then compare it with your partner."
}
]세 부분은 63, 65, 35 UTF-16 코드 단위입니다. 선행 공백은 의도적이며 순서대로 합치면 원문이 정확히 복원됩니다. 코드는 동일성과 각 상한을 확인합니다. 공백을 제거한 뒤 같은 완전 보존 성질을 주장하지 마세요. 후속 앱이 정리를 요구하면 별도 변환으로 검사하고 승인합니다.
잎 이모지는 Python에서 Unicode 코드 포인트 하나지만 UTF-16에서는 두 단위입니다. 어느 수도 발화량·음성 길이·청구서를 측정하지 않습니다. 눈에 보이는 기호가 낭독 지시로 적합하지 않을 수도 있으므로 실제 수업에서 승인된 단어로 풀어쓸지는 따로 결정하세요.
실제 문서 전에 의미 있는 실패를 검사한다
80 상한의 81단위 부분, 빈 원고와 600을 넘는 상한을 거부합니다. 이모지 예제가 12 상한에서 두 부분이 되는지도 확인합니다. 로컬 계약과 표현 경계 검사이지 원격 TTS, 한 언어 전체나 모든 파일 형식의 검증은 아닙니다.
한 문장이 길면 의미 있는 지점에서 두 명확한 지시로 편집하세요. 안전 지시나 끝 조건을 조용히 버리지 말고, 새 승인 원고로 다시 실행해 합친 텍스트와 순서를 교사가 확인해야 합니다. 수량 통과만으로 원래 수업 의도가 보존되지는 않습니다.
약어에서 불편하게 끊기거나 닫는 인용 부호가 다음 부분에 남을 수도 있습니다. 이는 검토할 이유이지 문장 의미 이해의 증거가 아닙니다. 복잡한 인용·전문 기호는 규칙을 고치거나 수동으로 정돈한 뒤 생성에 넘기세요.
청구 단위를 비교하되 원고의 청구서를 꾸미지 않는다
| Orux alias | 단위 | 청구1000자당 Credits | 가정 청구3000자 Credits |
|---|---|---|---|
| qwen3-tts-flash | per_kchar | 2.1669 | 6.5007 |
| speech-2.8-hd | per_kchar | 10.2084 | 30.6252 |
좌우로 밀어 전체 표를 확인하세요.
2026년 11월 1일 확인한 Orux 일반 공개 가격이며 1 Credit=$0.005입니다. 두 행은 정확한 수량 계산과 추가 최소요금 0을 명시합니다. 마지막 열은 가정한 청구 3,000자를 곱한 값이지 세 부분의 실측·견적이 아닙니다. 실제 청구 수량을 얻기 위한 음성 요청은 없었습니다.
Python 문자열 길이·UTF-16 길이·UTF-8 바이트 수를 곱하고 정산 금액이라고 부르지 마세요. 도구 상한은 텍스트 준비를 위한 것이고 실제 음성 사용량은 별도 계량입니다. 분할은 요청 수와 검토 작업도 바꿉니다. 특히 조건이 바뀐 뒤라면 합성 승인 전에 현재 가격과 정확한 견적을 확인해야 합니다.
요율 차이로 음성 선호·발음 정확도·길이·품질 승자를 정할 수 없습니다. 공식 제공자 가격을 독립 비교하지 않아 절감을 주장하지 않습니다. 과제에 맞는 후보를 고르고 승인된 적절한 표본을 들어보세요. 저렴하지만 쓸 수 없는 녹음은 완성된 수업 자료가 아닙니다.
텍스트 검증과 후속 청취를 분리한다
실제 수업에는 부분 번호, 정확한 원문, 요청 alias와 승인 음성을 목록으로 보관하세요. 생성 뒤 파일 URL과 검토 상태를 추가하되 원문을 덮어쓰지 않습니다. 빠진 단어·고유명·거슬리는 쉼·부분 사이 전달 차이를 듣고, 시간과 순서는 실제 미디어에서 확인합니다.
구조화 추출(영어)은 누락값을 꾸미지 않고 보존하며 상담 집계 입력(영어)은 어떤 필드가 로컬을 떠나는지 통제합니다. 이 글은 승인된 모든 문구를 유지하면서 입력을 제한되고 검토 가능하게 만드는 다른 계약입니다. 번거로운 텍스트를 조용히 지우는 것은 해결책이 아닙니다.
가격 확인일:2026-11-01. 출처 및 현재 모델 페이지: 공개 모델 목록, 공개 모델 목록, Python 문서, Python 문서. qwen3-tts-flash, speech-2.8-hd.
FAQ
양식의 600자가 모델 자체 한도인가요?
아닙니다. 확인한 두 Orux 양식 필드의 선언 한도이지 모든 API·배포·모델 문맥의 한도가 아닙니다. 로컬 도구는 명시한 UTF-16 단위를 씁니다. 다른 경로로 긴 원고를 보내기 전에 현재 계약을 확인하세요.
공백이나 구두점이 바뀌나요?
정의한 변환에서는 아닙니다. 조각을 다듬지 않고 원문 재결합을 검사합니다. 선행 공백은 의도적입니다. 후속 정규화는 별도 변경으로 검토하고 더 이상 성립하지 않는 완전 보존을 주장하지 마세요.
두 음성의 이중언어 낭독을 입증했나요?
아닙니다. 음성을 생성하거나 평가하지 않았습니다. 양식·문자 경계·가격만 확인했습니다. 발음·누락·전환은 별도 승인된 청취가 필요하며 음성 이름이나 길이 검사로 증명할 수 없습니다.
63, 65, 35가 청구 문자 수인가요?
아닙니다. 로컬 예제의 UTF-16 단위 길이이지 실측 음성 사용량이나 청구서가 아닙니다. 가격 표는 명시적 가정 수량으로 산술을 보여 주며 오프라인 도구가 확인하지 않은 실제 계량 규칙을 주장하지 않습니다.
한 부분이 너무 길면 어떻게 하나요?
의미 있는 지점에서 수동 편집하고 새 원고를 승인한 뒤 다시 검사하세요. 도구는 지시를 자르거나 버리지 않고 거부합니다. 약어와 인용도 검토해야 합니다. 단순 구두점 규칙은 수업 의미를 이해하는 언어 파서가 아닙니다.
하나의 API로 이 모델들을 사용하세요
채팅·이미지·비디오·오디오 모델을 지원하는 OpenAI 호환 API이며 Credits로 과금됩니다.
관련 글
전체 글 보기 →
Qwen3 RAG 비용 계산: 임베딩과 재순위화 후보 예산
후보 20·50·100개의 Qwen3 비용을 비교하세요. Orux Credits 가격, 달러 추정치, 실행 검증된 오프라인 Python 계산기로 인덱싱과 검색 비용을 구분합니다.

이미지 API 가격 비교: 10개 모델의 1K·2K·4K 비용
2026년 10월 29일 Orux 이미지 모델 10개의 장당·100장 Credits, 해상도, 참조 한도와 과거 시간을 비교합니다. Google Standard·Batch와 Alibaba 지역 가격, Qwen Pro 할증을 구분하고 Python 및 유효 이미지당 비용으로 선택합니다.

DeepSeek API 가격: 피크 시간과 Flash·Pro 비교
DeepSeek V4.1 Flash와 V4 Pro의 공식·Orux Credits 가격을 비교합니다. 평일·주말·중국 공휴일 요금 차이, 천 회와 주간 평균 비용, Python 호출·예약 코드, 과거 중국어 문구 재실행과 캐시 조건을 살펴 실제 일정에 맞는 선택을 돕습니다.