php cuRL响应“无法对数据流音频/ flac->音频/ x-float-array进行代码转换”-IBM Watson Speech to Text API

时间:2019-02-03 10:12:35

标签: php curl ibm-watson

我对如何使用cURL不太了解,我正在尝试使用IBM Watson API将语音转换为文本。当我尝试不使用参数进行转换时  音频文件),我得到的响应没有任何错误。

但是当我添加

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
      'model'=>'ja-JP_NarrowbandModel'
))

返回

{ "code_description": "Bad Request", "code": 400, "error": "unable to 
transcode data stream audio/flac -> audio/x-float-array " }

我不确定我的语法是否存在问题,或者那里出现了其他问题。

我从https://console.bluemix.net/docs/services/speech-to-text/http.html#http

阅读文档
<?php
$ch = curl_init();
$file = file_get_contents('audio-file.flac');
curl_setopt($ch, CURLOPT_URL, 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'apikey' . ':' . 'MY_API_HERE');
$headers = array();
$headers[] = 'Content-Type: audio/flac';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'model'=>'ja-JP_NarrowbandModel'
));
$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
print_r($result);

1 个答案:

答案 0 :(得分:0)

您要两次设置CURLOPT_POSTFIELDS,一次是使用文件内容,第二次是使用包含'model'=>'ja-JP_NarrowbandModel'的数组。

根据the documentation,您可以将模型作为查询参数传递。

尝试类似的方法(未经测试):

<?php

$file = file_get_contents('audio-file.flac');

$url = 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize';
$model = 'ja-JP_NarrowbandModel';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . '?model=' . $model);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'apikey' . ':' . 'MY_API_HERE');

$headers = array();
$headers[] = 'Content-Type: audio/flac';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
print_r($result);