音声フォーマット
AmiVoice API で取り扱うことができる音声データのフォーマット、および、リクエストパラメータでの設定方法について説明します。
対応している音声
AmiVoice API が対応している音声フォーマットを説明します。
エンコーディング
- Signed 16-bit PCM (リトルエンディアン、ビッグエンディアン)
- A-law (8-bit)
- mu-law (8-bit)
サンプリングレート
8kHz、11.025kHz、16kHz、22.05kHz、32kHz、44.1kHz、48kHzのサンプリングレートに対応しています。A-law、mu-law形式は、8kHz のみ対応しています。
このドキュメントの中で、11.025kHz、22.05kHzはそれぞれ、11kHz、22kHzと表記することもあります。
AmiVoice API で音声認識処理を行う音声認識エンジンは、8kHzと16kHzのサンプリングレートに対応した2種類あります。8kHzエンジンは主に電話で使われる音声に対して、16kHzはそれ以外で広く使われている音声のために用意しています。それぞれの音声認識エンジンに対応するサンプリングレートは以下の表のとおりです。
| 音声認識エンジン | 対応するサンプリングレート |
|---|---|
| 8kHzに対応した音声認識エンジン | 8kHz、11.025kHz |
| 16kHzに対応した音声認識エンジン | 16kHz、22.05kHz、32kHz、44.1kHz、48kHz |
8kHzに対応しているのは一部の音声認識エンジンです。詳細は音声認識エンジンの一覧を参照してください。
歌や楽器の演奏などとは異なり、一般に音声認識には16kHzよりも高い周波数帯域の情報は必要ありません。16kHzよりも高い周波数でサンプリングした音声を送信しても、16kHzにダウンサンプリングしてから処理されるため、サンプリングレートを16kHzよりも高くする必要はありません。ネットワークの帯域を節約したり、送信にかかる時間を減らすためにも適切なサンプリングレートで音声データを送信することをお勧めします。なお、16kHz以外のサンプリングレートでも、音声認識の精度には全く影響しません。
8k音声に対応している音声認識エンジンを利用する場合も同様に、11kHzの音声は、8kHzにダウンサンプリングされてから処 理されます。
AmiVoice TechBlogの『音声認識に必要なサンプリングレートはどのくらいか?』も参考にしてください。
チャネル数
1 または、2です。
2チャネル(ステレオ)は、Wave、Ogg、FLACなどのファイルのヘッダに音声フォーマットが含まれている"ヘッダあり"の音声ファイルの場合にのみ対応しています。ただし、ステレオ音声は、1チャネル目のみが音声認識の対象となります。
音源がステレオ音声の場合、2つのチャネルをどちらも音声認識するには、チャネルごとに別の音声認識リクエストを行ってください。
AmiVoice TechBlogの『ステレオ音声ファイルをモノラル音声ファイル×2に変換するやり方』も参考にしてください。
音声圧縮
Speex、Opus、MP3、FLACに対応しています。
人の耳でも聞き取りづらいような、強い圧縮をかけると認識精度に影響があります。以下の圧縮方式での圧縮率のガイドラインを示します。
| 圧縮方式 | ガイドライン |
|---|---|
| Speex | quality 7 以上 |
| Opus | 圧縮率 10 分の 1 程度 |
ファイルフォーマット
Wave(WAV)、Ogg、MP3、FLACに対応しています。音声フォーマットがファイルのヘッダなどに記述されているため、リクエストパラメータでの音声フォーマットの指定が不要な場合があります。詳細は、次の音声フォーマットの設定方法を 参照してください。
音声フォーマットの設定方法
音声認識のリクエスト時には、送信する音声データの音声フォーマットを指定する必要があります。Wave(WAV)、Ogg、FLACなどのコンテナファイルは、音声フォーマットがファイルのヘッダに記述されています。このような"ヘッダあり"の音声ファイルを送信する場合と、音声フォーマットがファイルのヘッダに含まれていない"ヘッダなし"の音声データを送信する場合についてそれぞれ説明します。
正しい音声フォーマットを指定してください。誤った設定をすると、結果が全く得られなかったり、音声認識、話者ダイアライゼーションの精度が低下します。
後述の音声フォーマット名は、大文字小文字を区別しません。LSB16Kとlsb16kは同じです。
ヘッダありの音声フォーマット
ファイルのヘッダなどに音声フォーマットが記述されている場合は、以下のように音声フォーマットを設定します。
インタフェース | 音声フォーマットの設定方法 |
|---|---|
| 同期・非同期 HTTP | 音声フォーマットの指定を省略できます |
| WebSocket | sコマンドの第一引数に音声データのサンプリングレートが、8kHz/11kHzの場合は、8k、16kHz以上の場合は、16kを設定してください。 |
対応している音声フォーマットとその設定方法を以下の表にまとめます。
ファイルフォーマット | エンコーディング・音声圧縮 | サンプリング周波数 | チャネル数 | 音声フォーマット名 |
|---|---|---|---|---|
| Wave | PCM Signed 16-bit little-endian (※ formatTag: 0x0001) | 8kHz, 11kHz | 1 または 2 | 8K |
| Wave | PCM Signed 16-bit little-endian (※ formatTag: 0x0001) | 16kHz以上 | 1 または 2 | 16K |
| Wave | mu-Law 8-bit (※ formatTag: 0x0007) | 8kHz | 1 または 2 | 8K |
| Wave | A-Law 8-bit (※ formatTag: 0x0006) | 8kHz | 1 または 2 | 8K |
| Ogg | Speex | 8kHz, 11kHz | 1 または 2 | 8K |
| Ogg | Speex | 16kHz以上 | 1 または 2 | 16K |
| Ogg | Opus | 8kHz, 11kHz | 1 または 2 | 8K |
| Ogg | Opus | 16kHz以上 | 1 または 2 | 16K |
| WebM | Opus | 8kHz, 11kHz | 1 または 2 | 8K |
| WebM | Opus | 16kHz以上 | 1 または 2 | 16K |
| MP3 | MP3 | 8kHz, 11kHz | 1 または 2 | 8K |
| MP3 | MP3 | 16kHz以上 | 1 または 2 | 16K |
| FLAC | FLAC | 8kHz, 11kHz | 1 または 2 | 8K |
| FLAC | FLAC | 16kHz以上 | 1 または 2 | 16K |
2チャネルある音声データの場合は、1チャネル目のみが音声認識の対象となります。
同期 HTTP インタフェースの例
wavファイルには音声フォーマットの情報が含まれており、音声フォーマットは自動的に判別されるため指定は不要です。curlコマンドを使った例は以下のとおりです。
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F a=@test-16k.wav
非同期 HTTP インタフェースの例
wavファイルには音声フォーマットの情報が含まれており、音声フォーマットは自動的に判別されるため指定は不要です。curlコマンドを使った例は以下のとおりです。
curl https://acp-api-async.amivoice.com/v2/recognitions \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F a=@test-16k.wav
エンドポイント以外は同期 HTTP インタフェースと同じです。
WebSocket インタフェースの例
16kHzエンジンを利用する場合、以下のようにsコマンドの1番目のパラメータに設定します。
s 16K -a-general
サンプリングレートが8kの場合でかつ、8kHzにも対応しているエンジン、例えば、「会話_汎用 (-a-general)」を利用する場合、以下のようにします。
s 8K -a-general
WebSocketインタフェースで、ヘッダありの音声データを送信するとき、8Kか16K以外の音声フォーマットを指定しないでください。後述のPCM形式の音声データを判断するためのヘッダなしの音声フォーマットにある文字列、例えば、LSB16Kなどを設定すると、その情報をもとに処理を行います。多くの場合は、発話が検出されないか、発話とは全く異なった結果を返します。
ヘッダなしの音声フォーマット
生のPCMデータなど"ヘッダなし"の音声データを送信する場合は以下のように音声フォーマットを設定します。
インタフェース | 音声フォーマットの設定方法 |
|---|---|
| 同期・非同期 HTTP | cパラメータにLSB16Kのような音声フォーマット名を指定してください。 |
| WebSocket | sコマンドの第一引数にLSB16Kのような音声フォーマット名を指定してください。 |
エンコーディングとサンプリングレートに対応する音声フォーマット名は以下の表の通りです。
| エンコーディング | サンプリング周波数 | チャネル数 | 音声フォーマット名 |
|---|---|---|---|
| PCM Signed 16-bit little-endian | 8kHz | 1 | LSB8K |
| PCM Signed 16-bit little-endian | 11kHz | 1 | LSB11K |
| PCM Signed 16-bit little-endian | 16kHz | 1 | LSB16K |
| PCM Signed 16-bit little-endian | 22kHz | 1 | LSB22K |
| PCM Signed 16-bit little-endian | 32kHz | 1 | LSB32K |
| PCM Signed 16-bit little-endian | 44.1kHz | 1 | LSB44K |
| PCM Signed 16-bit little-endian | 48kHz | 1 | LSB48K |
| PCM Signed 16-bit big-endian | 8kHz | 1 | MSB8K |
| PCM Signed 16-bit big-endian | 11kHz | 1 | MSB11K |
| PCM Signed 16-bit big-endian | 16kHz | 1 | MSB16K |
| PCM Signed 16-bit big-endian | 22kHz | 1 | MSB22K |
| PCM Signed 16-bit big-endian | 32kHz | 1 | MSB32K |
| PCM Signed 16-bit big-endian | 44.1kHz | 1 | MSB44K |
| PCM Signed 16-bit big-endian | 48kHz | 1 | MSB48K |
| mu-Law 8-bit | 8kHz | 1 | MULAW |
| A-Law 8-bit | 8kHz | 1 | ALAW |
同期 HTTP インタフェースの例
ここではサンプリングレート16kHz、量子化ビット16bit、モノラル、リトルエンディアンのPCMデータを送信する場合のcurlを使った例を示します。この場合、cパラメータにLSB16Kを指定します。
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F c=LSB16K \
-F a=@test-16k.pcm
非同期 HTTP インタフェースの例
ここではサンプリングレート16kHz、量子化ビット16bit、モノラル、リトルエンディアンのPCMデータを送信する場合のcurlを使った例を示します。この場合、cパラメータにLSB16Kを指定します。
curl https://acp-api-async.amivoice.com/v2/recognitions \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F c=LSB16K \
-F a=@test-16k.pcm
エンドポイント以外は同期 HTTP インタフェースと同じです。
WebSocket インタフェースの例
ここではサンプリングレート16kHz、量子化ビット16bit、モノラル、リトルエンディアンのPCMデータを送信します。この場合、sコマンドにLSB16Kを指定します。
s LSB16K -a-general
WebSocket インタフェースのsコマンドにはその他のパラメータも設定します。詳細は認識要求の開始や、リファレンスのs コマンド応答パケットを参照してください。
ヘッダなしの音声に対して、8Kか16Kのようなヘッダあり音声ファイルに対する音声フォーマットを指定すると、ヘッダを読み込もうとして失敗します。ヘッダ読み込みに失敗するとLSB16Kとして扱われます。ヘッダなしの音声データを送信する場合は、必ずヘッダなしの音声フォーマットにある文字列のいずれかを指定してください。