메인 콘텐츠로 건너뛰기

음성 포맷

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채널만 음성 인식의 대상이 됩니다.

음원이 스테레오 음성인 경우, 두 채널을 모두 음성 인식하려면 채널별로 별도의 음성 인식 요청을 수행하십시오.

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 명령의 첫 번째 파라미터에 설정합니다.

s 16K -a-general

샘플링 레이트가 8k이고 8kHz에도 대응하는 엔진, 예를 들어 "会話_汎用(대화 범용, -a-general)"을 사용하는 경우 다음과 같이 합니다.

s 8K -a-general
주의

WebSocket 인터페이스에서 헤더가 있는 음성 데이터를 전송할 때, 8K16K 이외의 음성 포맷을 지정하지 마십시오. 후술할 PCM 형식의 음성 데이터를 판단하기 위한 헤더 없는 음성 포맷에 있는 문자열, 예를 들어 LSB16K 등을 설정하면 그 정보를 바탕으로 처리를 수행합니다. 대부분의 경우 발화가 검출되지 않거나 발화와 전혀 다른 결과를 반환합니다.

헤더 없는 음성 포맷

raw 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로 처리됩니다. 헤더가 없는 음성 데이터를 전송할 경우에는 반드시 헤더가 없는 음성 포맷에 있는 문자열 중 하나를 지정하십시오.