使用 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种不同的声音;相反,它会听到高达 22050Hz 的单一声音。
做出这些决定后,您的问题分为两个部分。
首先,您必须生成样本流 - 例如,每秒 44100 个 16 位整数的流。对于非常简单的事情,例如以 44k 16 位单声道格式播放一大块原始 PCM 文件,或生成方波,这是微不足道的。对于更复杂的情况,例如播放一段 MP3 文件或从正弦波和滤波器中合成声音,您需要一些帮助。 audioop
模块和 stdlib 中的其他一些模块,可以为您提供基础知识;除此之外,您还需要在 PyPI 中搜索合适的模块。
其次,您必须将该样本流发送到耳机插孔。在 Python 中没有对此的内置支持。在某些平台上,您只需打开一个特殊文件并写入即可完成此操作。但是,更一般地说,您需要在 PyPI 上找到第三方库。
较简单的模块适用于一种特定类型的音频系统。 Mac 和 Windows 都有自己的标准,而 Linux 有六种不同的标准。还有一些 Python 模块可以与更高级别的包装器对话;您可能必须安装和设置包装器,但是一旦您这样做了,您的代码就可以在任何系统上运行。
那么,让我们来看一个非常简单的示例。假设您已经在您的系统上设置了 PortAudio,并且您已经安装了 PyAudio与它交谈。此代码将播放 441Hz 和 220.5Hz 的方波(略高于中 C 和低 C)不到 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)
关于python - 将二进制编码为音频 python 或 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930271/