Я пытаюсь получить аудиоинформацию с помощью powershell 4.0, в частности, пиковый звук в качестве звука. Таким образом, я нашел .Net-обертку для основного аудио api (можно найти here, а DLL-файл находится в CoreAudio \ bin) и пытался это использовать. Однако, для жизни меня, я не могу понять, как это сделать. Основная проблема заключается в том, что я не смог выяснить синтаксис доступа и использования методов классов, содержащихся в сборке. В частности, я пытаюсь работать с CoreAudio.AudioPeakMeter и CoreAudio.AudioMute.Проблемы с конструктором/методом с объектом framework .net в powershell
CoreAudio.AudioPeakMeter, например, должен иметь два члена, GetChannelCount и GetLevel.
Я попытался с помощью
[CoreAudio.AudioPeakMeter] | Get-Member -Static
но что только возвращает Равно и ReferenceEquals что подтверждается, когда я использую
[CoreAudio.AudioPeakMeter]::
Я даже нашел функцию кто-то разместил в Интернете для получения конструкторов. Опять же, ничего не получилось. Как в буквальном смысле ничего. Выход не возвращается. Я подтвердил, что это работает для других, таких как System.Windows.Thickness, который использовался в качестве примера в сообщении.
Вот функция Get-Contructor, которую я нашел, если вам интересно.
function get-Constructor ([type]$type, [Switch]$FullName)
{
foreach ($c in $type.GetConstructors())
{
$type.Name + "("
foreach ($p in $c.GetParameters())
{
if ($fullName)
{
"`t{0} {1}," -f $p.ParameterType.FullName, $p.Name
}else
{
"`t{0} {1}," -f $p.ParameterType.Name, $p.Name
}
}
")"
}
}
ОДНАКО, я знаю GetChannelCount и GetLevel существуют и могут быть найдены в ISE через
(New-Object CoreAudio.AudioPeakMeter).GetChannelCount
, а также с помощью команды
[CoreAudio.AudioPeakMeter].GetMethods()
Для ISE, после ввода даты и GetChannelCount и GetLevel заполняются в списке ISE. Но, конечно, поскольку исходной проблемой является ошибка New-Object re на CoreAudio.AudioPeakMeter, powershell даже не пытается получить доступ к двум членам.
Последняя команда возвращает this, которую я отправил в pastebin.
Свойство метода IsSecurityCritical заставило меня подумать, что мне нужно запустить powershell с повышенными привилегиями. Однако, похоже, это не так, поскольку это не имело никакого значения.
Я подтвердил, что эти результаты одинаковы для всех классов в сборке. Однако я могу получить доступ к счетчикам. Вот пример:
[enum]::GetNames([CoreAudio.DEVICE_STATE])
Это верно вернет все возможные значения CoreAudio.DEVICE_STATE.
Есть ли что-то, что мне не хватает? Насколько я могу сказать, сборка правильно загружена (я использовал Add-Type), но powershell говорит, что методы класса не существуют, даже если они это делают.
Класс 'AudioPeakMeter' не имеет открытого конструктора. Похоже, что один из немногих классов с открытым конструктором - 'MMDeviceEnumerator'. Я бы начал там. Вероятно, вы могли бы получить больше информации от чтения включенных образцов. –
Мои знания о C# (или любой версии C на самом деле) довольно ограничены, поэтому я стараюсь понять исходный код и примеры как можно лучше, но я все еще недостаточно. Из того, что я могу сказать, и из моих исследований, похоже, что у AudioPeakMeter есть публичные конструкторы, но Powershell, похоже, не может их увидеть. Я также заметил, что '[CoreAudio.AudioPeakMeter] :: GetChannelCount' работает без ошибок, однако значения не возвращаются. Из исходного кода он должен возвращать int. – Mechajesus