Я новичок в 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, но не уверен, как использовать это в этом коде.
Любая помощь будет оценена.
Спасибо