Мне нужно реализовать функциональность в Java, посредством которой файл WAVE записывается несколько раз, чтобы реализовать функцию pauseRecording()
для аудиорекордера, как описано здесь . К сожалению, предложение комментатора в моем начальном запросе о поиске перегруженных AudioSystem.write()
методов привело меня в тупик, поскольку единственный другой перегруженный метод - это запись в OutputStream (или, что еще лучше, FileOutputStream). Пока все хорошо, но это приводит меня к проблеме, из-за которой у меня нет длины кадра, которую я не могу записать из FileOutputStream, который я создаю в нужный файл - этот метод был бы идеальным, если бы я мог его получить работает но я сталкиваюсь с ошибкой
stream length not specified
at com.sun.media.sound.WaveFileWriter.write(Unknown Source)
at javax.sound.sampled.AudioSystem.write(Unknown Source)
по причинам, описанным выше.
Есть ли другой способ добавить WAVE-файл к недавно записанному? Я рассмотрел несколько похожих вопросов по SO (например, здесь ), но ни один из них не является конкретным случаем использования, который я здесь описываю, поэтому, к сожалению, он бесполезен.
Вот простая иллюстрация того, что я пытаюсь сделать:
try
{
// If output file does not yet exist, write audio input stream to file
AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, outputFile);
// If output file already exists, we must append it
if (outputFile.exists() && !outputFile.isDirectory())
{
FileOutputStream outputStream = new FileOutputStream(outputFile, true);
AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, outputStream);
}
}
catch (IOException e)
{
e.printStackTrace();
}
Но этот код приводит к ошибке выше. Кто-нибудь знает способ обойти это? Можно ли, например, указать длину кадра в качестве произвольного значения, а затем удалить неиспользуемые части кадра? Еще одна вещь, на которую я смотрел, - это просто написать два файла и объединить их, как описано здесь , но это оказывается грязным и, честно говоря, излишне сложным для моего случая использования.
Любая помощь будет принята с благодарностью.