降低音频速度

时间:2017-08-04 01:27:24

标签: java audio

因此,在下面的程序中,它会加速音频文件并使其听起来好像该人具有“氦声”。这是通过更改索引值来完成的,当您增加索引值时,文件会更高,更快。我想知道是否有办法做相反的事情,让音频播放速度变慢,声音更深。

public void helium(String sourceFile, String targetFile)
{
    Sound sourceObj = new Sound(sourceFile);                               
    Sound target = new Sound(targetFile);   
    int sampleValue = 0;                                              
    int targetIndex = 0;                                                

    for(int index = 0; index < sourceObj.getLength(); index+=2)
    {
        sampleValue = sourceObj.getSampleValueAt(index);                    
        target.setSampleValueAt(targetIndex,sampleValue);                   
        targetIndex++;                                                      
    }
    target.play();  

}

2 个答案:

答案 0 :(得分:1)

不是将样本的大小减半,而是将样本的大小加倍,并使用每个值两次。我确信有更先进的方法,但这会使波形进展两倍,从而产生低音调。

我必须做一些假设,因为你使用的是一些我不熟悉的非标准声音A​​PI。为了确保您的目标样本的声音不会太长,我现在将源中的索引限制为目标样本的最大大小的一半(index < target.getLength()/2

int sampleValue = 0;                                              
int targetIndex = 0;                                                

for(int index = 0; index < target.getLength()/2; index++)
{
    sampleValue = sourceObj.getSampleValueAt(index);                    
    target.setSampleValueAt(targetIndex, sampleValue);
    target.setSampleValueAt(targetIndex + 1, sampleValue);                   
    targetIndex += 2;                                                      
}

答案 1 :(得分:0)

天真的方法是将每个样本加倍。

一种不那么天真的方法是分割样本之间的差异(线性插值)。

正确的方法是在每个样本之间插入一个零,然后应用一个低通滤波器,拒绝高于采样率一半的任何信号。见https://en.wikipedia.org/wiki/Upsampling