我在PHP CLI中爲我的樹莓派製作了一個使用google語音識別api的程序,並且我想優化它,在我們說話時發送數據(現在它記錄我們所說的感謝sox,然後發送它)。如何使用套接字發佈未知長度的內容?
因此,我想在發送音頻文件的同時使用套接字寫入谷歌,但我必須在發送之前通過Content-Lenght給出長度。
是否有可能做其他事情?不給長度/給一個更大的最大長度?謝謝。這裏是我的代碼:
<?php
header('Content-Type: text/html');
$name = 'www.google.com';
$dir = '/speech-api/v1/recognize?xjerr=1&client=chromium&lang=fr-FR&maxresults=10&pfilter=0';
$data = file_get_contents("/smart/voix.flac") ;
$envoi = "POST ".$dir." HTTP/1.1\r\n";
$envoi .= "Host: ".$name."\r\n";
$envoi .= "Connection: Close\r\n";
$envoi .= "Content-Type:audio/x-flac;rate=44100\r\n";
$envoi .= "Content-Length: 100\r\n\r\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0){
die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
}
if (socket_connect($socket,gethostbyname($name),80) < 0){
die('FATAL ERROR: socket_connect()');
}
if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){ //I send the first part
die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
}
if(($int = socket_write($socket, $data."\r\n", strlen($data."\r\n"))) === false){//then the file
die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
}
$reception = '';
while($buff = socket_read($socket, 2000)){
$reception.=$buff;
}
echo $reception;
socket_close($socket);
?>
出於興趣,你爲什麼要在音頻數據的末尾添加'\ r \ n'? –
請點擊這裏:http://mikepultz.com/2013/07/google-speech-api-full-duplex-php-version/ –
@squeamishossifrage我不知道,我在某處看到它,所以我只是做了同樣的事情,但也許這不是強制性的。 – MrPointVirgule