Firefoxに音量切り替えボタンを設置
Firefoxで動画を見る時に音量調整できないことがあり、再生したら音量が大きすぎて驚くことがある。PC全体の音量を下げることができるし、音量ミキサーを使って特定のプログラムだけの音量を下げることもできるのだが、前者は別のプロファイルでYoutubeなどの動画を再生している時など他のプログラムの音量まで下がってしまって困る。後者は音量ミキサーを開いた上に音量を下げたい対象のプログラムを探してから下げなくてはいけなくて面倒である。さらに後者は、元に戻すときに全体の音量以上にスライドバーを上げてしまって他のプログラムの音量を変えてしまうこともある。
そこで対象の動画の音量だけを変える方法を探していたのだが、結局は見つからなかった。その代り、Firefoxで再生する動画の最大音量をPC全体(実際は音量ミキサーの設定)との比で設定する方法を見つけた。【Firefoxの組み込みプレーヤーの音量最大値を調整する】によると、about:config で media.volume_scale の値を変えれば良いらしい。デフォルトは「1.0」だが『最大値を通常の2倍にしたければ「2.0」、5倍にしたければ「5.0」と入力』すれば良いらしい。私の場合は音量を下げたいので「0.5」「0.2」などと変えれば良い。
さて、Firefoxで about:config を開かずに設定を変える方法であるが、以前にアドオン「Custom Buttons」を使ってThunderbirdの設定を変える方法について書いた。【ThunderbirdにJavaScriptの切り替えボタンを設置】と【ThunderbirdにRSSフィード確認間隔切り替えボタンを設置】である。Firefoxではブックマークレットで実現できそうだが、方法が分からなかったので、分かるまではFirefoxのアドオン【Custom Buttons】を使う。
コードは【ThunderbirdにJavaScriptの切り替えボタンを設置】のコードを少し変更しただけである。
【ThunderbirdにRSSフィード確認間隔切り替えボタンを設置】にも書いたが、まず、文字列、整数値、真偽値の取得と設定はそれぞれ、getCharPref()とsetCharPref()、getIntPref()とsetIntPref()、getBoolPref()とsetBoolPref()を使うらしい。今回変更する media.volume_scale の値は「文字列」なのでgetCharPref()とsetCharPref()を使う。以前に調べて自分のブログに書いておきながら読んでなかったので、今回のコードを作成する時に何度も失敗してしまった。
さて、まずは、Codeの部分。
switch(this.PS.getCharPref(this.pref)){
case '1.0': this.PS.setCharPref(this.pref,'0.5');break;
case '0.5': this.PS.setCharPref(this.pref,'0.2');break;
case '0.2': this.PS.setCharPref(this.pref,'0.1');break;
case '0.1': this.PS.setCharPref(this.pref,'0.0');break;
case '0.0': this.PS.setCharPref(this.pref,'1.0');break;
}
Initialization codeの部分は次の通り。
this.pref='media.volume_scale';
this.setState=function(){
var state=this.PS.getCharPref(this.pref);
if (state=='1.0'){
this.checked=false;
}else{
this.checked=true;
}
}
this.PS=
Components.classes['@mozilla.org/preferences-service;1']
.getService(Components.interfaces.nsIPrefBranch);
this.ob={};
this.ob.observe=this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();
ボタンをクリックする度に音量は 1/2 → 1/5 → 1/10 → 消音 → 1/1(デフォルト)と変化する。デフォルトの時だけボタンが押されてないアイコンになる。 media.volume_scale の値の変化は about:config を開いた状態でボタンをクリックすれば確認できる。
ただ、再生中の動画はボタンをクリックしても変わらない。ページをリロードするか、動画を最初から再生しなおすか、再生位置を表しているバーをクリックして途中から再生を開始するよう騙すしかない。上のCodeに BrowserReload(); を追加すれば、ボタンをクリックする度にリロードしてくれるが、今回は音量をデフォルトから1/10にするのに3回クリックするので、その度にリロードしていたら鬱陶しい。リロードしたければ、Firefoxの右クリックで現れるリロードのボタンやリロードのためのブックマークレットを利用した方が良い。私は【Custom Buttons】のCodeに BrowserReload(); とだけ書いたボタンも用意しておいた。
複数の動画を連続して再生する場合、この記事のように作ったボタンで一度 media.volume_scale を変えれば、ボタンを押したり直接 about:config で編集するなどしてデフォルトに戻さない限り引き継がれる。ブラウザを閉じても同じである。作った時は役に立たないかと思ったが、意外に役立った。
この記事で書いたボタンを利用するのは、ブックマークレットで同じことができるようになるか、再生中の動画の音量を変えられるアドオンが現れるまでである。Firefoxでは【Custom Buttons】は使ってなかったので、有効にすることで重くなるようなら無効にしたい。動画の音量調整の問題を解決するために調べていた時、再生中の動画の音量を消すアドオン【消音】は見つかった。再生し直さなくても再生中に消せることがメリットである。消音ではなく音量の変更に関しても再生中に変更するアドオンが作れそうな気がするのだが…。私には作る能力がないので、どなたか作ってほしい。
追記(2015/9/7):
使用中の音量を分かりやすくするために音量に応じたアイコンを追加して、Initialization codeの部分を次のようにした。
this.pref='media.volume_scale';
this.setState=function(){
var state=this.PS.getCharPref(this.pref);
if (state=='1.0'){
this.image=
'data:image/gif;base64,R0lGODdhEAAQAIgAAP///wAAACwAAAAAEAAQAAACKARieGm8r5SLswV0D962QstlYhSWiTme2pqyKOnG3wynLUV7uKQ7RgEAOw==';
this.checked=false;
}else if (state=='0.5'){
this.image=
'data:image/gif;base64,R0lGODdhEAAQAIgAAP///wAAACwAAAAAEAAQAAACKARiaMvqDE+aMaFwVX2ynvx5WDhuYBmNqgatoUmyDSUvLtrSou7xXgEAOw==';
this.checked=false;
}else if (state=='0.2'){
this.image=
'data:image/gif;base64,R0lGODdhEAAQAIgAAP///wAAACwAAAAAEAAQAAACIgRiqYq3b1qDKSBLWcz1TophXPhBJHd46Dluo9o6cZnRUAEAOw==';
this.checked=false;
}else if (state=='0.1'){
this.image=
'data:image/gif;base64,R0lGODdhEAAQAIgAAP///wAAACwAAAAAEAAQAAACHYSPCaF97FSAEdFqJn636r100beRmOiYHriwrlEAADs=';
this.checked=false;
}else{
this.image=
'data:image/gif;base64,R0lGODdhEAAQAJkAAP8AAP///wAAAAAAACwAAAAAEAAQAAACNYQTgpphf5qEdK1ahaooU5ZQGaOJhqIt24eSK5SmiWAC7VUDcweFMP/YYXoSWs0yESFJDkMBADs=';
this.checked=true;
}
}
this.PS=
Components.classes['@mozilla.org/preferences-service;1']
.getService(Components.interfaces.nsIPrefBranch);
this.ob={};
this.ob.observe=this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();
追記(2016/2/13):
Firefoxを44.0にアップデートしてから【Custom Buttons】が使えなくなったので、代わりに about:config の値をツールバーのメニューで変えられるアドオン【PrefBar】をインストールして、次のように security.csp.enable の切り替えチェックボックス(CSP)と media.volume_scale の変更メニュー(音量)を PrefBar に追加した。
追記(2016/3/28):
PrefBarで音量調整したいのですが、カスタマイズ方法が分かりません。良ければ方法を教えて下さい。
by wan (2016-03-28 21:33)
私は次のように設定しています。
PBのメニューで「カスタマイズ」を選択すると追加できるボタンのリストが登場しますが、そのメニューの中で右クリックすると「編集」や「コピー」などのメニューがあるので、その中から「作成」を選択して、表示されたメニューの中から「メニューリスト」を選択します。
その後は上の図のように入力したら、音量変更ボタンができました。
PrefBarで音量調整したいのですが、カスタマイズ方法が分かりません。良ければ方法を教えて下さい。
by wan (2016-03-28 21:33)
wanさん、コメントありがとうございます。
追記(2016/3/28)を書きました。
音量調整ボタンの使い方ですが、音量を選択したら即座にabout:configの方も変更されますが、YouTubeなどで視聴中の場合は、動画の方の音量調整ボタンで音量を調整するか、Firefoxのタブにあるスピーカーアイコンをダブルクリック(クリックで消音、もう一度クリックで音が出る)する必要があります。
私のブログを参考にしてくださりありがとうございました。m(_ _)m
by 正己 (2016-03-28 22:00)
詳細ありがとうございます。無事追加することができました。
by wan (2016-03-30 19:45)
wanさん、報告、ありがとうございました。
お役に立ててうれしいです。
by 正己 (2016-03-31 00:43)