Потоковая речь с телефона Android на сервер для анализа звука не кажется легкой задачей.
Android:
В android аудиокорректор предоставляет хороший API, который я адаптировал из Stream Live Android Audio на сервер для потокового ввода микрофона на любой сервер.
Выходной сигнал генерируется в основном несколькими строками:
DatagramSocket socket = new DatagramSocket();
final InetAddress destination = InetAddress.getByName("1.1.1.1");
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,
audioFormat,minBufSize*10);
while(rec == true) {
minBufSize = recorder.read(buffer, 0, buffer.length);
packet = new DatagramPacket (buffer,buffer.length,destination,port);
socket.send(packet);
}
Выполнение работы сокета (которое должно быть в C/C++), тем не менее, дает мне головную боль. Обычно я хочу сделать три шага на моем сервере Ubuntu:
1. Получите аудиопоток (я локально использовал Portaudio для записи звука, я не смог найти подходящий инструмент еще в C/C++, который использовал бы поток в качестве входа. Есть ли что-то вроде эмулятора микрофона из сокета??)
2. Проанализируйте поток и дайте результат как jsonstring (или просто текстовую строку для первого
3. Поверните этот результат обратно на устройство Android.
Я новичок в сетевом программировании, и я пробовал много учебников, таких как:
http://codebase.eu/tutorial/linux-socket-programming-c/
http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html
http://www.the-tech-tutorial.com/?p=1555
И ни один из них не подходит для этой задачи. Так:
Как управлять потоками аудио в C/C++.
И в каком формате поток доступен для дальнейшей обработки?
Любая помощь могла бы быть полезна. Благодарю.
Вы можете взглянуть на QAudioOutput. В этом вопросе вы можете прочитать, как отправлять аудиопоток через ethernet с дейтаграммами UDP:
Как я могу воспроизводить потоковое аудио через Ethernet в Qt?
netcat
иaplay
/arecord
.