Я перепробовал все, что знаю, чтобы заставить Google Speech to text API возвращать что-либо, кроме false, но безрезультатно. Я удостоверился, что мой файл flac был файлом с одним каналом (ffmpeg -i test.flac -ac 1 test1.flac) — все еще ничего. Что я делаю неправильно?
<?php
// Your API Key goes here.
$apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$audioFile = realpath(__DIR__ . '/test.flac');
$url="https://speech.googleapis.com/v1/speech:recognize?key={$apiKey}";
$audioFileResource = fopen($audioFile, 'r');
$base64Audio = base64_encode(stream_get_contents($audioFileResource));
$settings=array(
'config'=> array(
'encoding'=>'FLAC',
'sampleRateHertz'=>44100,
'maxAlternatives' => 3,
'languageCode' => 'en-US'
),
'audio'=>array(
'content'=>$base64Audio
)
);
$json=json_encode($settings);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $json );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$result=curl_exec ($ch);
var_dump($result);
exit;
ОБНОВЛЕНИЕ: я обновил код, так что теперь это работает. У меня было две вещи неправильно. Сначала это был «sampleRateHertz» вместо «sampleRate» в настройках конфигурации. Во-вторых, мне пришлось отключить проверку SSL на одноранговом узле. Это сейчас работает.
Возвращает следующее:
D:\>php GoogleSpeechToText_example.php
string(320) "{
"results": [
{
"alternatives": [
{
"transcript": "the quick brown fox jumped over the lazy dog",
"confidence": 0.9850106
},
{
"transcript": "the quick brown fox jumps over the lazy dog",
"confidence": 0.90610087
}
]
}
]
}
Просто по счастливой случайности я разобрался в проблеме. Мне пришлось добавить следующую строку кода:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Других решений пока нет …