通过音频输入解码遥控代码

kri*_*spy 9 java android

我目前正在编写一个充当互联网广播的Android应用程序.该应用程序的部分功能是它可通过红外遥控器控制.红外遥控代码通过麦克风端口作为模拟音频输入.如果我录制一些信号并在Audacity中查看它们,我很容易看到每个代码是什么.例如,以下是0111111010011001011111101000001或0x3F4CBF41. 在此输入图像描述 我的问题是,当它们进入并将它们转换为整数代码时,我如何以编程方式检测这些信号.我已经研究了一些像LIRC这样的打包解决方案,但它们是用C语言编写的,很难集成.在我看来,像本地人会过度杀戮做这样简单的分析.我也查看了像musicg这样的库,但我找不到任何简单的方法来实时转换代码.

Ada*_*ost 5

从您的问题中可以清楚地看出,您熟悉PWM和读取从IR接收器接收的信号的方法.因此,我已经研究了如何使用java将数据存储在一个方法中,您可以像大胆窗口一样轻松地将其解释.

javax.sound.sampled.spi中有几个方法我认为这会有所帮助.

第一个是getAudioStream()在AudioFileReader.这将返回一个AudioStream可能有用的方法.我认为最适合您的目的是read(),它返回流中的下一个字节.如果更方便的话,您可以提供一个字节数组来读取部分甚至整个流.

所以现在你有一个列表或字节数组,你可以定期将它们解释为高或低(因为这是采样音频,每个字节之间的时间是恒定的),这就是PWM解码所需的全部!

通过查找近似端点,您可以将字节模式随时间转换为高/低持续时间模式.因为我知道你可以阅读(在你的问题中演示)我将跳过迂腐的转换,但转换hhhlhllhhhhhhlllhh成代码的十六进制表示是微不足道的.

TL; DR:捕获流,读取每个字节,通过时间转换,转换为二进制.