최신 등록 버전은 pub.dev 기준 0.1.7입니다. typecast_dart 0.1.7 이상을 사용하세요. 프로덕션 Flutter 앱에서는 장기 API 키를 배포되는 클라이언트에 직접 포함하지 않는 것을 권장합니다. API 키를 비공개로 유지해야 한다면 백엔드를 통해 요청을 프록시하세요.
Dart SDK는 생성된 오디오를 바이트 데이터로 반환합니다. Flutter에서는 audioplayers 같은 오디오 재생 패키지에 이 바이트 데이터를 전달해 바로 재생할 수 있습니다.하나의 AudioPlayer 인스턴스를 공유하고, 각 응답을 메모리에서 바로 재생합니다:
자체 프록시를 통해 요청하는 경우 baseUrl을 프록시 엔드포인트로 설정하고 apiKey를 생략할 수 있습니다. API 키가 비어 있거나 없으면 SDK는 X-API-KEY 헤더를 보내지 않습니다. 기본 Typecast 호스트로 요청할 때는 API 키가 계속 필요합니다.
API 키 없는 프록시
final client = TypecastClient( baseUrl: 'https://your-proxy.example.com',);
final response = await client.textToSpeech( const TtsRequest( voiceId: 'tc_672c5f5ce59fac2a48faeaee', text: '모든 것이 잘 될 거예요.', model: TtsModel.ssfmV30, prompt: SmartPrompt( previousText: '방금 최고의 소식을 들었어요!', nextText: '축하하고 싶어요!', ), ),);await player.play(BytesSource(response.audioData));
프리셋 값으로 감정을 명시적으로 설정합니다:
final response = await client.textToSpeech( const TtsRequest( voiceId: 'tc_672c5f5ce59fac2a48faeaee', text: '이 기능들을 보여드리게 되어 정말 기쁩니다!', model: TtsModel.ssfmV30, prompt: PresetPrompt( emotionPreset: EmotionPreset.happy, emotionIntensity: 1.5, ), ),);await player.play(BytesSource(response.audioData));
한 voice로 읽는 문장 안에 쉼만 넣고 싶다면 텍스트에 pause markup을 직접 작성합니다. <|5s|>, <|1s|>, <|0.3s|>, <|0.34413s|>처럼 쓰며 값은 초 단위이고 반드시 s로 끝납니다. 별도 pause 함수를 호출하지 않아도 텍스트만 보고 쉼 위치를 확인할 수 있습니다.
final audio = await client .composeSpeech() .defaults(ComposerSettings(voiceId: 'tc_672c5f5ce59fac2a48faeaee', model: TTSModel.ssfmV30)) .say('안녕하세요<|5s|>반갑습니다<|1s|>오늘<|2s|>날씨는 어떤 것 같으세요?') .generate();
한 파일 안에서 서로 다른 voice나 구간별 pitch, tempo, prompt, seed 같은 옵션을 조합해야 할 때 사용합니다. composer는 각 구간을 WAV로 생성하고 앞뒤 무음 PCM 샘플을 trim한 뒤 합성합니다. MP3가 필요하면 먼저 WAV를 생성한 다음 앱 또는 서버 파이프라인에서 변환하세요.
final audio = await client .composeSpeech() .defaults(const ComposerSettings(voiceId: 'tc_672c5f5ce59fac2a48faeaee', model: TtsModel.ssfmV30)) .say('Hello there') .pause(5) .say( 'Nice to meet you', overrides: const ComposerSettings( voiceId: 'tc_60e5426de8b95f1d3000d7b5', output: Output(audioPitch: 2), ), ) .say('Today') .pause(2) .say('How does the weather feel?') .generate();await File('conversation.wav').writeAsBytes(audio.audioData);
WAV 스트리밍 형식: 32000 Hz, 16비트, 모노 PCM. 첫 번째 청크에 44바이트 WAV 헤더(size = 0xFFFFFFFF)가 포함되며, 이후 청크는 원시 PCM 데이터만 포함합니다. 위 예제는 파일 저장을 피하고 전체 스트림을 메모리에서 재생합니다. 진짜 저지연 청크 단위 재생이 필요하다면 audioplayers 대신 PCM 청크를 직접 공급할 수 있는 스트리밍 오디오 엔진을 사용하세요.