Обратный аудиофайл в Android

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

Я нашел здесь вопрос, который решает проблему в java (Нажмите здесь, чтобы задать вопрос)

Но для этого используется библиотека javax.sound, которую Android не поддерживает. Понадобится ли мне эта библиотека для решения этой проблемы или есть другой способ реверсировать аудиофайл?


person SamRowley    schedule 12.01.2011    source источник
comment
Привет @SamRowley Вы достигли своей цели с помощью описанного алгоритма? Я копирую первый 44-байтовый заголовок точно из исходного аудиофайла в обратном порядке, и у меня не получается заставить wav-аудио воспроизводиться? Я использую sox и реверсивное аудио и проверяю, что 44-байтный заголовок точно не соответствует? Пожалуйста, если вы можете помочь мне с каким-либо советом, я буду признателен.   -  person Gueorgui Obregon    schedule 27.01.2016


Ответы (1)


Типичный файл WAV состоит из 44-байтового заголовка, за которым следуют фактические значения образцов. Размер «кадра» зависит от свойств файла WAV: стереофонический файл с 16-битным сэмплом будет иметь размер кадра 4 байта (два байта для левого сэмпла и два байта для правого семпла). ).

Таким образом, в коде вы должны создать второй файл WAV, создав массив байтов того же общего размера, что и оригинал. Вы копируете 44-байтовый заголовок из оригинала в копию, а затем перебираете исходные кадры, начиная с последнего и продвигаясь к первому. Вы копируете каждый кадр в обратное место в массиве копирования (т. е. последний исходный кадр копируется в массив копирования сразу после заголовка; предпоследний кадр копируется после первого кадра и т. д.). Затем просто воспроизведите файл в обратном порядке.

Поэтому для этого вам не нужна библиотека javax.sound — вам просто нужно иметь возможность копировать байты и манипулировать ими. К вашему сведению, не все файлы WAV являются «каноническими» (канонический означает 44-байтовый заголовок плюс образцы значений и ничего больше). Формат WAV на самом деле является форматом RIFF, а это означает, что теоретически вам нужно выполнять более сложное извлечение значений выборки. На практике (особенно если вы сами создаете WAV-файлы) обычно можно обойтись гораздо более простым подходом, описанным здесь.

ПРИМЕЧАНИЕ: если ваши звуки представляют собой файлы MP3, то реверсирование является более сложной задачей, поскольку данные сэмплов не сохраняются как сэмплы в файле MP3. Если вы используете файлы MP3, один из способов их реверсирования — это преобразовать их в WAV, а затем реверсировать файл WAV.

person MusiGenesis    schedule 12.01.2011
comment
Я создаю файл WAV, записывая звук с микрофона с помощью MediaRecorder, поэтому я предполагаю, что этот способ подойдет? Как мне получить файл, сохраненный с SD-карты, в массив байтов и скопировать 44-битный заголовок? Спасибо за ваш первый ответ, он был полезен до сих пор, и я понимаю концепцию. - person SamRowley; 13.01.2011
comment
Да, файл WAV, который вы получаете от MediaRecorder, скорее всего, канонический, так что с вами все будет в порядке. Вот ссылка с дополнительным кодом, который должен помочь вам сделать то, что вам нужно: dreamincode.net/forums/topic/ - person MusiGenesis; 13.01.2011
comment
@MusiGenesis, привет, спасибо за информацию, но у меня небольшая проблема. когда я возвращаю его, это сопровождается большим искажением, очень громким и плохим шумом. - person Ricardo Rodrigues; 18.06.2019