minim - 用处理和最小音量反转声音

  显示原文与译文双语对照的内容
115 2

在处理过程中,我需要一个程序来反转加载的文件,避免已经实现了抽象函数( ) 。我已经尝试了很多方法,但它仍然无法发挥作用。

我最后的方法使用 Minim.loadFileIntoBuffer() 函数获取 float[],然后使用处理函数的reverse() 反转缓冲区。然后创建一个具有相同 float array 和文件原始格式的AudioSample然后我继续使用 trigger() 播放示例。

下面是一个 Fragment:

Minim minim;
AudioPlayer songPlayer;
MultiChannelBuffer song;
AudioSample reversedSong;
float[] reversedBuffer, mixBuffer;
void setup() {
 size(512, 200);
 minim = new Minim(this);
 songPlayer = minim.loadFile("sound.mp3");
//loadFileIntoBuffer changes the MultiChannelBuffer's parameters to
//match the file's, so init values doesn't really matter
 song = new MultiChannelBuffer(10, 3);
 minim.loadFileIntoBuffer("sound.mp3", song);
 mixBuffer = songPlayer.mix.toArray();
 reversedBuffer = reverse(mixBuffer);
 reversedSong = minim.createSample(reversedBuffer, songPlayer.getFormat());
 reversedSong.trigger();
} 

我也尝试了一些不同的解决方案。即直接将文件导入 AudioSample我使用的大多数方法的问题是,我只能访问一个 AudioBuffer,i.e 。这是整个声音的一部分。因此,我不能把它全部颠倒。

你知道有什么方法?

时间:原作者:2个回答

115 0

好的,我最终用一个简单的过程来做。

我得到样本的原始通道并直接操纵它们。首先,构造一个与通道大小相同的新 float array 。然后,使用相同的过程将原始值放回原始值。

它远远不是一个漂亮的实现,它可能更复杂,然后它可能是。因为我只使用没有实现的高级函数,所以它很有用。

void revert() {
/* sample is an AudioSample, created in setup() */
 float[] leftChannel = sample.getChannel(AudioSample.LEFT);
 float[] rightChannel = sample.getChannel(AudioSample.RIGHT);
 float[] leftReversed = new float[leftChannel.length];
 float[] rightReversed = new float[rightChannel.length];
 int size = leftChannel.length-1;
/*inverts the array*/
 for(int i=0; i<=size; i++){
 leftReversed[i] = leftChannel[size-i];
 rightReversed[i] = rightChannel[size-i];
 }
/*copies it to the original array*/
 for(int i=0; i<size; i++){
 leftChannel[i] = leftReversed[i];
 rightChannel[i] = rightReversed[i];
 } 
}
原作者:
...