从超强的AndroidAudioIO输入读取缓冲区
Reading buffer from SuperpoweredAndroidAudioIO input?
我正在尝试制作一个应用程序,该应用程序从麦克风(使用Superpowered(获取音频信号,然后将其推入数据报数据包中以发送。据我所知,我应该使用SuperpoweredAndroidAudioIO类进行输入,但我不明白如何读取它的缓冲区来发送它。
基本上,我想使用超能力和C++来实现与此类似的东西:
...
recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration,
audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency,
channelConfiguration, audioEncoding, recBufSize);
new Thread(){
byte[] buffer = new byte[recBufSize];
public void run(){
try {
datagramSocket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
audioRecord.startRecording();
isRecording = true;
while (isRecording){
int readSize = audioRecord.read(buffer, 0, buffer.length);
try {
DatagramPacket packet = new DatagramPacket(
buffer, readSize, receiverAddress, port);
datagramSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
datagramSocket.close();
}
}.start();
我是 JNI 和 NDK 的新手,所以我只想知道这是否可能或合理,以减少延迟(与使用 Java 代码相比(,如果是,也许是关于从哪里开始的小提示。谢谢。
这绝对是可能的,它也会减少延迟。但是,它的实现要复杂得多。不建议在音频处理回调中阻塞,因此需要一些无锁机制将音频从音频处理回调发送到另一个线程。在另一个线程中,然后使用标准BSD套接字通过UDP发送数据。
相关文章:
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 套接字读取后,我在缓冲区中看到意外输入
- 从标准输入读取文件后读取用户输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 从标准输入读取时zmq_poll不侦听信号
- 从超强的AndroidAudioIO输入读取缓冲区
- 如何实现将用户输入读取到提供的所有变量中的可变参数模板
- 如何使用重定向的标准输入读取文件,即cin(注意:不使用ifstream)
- 将空格分隔的输入读取到C++中的数组中
- Win32 - 从标准输入读取超时
- 从标准输入读取输入,并准备接收来自服务器的广播
- 终止将输入读取到int中的内容
- 如何从标准输入读取输入,直到按下空格或选项卡
- DirectX 11输入读取方法
- 将输入读取到动态大小的数组中