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 ...