dialogflow: должен использовать одноканальный (моно) звук, но заголовок WAV указывает 2 канала - PullRequest
0 голосов
/ 18 марта 2020

Я новичок в google dialogflow (использую API v2), и у меня возникли следующие проблемы.

Я использую код mediastreamrecorder для загрузки файла .wav на сервер php и передаю его в dialogflow DeteIntent.

Я получаю сообщение об ошибке

<b>Fatal error</b>:  Uncaught Google\ApiCore\ApiException: {
"message": "Must use single channel (mono) audio, but WAV header indicates 2 channels.",
"code": 3,
"status": "INVALID_ARGUMENT",
"details": []

}

в D: \ laragon \ www\dialogflow \ vendor \ google \ gax \ src \ ApiException. php on line 139

Ниже приведен мой код

if (isset($_FILES["audio-blob"])) 
{
    $uploadDirectory = 'upload/'.$_POST["audio-filename"];
    if (!move_uploaded_file($_FILES["audio-blob"]["tmp_name"], $uploadDirectory)) {
        echo("Problem writing audio file to disk!");
    }
    else 
    {
$inputAudio = file_get_contents(__DIR__  .'/'.$uploadDirectory);
putenv('GOOGLE_APPLICATION_CREDENTIALS=xyz.json');
$sessionsClient = new SessionsClient();
$formattedSession = $sessionsClient->sessionName('', 'abc');
$languageCode = 'en-US';
$audioConfig = new InputAudioConfig();
$audioConfig->setAudioEncoding(AudioEncoding::AUDIO_ENCODING_LINEAR_16);
$audioConfig->setLanguageCode($languageCode);
$audioConfig->setSampleRateHertz(48000);

$queryInput = new QueryInput();
$queryInput->setAudioConfig($audioConfig);
$response = $sessionsClient->detectIntent($formattedSession, $queryInput, ['inputAudio' => $inputAudio]);
$queryResult = $response->getQueryResult();
$queryText = $queryResult->getQueryText();
$intent = $queryResult->getIntent();
$confidence = $queryResult->getIntentDetectionConfidence();
$fulfilmentText = $queryResult->getFulfillmentText();
echo $queryResult->serializeToJsonString();
$sessionsClient->close();

    }
}

Из ошибки я понимаю, что он не поддерживает стереофайл (где audiochannelno = 2), но не могу найти решение, как мне изменить или преобразовать. WAV файл в моно файл на лету. Я нашел инструмент ffmpeg, но не уверен, как использовать это в этом коде.

Любая помощь будет оценена.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...