Типичный WAV-файл состоит из 44-байтового заголовка, за которым следуют фактические значения выборки. Размер «кадра» зависит от свойств WAV-файла: файл, который является стереофоническим и 16-бит на выборку, будет иметь размер 4-байтного кадра (два байта для левой выборки и два байта для правильной выборки).
Итак, в коде вы создадите второй файл WAV, создав массив байтов того же размера, что и оригинал. Вы копируете 44-байтовый заголовок из оригинала в копию, а затем повторяете исходные кадры, начиная с последнего и работая вперед до первого. Вы копируете каждый кадр в обратное местоположение в массиве копий (то есть последний исходный кадр копируется в массив копирования сразу после заголовка, второй-последний кадр копируется после первого кадра и т. Д.). Затем просто переверните файл.
Для этого вам не нужна библиотека javax.sound - вам просто нужно иметь возможность копировать и манипулировать байтами. FYI, не все файлы WAV являются «каноническими», как это (канонические означает 44-байтовый заголовок плюс значения образца, и ничего больше). Формат WAV на самом деле является форматом RIFF, что теоретически требует более сложного извлечения значений выборки. На практике (особенно, если вы сами создаете файлы WAV), вы, как правило, избегаете гораздо более простого подхода, как я описал здесь.
ПРИМЕЧАНИЕ: если ваши звуки являются файлами MP3, то реверсирование является более сложной задачей, так как данные образца не сохраняются в качестве образцов в файле MP3. Если вы используете MP3-файлы, один из способов их отмены - конвертировать их в WAV, а затем отменить WAV-файл.
Hi @SamRowley Вы достигаете своей цели с помощью описанного алгоритма? Я скопирую первый 44-байтовый заголовок точно из оригинала, чтобы отменить аудиофайл, и я не мог сделать WAV-аудио для воспроизведения? Я использую sox и обратное аудио и проверяю, что 44-байтовый заголовок не совсем? Пожалуйста, если вы могли бы помочь мне с любыми советами, я буду благодарен –