Voice Translator
TsgcAIVoiceTranslator は、ユーザーが話している間に音声を翻訳します。マイクの音声を WebSocket 経由で OpenAI gpt-realtime-translate にストリーミングし、翻訳された音声を届いた順に再生し、発話内容と翻訳結果のライブ文字起こしを通知します。
TsgcAIVoiceTranslator は、ユーザーが話している間に音声を翻訳します。マイクの音声を WebSocket 経由で OpenAI gpt-realtime-translate にストリーミングし、翻訳された音声を届いた順に再生し、発話内容と翻訳結果のライブ文字起こしを通知します。
リアルタイムの音声から音声への翻訳コンポーネントです。API キーと翻訳先の言語を設定し、Start を呼び出して話すだけです。モデルが入力言語を自動で判定するため、ほかに設定するものはありません。
TsgcAIVoiceTranslator
ライブ音声翻訳
マイクとスピーカーを備えた Windows。Linux と macOS では独自のオーディオを使用します。
エディション。TsgcAIVoiceTranslator は、リアルタイム音声エージェント TsgcAIVoiceAgent と同じ sgcAI と sgcWebSockets Enterprise に含まれます。sgcAI は単体で完結しており、コンポーネントの土台となる sgcWebSockets Core ランタイムも同梱しています。Delphi 7 から Delphi 13 と C++ Builder で利用できます。
API キーと翻訳先の言語を設定し、文字起こしイベントを割り当てて、Start を呼び出します。
uses
sgcWebSocket_Types, sgcAI_VoiceTranslator;
procedure TForm1.StartTranslator;
begin
oTranslator := TsgcAIVoiceTranslator.Create(Self);
oTranslator.ApiKey := 'sk-...';
oTranslator.Language := 'es'; // speak any language, hear Spanish
oTranslator.NotifyEvents := neAsynchronous;
oTranslator.OnInputTranscript := DoInputTranscript;
oTranslator.OnOutputTranscript := DoOutputTranscript;
oTranslator.OnError := DoError;
oTranslator.Start; // microphone in, translated speech out
end;
procedure TForm1.DoInputTranscript(Sender: TObject; const aDelta: string);
begin
memoSource.Text := memoSource.Text + aDelta; // what was said
end;
procedure TForm1.DoOutputTranscript(Sender: TObject; const aDelta: string);
begin
memoTarget.Text := memoTarget.Text + aDelta; // the translation
end;
procedure TForm1.DoError(Sender: TObject; const aError: string);
begin
ShowMessage(aError);
end;
procedure TForm1.SwitchLanguage;
begin
oTranslator.Language := 'fr'; // applied to the running session
end;
// includes: sgcWebSocket_Types.hpp, sgcAI_VoiceTranslator.hpp
void TForm1::StartVoiceTranslator()
{
oTranslator = new TsgcAIVoiceTranslator(this);
oTranslator->ApiKey = "sk-...";
oTranslator->Language = "es";
oTranslator->NotifyEvents = neAsynchronous;
oTranslator->OnInputTranscript = DoInputTranscript;
oTranslator->OnOutputTranscript = DoOutputTranscript;
oTranslator->OnError = DoError;
oTranslator->Start();
}
void __fastcall TForm1::DoInputTranscript(TObject *Sender, const String aDelta)
{
memoSource->Text = memoSource->Text + aDelta;
}
void __fastcall TForm1::DoOutputTranscript(TObject *Sender, const String aDelta)
{
memoTarget->Text = memoTarget->Text + aDelta;
}
void __fastcall TForm1::DoError(TObject *Sender, const String aError)
{
ShowMessage(aError);
}
デバイスをオフにすると、ファイル、電話回線、ネットワークストリームの音声を翻訳できます。SendAudio で 24 kHz モノラルの PCM16 を送り、翻訳された音声は OnOutputAudio から受け取ります。
procedure TForm1.StartCustomAudio(const aPCM16: TBytes);
begin
oTranslator.AudioCapture := False; // no microphone
oTranslator.AudioPlayback := False; // no speakers
oTranslator.OnOutputAudio := DoOutputAudio;
oTranslator.Start;
oTranslator.SendAudio(aPCM16); // PCM16, 24 kHz, mono
end;
procedure TForm1.DoOutputAudio(Sender: TObject; const aPCM16: TBytes);
begin
// translated speech, PCM16 24 kHz mono, in order
end;
最もよく使うメンバーです。
Start は接続し、セッションの確立を待ち、翻訳先の言語を送信してデバイスを開きます。Stop は保留中の音声を送り切ってセッションを閉じます。Active は Object Inspector から同じ操作を行います。
翻訳先の言語コードで、既定値は en です。セッションの実行中に新しい値を代入すると、変更は直ちにモデルへ送られ、再接続は不要です。
ApiKey、Model(gpt-realtime-translate)、BaseURL。SafetyIdentifier は、ハッシュ化したユーザー ID を OpenAI-Safety-Identifier ヘッダーで送信します。
AudioCapture と AudioPlayback はマイクとスピーカーを使います。これらを False にして、代わりに SendAudio へ 24 kHz モノラルの PCM16 を渡します。
OnInputTranscript は発話内容のテキストを、OnOutputTranscript は翻訳結果のテキストを、いずれも差分として順次通知します。
OnSessionCreated、翻訳音声の各チャンクを受け取る OnOutputAudio、OnSessionClosed、OnError。NotifyEvents では、GUI アプリケーション向けの非同期イベントか、サービス向けの同期なしを選びます。
プラットフォーム。マイクとスピーカーの経路は Windows のオーディオ API を使います。Linux と macOS では AudioCapture と AudioPlayback を False にして、SendAudio と OnOutputAudio でオーディオを自分で処理してください。デバイスをオンのままにすると、Start はそのプラットフォームで利用できるオーディオデバイスがないことを OnError で報告します。
このコンポーネントが利用するサービスの一次情報です。