Перейти к содержанию
    

Получить доступ к выходному аудиобуферу чужого приложения

Может кто знает , как получить данные из выходного звукового буфера стороннего приложения. Вин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, muravei сказал:

Может кто знает , как получить данные из выходного звукового буфера стороннего приложения. Вин.

Запустить debug?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, как работает доступ к аудиокарте в SpectraLab, но свою программу вычисления спектра я запускаю параллельно и обращаюсь  к той же карте. И спектры обе программы показывают одинаковые, причем могу даже задавать разные частоты дискретизации.

Получается не доступ к одному аудиобуферу, а доступ к одному аудиоустройству (видимо, с разделением по времени)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, V_G сказал:

запускаю параллельно

У вас , наверно, в обоих случаях используется входной, а в моем случае придется использовать разные(вх. и вых.). А хочется тоже один. Выходной.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, muravei сказал:

Нет. Хочу сделать приложение , которое воспользуется этими данными. Типа, хак. :)

Так вам данные нужны или аудио?

Если аудио, тогда надо либо подключится к микшеру через API или ваша программа должна прикинуться микшером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, muravei сказал:

Может кто знает , как получить данные из выходного звукового буфера стороннего приложения. Вин.

Читать про хуки:

https://www.rsdn.org/article/baseserv/winhooks.xml

https://wasm.in/blogs/win32-api-urok-24-windows-xuki.38/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 часов назад, HardEgor сказал:

данные нужны или аудио?

данные аудио. :) Если это будет двойное преобразование через аналог, то не пойдет. 

 

11 часов назад, jcxz сказал:

про хуки

Думаю, надо про сообщения.

Ведь приложение должно сообщить вин , где создало буфер и заполнило его. 

Но  этих сообщений 100500, но может есть мультимедийные?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, muravei сказал:

Но  этих сообщений 100500, но может есть мультимедийные?

С помощью хуков можно перехватывать сообщения, помониторить какие куда передаются при определённых действиях (воспроизведении аудио), поисследовать.

Второй случай: Если вам нужно перехватывать данные только определённого приложения (а не любого), то и сообщений не нужно - с помощью хуков внедряетесь в память целевого приложения и имеете доступ ко всем его переменным и буферам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, jcxz сказал:

можно перехватывать сообщения

Хорошо бы знать какие.

20 минут назад, jcxz сказал:

целевого приложения

А вот его у меня ,возможно ,не будет.

Более 10лет назад, я делал программку на ВМ , камеру из смартфона , с передачей снимков в облако.

Т.к. я еще тот программист, взял программу видеокамеры и тотал командер с вебдав плагином и сделал имитацию "пользователя", рассылая сообщения.

 

Еще можно написать свой звуковой драйвер. :) Может , у кого есть исходник. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть библиотека Naudio. В C# выходной поток можно получить так

MMDevice mm_dev;

private void MainForm_Load(object sender, EventArgs e)
{
    if (OutputDevice.DeviceCount > 0)
    {
        outDevice = new OutputDevice(0);

        MMDeviceEnumerator enumerator = new MMDeviceEnumerator();
        //my sound card
        mm_dev = enumerator.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active)[0];

         loopback_capture = new WasapiLoopbackCapture(mm_dev);
         loopback_capture.DataAvailable += Loopback_capture_DataAvailable;
         loopback_capture.RecordingStopped += Loopback_capture_RecordingStopped;
         
         wave_writer = new WaveFileWriter(full_file_path, waveInStream.WaveFormat);
    }
}

private void Loopback_capture_DataAvailable(object sender, WaveInEventArgs e)
{
     wave_writer.Write(e.Buffer, 0, e.BytesRecorded);
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

04.04.2021 в 10:31, jenya7 сказал:

Loopback

Не уверен, что это именно то что мне надо. Но спасибо.

Кстати, я пробовал упражняться с 

04.04.2021 в 10:31, jenya7 сказал:

Naudio

Что-то мне не удалось его подключить. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, muravei said:

Не уверен, что это именно то что мне надо. Но спасибо.

Кстати, я пробовал упражняться с 

Что-то мне не удалось его подключить. :(

Tools-> NuGet Package Manager -> Manage NuGet Packages for Solution в поиске забиваете Naudio  и инсталируете. все dll портируются в ваш проект.

ну и в файле где хотите использовать

using NAudio;
using NAudio.Wave;
using NAudio.CoreAudioApi;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...