1

Google의 클라우드 음성 API [reference]을 통해 실행하려는 mp3 파일이 있지만 각 오디오 파일의 처음 15 초뿐입니다. 저는 jlayer, mp3spi 및 tritonus 라이브러리가있는 스칼라에서 JavaZoom에 의해 제안 된대로 가져 왔습니다. 내 코드는 지금까지 다음과 같습니다mp3에서 LINEAR_16 또는 Google 클라우드 음성 용 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() 

을하지만, 나는 단지 공의의와 API 호출이 아무 것도 반환하지 않는 ByteString - 복사 된 버퍼의 값을 인쇄 할 때. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까? 이것은 자바/스칼라에서 오디오를 조작하는 나의 처음입니다. 그래서 나는 명백한 것을 놓치고 있을지도 모릅니다 ...

답변

0

나는 똑같은 문제가있었습니다. 오디오가 이해할 수 있거나 형식으로 인코딩되었지만 적절하게 디코딩되지 않은 경우 아무 것도 얻지 못합니다. 오디오 파일은 스테레오 일 수 없으며, 모노 일 필요가 있습니다. (파이썬에서 - 당신은 그것의 스칼라 버전을 찾을 필요) 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_path을하고 out_file_path문자열이 포함 있습니다 입력 및 출력 오디오 파일 위치에 대한 경로. 참고 : play 명령을 사용하여 출력 오디오 파일을 테스트하여 변환이 성공했는지 확인할 수 있습니다.

이제 위의 내용을 완료 한 후 AudioFormat.Encoding.FLACAudioEncoding.FLAC을 대신 사용할 수 있습니다.

관련 문제