Как кодировать аудио для Alexa Voice?

Я хотел бы использовать Amazon Alexa Voice Service (AVS), но когда я использую Распознать речевой запрос все, что я получаю в ответ, это "{message: null}". Аутентификация работает, запрос кажется правильным, потому что я получил сообщения об ошибках от API, когда аутентификация не удалась или запрос был искажен.

У меня есть аудиофайл wav, 16000 Гц, 1 канал, и я использую PHP base64_encode() для кодирования содержимого файла wav.

Для аудиофайла в документации AVS указано только Type: Binary Data. Represents the data for the audio.

Вот запрос, который я отправляю:

Заголовки

POST /v1/avs/speechrecognizer/recognize HTTP/1.1
Host: access-alexa-na.amazon.com
Content-Type: multipart/form-data; boundary=86371ffc080fbb6fc614e8e36d0b8a4d
Authorization: Bearer Atza|IQEBL... (valid token)
Transfer-Encoding: chunked
Cache-Control: no-cache

Тело

--86371ffc080fbb6fc614e8e36d0b8a4d
Content-Disposition: form-data; name="request"
Content-Type: application/json; charset=UTF-8

{
    "messageHeader": {
        "deviceContext": [
            {
                "name":"playbackState",
                "namespace":"AudioPlayer",
                "payload": {
                    "streamId": "xxxxxxxxxxxx",
                    "offsetInMilliseconds": "xxxxxxxxxxxx",
                    "playerActivity": "xxxxxxxxxxxx"
                }
            }
        ]
    },
    "messageBody": {
        "profile": "alexa-close-talk",
        "locale": "en-us",
        "format": "audio/L16; rate=16000; channels=1"
    }
}

--86371ffc080fbb6fc614e8e36d0b8a4d
Content-Disposition: form-data; name="audio"
Content-Type: audio/L16; rate=16000; channels=1

SUQzAgAAAAAQS1RUMgAAFwBhb...(truncated result of base64_encode(file.wav))
--86371ffc080fbb6fc614e8e36d0b8a4d--

Любая идея, что не так/отсутствует?


person daniel    schedule 19.09.2015    source источник


Ответы (2)


Кодировка аудиофайла должна быть Linear PCM, а не base 64. Надеюсь, это поможет.

person user2636368    schedule 20.09.2015
comment
Извините за довольно глупый вопрос, но могу ли я просто скопировать содержимое двоичного файла в тело сообщения (например, 5249 4646 b80a 0200 5741 5645 666d 7420...)? - person daniel; 21.09.2015

Тело POST должно содержать необработанные двоичные аудиоданные. Вы можете использовать такой инструмент, как sox, чтобы преобразовать аудио в формат AVS ожидает его, в котором моноканал, частота дискретизации 16 кГц, подписанный 16-битный PCM.

person Miguel Mota    schedule 28.11.2015