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

时间:2014-07-19 23:01:05

标签: java android

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

相关问题