1

我有一个大问题,我开发了一个 Java 应用程序,旨在测试听力,提供不同频率(500Hz - 6000Hz)和分贝的声音,效果很好,直到 apareción 一些笔记本出现问题时效果不佳,因为当你运行声音时到右耳是传送到两个耳朵,与左耳相同。起初我以为这是我的应用程序的错误,但当我发现类似 oracle java 的示例 http://www.oracle.com/technetwork/java/index-139508.html时,同样被吓了一跳。我也可以是硬件规则,因为在我的笔记本 windows7/fedora 在 linux 中正常工作。

我只能开始看到在任何计算机上运行应用程序的级别驱动程序或操作系统的解决方案。

-我在多台电脑上试过,目前在2三星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,balance,现在只有两个这样的

有人想出了一个替代方案?,代码必须是java,因为它是一个更大程序的一部分,但也许你可以添加一些其他语言的dll

先感谢您

/ - - -编辑 - - - - - - - - - - - - - - - - /

我找到了一个不确定的解决方案,但到目前为止它已经奏效了。有问题的笔记本是出厂的,由于某种原因无法划分java声音所以已经格式化,你安装了一个新的windows(在这种情况下是windows 7),与出厂时相同版本的windows ,之后它在我遇到这个问题的每个笔记本上都有效。所以是部分笔记本出厂驱动不兼容java api,多年未更新

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

4

1 回答 1

2

PAN 的定义有点模糊。根据他们如何解释 PAN,您可能无法获得完全的立体声分离。

我建议打开立体声线路并进行自己的平移。我在 JSyn 中这样做,我得到了完全的立体声分离。

如果您只需要一个通道上的音调,则将音调写入一个通道,将零写入另一个通道。

于 2012-10-01T22:18:25.733 回答