Добавление существующего файла WAVE в Java - PullRequest
0 голосов
/ 13 марта 2019

Мне нужно реализовать функциональность в 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();
    }

Но этот код приводит к ошибке выше. Кто-нибудь знает способ обойти это? Можно ли, например, указать длину кадра в качестве произвольного значения, а затем удалить неиспользуемые части кадра? Еще одна вещь, на которую я смотрел, - это просто написать два файла и объединить их, как описано здесь , но это оказывается грязным и, честно говоря, излишне сложным для моего случая использования.

Любая помощь будет принята с благодарностью.

...