猫の手なら貸せる

いろいろ共有できたらいいなとおもってます

Macのオーディオサービスを再起動できた

Parallelsの不具合か、起動状態を続けていると内蔵スピーカーから音が鳴らなくなることがあります。

この場合はMacを再起動すれば直るのですが、如何せん発生頻度が高すぎてちょっと面倒です。こんな時はmacの内蔵スピーカーを操作しているサービスを再起動することで対処します。

macOSのオーディオサービスは「coreaudiod」らしいです。
次のコマンドでうまく再起動できました。

sudo launchctl stop com.apple.audio.coreaudiod && sudo launchctl start com.apple.audio.coreaudiod

参考:
qastack.jp
apple.stackexchange.com

ただ、止まるたびにターミナルを開くのも面倒なので、Automatorでアプリケーション化しました。

作り方

f:id:nkhnd:20200413160956p:plain

AppleScriptを実行」をタスクから持ってきて次を入力します。

on run {input, parameters}
    set result to do shell script "launchctl stop com.apple.audio.coreaudiod && launchctl start com.apple.audio.coreaudiod" with administrator privileges
    return result
end run

実行するとパスワード認証のダイアログ(いつものやつ)が表示されます。

参考:
sakuraorange.minibird.jp

通知は自分で判断しやすいように付けています。

アプリを保存し、Applicationフォルダに入れてやるとクイックランチから開けるようになります。

音が鳴らなくなったら起動し、パスワードを入力してあげればオーディオサービスが再起動し、音がなるようになります(なりました)

別の方法

AppleScriptにできることをよく知らなかった時に以下を書きました。
起こることは同じなんですけどね。スマートではなかった;;

f:id:nkhnd:20200413141340p:plain

AutomaterからAppleScriptシェルスクリプトを代入し、以下を入力。

AppleScript

on run {input, parameters}   
    display dialog "管理者パスワードを入力してください。" default button 2 default answer "" with icon 2 with hidden answer
    set tmpText to result
    set Passwd to text returned of tmpText
    return Passwd
end run

ダイアログを表示しパスワード入力を行わせ、次のシェルスクリプトで読み込ませます。
シェルスクリプト側の「引数引き渡し方法」を「stdinへ」から「引数として」に変更しておきます。

シェルスクリプト

echo $1 | sudo -S launchctl stop com.apple.audio.coreaudiod
echo $1 | sudo -S launchctl start com.apple.audio.coreaudiod

Apple Scriptの参考:
sakuraorange.minibird.jp
sites.google.com

シェルスクリプトの参考:
linux.just4fun.biz

ちなみに

Automatorで作成したアプリも、ディレクトリと同様にアイコンを変更することができます。

f:id:nkhnd:20200413114542p:plain

アイコンはIconionを使って作成しました。
簡単におしゃれなアイコンが作れます。いい感じ🔊


AppleScriptはなかなか曲者ですね。初めシェルにAppleScriptで変数を渡す方法が一向に分からず、2時間くらい調べてました。

Appを配布したいのですが、どんな情報が入っているかちょっと分からないので控えさせて頂きます。