Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

ビデオチャット中に左シフトキーを押している間だけミュート解除し会話できるアプリをつくった

$
0
0

Google MeetやZOOMでビデオチャットをしているとき、マイクに雑音が入らないよう自分の発言中以外は基本的にミュートしているのですが、
ミュート解除を切り忘れたり、別画面を開いているとすぐにミュート解除できなかったりで、面倒だったのでキーボードの特定のキーを押している間だけミュートを解除してくれるアプリ「Cough Switch」を作成しました。

トランシーバーやレコーディングスタジオのトークバック機能のようなイメージです。

output2.gif

AppleScriptでマイクの音量を操作する

Macの場合、 システム環境設定 > サウンド > 入力でマイク設定を操作することができます。
この入力音量を0にするとミュートされます。

スクリーンショット 2020-05-28 11.51.38.png

applescript
tellapplication"System Events"toset volumeinputvolume100

このスクリプトをjsから実行するにはこんな感じ

javascript
constapplescript=require('applescript');applescript.execString('tell application "System Events" to set volume input volume 100',function);

iohookですべてのキーボードイベントを取得する

さくっと作りたいのでまたElectronで簡単にアプリ化していきます。

Webのいつも通りにキーボード操作を取得しようと、
document.addEventListener("keydown", function)
としてしまうと、Windowがアクティブになっていないとキーボードイベントを取得できません。

electron.globalShortcutではkeyupイベントを取得できないので却下。

他に探してみたところiohookってやつで取得できるみたいです。
(特定のバージョンのNodeとElectronしかサポートしていないらしくちょっとはまった)

javascript
constiohook=require('iohook');constKEYCODE=42;// left shift keyiohook.on('keydown',(msg)=>{if(msg.keycode===KEYCODE){talk();}});iohook.on('keyup',(msg)=>{if(msg.keycode===KEYCODE){mute();}});

どのキーに割り当てるか悩みましたが2つあるので、左シフトキーにしました。

Electronの最前面の触れない透明なWindowを作成

ミュート解除中のアイコンを表示させるために、最前面に触れないWindowを作成します。
さらに邪魔にならないよう背景を透明にします。

javascript
constappWindow=newBrowserWindow({transparent:true,frame:false,resizable:false,alwaysOnTop:true,});appWindow.setIgnoreMouseEvents(true);appWindow.loadURL(`file://${__dirname}/index.html`);

これで最前面にHTMLが表示されます。
あとはキーボードイベントに応じて、Windowへ状態を送り、CSSでアイコンを表示させます。

javascript
appWindow.webContents.send('talk');

おわり

あとは前にやった MacBook Proの充電器の情報をメニューバーに表示するElectronアプリをつくったと同様にアプリケーション化して完成です。

icon_512x512.png

ソースコードはこちら(https://github.com/narikei/cough-switch)

おわりのおわり

デフォルトだとスピーカーの設定しかできないけど、
こういうときこそタッチバーの出番なのではないかな?
バックグラウンドのアプリでタッチバーを使えないのどうにかしてほしい。


Viewing all articles
Browse latest Browse all 8691

Trending Articles