私は大きな問題を抱えています。聴覚をテストすることを目的とした Java アプリケーションを開発しました。これは、さまざまな周波数 (500Hz - 6000Hz) とデシベルでサウンドを提供します。サウンドを実行すると、一部のノートブックで問題が発生するまでうまく機能しません。右耳へは、左と同じように両耳に配信されます。最初は自分のアプリケーションの間違いだと思っていましたが、似たようなオラクル Java http://www.oracle.com/technetwork/java/index-139508.htmlの例を見つけたとき、同じでびっくりしました。私のノートブックでは、windows7/fedora が Linux で適切に動作しているため、ハードウェア ルールにすることもできます。
アプリケーションが任意のコンピューターで実行されるように、ドライバーまたはオペレーティング システムをレベリングするためのソリューションが見えてきました。
-複数のコンピューターで試してみましたが、これまでのところ、サムスン 2 台、HP 1 台、東芝 1 台で動作しませんでした (新品と中古、サウンド設定の問題ではありません)。
- このアプリケーションは、C++ の私でも問題なく動作しますhttp://www.programming.de/freeware_windows.php (耳のテスト)
- コードサンプルはこちらhttp://www.anyexample.com/programming/java/java_play_wav_sound_file.xml
・作ってみました。ステレオおよびモノモードの Wav ファイル (Audacity を使用)
- Java では、1.4 jre をインストールして現在の
-コンピューターに依存するため、おそらく多くの人が働くでしょう。
コードの一部:
private void propiedadesSound()
{
this.clipAudio.stop();
this.clipAudio.close();
try
{
InputStream temp = getClass().getResourceAsStream(this.archivo);
InputStream bufferedIn = new BufferedInputStream(temp);
this.audio = AudioSystem.getAudioInputStream(bufferedIn);
this.clipAudio.open(this.audio);
if(this.clipAudio.isControlSupported(FloatControl.Type.PAN))
{
FloatControl pan = (FloatControl) this.clipAudio.getControl(FloatControl.Type.PAN);
if(this.jRadioButtonIzq.isSelected())
pan.setValue(-1.0f);
else if(this.jRadioButtonDer.isSelected())
pan.setValue(1.0f);
else if(this.jRadioButtonAmbos.isSelected())
pan.setValue(0.0f);
}
else if(this.clipAudio.isControlSupported(FloatControl.Type.BALANCE))
{
FloatControl pan = (FloatControl) this.clipAudio.getControl(FloatControl.Type.BALANCE);
if(this.jRadioButtonIzq.isSelected())
pan.setValue(-1.0f);
else if(this.jRadioButtonDer.isSelected())
pan.setValue(1.0f);
else if(this.jRadioButtonAmbos.isSelected())
pan.setValue(0.0f);
}
if(this.clipAudio.isControlSupported(FloatControl.Type.MASTER_GAIN))
{
FloatControl gain = (FloatControl) this.clipAudio.getControl(FloatControl.Type.MASTER_GAIN);
float max = gain.getMaximum();
float min = gain.getMinimum();
float current = gain.getValue();
double gainValue = this.jSliderDecibel.getValue()+20;
float newValue = (float)(min + gainValue * (max - min) / 100.0F);
gain.setValue(newValue);
}
}
catch (UnsupportedAudioFileException ex)
{
exitError("Archivo de audio no soportado.");
}
catch (LineUnavailableException ex)
{
exitError("Linea no soportada.");
}
catch (IOException ex)
{
exitError("Error en la lectura del archivo de audio."+ex);
}
}
pd: コード PAN のみ、バランスと 2 つだけを削除してみました。
誰かが代替案を思いつきますか?コードはより大きなプログラムの一部であるため、Java でなければなりませんが、おそらく他の言語の dll を追加できます。
前もって感謝します
/ - - -編集 - - - - - - - - - - - - - - - - /
決定的ではない解決策を見つけましたが、これまでのところうまくいきました。問題が発生したノートブックは工場から出荷されたもので、何らかの理由で Java サウンドの分割に失敗したため、フォーマットされています。新しい Windows (この場合は Windows 7) をインストールしました。これは、工場出荷時に提供されていたのと同じバージョンの Windows です。 、その後、私がその問題を抱えていたすべてのノートブックが機能しました。したがって、これは、長年更新されていない一部のノートブックのファクトリ ドライバーと Java API の非互換性です。
/----------------------------------------/