Android — чтение буфера от ввода SuperpoweredAndroidAudioIO?

Я пытаюсь создать приложение, которое принимает аудиосигнал с микрофона (используя Superpowered), а затем помещает его в пакет датаграмм для отправки.
Насколько я понял, я должен использовать класс SuperpoweredAndroidAudioIO для ввода, но я не понял, как я могу прочитать его буфер для отправки.

По сути, я хочу реализовать нечто подобное, используя Superpowered и 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), и если да, возможно, небольшой совет о том, с чего начать. Благодарю.

0

Решение

Это определенно возможно, и это также уменьшит время ожидания. Однако, это сложнее реализовать. Блокировка в обратном вызове обработки аудио не рекомендуется, поэтому вам нужен механизм без блокировки для отправки аудио из обратного вызова обработки аудио в другой поток. В этом другом потоке используйте стандартные BSD-сокеты для отправки данных по UDP.

0

Другие решения

Других решений пока нет …