2017-11-13 16 views
1

GoogleのクラウドスピーチAPI [reference]を介して実行したいmp3ファイルがありますが、各オーディオファイルの最初の15秒です。私はscalaでjlayer、mp3spi、およびtritonusのライブラリをJavaZoomのようにインポートして作業しています。私のコードは、これまでのようになります。Googleのクラウドスピーチのmp3をLINEAR_16またはFLAC形式に変換する

val in = AudioSystem.getAudioInputStream(new URL("mySong.mp3")) 
    val baseFormat = in.getFormat 
    val decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
    16000, 
    16, 
    baseFormat.getChannels, 
    baseFormat.getChannels * 2, 
    16000, 
    false) 

    val audioInputStream = AudioSystem.getAudioInputStream(decodedFormat, in) 
    val buffer = new Array[Byte](16000*4*15) 
    var i = 0 
    while (audioInputStream.available() > 0) { 
    i += audioInputStream.read(buffer) 
    } 

    audioInputStream.close() 
    in.close() 

// pass this to API request: 
    lazy val recognitionConfig: RecognitionConfig = RecognitionConfig.newBuilder 
     .setEncoding(AudioEncoding.LINEAR16) 
     .setLanguageCode("en-US") 
     .setSampleRateHertz(16000) 
     .build 

    val request = RecognizeRequest.newBuilder() 
     .setAudio(RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(buffer)).build()) 
     .setConfig(recognitionConfig) 
     .build() 

をしかし、私はそれが唯一の0のだとAPIコールが何も返さない延ByteString、コピーされたバッファーの値をプリントアウトするとき。私が間違っていることに関するアイデアは?これは初めてJava/Scalaでオーディオを操作するので、私は何かが分かりにくいかもしれません...

答えて

0

私は同じ問題がありました。オーディオが分かりやすいか、フォーマットでエンコードされていても適切にデコードされていない場合は何も得られません。オーディオファイルをステレオにすることはできません。モノラルである必要があります。次のように は、だから私は、最初の(Pythonで - あなたはそのScalaのバージョンを確認する必要があります)ffmpegのモジュールを使用して.flacする.MP3からオーディオを変換:

# 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を使用できるようになりました。

関連する問題