- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在编写一个用作网络 radio 的 Android 应用程序。该应用程序的部分功能是可以通过红外线 Remote 进行控制。红外遥控代码通过麦克风端口作为模拟音频输入。如果我记录一些信号并在 Audacity 中查看它们,我就很容易看出每个代码是什么。比如下面是0111111010011001011111101000001或者0x3F4CBF41。 我的问题是如何在这些信号进入时以编程方式检测它们并将它们转换为整数代码。我研究过一些打包的解决方案,如 LIRC,但它们是用 C 编写的,很难集成。在我看来,做这样简单的分析,native 也太过分了。我也查看了像 musicg 这样的库,但我找不到任何简单的方法来实时转换代码。
最佳答案
从您的问题中可以清楚地看出您熟悉 PWM 以及读取从 IR 接收器接收到的信号的方法。因此,我研究了如何使用 java 以一种可以像大胆窗口一样轻松解释的方法来存储数据。
javax.sound.sampled.spi 中有几个方法我认为这会有所帮助。
第一个是getAudioStream()在 AudioFileReader
中。这将返回一个 AudioStream
,它还有一些可能有用的方法。我认为最适合您的目的是 read()它返回流中的下一个字节。如果更方便的话,您也可以提供一个字节数组来读取部分甚至整个流。
现在您有了一个字节列表或字节数组,您可以定期将它们解释为高电平或低电平(因为这是采样音频,每个字节之间的时间是恒定的)这就是 PWM 解码所需的一切!
通过找到近似端点,您可以将字节模式随时间转变为高/低持续时间模式。因为我知道你可以阅读(在你的问题中证明)我将跳过迂腐的转换,但是将 hhhlhllhhhhhhlllhh
转换为代码的十六进制表示是微不足道的。
TL;DR:捕获流,读取每个字节,通过时间转换,转换为二进制。
关于java - 通过音频输入解码遥控代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845761/
我在尝试从 ZeroMQ 构建“hello world”示例时遇到以下错误。 Error LNK2019: unresolved external symbol __imp__zmq_msg_init
我是一名优秀的程序员,十分优秀!