我想做的是为每个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()
}我无法从音频输入流中读取任何内容。据说这个frameLength就是-1。经过一次读操作后,ArrayByte中的所有字节仍为0。我错过了什么吗?
发布于 2015-07-21 17:02:41
如果您在audio.getFrameLength中获取-1,这是因为该文件格式不受支持。
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 无论如何,我已经用一个宠物m4a示例文件对它进行了测试,但是在AAC (http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html)中你会找到更多关于支持的文件类型的信息,javax.sound.AudioSystem (m4a扩展名是AAC编码的一部分)应该是受支持的。
https://stackoverflow.com/questions/31530847
复制相似问题