Попытка захватить аудио из существующего процесса с помощью PID. Регулирование OBS Audio Capture OpenSource, я сделал capture.cpp < /p> [code]const fs = require('fs'); const capture = require('bindings')('capture');
setTimeout(() => { capture.stopCapture(); out.end(() => { console.log('generated dump.pcm'); console.log(`file size: ${fs.statSync('dump.pcm').size} bytes`); }); }, 5000); < /code> Это мой код JS для отладки. Когда я его выполняю, я получаю информацию об этом отладке. < /P> E:\projects\YTM_Stream\electron-quick-start>node capture-test.js Capturing audio from PID 20744 for 5 seconds... [Native] Starting capture: PID=20744 PID: 20744 EXE: C:\Program Files\WindowsApps\Microsoft.ZuneMusic_11.2504.4.0_x64__8wekyb3d8bbwe\Microsoft.Media.Player.exe PID: 0 EXE: [native] Capture started generated dump.pcm file size: 0 bytes < /code> В основном он должен захватить звук Windows Media Player в течение 5 секунд, но он генерирует только пустой файл. Он не генерирует ошибки, но не результатов тоже. < /P> Функция захвата выглядит так. < /P> void CaptureAudioLoopByPID(DWORD pid, const std::wstring& exePath) { std::wcout GetSession(i, &ctrl))) continue; IAudioSessionControl2* ctrl2 = nullptr; if (FAILED(ctrl->QueryInterface(__uuidof(IAudioSessionControl2), (void**)&ctrl2))) { ctrl->Release(); continue; } ctrl->Release();
DWORD sessionPid = 0; ctrl2->GetProcessId(&sessionPid); if (sessionPid == pid) { pTargetCtrl = ctrl2; break; } ctrl2->Release(); } if (!pTargetCtrl) { tsfn.BlockingCall([](Napi::Env env, Napi::Function cb) { cb.Call({ Napi::String::New(env, "No session for PID") }); }); goto cleanup; }
if (FAILED(pTargetCtrl->QueryInterface(__uuidof(IAudioClient), (void**)&pAudioClient))) goto cleanup; pTargetCtrl->Release(); if (FAILED(pAudioClient->GetMixFormat(&pwfx))) goto cleanup; if (FAILED(pAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_LOOPBACK, 0, 0, pwfx, nullptr))) goto cleanup; if (FAILED(pAudioClient->GetService(__uuidof(IAudioCaptureClient), (void**)&pCaptureClient))) goto cleanup; if (FAILED(pAudioClient->Start())) goto cleanup;
capturing = true; while (capturing) { UINT32 packetLen = 0; if (FAILED(pCaptureClient->GetNextPacketSize(&packetLen))) break; while (packetLen > 0) { BYTE* data = nullptr; UINT32 frames = 0; DWORD flags = 0; if (FAILED(pCaptureClient->GetBuffer(&data, &frames, &flags, nullptr, nullptr))) break;
if (!pcm.empty()) { napi_status st = tsfn.NonBlockingCall([pcm = std::move(pcm)](Napi::Env env, Napi::Function cb) { cb.Call({ Napi::Buffer::Copy(env, pcm.data(), pcm.size()) }); }); if (st == napi_queue_full) Sleep(5); }
if (FAILED(pCaptureClient->GetNextPacketSize(&packetLen))) break; } Sleep(10); }
pAudioClient->Stop();
cleanup: if (pwfx) CoTaskMemFree(pwfx); if (pCaptureClient) pCaptureClient->Release(); if (pAudioClient) pAudioClient->Release(); if (pSessEnum) pSessEnum->Release(); if (pMgr) pMgr->Release(); if (pDevice) pDevice->Release(); if (pEnum) pEnum->Release(); CoUninitialize(); }
Попытка захватить аудио из существующего процесса с помощью PID. Регулирование OBS Audio Capture OpenSource, я сделал capture.cpp
const fs = require('fs');
const capture = require('bindings')('capture');
У меня есть Windows C ++ DLL. Он предоставляет некоторые функции, такие как ADD (1,2). Но у меня нет исходного кода для этого DLL, это возможные функции вызова в этом DLL через Nodejs, я имею в виду, через веб -сторону и HTTP. Если это возможно, что...
Прежде всего, я пытаюсь сделать как приложение для рации, я сначала устанавливаю соединения с сервером NodeJS через сокет.io, соединение работает, но проблема с передачей звука, у меня есть напечатал много информации на сервере узла и в приложении...