首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用处理和Minim倒置声音

用处理和Minim倒置声音
EN

Stack Overflow用户
提问于 2014-04-14 13:00:01
回答 1查看 1.1K关注 0票数 2

我需要在处理过程中编写一个程序,反转加载的.mp3文件,避免已经实现的抽象函数(例如,逆转给定声音的Minim函数,尽管我还没有找到这种函数)。我已经尝试过很多种方法了,但它仍然不起作用。

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

这里有一个片段:

代码语言:javascript
复制
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,即整个声音的一部分。因此,我无法完全扭转这一局面。

你知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 14:48:01

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

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

它远不是一个漂亮的实现,它可能比它更复杂的时间。但是它做到了这一点,因为我仅限于使用未实现的高级函数。

代码语言:javascript
复制
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];
  }  
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23060784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档