将mp3转换为LINEAR_16或FLAC格式以用于谷歌云语音

时间:2017-11-13 23:16:04

标签: java scala google-cloud-platform codec google-cloud-speech

我有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中操作音频,所以我可能会遗漏一些明显的东西......

1 个答案:

答案 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_pathout_file_path字符串,其中包含输入和输出音频文件位置的路径。注意:您可以使用play命令测试输出音频文件以查看转换是否成功。

完成上述操作后,您现在可以改为使用AudioFormat.Encoding.FLACAudioEncoding.FLAC