如何在Java中淡化.wav文件?

时间:2019-06-19 21:01:57

标签: java audio fadein fade fadeout

嘿,我写了一个程序,可以从wav文件中剪切特定区域。 但是我意识到切口很难,所以我想淡入淡出。我的问题是我不知道如何在Java中实现该目标,因为我对Java的声音库非常陌生。

有人可以给我一个提示或技巧,如何实现这一点或给我可以找到答案的资源的提示?

这是我之前写的一些代码:

AudioInputStream in = null;
AudioInputStream out = null;

    File originalFile = new File(filePath);
    if (originalFile.exists() && originalFile.isFile())
        {
        File editedFile = new File(newPath);            
        try
            {
            in = AudioSystem.getAudioInputStream(originalFile);
            AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(originalFile);
            AudioFormat format = fileFormat.getFormat();

            int bytesPerSecond = format.getFrameSize() * (int) format.getFrameRate();
            in.skip(start * bytesPerSecond);
            long framesOfAudioToCopy = trackDuration * (int) format.getFrameRate();

            // out is the audiostream which contains the output wav file
            out = new AudioInputStream(in, format, framesOfAudioToCopy);

            // so I guess here would be the right place to fade the audio file
            // just before writing it to the disk

            AudioSystem.write(out, fileFormat.getType(), editedFile);

            System.out.println("Trimming done!");
            System.out.println();
            }
        catch (UnsupportedAudioFileException e)
            {
            errorMessage = e.getMessage();
            }
        catch (IOException e)
            {
            errorMessage = e.getMessage();
            }

1 个答案:

答案 0 :(得分:1)

您可以尝试使用javax.sound.sampled a tutorial is here中提供的控件,但是我从来没有碰到太多运气。我的经验是,如果它们存在于给定的系统中(取决于pc / os,则仍然存在问题),因为卷更改仅发生在缓冲区边界。

请注意,本教程的最后部分建议直接处理音频。为此,需要多个步骤。

1)保留声音文件的各个字节

在下一个关于Using Files and Format Converters的教程中的“读取声音文件”部分中有一个代码示例。在此代码示例中,请注意我们在注释处标记了已提供访问各个字节的位置:

// Here, do something useful with the audio data that's 
// now in the audioBytes array...

2)将字节转换为PCM(取决于音频格式)

3)乘以体积因子

4)增加或减少因子(如果褪色)

5)将PCM转换回字节

6)通过SourceDataLine打包和运送(同样取决于音频格式)

所有步骤都已在StackOverflow中进行了更详细的描述,并且应该可以搜索,尽管我不知道此时找到它们的难易程度。

有几个免费的库,它们允许实时音量衰减。我为此写了AudioCue(以及实时频率和声像),还有TinySound

PS,我很乐意回答问题并提出改进建议,以改善我编写的图书馆的情况。