К сожалению, API Clip
не предоставляет данные, хранящиеся в Clip
. Но вы можете получить то, что вы хотите, используя вместо этого SourceDataLine
для воспроизведения и добавив несколько шагов.
Сначала получите все отдельные сэмплы, используя AudioInputStream
.
байты должны быть обработаны небольшими порциями в соответствии с размером кадра, как указано в аудиоформате, и упорядочены в обратном порядке «кадров». Например, если аудиоформату требуется четыре байта на кадр (как в стереофоническом 16-битном кодировании), обратное преобразование будет происходить порциями по четыре байта.
Например, аудиофайл длиной 4 кадра, состоящий из байтов 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, в обратном порядке кадров становится 12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3.
Байтовые данные могут бытьиграется через SourceDataLine
. Я думаю, что вы должны быть в состоянии найти примеры кода SourceDataLine
воспроизведения. Главное изменение, которое вам нужно будет сделать, это получить данные для воспроизведения из массива в обратном порядке, а не из AudioInputStream
, как это обычно делается.
Библиотека github AudioCue была созданавокруг идеи создания своего рода супер-клипа, в котором доступны отдельные кадры данных PCM. Вы можете проверить метод loadURL в строке 359 в качестве примера загрузки данных в массив с помощью AudioInputStream
. Этот пример преобразует данные в плавающие объекты PCM, а не оставляет их в байтах. Так что вам придется внести некоторые изменения / упрощения. Хранение с плавающей точкой облегчает такие вещи, как микширование и воспроизведение с переменной скоростью, что может быть полезно, если вы решите, что вы также хотите ускорить или замедлить, вперед или назад.