Подтвердить что ты не робот

Как программно получить текущий уровень звука?

В принципе, мне нужен способ войти в текущий аудиовыход и проверить уровень звука, т.е. мне нужно проверить, есть ли что-то на звуковом устройстве или нет.

Мне не нужно проверять настройку громкости, но фактический уровень звука звукового потока воспроизведения.

Извините, я спрашивал о том, как это сделать в Windows, на Visual Studio 2008.

@mikerobi: Это является частью моего рассуждения - если оно отображается на системном томе, должен быть системный вызов, который может вернуть его

4b9b3361

Ответ 1

Это хороший вопрос. Ответ для 32-битных приложений Windows - это подключение к winm.dll и другим низкоуровневым DLL файлам управления аудио. В С# я бы создал класс-оболочку, содержащий прототипы extern-метода:

public class MyAudioWrapper
{
   [DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")]
   public extern void GetWaveVolume(IntPtr devicehandle, out int Volume);

   ...
}

Посмотрите эту ссылку для списка аудио-методов Windows; вы можете использовать микшер, или только контроллер размагничивания, для установки громкости. То, что вы хотите использовать, будет определять, какие библиотеки нужно импортировать. Вам нужно будет исследовать, как лучше всего определить прототип, и как получить дескриптор аудио/микшерного устройства.

Ответ 2

Вот полезная ссылка для Windows API invokations, и вот именно то, что вы ищете:

http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume


Поскольку требование изменилось, и вам не нужен уровень звука, я предлагаю следующее:

Я думаю, вам нужно прочитать, что воспроизводится в потоке вывода, и проанализировав данные в некоторых алгоритмах, вы можете решить, что погода что-то воспроизводится или нет. Для этого вам нужен MMDevice API

http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx

Я не хочу расстраивать вас, но поверьте, это не будет легко сделать, если вы не знакомы с неуправляемым кодом.

  • Вы должны заполнить многие структуры в каждом вызове.
  • Вам необходимо выполнить вызовы в определенном порядке.
  • Маршрутизация ссылок на структуры.

И даже если вы достигнете того, что вы не можете предвидеть результат поведения устройства. Удачи.