1

私は大きな問題を抱えています。聴覚をテストすることを目的とした 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 の非互換性です。

/----------------------------------------/

4

1 に答える 1

2

PAN の定義は少しあいまいです。PAN の解釈方法によっては、完全なステレオ分離が得られない場合があります。

ステレオ ラインを開いて、独自のパンニングを行うことをお勧めします。これを JSyn で行うと、完全なステレオ分離が得られます。

1 つのチャネルだけにトーンが必要な場合は、1 つのチャネルにトーンを書き込み、もう 1 つのチャネルにゼロを書き込みます。

于 2012-10-01T22:18:25.733 に答える