VOICE / DOCUMENTATION
サイトに、声の入口を。
開発プレビュー:一般受付は停止中です。以下は受付開始後の利用例です。現在の可否は
GET /v1/health の enabled を確認してください。既存の入力欄に音声入力を足す、小さなブラウザSDKです。利用者の登録やAPIキーは不要。SDKは外部依存なしで、ファイル変換とリアルタイム通信を扱います。
録音ファイルから文字に
サイトへ次のコードを追加します。HTTPS(開発時はlocalhost)で利用してください。
<input type="file" id="audio" accept="audio/*">
<textarea id="text"></textarea>
<script type="module">
import { transcribe } from 'https://voice.2-38.com/sdk.js';
const input = document.querySelector('#audio');
const output = document.querySelector('#text');
input.onchange = async () => {
if (!input.files[0]) return;
if (!confirm('話者の許可を得た音声を外部サービスへ送信します。よろしいですか?')) return;
input.disabled = true;
try {
output.value = await transcribe(input.files[0]);
} catch (error) {
alert(error.message);
} finally { input.disabled = false; }
};
</script>マイクからリアルタイムに
開始・終了ボタンと明示的な同意を用意し、イベントを結びます。
import { startRecording } from 'https://voice.2-38.com/sdk.js';
// ユーザーの同意を確認したクリックイベント内から実行。
const recording = await startRecording({
onTranscript: ({ text }) => { output.value = text; },
onError: (error) => { console.error(error.message); },
onStop: () => { /* ボタンを開始状態へ戻す */ }
});
// 終了ボタンから呼び出す。最後の文字を確定し、マイクを解放。
await recording.stop();入力欄にボタンを追加する
<textarea id="note"></textarea>
<button id="voice" type="button">音声で入力</button>
<script type="module">
import { mountVoiceInput } from 'https://voice.2-38.com/sdk.js';
const voice = mountVoiceInput({
target: '#note', button: '#voice',
onError: error => alert(error.message)
});
// ページ終了時やコンポーネント破棄時には呼び出してください。
window.addEventListener('pagehide', () => voice.destroy());
</script>開始時に送信への同意を確認します。録音中にもう一度ボタンを押すと終了し、既存の文章に結果を追記します。
HTTP API
curl https://voice.2-38.com/v1/transcriptions \
-H 'Content-Type: audio/wav' \
--data-binary @audio.wav
# 戻り値の id で結果を取得
curl https://voice.2-38.com/v1/transcriptions/RETURNED_ID直接送信はPCM16 little-endian・16kHz・モノラルのWAVに対応。multipartではなくraw bodyです。ブラウザSDKは読める音声形式をこの形式へ変換します。60秒以内。音声URL指定には対応していません。
POST /v1/transcriptions→ 202、idとstatusGET /v1/transcriptions/:id→ 進捗、完了時はtextwss://voice.2-38.com/v1/realtime→ ready待機後、PCM16 binaryを送信。停止は{"type":"stop"}GET /v1/limits→ サーバーの上限設定
結果のIDは秘密の閲覧キーです。第三者への共有やログ出力を避けてください。結果は1時間で失効します。全件一覧のAPIはありません。
上限とエラー
1回60秒、同じIPは1日10回、全体で1日120回、同時4件。429は回数・混雑上限、503は受付停止または一時的な障害です。無制限に再試行せず、待ってから再試行してください。無料の試験運用で、可用性は保証しません。
組み込み時の注意
音声を送信すること・外部サービスで処理されることを利用者に説明し、話者の権利と同意を確認してください。マイク許可が拒否された場合やネットワーク障害を表示し、画面終了時に録音を停止してください。対応形式はブラウザによって異なります。