Я хотел бы изменить устройство вывода звука (например, щелкнув значок динамика в строке меню) с помощью сценария, но НЕ с помощью сценариев пользовательского интерфейса, например, запуска панели System Pref.
ОБНОВЛЕНИЕ: используя приведенное ниже решение @Mateusz, вот Applescript, который при запуске предоставит вам всплывающее окно для выбора желаемого устройства вывода звука:
set devices to do shell script "/Applications/Audiodevice/audiodevice output list"
set answer to choose from list (paragraphs of devices) with title "Audio Output" with prompt "Select a device" without multiple selections allowed
if answer is false then return
do shell script "/Applications/Audiodevice/audiodevice output " & quoted form of item 1 of answer
(Примечание: вам нужно поместить audiodevice
файл в /Applications
)
Есть audiodevice
команда, доступная от whoshacks .
Использование:
audiodevice
список устройств для ввода, вывода и системного звукаaudiodevice <port>
отобразить аудиоустройство для выбранного портаaudiodevice <port> list
список доступных аудиоустройств для выбранного портаaudiodevice <port> <device>
установите выбранный порт для использования назначенного устройства («внутренний» выберет внутренние динамики или наушники, в зависимости от того, что активно)Есть команда switchaudio-osx , которую необходимо скомпилировать из исходников или установить через homebrew (требуется установка Xcode):
brew install switchaudio-osx
Использование:
SwitchAudioSource [-a] [-c] [-t type] [-n] -s device_name
-a
: показывает все устройства-c
: показывает текущее устройство-t type
: тип устройства (ввод/вывод/система). По умолчанию для вывода.-n
: переключает аудиоустройство на следующее-s device_name
: устанавливает аудиоустройство на данное устройство по имениbrew install switchaudio-osx
но он сообщает: switchaudio-osx: A full installation of Xcode.app is required to compile this software. Installing just the Command Line Tools is not sufficient. Xcode can be installed from the App Store. Error: An unsatisfied requirement failed this build.
как-нибудь обойти это?switchaudio-osx
зависит от зависимостей и т. д., определенных в Xcode (приложении). Кто-то, кто разбирается в Xcode лучше меня, вероятно, сможет извлечь их в Makefile.mas
, затем xcode
, а затем switchaudio-osx
. Таким образом, вы получаете выгоду от обновленного исходного кода, а не от предварительно скомпилированного бинарного файла, который потенциально небезопасен или устарел. См.: install-switchaudio.shbrew install switchaudio-osx
!Вот AppleScript, чтобы сделать это с помощью switchaudio-osx (просто замените XXXXXXX на имя устройства, которое вы можете получить, выполнив «SwitchAudioSource -a»):
on run {input, parameters}
do shell script "/usr/local/bin/SwitchAudioSource -s 'XXXXXXXX'"
return input
end run
/usr/local/bin
вместо версии каталога Homebrew. В противном случае скрипт больше не будет работать, если switchaudio-osx
будет обновлен.Мне нужно было сочетание клавиш для изменения вывода звука — мне понравилась простота ответов AppleScript, которые я видел на форумах Stack Exchange, но мне не нравится идея жесткого кодирования имени устройства вывода/ввода, которое я хочу изменить. Также я не смог найти элегантного решения для переключения между тремя аудиовыходами с помощью if-else. Не говоря уже о том, что источник не всегда находится в списке вывода (например, наушники Bluetooth).
Поэтому я написал ниже, который просто перебирает все параметры и выбирает следующий источник в списке/первый источник в списке, если выбран последний вариант. Просто измените sourceToChange
переменную с «Выход» на «Вход», если вы хотите создать еще один скрипт для переключения источников микрофона. Одним из недостатков этого подхода является то, что вы должны предоставить доступ «Управление своим компьютером» для любого приложения, которое вызывает этот рабочий процесс / быстрое действие. Я предполагаю, что это как-то связано с вызовом приложения «Системные события», но я не уверен в этом на 100%. Также не уверен на 100% в безопасности. Тем не менее, я надеюсь, что это поможет некоторым людям. Меня устраивает!
# loop thru all sound outputs in "System Preferences" > "Sound" > "Output"/"Input"
on run {input, parameters}
set sourceToChange to "Output" # change me to "Input" or "Output"!
tell application "System Preferences"
run
set current pane to pane "com.apple.preference.sound"
end tell
tell application "System Events"
tell application process "System Preferences"
repeat until exists tab group 1 of window "Sound" # prevent script from executing before Sound load
end repeat
tell tab group 1 of window "Sound"
click radio button sourceToChange
set soundOutputs to a reference to every row of table 1 of scroll area 1
set activateSound to false
set exitMe to false
repeat with i from 1 to count of soundOutputs
if activateSound is true then
set exitMe to true
set selected of row i of table 1 of scroll area 1 to true
# if attempted to set the line break before AirPlay devices to true, set the first row to true and exit
if (not selected of row i of table 1 of scroll area 1) then
set selected of row 1 of table 1 of scroll area 1 to true
end if
end if
if (selected of row i of table 1 of scroll area 1) and (activateSound is false) and (exitMe is false) then
set activateSound to true
end if
if exitMe is true then
return
end if
end repeat
# Input doesn't suffer from the AirPlay linebreak issue so this catches an attempt to exit at the last row before setting selected to the first item
set selected of row 1 of table 1 of scroll area 1 to true
end tell
end tell
end tell
end run
switchaudio-osx
утилита была обновлена и теперь поддерживает циклическое переключение на следующее аудиоустройство. После установки с помощью homebrew просто позвоните SwitchAudioSource -n
, чтобы перейти к следующему устройству. Это позволяет избежать необходимости жесткого ввода имен устройств, а также избавляет от необходимости поддерживать сложные сценарии взаимодействия с пользовательским интерфейсом в AppleScript.https://github.com/deweller/switchaudio-osx
Чтобы установить открытый терминал и запуститьbrew install switchaudio-osx
Чтобы перечислить все источники для ввода/вывода, выполнитеSwitchAudioSource -a
Это приведет к выводу, аналогичному
External Microphone (input)
MacBook Pro Microphone (input)
External Headphones (output)
MacBook Pro Speakers (output)
Чтобы переключить микрофон на внешний микрофон, выполните следующую команду
SwitchAudioSource -t input -s 'External Microphone'
https://appsnomad.com/blog/how-to-change-audio-output-input-from-terminal-in-osx/3
Существует алоэ, платное приложение Ears за 5 долларов, которое сделает эту работу и может использоваться с командной строкой https://retina.studio/ears/.
Джерри Т.