I'm using REST API with cURL because I need to do something quick and simple, and I'm on a box that I can't start dumping garbage on; i.e. some thick developer SDK.
I started out base64
encoding flac
files and initiating speech.syncrecognize
.
That eventually failed with:
{
"error": {
"code": 400,
"message": "Request payload size exceeds the limit: 10485760.",
"status": "INVALID_ARGUMENT"
}
}
So okay, you can't send 31,284,578 bytes in the request; have to use Cloud Storage. So, I upload the flac audio file and try again using the file now in Cloud Storage. That fails with:
{
"error": {
"code": 400,
"message": "For audio inputs longer than 1 min, use the 'AsyncRecognize' method.",
"status": "INVALID_ARGUMENT"
}
}
Great, speech.syncrecognize
doesn't like the content size; try again with speech.asyncrecognize
. That fails with:
{
"error": {
"code": 400,
"message": "For audio inputs longer than 1 min, please use LINEAR16 encoding.",
"status": "INVALID_ARGUMENT"
}
}
Okay, so speech.asyncrecognize
can only do LPCM; upload the file in pcm_s16le
format and try again. So finally, I get an operation handel:
{
"name": "9174269756763138681"
}
Keep checking it, and eventually it's complete:
{
"name": "9174269756763138681",
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse"
}
}
So wait, after all that, with the result now sitting on a queue, there is no REST
method to request the result? Someone please tell me that I've missed the glaringly obvious staring me right in the face, and that Google didn't create completely pointless, incomplete, REST API.