Я работал над довольно интересным проектом, я хочу захватывать звук из стерео микса на windows в PCM 44100 Гц 16 бит и упаковывать его через сеть с помощью netcat (используя cygwin).
Цель этого проекта — иметь возможность подключить аудиовыход Windows к аудио-серверу pulse, слушающему где-то в локальной сети.
До сих пор я был в состоянии выгрузить аудио в файл .wav, и, скачав этот файл и отправив его в netcat, успешно доставил его на сервер pulseaudio.
Это хорошо, но я хочу запустить его, используя прямой канал от моего клиента к netcat, поэтому звук должен быть отправлен на стандартный вывод.
Дело в том, что я не могу заставить Windows записывать аудио на стандартный вывод, пока я привязываюсь к функции mmioOpen:
//Original instruction, where filename is a LPWSTR with the file name
//outputFile=mmioOpen(filename,&MMinfo,MMIO_WRITE | MMIO_CREATE);
//New instruction, quite dirty
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
outputFile=(HMMIO)out;
//Rest of the function
Не работает, я читал документацию и также пытался настроить структуру MMIOINFO так, чтобы она указывала на стандартный вывод HANDLE и все, но безрезультатно.
Я не могу найти никакой информации в документах о том, возможно ли использовать стандартный вывод в качестве вывода HANDLE через mmioOpen.
Я думал об использовании промежуточного файла в качестве буфера и продолжаю помещать его в стандартный вывод в отдельном потоке, но я не верю, что это хорошо для задержки, и что это правильный способ решения этой проблемы.
Кто-нибудь знает, есть ли другой способ захватить аудио и записать его прямо в стандартный вывод?
Дескриптор, возвращаемый mmioOpen, не является «выходным дескриптором». Это полезно только для перехода к другим функциям mmio.
Но почему вы используете mmioOpen? Это для чтения файла WAV. Для получения аудиоданных в реальном времени используйте функцию waveInOpen и связанные с ней waveIn ….
Других решений пока нет …