Продолжая разговаривать об автоматизации работы с плеером iTunes через PowerShell, предлагаю рассмотреть вопрос управления эквалайзером через доступные методы и свойства, предоставляемые API плеера.
Как обычно, работа с iTunes через PowerShell начинается с создания COM-объекта.
$itunes = New-Object -ComObject iTunes.Application
Скажу сразу, все доступные методы и свойства iTunes, относящиеся к работе с эквалайзером, содержат в названии сочетание букв EQ. Зная это, можно сократить вывод командлета Get-Member
, убрав из него лишнее.
$itunes | Get-Member -Name "*EQ*"
В результате выполнения команды получен список из одного метода и четырёх свойств COM-объекта iTunes, предназначенных для управления эквалайзером плеера.
Name MemberType Definition
---- ---------- ----------
CreateEQPreset Method IITEQPreset CreateEQPreset (string eqPresetName)
CurrentEQPreset Property IITEQPreset CurrentEQPreset () {get} {set}
EQEnabled Property bool EQEnabled () {get} {set}
EQPresets Property IITEQPresetCollection EQPresets () {get}
EQWindow Property IITWindow EQWindow () {get}
Включение и выключение эквалайзера
Первое свойство, с которого следует подойти к началу работы с эквалайзером iTunes - EQEnabled
. Это свойство хранит значение типа Boolean
, позволяет узнать текущее состояние эквалайзера и изменить его - включить или выключить. При помощи следующего кода можно проверить включён ли эквалайзер в текущий момент, если не включён, то включить его.
# Включение эквалайзера, если он не включён
If (-Not $itunes.EQEnabled) { $itunes.EQEnabled = $True }
Для отключения эквалайзера свойству EQEnabled
присваивается значение $False
.
# Выключение эквалайзера
$itunes.EQEnabled = $False
Управление окном настроек эквалайзера
Для дальнейшей наглядности работы с эквалайзером, рекомендую открыть его окно. Для этого следует обратиться к свойству EQWindow
. Это свойство хранит объект типа ITTWindow
, который, в свою очередь, отвечает за настройку окна эквалайзера. Как обычно, работу со специальным типом данных, следует начать с ознакомления с его структурой.
# Получение свойств объекта EQWindow
$itunes.EQWindow | Get-Member
Name MemberType Definition
---- ---------- ----------
Bottom Property int Bottom () {get} {set}
Height Property int Height () {get} {set}
Kind Property ITWindowKind Kind () {get}
Left Property int Left () {get} {set}
Maximizable Property bool Maximizable () {get}
Maximized Property bool Maximized () {get} {set}
Minimized Property bool Minimized () {get} {set}
Name Property string Name () {get}
Resizable Property bool Resizable () {get}
Right Property int Right () {get} {set}
Top Property int Top () {get} {set}
Visible Property bool Visible () {get} {set}
Width Property int Width () {get} {set}
Zoomable Property bool Zoomable () {get}
Zoomed Property bool Zoomed () {get} {set}
По названию доступных свойств объекта можно догадаться о назначении каждого из них. Сейчас представляет интерес свойство EQWindow.Visible
, которое хранит значение типа Boolean
и управляет видимостью окна эквалайзера. Для того, чтобы сделать окно эквалайзера iTunes видимым, следует задать свойству EQWindow.Visible
значение $True
.
# Открытие окна эквалайзера
$itunes.EQWindow.Visible = $True
Для закрытия окна эквалайзера, свойству присваивается значение $False
.
# Закрытие окна эквалайзера
$itunes.EQWindow.Visible = $False
Используя оставшиеся доступные свойства, можно получить размер, положение окна эквалайзера на экране и управлять ими.
# Вывести сообщение с текущим размером окна эквалайзера
Write-Host "Equalizer Window Size is $($itunes.EQWindow.Width)x$($itunes.EQWindow.Height)px"
# Переместить окно эквалайзера в левый верхний угол экрана
$itunes.EQWindow.Left = 0
$itunes.EQWindow.Top = 0
Предназначение и сценарии использования свойств объекта ITTWindow
из свойства EQWindow
для задач автоматизации носят частный характер и при желании можно самостоятельно разобраться с реакцией окна эквалайзера на изменение значений каждого доступного свойства.
Сейчас же предлагаю перейти к самой важной и интересной части, которая непосредственно связана с управлением звуком - тем, для чего предназначен эквалайзер.
Работа с текущим используемым пресетом эквалайзера
Текущий используемый пресет эквалайзера хранится в свойстве COM-объекта iTunes CurrentEQPreset
в виде объекта типа IITEQPreset
.
# Посмотреть настройки текущего пресета эквалайзера
$itunes.CurrentEQPreset
Выполнив эту команду, можно узнать название текущего используемого пресета, значения настроек для преампа и полос звуковых частот.
Получение всех доступных пресетов эквалайзера
Все доступные пресеты эквалайзера iTunes можно получить через свойство EQPresets
, которое хранит коллекцию пресетов в виде объекта типа IITEQPresetCollection
.
# Вывести все доступные пресеты эквалайзера
$itunes.EQPresets
В результате будет выведена вся коллекция доступных пресетов эквалайзера, включая значения их настроек. Если требуется получить только названия доступных пресетов, это можно сделать при помощи следующего кода.
# Вывести названия всех доступных пресетов эквалайзера
$itunes.EQPresets | Select-Object -Property Name
Установка текущего пресета эквалайзера из списка доступных пресетов
Зная название пресета, можно применить его в качестве текущего. Для этого используется, рассмотренное ранее, свойство CurrentEQPreset
.
# Применить пресет эквалайзера Acoustic
$itunes.CurrentEQPreset = $itunes.EQPresets | Where-Object {$_.Name -eq "Acoustic"}
Настройка параметров текущего пресета
После применения пресета, можно выполнить его точную настройку. Для того, чтобы понять, как это сделать, следует посмотреть на доступные методы и свойства объекта IITEQPreset
, хранящегося в свойстве CurrentEQPreset
.
# Вывести доступные методы и свойства объекта типа IITEQPreset
$itunes.CurrentEQPreset | Get-Member
Name MemberType Definition
---- ---------- ----------
Delete Method void Delete (bool updateAllTracks)
Rename Method void Rename (string newName, bool updateAllTracks)
Band1 Property double Band1 () {get} {set}
Band10 Property double Band10 () {get} {set}
Band2 Property double Band2 () {get} {set}
Band3 Property double Band3 () {get} {set}
Band4 Property double Band4 () {get} {set}
Band5 Property double Band5 () {get} {set}
Band6 Property double Band6 () {get} {set}
Band7 Property double Band7 () {get} {set}
Band8 Property double Band8 () {get} {set}
Band9 Property double Band9 () {get} {set}
Modifiable Property bool Modifiable () {get}
Name Property string Name () {get}
Preamp Property double Preamp () {get} {set}
На обработку звука влияют свойства Preamp
и Band1
- Band10
, хранящие числовые значения типа Double
в диапазоне от -12 до +12, соответствующие величине усиления или ослабления соответствующих свойств настроек эквалайзера. Свойство Preamp
хранит значение для управления преампом в децибелах, свойства Band1
- Band10
хранят значения для управления полосами звуковых частот.
Зная это, для точной подстройки текущего пресета эквалайзера следует присвоить новые желаемые значения соответствующим свойствам.
# Изменить значение для преампа
$itunes.CurrentEQPreset.Preamp = -0.5
# Изменить значение для полосы 1K
$itunes.CurrentEQPreset.Band6 = 2
Все производимые изменения будут отображаться в виде движения ползунков в открытом окне эквалайзера и будут слышны в изменении звука при включённом воспроизведении.
Переименование пресета
При помощи метода Rename()
можно переименовать выбранный пресет. Метод Rename()
принимает два обязательных параметра: первый параметр типа String
задаёт новое имя пресета, второй параметр типа Boolean
управляет изменениями в библиотеке iTunes. Если параметр равен $True
, будет произведено обновление индивидуальных настроек эквалайзера для всех треков в библиотеке iTunes, для которых ранее был задан переименованный пресет эквалайзера.
# Переименование текущего пресета эквалайзера
$itunes.CurrentEQPreset.Rename('Custom #3', $True)
Аналогично можно переименовать другие пресеты, не устанавливая их в качестве текущих.
# Удаление пресета с именем Custom #4
($itunes.EQPresets | Where-Object {$_.Name -eq "Custom #3"}).Rename('Custom #4', $True)
Удаление пресета эквалайзера
Если текущий пресет эквалайзера больше не нужен, его можно удалить при помощи метода Delete()
. Метод Delete()
принимает один обязательный параметр типа Boolean
. Если параметр равен $True
, будет удалён не только сам пресет, но и его упоминание в индивидуальных настройках эквалайзера для всех треков в библиотеке iTunes.
# Удаление текущего пресета
$itunes.CurrentEQPreset.Delete($True)
Вместо удалённого пресета, в качестве текущего будет автоматически применён пресет Manual.
Для удаления доступных пресетов не обязательно предварительно устанавливать их в качестве текущего используемого пресета эквалайзера. Следующий пример кода показывает, как удалить пресет с заданным именем непосредственно из коллекции доступных пресетов iTunes.
# Удаление пресета с именем Custom #4
($itunes.EQPresets | Where-Object {$_.Name -eq "Custom #4"}).Delete($True)
Создание собственного пресета эквалайзера
Для создания собственного пресета эквалайзера используется метод CreateEQPreset
COM-объекта iTunes. Метод принимает один обязательный параметр типа String
, через который задаётся имя пресета. В случае успешного создания пресета, метод возвращает объект типа IITEQPreset
. В следующем примере кода возвращаемый методом CreateEQPreset
объект присваивается переменной $preset
.
# Создание нового пресета эквалайзера с именем Custom #4
$preset = $itunes.CreateEQPreset('Custom #4')
Сразу после создания, пресет автоматически добавляется в коллекцию доступных пресетов эквалайзера iTunes, поэтому доступ к нему может быть получен через свойство EQPresets
.
Созданный пресет настраивается аналогично текущему используемому пресету и может быть установлен в качестве текущего либо уже рассмотренным способом, либо, как в примере кода, при помощи использования переменной $preset
, которой он был присвоен при создании.
# Настройка созданного пресета эквалайзера
$preset.Band1 = 1
$preset.Band2 = 1.25
$preset.Band3 = 1.5
# Установка созданного пресета в качестве текущего
$itunes.CurrentEQPreset = $preset
Я постарался подробно ответить на вопросы по автоматизации всех стандартных действий с эквалайзером плеера iTunes и управлению его пресетами при помощи PowerShell, которые могут быть выполнены пользователем вручную с использованием графического пользовательского интерфейса.
Однако здесь я не стал косаться вопросов экспорта и импорта настроек эквалайзера. Дело в том, что API плеера iTunes не предоставляет методов, чтобы сделать это штатными средствами. Поэтому вопрос экспорта и импорта настроек эквалайзера будет темой для отдельной заметки, которую я планирую написать в будущем.