因此,在下面的程序中,它会加速音频文件并使其听起来好像该人具有“氦声”。这是通过更改索引值来完成的,当您增加索引值时,文件会更高,更快。我想知道是否有办法做相反的事情,让音频播放速度变慢,声音更深。
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();
}
答案 0 :(得分:1)
不是将样本的大小减半,而是将样本的大小加倍,并使用每个值两次。我确信有更先进的方法,但这会使波形进展两倍,从而产生低音调。
我必须做一些假设,因为你使用的是一些我不熟悉的非标准声音API。为了确保您的目标样本的声音不会太长,我现在将源中的索引限制为目标样本的最大大小的一半(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