Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过音频输入解码遥控代码_Java_Android - Fatal编程技术网

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

Java 通过音频输入解码遥控代码,java,android,Java,Android,我目前正在编写一个Android应用程序,它可以作为互联网广播。该应用程序的部分功能是通过红外遥控器进行控制。红外遥控代码通过麦克风端口作为模拟音频输入。如果我记录一些信号并大胆地观察它们,我很容易看到每个代码是什么。例如,以下为01111110011001011111101000001或0x3F4CBF41。 我的问题是,当这些信号传入时,如何通过编程检测它们,并将它们转换为整数代码。我研究过一些打包的解决方案,比如LIRC,但它们是用C编写的,很难集成。在我看来,做这样简单的分析,本地人似乎

我目前正在编写一个Android应用程序,它可以作为互联网广播。该应用程序的部分功能是通过红外遥控器进行控制。红外遥控代码通过麦克风端口作为模拟音频输入。如果我记录一些信号并大胆地观察它们,我很容易看到每个代码是什么。例如,以下为01111110011001011111101000001或0x3F4CBF41。
我的问题是,当这些信号传入时,如何通过编程检测它们,并将它们转换为整数代码。我研究过一些打包的解决方案,比如LIRC,但它们是用C编写的,很难集成。在我看来,做这样简单的分析,本地人似乎也太过分了。我还研究了musicg之类的库,但我找不到任何简单的方法来实时转换代码

从您的问题中可以明显看出,您熟悉PWM和读取从IR接收器接收到的信号的方法。因此,我研究了如何使用java将数据存储在一种与audacity窗口一样容易解释的方法中

我认为有几种方法会有所帮助

第一个是在
AudioFileReader
中。这将返回一个
AudioStream
,其中还有一些可能被证明有用的方法。我认为最方便的方法是返回流中的下一个字节。如果更方便的话,还可以提供一个字节数组来读取部分甚至整个流

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

通过找到一个近似端点,您可以随时间将字节模式转换为高/低持续时间模式。因为我知道你可以阅读(在你的问题中演示)我将跳过学究式的转换,但是将
hhlhlhhhlllhh
转换为代码的十六进制表示形式并不重要


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

我不确定我是否理解这里缺少的信息。我应该附加一个包含数据的声音文件吗?到目前为止,我的应用程序没有记录和保存数据。它作为模拟信号通过麦克风端口输入。在它被处理之后,我所期望的唯一输出是一个整数,表示我在问题中提到的远程代码。你能说得更具体些吗?至于复杂性,我花了很多时间编写计算机视觉应用程序。我认为这在复杂性上是相似的。我错了吗?@Xaver作为一个为类似需求开发了专有解决方案的人,我必须同意海报的观点,已经提供了必要的信息。你的问题只是与这篇文章的问题无关的,谢谢你的回复。我听从了你的建议,我肯定在进步。现在我所理解的是画面的波动似乎比它们的大胆要大得多。在一次脉冲中,它们在正数和负数之间来回反弹数次。你能想出一个解释吗?试着改变你的采样率。你可能需要对红外传感器数据进行后处理。以非常高的速率采样,然后对采样进行时间平均以获得平滑的信号。有件事我不明白。Audacity录制的采样率和我在Java中看到的采样率必须相同。我目前正在将PCM音频加载到Java中。我错过什么了吗?Audacity是否在不告诉我的情况下降低了可视化的采样率?对于现在发现这一点的任何人来说,我在Java中看到奇怪的音频数据的原因是,它输出的是一系列较大的整数,这些整数是一系列的多字节,需要在处理之前合并回
int
s。