кодировать двоичный код на аудио-питон или C

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

Это позволяет записывать данные на кассету.

import binascii a = open('/Users/kyle/Desktop/untitled folder/unix commands.txt', 'r') f = open('/Users/kyle/Desktop/file_test.txt', 'w') c = a.read() b = bin(int(binascii.hexlify(c), 16)) f.write(b) f.close() 

Из ваших комментариев вы хотите по битам обрабатывать бинарные данные, превращая каждый бит в высокий или низкий звук.

Вам все равно нужно точно определить, что такое высокие и низкие звуки, и как долго каждый из них звучит (и есть промежуток между ними и т. Д.). Если вы делаете это медленно, например, 1/4 секунды на звук, тогда вы относитесь к ним как к заметкам. Если вы делаете это очень быстро, например, 1/44100 секунды, вы рассматриваете их как образцы. Человеческое ухо не может слышать 44100 разных звуков за секунду; вместо этого он слышит один звук до 22050 Гц.

После того, как вы приняли эти решения, в вашей проблеме есть две части.

Во-первых, вам нужно создать поток выборок – например, поток из 44100 16-битных целых чисел на каждую секунду. Для действительно простых вещей, таких как воспроизведение фрагмента необработанного файла PCM в 16-битном монофоническом формате 44k или создание прямоугольной волны, это тривиально. Для более сложных случаев, таких как воспроизведение фрагмента файла MP3 или синтез звука из синусоидальных волн и фильтров, вам понадобится помощь. Модуль audioop и несколько других в stdlib могут дать вам основы; кроме того, вам нужно будет искать PyPI для соответствующих модулей.

Во-вторых, вы должны отправить этот поток образцов на разъем для наушников. В Python нет встроенной поддержки. На некоторых платформах вы можете сделать это, просто открыв специальный файл и напишите ему. Но, в более общем плане, вам нужно будет найти стороннюю библиотеку PyPI.

Более простые модули работают для одного типа аудиосистемы. Mac и Windows имеют свои собственные стандарты, а у Linux – полдюжины разных. Существуют также некоторые модули Python, которые общаются с обертками более высокого уровня; вам, возможно, придется установить и настроить обертку, но как только вы это сделаете, ваш код будет работать в любой системе.


Итак, давайте рассмотрим один очень простой пример. Предположим, у вас установлен PortAudio в вашей системе, и вы установили PyAudio, чтобы поговорить с ним. Этот код будет воспроизводить квадратные волны 441 Гц и 220,5 Гц (чуть выше среднего С и низкий С) всего за 1/4 секунды (просто потому, что это действительно легко).

 import binascii a = open('/Users/kyle/Desktop/untitled folder/unix commands.txt', 'r') c = a.read() b = bin(int(binascii.hexlify(c), 16)) sample_stream = [] high_note = (b'\xFF'*100 + b'\0'*100) * 50 low_note = (b'\xFF'*50 + b'\0'*50) * 100 for bit in b[2:]: if bit == '1': sample_stream.extend(high_note) else: sample_stream.extend(low_note) sample_buffer = b''.join(sample_stream) p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(8), channels=1, rate=44100, output=True) stream.write(sample_buffer) 

Итак, вы хотите передавать цифровую информацию с помощью аудио? В основном вы хотите реализовать MODEM в программном обеспечении (независимо от того, является ли оно чистым программным обеспечением, он все еще называется модемом).

Модем (MOdulator-DEModulator) представляет собой устройство, которое модулирует аналоговый несущий сигнал для кодирования цифровой информации, а также демодулирует такой несущий сигнал для декодирования передаваемой информации. Целью является получение сигнала, который может быть легко передан и декодирован для воспроизведения исходных цифровых данных. Модемы могут использоваться по любым средствам передачи аналоговых сигналов, от светодиодов до радио. [Википедия]

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

Модемы, реализованные в чистом программном обеспечении, называются soft-модемами . Большинство программных модемов, которые я вижу в дикой природе, используют некоторую форму модуляции FSK :

Частотная манипуляция (FSK) является схемой частотной модуляции, в которой цифровая информация передается посредством дискретных изменений частоты несущей волны. 1 Простейшим FSK является двоичный FSK (BFSK). BFSK использует пару дискретных частот для передачи двоичной (0s и 1s) информации. 2 При такой схеме «1» называется частотой метки, а «0» называется пространственной частотой. Временная область модулированной несущей FSK проиллюстрирована на рисунках справа. [Википедия]

Есть очень интересные приложения для передачи данных через атмосферу через звуковые волны – я думаю, это то, что использует shopkick для проверки присутствия пользователя .

Для Python проверьте проект GnuRadio .

Для библиотеки C взгляните на работу Стива Андервуда (но, пожалуйста, не связывайтесь с ним с глупыми вопросами). Я использовал свой soft-модем для загрузки факсимильного сообщения на шлюз электронной почты для Asterisk (передача факса не намного больше, чем файл B / W TIFF, закодированный в аудио для передачи по телефонной линии).

Если вы ищете библиотеку, которая делает это, я бы рекомендовал libquiet . Он использует существующую библиотеку SDR для выполнения своей модуляции и предоставляет двоичные файлы, которые будут предлагать вам трубку на одном конце и подавать звук прямо на вашу звуковую карту, используя PortAudio на другом. Он имеет GMSK для передачи «по воздуху» с низким битрейтом и QAM для более высокого битрейта на основе кабеля.