暮らしの技術

暮らしを豊かにする技術や、特に暮らしを豊かにしない技術があります

ミュートの実装

やんごとなき事情があって,embedでQuickTimeを呼び出してJSから制御するってコードを書いていた.*1

さて,音楽プレイヤーなのでミュート機能がある.仕様を簡単に文に起こすと

1. ミュートをオンにしたら音が消える
2. ミュートをオフにしたら,元の音量が復元される

こういう感じになる.

適当にコードを考えると

function SetMute(mute){
   if(mute){
     save_volume = volume;
     volume = 0;
   } else {
     volume = save_volume;
   }
}

みたいな感じで納得して貰えると思う.でもsave_volumeはかっこわるい.

QuickTime APIでの実装はどうなっているかというと,コードをみたのではないけれどこんな感じ.

function SetMute(mute){
    if(mute){
        if(volume > -1)
            return volume = volume * -1;
        return volume
    } else {
        if(volume < 0)
            return volume = volume * -1;
        return volume
    }
}

これでsave_volmeとかいう気持ち悪い変数が消える.volumeの値が負の時はmuteだから,GetMute関数も簡単に実装できるし,内部でミュートの状態を管理しなくて良いので,整合性の問題も考えなくて良い.

*1:どうでもいいんだけどGetTime()みたいなのでデータの先頭からの時間とれるんだけど,桁数からミリ秒だとおもってコード書いてたら終了時刻の整合性とれなくてつらかった.