Processing 通过处理和最小化来反转声音

Processing 通过处理和最小化来反转声音,processing,minim,Processing,Minim,我需要在处理过程中制作一个程序来反转加载的.mp3文件,避免已经实现的抽象函数(例如,反转给定声音的Minim函数,尽管我还没有找到这样的函数)。到目前为止,我已经尝试了很多方法,但仍然无法发挥作用 我的上一种方法使用Minim.loadFileIntoBuffer()函数获得一个float[],然后使用Processing的reverse()函数反转缓冲区。然后,我使用相同的float数组和原始文件格式创建一个AudioSample。然后,我继续使用trigger()播放示例 下面是一个片段:

我需要在处理过程中制作一个程序来反转加载的.mp3文件,避免已经实现的抽象函数(例如,反转给定声音的
Minim
函数,尽管我还没有找到这样的函数)。到目前为止,我已经尝试了很多方法,但仍然无法发挥作用

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

下面是一个片段:

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();
} 
我也尝试过一些不同的解决方案。即直接将文件导入
音频样本
。我相信,我已经使用的大多数方法的问题是,我只能访问
音频缓冲区,即整个声音的一部分。因此,我无法扭转这一切


你知道怎么做吗?

好的,我最终通过一个简单的过程做到了

我得到原始样本的通道,然后直接操纵它们。首先,构造一个与通道大小相同的新
浮点
数组。然后,使用相同的步骤将值放回原始值中

它远不是一个漂亮的实现,而且它可能比它可能要复杂得多。但它做到了,因为我只限于使用没有实现的高级函数

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];
  }  
}
void revert(){
/*示例是在setup()中创建的音频示例*/
float[]leftChannel=sample.getChannel(AudioSample.LEFT);
float[]rightChannel=sample.getChannel(AudioSample.RIGHT);
float[]leftReversed=新的float[leftChannel.length];
float[]rightReversed=新的float[rightChannel.length];
int size=leftChannel.length-1;
/*反转阵列*/

对于(int i=0;我不会将其作为评论添加。请编辑您的帖子