我正在寻找让Android应用程序收听来自辅助端口的信号并立即播放的方法。通常这个端口将用作声音(耳机)的输出,但我需要它来收听(更像是麦克风)。我的最终目标是将男性辅助(音频)电缆从我的电视耳机插孔连接到Android设备的耳机插孔。然后,我需要一个可以将输入(从电视)广播到某些蓝牙耳机的应用程序。所以我的问题是,如何设置耳机插孔的监听器并立即播放接收/录制的音频?
我调查过的事情 - Audio Recording,Audio Track
答案 0 :(得分:0)
正如您所指出的那样,您必须从链接中了解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;
}
}
}