Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中以编程方式向声音文件添加混响效果?_Java_Signal Processing_Playback_Javasound - Fatal编程技术网

如何在Java中以编程方式向声音文件添加混响效果?

如何在Java中以编程方式向声音文件添加混响效果?,java,signal-processing,playback,javasound,Java,Signal Processing,Playback,Javasound,我想为Java中的音频文件添加混响效果,或者至少为这些音频文件的播放添加混响效果。Java程序是一个桌面应用程序,所以我不能使用android库。我曾尝试使用Java Sound API在端口上使用控件,但在我的测试机器上没有起作用。(我的测试表明没有一个端口支持混响控制) 上述代码不起作用。有没有办法手动添加混响效果?也许是通过一些被忽略的api,或者通过操纵波形和/或回放该波形?任何建议都将不胜感激。如果您的驱动程序不支持混响,但支持播放多个相互重叠的声音,您可以在实例之间短时间延迟播放同一

我想为Java中的音频文件添加混响效果,或者至少为这些音频文件的播放添加混响效果。Java程序是一个桌面应用程序,所以我不能使用android库。我曾尝试使用Java Sound API在端口上使用控件,但在我的测试机器上没有起作用。(我的测试表明没有一个端口支持混响控制)


上述代码不起作用。有没有办法手动添加混响效果?也许是通过一些被忽略的api,或者通过操纵波形和/或回放该波形?任何建议都将不胜感激。

如果您的驱动程序不支持混响,但支持播放多个相互重叠的声音,您可以在实例之间短时间延迟播放同一声音数次,每次都可以降低音量。“适当的”混响也会在每次重复时做一些过滤,但这应该足够接近


如果您的驱动程序不允许您这样做,您可以尝试在播放前重新处理声音本身以添加混响,使用相同的方法。

我看到您获得了混响控制值。我没有看到你做任何事情来真正打开混响…我的电脑上没有任何设备支持混响控制。。。它抛出一个错误,指出此行不支持混响控制。在检查了我系统的每个端口后,我发现我的任何端口都不支持混响控制。这是一项艰巨的工作。我已经完成了echo(针对Theremin小程序),但如果不编写完整的教程,我无法在这里解释它。Java教程有两个有用的部分:最后一个关于控件的小部分(说你可以自己做——谢谢你),以及一个在“控件”教程之后的“格式”教程中读取文件的代码示例,它向你展示了在哪里可以挂接。您必须了解格式,并将字节转换为DSP和DSP。回声并不坏,但混响是我的头,涉及到对滤波,卷积,更多的理解。请你至少发布一个关于回声的教程?非常感谢。:)我的问题是如何实现这两种技术中的任何一种。有点过时,但涵盖了这一点。
        Port line = null; 
    if (AudioSystem.isLineSupported(Port.Info.SPEAKER)) {
        try {
            line = (Port) AudioSystem.getLine(
                Port.Info.SPEAKER);
        }
        catch(Exception ex){
            ex.printStackTrace();
            return;
        }
    }
    EnumControl reverb = (EnumControl)line.getControl(EnumControl.Type.REVERB);
    System.out.println(Arrays.toString(reverb.getValues()));