首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操纵声音p5.js或processing.js

操纵声音p5.js或processing.js
EN

Stack Overflow用户
提问于 2017-08-18 22:51:40
回答 1查看 555关注 0票数 2

我花了几个小时用我的新手处理知识,试图把一个处理程序变成学生的在线等价物。我在寻求群众的帮助!

最大的问题是在processing.js或p5.js中没有Minim库。换句话说,我希望下面的程序能在OpenProcessing.org中运行。音频处理程序允许学生

我觉得我已经广泛地梳理了http://processingjs.org/reference/https://p5js.org/reference/#/libraries/p5.sound,但都无济于事。

最重要的事情发生在myEffect类中。process()函数将样本数组读入内存,并一次处理一个样本。我想在openprocessing.org中复制这个功能。学生修改的这行是

newSamp[j] = samp[j];

类似这样的东西

newSamp[j] = samp[j] * 2;

然后解释它是如何改变声音的。

以下是原始处理形式的程序:

代码语言:javascript
复制
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

Minim minim;
AudioPlayer song;
float[] oldSamp;
String songFileName = "BasicDrum.mp3";
final int BUFFERSIZE = 4096;

void setup()
{
  size(640,200);
  stroke(255);
  textSize(32);

  minim = new Minim(this);
  song = minim.loadFile(songFileName, BUFFERSIZE); 
  song.addEffect(new MyEffect());
  oldSamp = new float[song.bufferSize()];
  song.play(); 
}


void draw()
{
  /* Draw the Visualizer */
  background(0);
  fill(#BBBB00);
  text("Mono Channel", 50, 50);
  for (int i = 0; i < song.bufferSize() - 1; i++)
  {
    line(i, 100 + song.left.get(i)*100, i+1, 100 +song.left.get(i+1)*100);
  }
}

class MyEffect implements AudioEffect
{

  void process(float[] samp)
  {
    float[] newSamp = samp.clone();  //create a copy to alter
    int j = 0; 
    while (j < newSamp.length)
    {
      newSamp[j] = samp[j];          /* HERE is where we alter each sample */
      j = j + 1;
    }
    oldSamp = samp.clone();          //save a copy of this for later
    // we have to copy the values back into samp for this to work
    arrayCopy(newSamp, samp);
  }

  void process(float[] left, float[] right) 
  //stereo has left and right channels
  {
    float[] average = left; 
    for (int i = 0; i < left.length; i++)
      {    
        average[i] = (left[i] + right[i])/2.0;
      }
    process(average);
  }
}

感谢您能提供的任何指导!

EN

回答 1

Stack Overflow用户

发布于 2017-08-19 01:58:01

您不能直接将这个逐行处理转换为Processing.js或P5.js,因为您已经发现没有JavaScript版本的Minim。(嗯,确实有,但它太老了。)

(退一步说,您永远不应该尝试逐行地将代码从一种语言翻译成另一种语言。)

相反,您需要做的是获取代码执行的操作,然后弄清楚如何在您的目标语言(在您的示例中为JavaScript)中执行此操作。

我会从谷歌搜索"p5.js声音“或"processing.js声音”或"JavaScript声音“开始。同样,您的目标是弄清楚如何在JavaScript中播放声音,而不是逐行重新创建Minim。

另请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45759549

复制
相关文章

相似问题

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