2017-08-18 225 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編寫的代碼