2011-01-12 3 views
5

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

Я нашел вопрос здесь, который решает проблемы в Java (Click Here For Question)

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

+0

Hi @SamRowley Вы достигаете своей цели с помощью описанного алгоритма? Я скопирую первый 44-байтовый заголовок точно из оригинала, чтобы отменить аудиофайл, и я не мог сделать WAV-аудио для воспроизведения? Я использую sox и обратное аудио и проверяю, что 44-байтовый заголовок не совсем? Пожалуйста, если вы могли бы помочь мне с любыми советами, я буду благодарен –

ответ

5

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

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

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

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

+0

Я создаю WAV-файл, захватывая аудио с микрофона с помощью MediaRecorder, поэтому я предполагаю, что это будет хорошо? Как я могу получить файл, сохраненный с SD-карты, в массив байтов и скопировать 44-битный заголовок? Спасибо за ваш первый ответ, он был полезен до сих пор, и я понимаю концепцию. – SamRowley

+1

Да, WAV-файл, который вы получаете от MediaRecorder, скорее всего, канонический, так что все должно быть в порядке. Вот ссылка с еще одним кодом, который поможет вам сделать то, что вам нужно сделать: http://www.dreamincode.net/forums/topic/171550-converting-short-array-to-byte-array-using-java- на Android-устройства / – MusiGenesis

Смежные вопросы