gpt4 book ai didi

php - Google 语音 API - php 不返回任何内容

转载 作者:可可西里 更新时间:2023-10-31 23:30:38 24 4
gpt4 key购买 nike

我的代码的灵感来自这个用于语音到文本的全双工谷歌语音 API 的 php 版本:http://mikepultz.com/2013/07/google-speech-api-full-duplex-php-version/

我有几个 flac 文件可以正常工作并按照 Mike 的帖子中的说明提供数组输出。但是对于少数 flac 文件,它只是不返回任何输出。例如:http://gavyadhar.com/video/upload/Pantry_Survey.flac,不返回任何输出。

但相同的代码适用于此 flac 文件:http://gavyadhar.com/video/upload/pantry_snack_video.flac 并返回如下数组输出:

--------响应 1:你的脸是食品储藏室和主要堆栈之一 我通常是 Wesley Rd rasa 杂粮 cookies ,我喜欢它们,因为它们对你和 [...]...等等 5 条回复。

谁能告诉我,为什么有些 flac 文件不起作用?或者有没有办法捕获由 google API 创建的异常并显示它们以进行故障排除?

谢谢。在这里附上我的两个 php 文件的代码:

PHP file which passes the API key and the FLAC file with its sample rate. 

<?php
include 'GoogleSpeechToText.php';


ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

// Your API Key goes here.
$apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // my API server key
$speech = new GoogleSpeechToText($apiKey);

#var_dump($speech);

$file = realpath('upload/Pantry_Survey.flac'); // Full path to the file.

echo "<BR><BR>file : ", $file ;

#print_r("<br>-------------------");
#print_r($file1);
#print_r("<br>-------------------");

$bitRate = 44100; // The bit rate of the file.
$result = $speech->process($file, $bitRate, 'en-US');

print_r($result);

echo "<BR><BR>-------------";

$responses = $result[0]['alternative'];

$i = 0;
foreach ($responses as $response) {
$i = $i + 1;
#echo $response['transcript'];
echo "<br><br> ---------response $i : ", $response['transcript'];

}

?>

GoogleSpeechToText.php

