Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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_Algorithm - Fatal编程技术网

Java 产生噪声和削波的混响算法

Java 产生噪声和削波的混响算法,java,algorithm,Java,Algorithm,我不熟悉java编程,也不熟悉DSP编程,但我试图将混响应用到.wav文件中。我使用的一些代码来自:但似乎我不完全理解它。当我运行我的代码时,我会得到一个噪声,它会随着时间的推移而增长,最终也会“剪裁”。我想这与我的缓冲区大小有关,或者我用“clip”播放回放的音频流,但我不确定。 如果有人能看一看并提出一些改进我的代码的想法,我将非常感激 我使用以下代码: public void Reverbstart() throws InterruptedException, UnsupportedAud

我不熟悉java编程,也不熟悉DSP编程,但我试图将混响应用到.wav文件中。我使用的一些代码来自:但似乎我不完全理解它。当我运行我的代码时,我会得到一个噪声,它会随着时间的推移而增长,最终也会“剪裁”。我想这与我的缓冲区大小有关,或者我用“clip”播放回放的音频流,但我不确定。 如果有人能看一看并提出一些改进我的代码的想法,我将非常感激

我使用以下代码:

public void Reverbstart() throws InterruptedException, UnsupportedAudioFileException, IOException, LineUnavailableException {

    int bufferLength = 4000_000;
    Clip clip;
    Line line;
    Line.Info linfo = new Line.Info(Clip.class);
    line = AudioSystem.getLine(linfo);
    clip = (Clip) line;

    File sourceFile = new File("some audiofile");

    AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(sourceFile);

    AudioFormat audioFormat = fileFormat.getFormat();

    System.out.println(audioFormat);

    AudioInputStream ais = AudioSystem.getAudioInputStream(sourceFile);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    int nBufferSize = bufferLength * audioFormat.getFrameSize();
    byte[]  byteBuffer = new byte[nBufferSize];

    int nBytesRead = ais.read(byteBuffer);
    baos.write(byteBuffer, 0, nBytesRead);

    byte[] AudioData = baos.toByteArray();

    int delayMilliseconds = 3000; 
    int delaySamples = (int)((float)delayMilliseconds * 44.1f); //44100 Hz sample rate
    float decay = 0.5f;

    for (int i = 0; i < AudioData.length - delaySamples; i++){

        AudioData[i] += (short)((float)AudioData[i]);
        AudioData[i + delaySamples] += (short)((float)AudioData[i] * decay);
    }

    ByteArrayInputStream bais = new ByteArrayInputStream(AudioData);
    AudioInputStream outputAis = new AudioInputStream(bais, audioFormat,AudioData.length/ audioFormat.getFrameSize());


    clip.open(outputAis);

    clip.start();
    Thread.sleep(10000);
    System.out.println(clip.getFramePosition());


}
public void reverstart()引发InterruptedException、UnsupportdAudioFileException、IOException、LineUnavailableException{
int bufferLength=4000_000;
夹子;
线条;
Line.Info linfo=新行.Info(Clip.class);
line=AudioSystem.getLine(linfo);
clip=(clip)行;
File sourceFile=新文件(“某些音频文件”);
AudioFileFormat fileFormat=AudioSystem.getAudioFileFormat(sourceFile);
AudioFormat AudioFormat=fileFormat.getFormat();
System.out.println(音频格式);
AudioInputStream ais=AudioSystem.getAudioInputStream(源文件);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
int nBufferSize=bufferLength*audioFormat.getFrameSize();
byte[]byteBuffer=新字节[nBufferSize];
int nBytesRead=ais.read(byteBuffer);
写入(byteBuffer,0,nBytesRead);
byte[]AudioData=baos.toByteArray();
整数延迟毫秒=3000;
int delaySamples=(int)((float)delay毫秒*44.1f);//44100 Hz采样率
浮子衰减=0.5f;
对于(int i=0;i
字节[]是原始数据,您将每个数组元素与衰减因子相乘,具体取决于格式实际样本分布在多个元素上,您需要衰减每个样本,而不是每个字节。好的,因此我使用PCM_签名44100.0 Hz,16位,立体声,4字节/帧,小端。但我仍然不确定这给了我什么。我想我必须在某个地方乘以字节(以获得样本)?这超出了我所知道的范围。我会尝试找出PCM_SIGNED的ByTestStream是如何定义的,也许你可以将数据分成两个通道,应用每个通道的衰减,然后再次合并以获得你的音频。我只是指出了对我来说似乎显而易见的东西,希望这足以让你自己解决剩下的问题,或者我们可以等待更有知识的人出现:)好的,谢谢你的意见:)。我试图自己去弄清楚,但我现在似乎走到了死胡同。将读取混响Balgos。解决方法是使用bytebuffer包装bytearray并用作短缓冲区,然后再次返回字节。这样地: