Android:监听辅助端口
Posted
技术标签:
【中文标题】Android:监听辅助端口【英文标题】:Android: listen to the auxiliary port 【发布时间】:2016-01-03 20:56:56 【问题描述】:我正在寻找一种方法让 android 应用程序监听来自 辅助 端口的信号并立即播放它。通常这个端口将用作声音(耳机)的输出,但我需要它来收听(更像是麦克风)。我的最终目标是将公对公辅助(音频)电缆从我的电视耳机插孔连接到 android 设备的耳机插孔。然后,我需要有一个可以将输入(从电视)广播到某些蓝牙耳机的应用程序。所以我的问题是,如何为耳机插孔设置监听器并立即播放接收/录制的音频?
我调查过的事情—— Audio Recording, Audio Track
【问题讨论】:
“通常此端口将用作声音的输出(耳机)”——嗯,对于大多数 Android 移动设备,耳机插孔同时支持两者。这就是有线耳机工作的原因。有 Y 型电缆为输入和输出信号提供单独的插孔,并将它们合并为设备耳机插孔的单个插头。获取其中之一,然后使用您链接到的内容。 【参考方案1】:正如您所指出的,您必须从链接中了解 AudioRecord 和 AudioTrack 类并使用一些示例。
我想到了一个主意。实际上,可以使用 audiotrack 类播放一些声音,这样一来您就不必担心 AudioRecord。使用音轨,您可以生成自己的样本并播放它们。根据波形的性质,您可以播放它们,每个都会有不同的声音。有在线音源发生器,如果您想更好地了解我,可以查看http://onlinetonegenerator.com/ 生成代表这些声波的样本可能是第一步,因为您可以通过手机听到它们。
之后你应该开始“玩蓝牙设备和手机之间的连接。一旦你知道声波是如何工作的,你可以尝试通过蓝牙协议将该文件发送到设备并检查它是否工作。
从 asyncTask 到主线程中另一个事物的任何操作之间的通信方式是通过 publishProgress(nameOfTheSample),因此在使用蓝牙连接时,您应该从那里获取样本。
完成此操作后,您可以担心电视的声音。
private class GenerateSamples extends AsyncTask<Void, Void, Void>
@Override
protected Void doInBackground(Void... params)
final int SAMPLE_RATE = 8000;
int minSize = AudioTrack.getMinBufferSize(SAMPLE_RATE,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC, SAMPLE_RATE,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
minSize,
AudioTrack.MODE_STREAM);
audioTrack.play();
short[] buffer =
8130,15752,22389,27625,31134,32695,32210,29711,25354,19410,12253,
4329,-3865,-11818,-19032,-25055,-29511,-32121,-32722,-31276,-27874,
-22728,-16160,-8582,-466
;
while (isPlaying)
audioTrack.write(buffer, 0, buffer.length);
return null;
【讨论】:
谢谢,使用您的一些代码以及其他一些东西,我能够完成我在问题中提出的问题。但是,我仍然无法让它的蓝牙部分工作。对此还有什么建议吗? @eduardo92以上是关于Android:监听辅助端口的主要内容,如果未能解决你的问题,请参考以下文章
Android辅助功能AccessibilityService监听当前包名变化
Android辅助功能AccessibilityService监听当前包名变化
Adb connect监听指定的主机和端口/Adb监听Visual Studio Emulator for Android模拟器