1

Ich habe mp3-Dateien, die ich durch Googles Cloud Speech API [reference] laufen lassen möchte - aber nur die ersten 15 Sekunden jeder Audiodatei. Ich arbeite in Scala mit Jlayer-, MP3spi- und Tritonus-Bibliotheken, die wie von JavaZoom vorgeschlagen importiert wurden. Mein Code so sieht weit wie folgt aus:Konvertieren von mp3 in LINEAR_16 oder FLAC Format für google cloud rede

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() 

Allerdings, wenn ich den Wert des ByteString kopierten Puffer drucken es ist nur 0'en und der API-Aufruf gibt nichts zurück. Irgendwelche Ideen, was ich falsch mache? Das ist mein erstes Mal, wenn ich Audio in Java/Scala manipuliere, damit ich etwas Offensichtliches vermisse ...

Antwort

0

Ich hatte das gleiche Problem. Sie erhalten nichts, wenn das Audio verständlich ist oder in einem Format codiert ist, aber nicht geeignet decodiert ist, und andere Besonderheiten, z. Die Audiodatei kann nicht Stereo sein, sie muss Mono sein. So konvertiert ich zum ersten Mal den Ton von .mp3 zu .flac wie folgt dem ffmpeg-Modul (in Python - Sie müssen ihre scala-Version finden):

# 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() 

die input_file_path und die out_file_path sind Saiten, die enthalten Pfade für die Eingabe- und Ausgabeorte von Audiodateien. Hinweis: Sie können die Ausgabeaudiodatei testen, um festzustellen, ob die Konvertierung erfolgreich war, indem Sie den Befehl play verwenden.

Nachdem Sie die obigen Schritte ausgeführt haben, können Sie jetzt AudioFormat.Encoding.FLAC und AudioEncoding.FLAC verwenden.

Verwandte Themen