メインコンテンツまでスキップ

音声フォーマット

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に対応しています。

ヒント

人の耳でも聞き取りづらいような、強い圧縮をかけると認識精度に影響があります。以下の圧縮方式での圧縮率のガイドラインを示します。

圧縮方式ガイドライン
Speexquality 7 以上
Opus圧縮率 10 分の 1 程度

ファイルフォーマット

Wave(WAV)、Ogg、MP3、FLACに対応しています。音声フォーマットがファイルのヘッダなどに記述されているため、リクエストパラメータでの音声フォーマットの指定が不要な場合があります。詳細は、次の音声フォーマットの設定方法を参照してください。

音声フォーマットの設定方法

音声認識のリクエスト時には、送信する音声データの音声フォーマットを指定する必要があります。Wave(WAV)、Ogg、FLACなどのコンテナファイルは、音声フォーマットがファイルのヘッダに記述されています。このような"ヘッダあり"の音声ファイルを送信する場合と、音声フォーマットがファイルのヘッダに含まれていない"ヘッダなし"の音声データを送信する場合についてそれぞれ説明します。

危険

正しい音声フォーマットを指定してください。誤った設定をすると、結果が全く得られなかったり、音声認識、話者ダイアライゼーションの精度が低下します。

ヒント

後述の音声フォーマット名は、大文字小文字を区別しません。LSB16Klsb16kは同じです。

ヘッダありの音声フォーマット

ファイルのヘッダなどに音声フォーマットが記述されている場合は、以下のように音声フォーマットを設定します。

インタフェース
音声フォーマットの設定方法
同期・非同期 HTTP音声フォーマットの指定を省略できます
WebSocketsコマンドの第一引数に音声データのサンプリングレートが、8kHz/11kHzの場合は、8k、16kHz以上の場合は、16kを設定してください。

対応している音声フォーマットとその設定方法を以下の表にまとめます。

ファイルフォーマット
エンコーディング・音声圧縮サンプリング周波数チャネル数音声フォーマット名
WavePCM Signed 16-bit little-endian
(※ formatTag: 0x0001)
8kHz, 11kHz1 または 28K
WavePCM Signed 16-bit little-endian
(※ formatTag: 0x0001)
16kHz以上1 または 216K
Wavemu-Law 8-bit
(※ formatTag: 0x0007)
8kHz1 または 28K
WaveA-Law 8-bit
(※ formatTag: 0x0006)
8kHz1 または 28K
OggSpeex8kHz, 11kHz1 または 28K
OggSpeex16kHz以上1 または 216K
OggOpus8kHz, 11kHz1 または 28K
OggOpus16kHz以上1 または 216K
MP3MP38kHz, 11kHz1 または 28K
MP3MP316kHz以上1 または 216K
FLACFLAC8kHz, 11kHz1 または 28K
FLACFLAC16kHz以上1 または 216K
注記

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インタフェースで、ヘッダありの音声データを送信するとき、8K16K以外の音声フォーマットを指定しないでください。後述のPCM形式の音声データを判断するためのヘッダなしの音声フォーマットにある文字列、例えば、LSB16Kなどを設定すると、その情報をもとに処理を行います。多くの場合は、発話が検出されないか、発話とは全く異なった結果を返します。

ヘッダなしの音声フォーマット

生のPCMデータなど"ヘッダなし"の音声データを送信する場合は以下のように音声フォーマットを設定します。

インタフェース
音声フォーマットの設定方法
同期・非同期 HTTPcパラメータにLSB16Kのような音声フォーマット名を指定してください。
WebSocketsコマンドの第一引数にLSB16Kのような音声フォーマット名を指定してください。

エンコーディングとサンプリングレートに対応する音声フォーマット名は以下の表の通りです。

エンコーディングサンプリング周波数チャネル数音声フォーマット名
PCM Signed 16-bit little-endian8kHz1LSB8K
PCM Signed 16-bit little-endian11kHz1LSB11K
PCM Signed 16-bit little-endian16kHz1LSB16K
PCM Signed 16-bit little-endian22kHz1LSB22K
PCM Signed 16-bit little-endian32kHz1LSB32K
PCM Signed 16-bit little-endian44.1kHz1LSB44K
PCM Signed 16-bit little-endian48kHz1LSB48K
PCM Signed 16-bit big-endian8kHz1MSB8K
PCM Signed 16-bit big-endian11kHz1MSB11K
PCM Signed 16-bit big-endian16kHz1MSB16K
PCM Signed 16-bit big-endian22kHz1MSB22K
PCM Signed 16-bit big-endian32kHz1MSB32K
PCM Signed 16-bit big-endian44.1kHz1MSB44K
PCM Signed 16-bit big-endian48kHz1MSB48K
mu-Law 8-bit8kHz1MULAW
A-Law 8-bit8kHz1ALAW

同期 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コマンド応答パケットを参照してください。

注意

ヘッダなしの音声に対して、8K16Kのようなヘッダあり音声ファイルに対する音声フォーマットを指定すると、ヘッダを読み込もうとして失敗します。ヘッダ読み込みに失敗するとLSB16Kとして扱われます。ヘッダなしの音声データを送信する場合は、必ずヘッダなしの音声フォーマットにある文字列のいずれかを指定してください。