2012-03-05 73 views
3

我正在修改播放音频数据以将数据写入文件的应用程序。正如目前实现的那样,一个字节数组是动态填充的,并且每次填充时都会将此缓冲区的内容写入SourceDataLine。我基本上想要以指定的格式将该缓冲区写入文件。如何将SourceDataLine的内容写入文件?

我已经通过this official tutorial阅读并跨越这些代码剪断音频数据写入到文件中传来:但是在我的情况

File fileOut = new File(someNewPathName); 
AudioFileFormat.Type fileType = fileFormat.getType(); 
if (AudioSystem.isFileTypeSupported(fileType, 
    audioInputStream)) { 
    AudioSystem.write(audioInputStream, fileType, fileOut); 
} 

我从我可以使用TargetDataLine的构造的AudioInputStream API文档看,我有一个SourceDataLine。我不知道如何从我的字节数组中获取数据到TargetDataLine中,因为它实现了read()方法而不是write()。在该的AudioInputStream的其他用途和其他文件把它当作从文件中读取的方式,所以我有点困惑是其与AudioSystem.write使用()。

那么,怎样才能我从SourceDataLine的获取数据,或从缓冲区直接进入TargetDataLine的或的AudioInputStream以便它可以写入到一个文件?

+1

是你用什么解决办法吗?你是否能够在文件中写入播放/收听扬声器的内容? – 2013-10-02 08:19:27

+0

@coding_idiot音频只是一个音调的顺序,所以我能够从一个音调发生器再现他们更容易比它们复制编程 – 2013-10-07 04:02:12

回答

2
  1. 使用byte[]建立ByteArrayInputStream
  2. 提供的BAIS到AudioSystem.getAudioInputStream(InputStream)
  3. 使用AIS在AudioSystem.write(..)
+0

与此更换调用SourceDataLine.write(),我得到上UnsupportedAudioFileException后第3步:“无法从输入流获取音频输入流”。为什么数据在写入SourceDataLine时有效,但不适用于创建AudioInputStream? – 2012-03-05 22:45:16

+3

最好发布[SSCCE](http://sscce.org/)。 – 2012-03-05 22:50:19

+0

在这种情况下,SSCCE并不是真的可行。我转向了另一种解决方案,但这是我最初面临的问题的答案,所以我接受了它。 – 2012-04-05 15:26:37