JAAD не может читать m4a

Что я хочу сделать, так это создать предварительный просмотр для каждого файла m4a. Я пытаюсь сделать это с помощью Java Sound и JAAD.

Вот моя попытка в Scala

import java.io.{File, FileOutputStream}
import javax.sound.sampled.AudioSystem

/**
 * Created by khanguyen on 7/21/15.
 */
object Main extends App {
  val filePath = "audio.m4a"

  val file = new File(filePath)

  val audio = AudioSystem.getAudioInputStream(file)

  println(audio.getFrameLength) // return -1

  println(audio.getFormat) // return PCM_SIGNED 0.0 Hz, 0 bit, 0 channels, 0 bytes/frame, 

  val output = new FileOutputStream("outputaudio.m4a")

  var buffer = Array.fill[Byte](1024)(0)

  for (i <- 0 to 1024) {
    audio.read(buffer, i * 1024, 1024)
    buffer.take(10).map(println)
    output.write(buffer)
  }

  audio.close()
  output.flush()
  output.close()
}

Я не могу ничего прочитать из входного аудиопотока. Говорят, что длина кадра равна -1. После прохода чтения все байты в Array[Byte] по-прежнему равны 0. Я что-то упустил?


person Khanetor    schedule 21.07.2015    source источник


Ответы (1)


если вы получаете -1 в audio.getFrameLength, это потому, что формат файла не поддерживается.

val audio = AudioSystem.getAudioInputStream(file)
                                                  //> javax.sound.sampled.UnsupportedAudioFileException: could not get audio input
                                                  //|  stream from input file
                                                  //|   at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:
                                                  //| 1187)
                                                  //|   at forcomp.wc$$anonfun$main$1.apply$mcV$sp(forcomp.wc.scala:15)
                                                  //|   at org.scalaide.worksheet.runtime.library.WorksheetSupport$$anonfun$$exe
                                                  //| cute$1.apply$mcV$sp(WorksheetSupport.scala:76)
                                                  //|   at org.scalaide.worksheet.runtime.library.WorksheetSupport$.redirected(W
                                                  //| orksheetSupport.scala:65)
                                                  //|   at org.scalaide.worksheet.runtime.library.WorksheetSupport$.$execute(Wor
                                                  //| ksheetSupport.scala:75)
                                                  //|   at forcomp.wc$.main(forcomp.wc.scala:5)
                                                  //|   at forcomp.wc.main(forcomp.wc.scala)

      println(audio.getFrameLength) // return -1 


Как бы то ни было, я протестировал его с файлом примера pet m4a, но в API javax.sound.AudioSystem (http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html), вы найдете больше информации о поддерживаемых типах файлов, AAC (расширения m4a являются частью кодирования AAC) должны поддерживаться.

person underscore_nico    schedule 21.07.2015
comment
Формат действительно не поддерживается. Каков был результат вашего теста? - person Khanetor; 21.07.2015
comment
Я уже опубликовал результат выше: javax.sound.sampled.UnsupportedAudioFileException: не удалось получить аудиовход. Если бы я был там, я бы преобразовал свой файл в другую кодировку, чтобы попробовать с этим. - person underscore_nico; 21.07.2015
comment
MFSampledSP в Windows или CASampledSP в OS X могут помочь вам в чтении AAC/m4a. См. SampledSP. - person Hendrik; 30.07.2015