我有mp3文件,我想通过Google的Cloud Speech API [reference]运行 - 但只是每个音频文件的前15秒。我正在使用j JavaZoom建议导入的jlayer,mp3spi和tritonus库在Scala中工作。到目前为止我的代码看起来像这样:
$api = 'https://api.telegram.org/bot' . $access_token;
$output = json_decode(file_get_contents('php://input'), TRUE);
$chat_id = $output['message']['chat']['id'];
$first_name = $output['message']['chat']['first_name'];
$last_name = $output["message"]["chat"]["last_name"];
$message = $output['message']['text'];
$callback_query = $output['callback_query'];
$data = $callback_query['data'];
$message_id = ['callback_query']['message']['message_id'];
$chat_id_in = $callback_query['message']['chat']['id'];
switch($message) {
case '/start':
$inline_button1 = array("text"=>"Website","url"=>"http://google.com");
$inline_button2 = array("text"=>"test","callback_data"=>'/test');
$inline_keyboard = [[$inline_button1,$inline_button2]];
$keyboard=array("inline_keyboard"=>$inline_keyboard);
$replyMarkup = json_encode($keyboard);
sendMessage($chat_id, "Hello", $replyMarkup);
break;
case '/help':
$keyboard = array(array("Cancel","Go Ahead","test"));
$resp = array("keyboard" => $keyboard,"resize_keyboard" => true,"one_time_keyboard" => true);
$reply_ = json_encode($resp);
break;
default:
sendMessage($chat_id,"$Thanks",$replyMarkup);
}
switch($data){
case '/test':
sendMessage($chat_id_in, "Coming Soon .....");
break;
}
但是,当我打印出ByteString复制的缓冲区的值时,它只有0,而API调用什么都不返回。关于我做错了什么的任何想法?这是我第一次在Java / Scala中操作音频,所以我可能会遗漏一些明显的东西......
答案 0 :(得分:0)
我遇到了同样的问题。如果音频是可理解的或者以格式编码但未被适当解码,则没有任何结果,以及其他细节,例如:音频文件不能是立体声,它需要是单声道的。 所以我首先使用ffmpeg模块将音频从.mp3转换为.flac(在python中 - 你需要找到它的scala版本):
# turn the video into audio
ff = ffmpy.FFmpeg(inputs={input_file_path: None}, outputs={output_file_path: '-y -vn -acodec flac -ar 16000 -ac 1'})
ff.run()
input_file_path
和out_file_path
是字符串,其中包含输入和输出音频文件位置的路径。注意:您可以使用play
命令测试输出音频文件以查看转换是否成功。
完成上述操作后,您现在可以改为使用AudioFormat.Encoding.FLAC
和AudioEncoding.FLAC
。