2

マイクが時々ミュートになるという奇妙な問題があります。そこで、ミュートされている場合にミュートを解除する Windows サービスを作成することにしました。すべてのコードは次のとおりです。

import javax.sound.sampled.*;

public class Unmute
{
    public static void main(String[] args)
    {
        unmute();
    }

    public static void unmute() {
        Line.Info[] thisLineArr;
        Line.Info thisLineInfo;
        Line thisLine;
        BooleanControl mute;
        Mixer.Info[] infos = AudioSystem.getMixerInfo();
        try {
            while (true) {          
                for (Mixer.Info info: infos)  
                {  
                    Mixer mixer = AudioSystem.getMixer(info);
                    if (mixer.isLineSupported(Port.Info.MICROPHONE))  
                    {  
                        thisLineArr = mixer.getTargetLineInfo();              
                        thisLineInfo = thisLineArr[0];
                        thisLine = mixer.getLine(thisLineInfo);
                        thisLine.open();
                        for (Control thisControl : thisLine.getControls()) {
                            if (thisControl.getType().equals(BooleanControl.Type.MUTE)) {
                                mute = (BooleanControl)thisLine.getControl(BooleanControl.Type.MUTE); 
                                if(mute.getValue()) {
                                    mute.setValue(false);
                                }
                            }
                        }
                        thisLine.close();
                    }  
                }
                Thread.sleep(1 * 1000);
            }
        } catch (Exception e) {
            System.out.println(e);
        }

    }

}

Java Service Wrapper を使用し、このコードをサービスとしてインストールしました。すべてが正常に機能していますが、私が気になっているのは、メイン関数にある無限ループです。無限ループがあっても大丈夫ですか、それとも私の問題に対するより良い解決策がありますか?

4

0 に答える 0