2017-08-18 195 views
1

我已经花了数小时与我的新手处理知识尝试将处理程序变成在线等同物的学生。我在寻求群众的帮助!操作声音p5.js或processing.js

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

我觉得我已经通过http://processingjs.org/reference/https://p5js.org/reference/#/libraries/p5.sound广泛梳理无济于事。

大事情发生在myEffect类。函数将样本数组读入内存,并一次一个地处理它们中的每一个。我想在openprocessing.org中复制这个功能。该学生改变该生产线是

newSamp[j] = samp[j];

喜欢的东西

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

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

这里是程序在原加工形式:

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); 
    } 
} 

感谢您能提供任何指导!

+0

。从[p5.js声音示例]开始(https://p5js.org/examples/)。注意p5的声音有一个'buffer'属性,它是一个[AudioBuffer](https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer)实例,可以用来操纵这些样本,类似于Processing AudioEffect的功能如何。 –

+0

我在参考中找不到'buffer'属性。我只能找到'reverseBuffer'(https://p5js.org/reference/#/p5.SoundFile/reverseBuffer)。你能指出我在哪里找到'buffer'属性吗? –

+0

它可能不在文档中,但您应该在浏览器中使用JS控制台。例如,键入p5.SoundFile实例的名称并查看它的属性。'buffer'应该在那里,你应该能够扩展它的属性。 –

回答

0

您无法直接将此行逐句从Processing转换为Processing.js或P5.js,就像您发现没有Minim的JavaScript版本一样。 (嗯,有,但它是很老。)

(退一步说,你不应该试图通过去行由行从一种语言翻译代码到另一个地方。)

取而代之的,是什么你需要做的是代码的作用然后找出如何在你的目标语言(在你的情况下,JavaScript)做到这一点。

我会先用谷歌搜索“p5.js声音”或“processing.js声音”或“JavaScript声音”开始。再一次,你的目标是弄清楚如何在JavaScript中播放声音,而不是重新创建Minim。

参见:

如果你想要做相同的p5.js可能更容易重新使用JavaScript编写的代码