从音频脉冲中获取二进制数据

Posted

技术标签:

【中文标题】从音频脉冲中获取二进制数据【英文标题】:Get binary data from audio impulses 【发布时间】:2010-12-24 14:45:58 【问题描述】:

我有红外传感器,它有TRS connector,我可以将我的遥控器信号录制成音频。 现在我想用电视遥控器控制我的电脑,但我不知道如何将音频输入与预先录制的音频进行比较。但是当我意识到这些音频波只包含某种数据(二进制)后,我可以将它们转换成二进制或十六进制,这样比较起来就容易多了。

波浪看起来像这样:

还有这个:

这些是“OK”按钮的记录,有时右声道也有一些脉冲,我不知道为什么,好像传感器的连接损坏了。 好吧,反正也没关系

我需要 Python 程序的帮助,该程序可以从音频输入(麦克风)实时读取这些脉冲并将其转换为二进制。 我知道这听起来像“为我做它,而我享受我的生活”,但我没有声音转换/阅读的经验......我一直在寻找用于录制和阅读音频的 python 示例,但没有成功。

【问题讨论】:

这些 SO 问题可能会帮助您朝着正确的方向开始:***.com/q/892199/397366 和 ***.com/q/2668442/397366。看看上面提到的模块 PyAudio,试一试。 您可能会遇到困难。查看有关IR remote control 的***文章PC control 的这一部分。如果您仍然想自己在软件中进行操作,还有其他文章介绍了这些设备常用的不同协议,例如 RC-5。 请注意,您可以花 20 美元购买带软件的遥控器和 USB 接收器。现在,如果您出于某种原因想要这样做,请继续,但您不必这样做。 【参考方案1】:

如果您可以放弃实时要求,这很容易:只需将数据保存为 .wav 文件,然后使用 Python 的wave module 将其读取。

这是一个如何在 Python 中读取 wav 文件的示例,

import wave

w = wave.open("myfile.wav", "rb")
binary_data = w.readframes(w.getnframes())
w.close()

可以实时执行此操作,但更难,尽管仍然不是超级困难。对于实时,我使用PyAudio,一个好的开始是按照演示中的示例进行操作。在这些中,您基本上打开一个流并一次读取小块,如果您想要任何交互性,您需要在线程中执行此操作。

(另外,请注意,声卡会过滤您的音频输入,因此您看到的并不是真正的输入信号。特别是,我认为遥控器的载波频率通常在 40KHz 左右,即高于人类的听力,所以我怀疑声卡在这个范围内是否能正常工作,尽管根据你想要做什么,它们可能就足够了。)

【讨论】:

以上是关于从音频脉冲中获取二进制数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 中的十六进制/二进制(原始数据)值生成音频文件?

同时从binaryjs服务器播放传入的ArrayBuffer音频二进制数据

音频相关的基本知识

如何将字节数组转换为音频文件?

几种常见的I2S数据格式(转)

使用一个 pyaudio 流进行数据读取和写入