Forums Développement Multimédia

Aller au contenu

- - - - -

Google Speech, As3 et Php

CODE As3 PHP GOOGLE

2 réponses à ce sujet

#1 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 21 March 2014 - 18:07 PM

Bonjour à tous.

J'aimerais utiliser google speech pour une de mes fonctionalitées mobile, mais je me retrouve un peu bloqué dans mon code.

Ce que j'essaye de faire :
- Enregistrer la voix de l'utilisateur en .FLAC
- Envoyer ce .FLAC a mon serveur PHP puis a l'API de google
- Recevoir la réponse depuis mon serveur PHP

Ce que j'arrive a faire :
- Enregistrer la voix de l'utilisateur en .FLAC (grace a la libraire Alchemy)
- Envoyer le .FLAC a google et recevoir leur réponse dans l'application flash

Ce que je n'arrive pas a faire :
- Lorsque j'envoie mon fichier flac a mon serveur php, il doit se passer quelque chose qui m'échappe, la réponse de l'API google est vide. Je pense que mon fichier n'est aps bien transmis a mon serveur php mais je ne sais pas trop comment faire.


Mon code PHP :

<?php
$audioFile = $_GET['record'];

$url            = "http://www.google.com/speech-api/v1/recognize";
$params = "client=chromium&lang=en-US";

$ch              = curl_init($url . '?' . $params);
                                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                 curl_setopt($ch,CURLOPT_HEADER, false);
                                 curl_setopt($ch,CURLOPT_HTTPHEADER,array("Content-Type:audio/x-flac; rate=44000"));
                                 curl_setopt($ch, CURLOPT_POST, true);
                                 curl_setopt($ch, CURLOPT_TIMEOUT , 120);
                                 curl_setopt($ch, CURLOPT_POSTFIELDS, array('data-binary' => $audioFile));

$response = curl_getinfo($ch);
$response2 = curl_exec($ch);
echo json_encode($response);
echo "   ...    ".json_encode($response2);
?>
 

Mon code AS3 :

private var flacData:ByteArray;

//
//Ici je suis les directives de la librairie Alchemist
//Pour encoder la voix de l'utilisateur en .FLAC
//

public function encodeToFlac() : void
{    
flacData = new ByteArray();
flacData.endian = Endian.LITTLE_ENDIAN;

var rawData:ByteArray = convert32to16(userInput);
flacCodec.encode(encodingCompleteHandler, encodingProgressHandler, rawData, flacData, rawData.length, 30);            
}

public function convert32to16(source:ByteArray):ByteArray
{
var FLOAT_MAX_VALUE:Number = 1.0;
var SHORT_MAX_VALUE:int = 0x7fff;

var result:ByteArray = new ByteArray();
result.endian = Endian.LITTLE_ENDIAN;

while( source.bytesAvailable )
{
var sample:Number = source.readFloat() * SHORT_MAX_VALUE;

// Make sure we don't overflow.
if (sample < -SHORT_MAX_VALUE) sample = -SHORT_MAX_VALUE;
else if (sample > SHORT_MAX_VALUE) sample = SHORT_MAX_VALUE;

result.writeShort(sample);
}

result.position = 0;
return result;
}

private function encodingCompleteHandler (e:*):void
{
analyseSpeech(flacData);
}



//
//Ensuite, j'envoie le fichier flac a ma commande php
//
public function analyseSpeech (record:*):void
  {
   urlLoader = new URLLoader ();
   var hdr:URLRequestHeader = new URLRequestHeader("Content-type", "audio/x-flac; rate:44000;");
   var urlRequest:URLRequest = new URLRequest (CMD_ANALYSE + "?record=" + record);
   urlRequest.requestHeaders.push(hdr);
 
   urlLoader.addEventListener(Event.COMPLETE, onAnalyseSpeechCallback);
   urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
   urlLoader.load(urlRequest);
  }

  private  function onAnalyseSpeechCallback (e:Event):void
  {  
   trace ("\n\n" + urlLoader.data + "\n\n" );
  }
 

La réponse que j'obtiens :

{"url":"http:\/\/www.google.com\/speech-api\/v1\/recognize?client=chromium&lang=en-US","content_type":null,"http_code":0,"header_size":0,"request_size":0,"filetime":0,"ssl_verify_result":0,"redirect_count":0,"total_time":0,"namelookup_time":0,"connect_time":0,"pretransfer_time":0,"size_upload":0,"size_download":0,"speed_download":0,"speed_upload":0,"download_content_length":-1,"upload_content_length":-1,"starttransfer_time":0,"redirect_time":0,"certinfo":[]}   ...    ""
 

Auriez-vous une idée ?
Merci

#2 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 21 March 2014 - 18:17 PM

Si ca peut aider, voici le code AS3 qui retourne une réponse de l'API avec succès :


var PATH:String = "https://www.google.com/speech-api/v1/recognize?client=chromium&lang=en-US";
   var urlRequest:URLRequest = new URLRequest(PATH);
   urlLoader = new URLLoader();
   urlRequest.contentType = "audio/x-flac; rate=44000";
   urlRequest.data = flacData;
   urlRequest.method = URLRequestMethod.POST;
 
   urlLoader.dataFormat = URLLoaderDataFormat.TEXT;// default
   urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
   //urlLoader.addEventListener(ErrorEvent.ERROR, urlLoader_error);
   urlLoader.load(urlRequest);
 


#3 youtch77

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 13 May 2014 - 15:38 PM

Il semblerait que Speech API n'existe plus, je souhaitais faire une petite appli permettant de fournir des traductions de fichiers audio vers du texte. Mais l'entrée Speech API manque à l'appel sur ma console developer. Google se range parmi ceux qui évoluent en réduisant ses API... Bizarre !




Répondre à ce sujet



  

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP