Как я могу записать содержимое SourceDataLine в файл? - PullRequest
3 голосов
/ 06 марта 2012

Я изменяю приложение, которое воспроизводит аудиоданные, чтобы записать данные в файл.Поскольку это в настоящее время реализовано, байтовый массив заполняется динамически, и содержимое этого буфера записывается в SourceDataLine каждый раз, когда он заполняется.Я в основном хочу записать этот буфер в файл в указанном формате.

Я прочитал это официальное руководство и наткнулся на этот код, снятый для записи аудиоданных в файл:

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

Из документации API я вижу, что я могу создать AudioInputStream, используя TargetDataLine, однако в моем случае у меня есть SourceDataLine.Я не знаю, как получить данные из моего байтового массива в TargetDataLine, поскольку он реализует метод read () вместо write ().Другие применения AudioInputStream в этой и другой документации рассматривают его как способ чтения из файла, поэтому я немного смущен его использованием с AudioSystem.write ().

Итак, как я могу получить данные из SourceDataLine или непосредственно из буфера в TargetDataLine или AudioInputStream, чтобы их можно было записать в файл?

1 Ответ

2 голосов
/ 06 марта 2012
  1. Используйте byte[], чтобы установить ByteArrayInputStream
  2. Предоставьте BAIS AudioSystem.getAudioInputStream(InputStream)
  3. Используйте AIS в AudioSystem.write(..)
...