音声フォーマット
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よりも高くする必要はありません。ネットワークの帯域を節約したり、送信にかかる時間を減らすためにも適切なサンプリングレートで音声データを送信することをお勧めします。
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 |
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/v1/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/v1/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
として扱われます。ヘッダなしの音声データを送信する場合は、必ずヘッダなしの音声フォーマットにある文字列のいずれかを指定してください。