Я пытаюсь создать приложение, которое принимает аудиосигнал с микрофона (используя 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), и если да, возможно, небольшой совет о том, с чего начать. Благодарю.
Это определенно возможно, и это также уменьшит время ожидания. Однако, это сложнее реализовать. Блокировка в обратном вызове обработки аудио не рекомендуется, поэтому вам нужен механизм без блокировки для отправки аудио из обратного вызова обработки аудио в другой поток. В этом другом потоке используйте стандартные BSD-сокеты для отправки данных по UDP.
Других решений пока нет …