Создайте файл wav со скрытыми двоичными данными и прочитайте его (Java) - PullRequest
1 голос
/ 23 июня 2011

Я хочу преобразовать текстовую строку в формат файла WAV на высоких частотах (18500 Гц +): это будет кодировщик. И создайте механизм для декодирования этой текстовой строки из записи в формате wav, которая будет поддерживать контроль ошибок, поскольку я, очевидно, не буду использовать этот файл для чтения, но для записи этого звука.

Спасибо

1 Ответ

1 голос
/ 23 июня 2011

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

Так что я предполагаю, что вы не ищете подробные сведения о написании файлов WAV на низком уровне (я уверен, что вы можете найтидокументация о том, как читать и записывать отдельные образцы в файл WAV).Очевидно, что самым простым подходом было бы просто взять каждый байт исходной строки и сохранить его как образец в файле WAV (при условии 8-битной записи. Если это 16-битная запись, вы можете сохранить два байта на выборкуЕсли это стерео 16-битная запись, вы можете хранить четыре байта на семпл).Затем вы можете просто прочитать обратно файл WAV и прочитать примеры обратно в байтах.Это простой подход, но, как вы говорите, вы хотите иметь возможность (предположительно аналоговой) записи звука, а затем считывать его обратно в файл WAV и при этом иметь возможность читать данные.

При описанном выше подходе, если аналоговая запись не совсем точна (и как это может быть), вы потеряете байты сообщения.Это означает, что вам нужно хранить сообщение таким образом, чтобы пропущенные байты или байты с небольшой ошибкой не были проблемой.То, как вы это сделаете, будет зависеть от того, какой именно «ущерб» будет иметь место со звуковым файлом.Я ожидал бы две основные формы повреждения:

  • "Вертикальное" повреждение: образец (байт) будет иметь немного более высокое или более низкое значение, чем первоначально.
  • "Горизонтальный"повреждение: образцы могут быть усреднены, растянуты или сдавлены горизонтально.С точки зрения байтов это означает, что некоторые выборки могут повторяться, в то время как другие могут отсутствовать.

Для борьбы с этим вам нужна некоторая избыточность в сообщении.Большая избыточность означает, что сообщение будет занимать больше места (дольше), но будет более надежным.

Я бы порекомендовал подумать о том, как старые (до мобильных) тональные сигналы телефонного набора работали: каждый ключ генерировал уникальный тональный сигнал.и послал это через провод.Тоны достаточно длинные и достаточно далеко друг от друга по высоте тона, чтобы их можно было различить даже с учетом вышеуказанных форм повреждения.Итак, выберите два параметра: а) длина и б) частота-дельта .Для каждого байта данных выберите частоту с интервалом 256 байтов частота-дельта Герц.Затем сгенерируйте синусоидальную волну для длины миллисекунд этой частоты.Это кодирует намного больше избыточности, чем вышеупомянутый подход «один байт на выборку», поскольку каждый байт занимает много выборок, и если вы потеряете несколько выборок, это не имеет значения.

Когда вы читаете их обратнов, прочитайте каждую длину миллисекунд аудиоданных и затем оцените частоту синусоидальной волны.Сопоставьте это с байтовым значением с ближайшей частотой.

Очевидно, что более длинные значения длина и дальше друг от друга частота-дельта сделают сигнал более надежным, нотребуют, чтобы звук был более длинным и высокочастотным, соответственно.Поэтому вам придется поиграться с этими значениями, чтобы увидеть, что работает.

Несколько последних мыслей, поскольку в вашем заголовке написано «скрытые» двоичные данные:

  • Если вы действительно хотите получить данныечтобы быть «скрытым», подумайте о том, чтобы зашифровать его перед кодированием в аудио.
  • Если вы хотите использовать стеганографический подход, вам придется ознакомиться со звуковой стеганографией (я полагаю, вы можете использовать вышеописанные методы, ноВы должны будете вставить их как сигналы с чрезвычайно низкой громкостью поверх существующего звука).
...