<?php
/**
* Convert FLAC files to Text using the Google Speech API
*
* Credit due to Mike (mike@mikepultz.com) for his first version of this.
*
* @version 0.1
* @author Roger Thomas
* @see
*
*/
class GoogleSpeechToText
{
/**
* URL of the Speech API
* @var string
*/
const SPEECH_BASE_URL = 'https://www.google.com/speech-api/full-duplex/v1/';



/**
* A 'unique' string to use for the requests
*
* @var string
*/
private $requestPair;

/**
* The Google Auth API Key
*
* @var string
*/
private $apiKey;

/**
* CURL Upload Handle
*
* @var resource
*/
private $uploadHandle;

/**
* CURL Download Handle
*
* @var resource
*/
private $downloadHandle;

/**
* Construct giving the Google Auth API Key.
*
* @param string $apiKey
* @throws Exception
*/
public function __construct($apiKey)
{
if (empty($apiKey)) {
throw new Exception('$apiKey should not be empty.');
}
$this->apiKey = $apiKey;
$this->requestPair = $this->getPair();
$this->setupCurl();
}

/**
* Setup CURL requests, both up and down.
*/
private function setupCurl()
{
$this->uploadHandle = curl_init();
$this->downloadHandle = curl_init();

curl_setopt($this->downloadHandle, CURLOPT_URL, self::SPEECH_BASE_URL . 'down?pair=' . $this->requestPair );

#echo "<br>downloadHandle :: ", self::SPEECH_BASE_URL . 'down?pair=' . $this->requestPair;

curl_setopt($this->downloadHandle, CURLOPT_RETURNTRANSFER, true);

curl_setopt($this->uploadHandle,CURLOPT_RETURNTRANSFER,true);

curl_setopt($this->uploadHandle,CURLOPT_POST,true);

//----added by asmi shah - 7 jan 2015
curl_setopt($this->uploadHandle, CURLOPT_MAX_SEND_SPEED_LARGE, 30000);
curl_setopt($this->uploadHandle, CURLOPT_LOW_SPEED_TIME, 9999);
curl_setopt($this->downloadHandle, CURLOPT_LOW_SPEED_TIME, 9999);
//----

}

/**
* Generate a Pair for the request. This identifies the requests later.
*
* @return string
*/
private function getPair()
{
$c = '0123456789';
$s = '';
for ($i=0; $i<16; $i++) {
$s .= $c[rand(0, strlen($c) - 1)];
}
echo "pair : ",$s;
return $s;

}

/**
* Make the request, returning either an array, or boolean false on
* failure.
*
* @param string $file the file name to process
* @param integer $rate the bitrate of the flac content (example: 44100)
* @param string $language the ISO language code
* (en-US has been confirmed as working)
* @throws Exception
* @return array|boolean false for failure.
*/
public function process($file, $rate, $language = 'en-US')
{
if (!$file || !file_exists($file) || !is_readable($file)) {
throw new Exception(
'$file must be specified and be a valid location.'
);
}
else { echo "<br>file exists"; }

$data = file_get_contents($file);

#var_dump($rate);
if (!$data) {
throw new Exception('Unable to read ' . $file);
}
else { echo "<br>file is readable"; }


$upload_data = array(
"Content_Type" => "audio/x-flac; rate=". $rate,
"Content" => $data,
);


if (empty($rate) || !is_integer($rate)) {
throw new Exception('$rate must be specified and be an integer');
}
else { echo "<br>sample rate is received :" . $rate ; }

curl_setopt($this->uploadHandle,CURLOPT_URL,self::SPEECH_BASE_URL . 'up?lang=' .$language . '&lm=dictation&timeout=20&client=chromium&pair=' .$this->requestPair . '&key=' . $this->apiKey);

curl_setopt($this->uploadHandle,CURLOPT_HTTPHEADER,array('Transfer-Encoding: chunked','Content-Type: audio/x-flac; rate=' . $rate));

curl_setopt($this->uploadHandle,CURLOPT_POSTFIELDS,$upload_data);

#echo "<br><br>------ data : ", $data;
#echo "<br><br>------";
#echo "<BR><BR> URL made up : ", self::SPEECH_BASE_URL . 'up?lang=' .$language . '&lm=dictation&client=chromium&pair=' .$this->requestPair . '&key=' . $this->apiKey;


$curlMulti = curl_multi_init();

curl_multi_add_handle($curlMulti, $this->downloadHandle);
curl_multi_add_handle($curlMulti, $this->uploadHandle);

$active = null;
do {
curl_multi_exec($curlMulti, $active);
} while ($active > 0);

$res = curl_multi_getcontent($this->downloadHandle);

#var_dump($this->downloadHandle);
#echo "resource type ::".get_resource_type($this->downloadHandle);

$output = array();
$results = explode("\n", $res);


#var_dump($results);
#$i = 0;
foreach ($results as $result) {
#$i = $i + 1;
#echo "<BR><BR><BR>--------------- string ||$i|| : ", $result;

$object = json_decode($result, true);
if (
(isset($object['result']) == true) &&
(count($object['result']) > 0)
) {
foreach ($object['result'] as $obj) {
$output[] = $obj;
}
}
}

curl_multi_remove_handle($curlMulti, $this->downloadHandle);
curl_multi_remove_handle($curlMulti, $this->uploadHandle);
curl_multi_close($curlMulti);

if (empty($output)) {
echo "<BR><br>output is empty<BR>";
return false;
}
echo "<BR><BR>";
return $output;
}

/**
* Close any outstanding connections in the destruct
*/
public function __destruct()
{
curl_close($this->uploadHandle);
curl_close($this->downloadHandle);
}
}

?>

最佳答案

您提供的音频文件使用了 2 个声道。由于语音目前仅支持单声道音频,因此您需要将其转换为单声道。所有编码仅支持 1 声道(单声道)音频。 Audio encoding detail of Google speech API

将音频文件转换为 1 个声道后,我能够通过提供的音频文件成功获得响应。

关于php - Google 语音 API - php 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27982625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com