マイクが時々ミュートになるという奇妙な問題があります。そこで、ミュートされている場合にミュートを解除する 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 を使用し、このコードをサービスとしてインストールしました。すべてが正常に機能していますが、私が気になっているのは、メイン関数にある無限ループです。無限ループがあっても大丈夫ですか、それとも私の問題に対するより良い解決策がありますか?