設置Arduino Board
這個項目使用連接到Arduino Uno的五個按鈕。使用Arduino為按鈕建立連接,如下圖所示。
項目草圖
在輸入端,我們將有一個Arduino草圖和一個Processing草圖。 Arduino草圖將讀取五個按鈕的狀態,并通過串行通信將其轉發到Processing。 Processing sketch將接收此數據,并通過OSC(開放式聲音控制)協議將其轉發給Wekinator。
Arduino Sketch
#define buttonPin1 6
#define buttonPin2 5
#define buttonPin3 4
#define buttonPin4 3
#define buttonPin5 2
int inByte = 0; // incoming serial byte
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
establishContact(); // send a byte to establish contact until receiver
// responds
}
// the loop function runs over and over again forever
void loop() {
// if we get a valid byte, read button pins:
if (Serial.available() 》 0) {
// get incoming byte:
inByte = Serial.read();
// read the state of the pushbuttons:
int buttonState1 = digitalRead(buttonPin1);
int buttonState2 = digitalRead(buttonPin2);
int buttonState3 = digitalRead(buttonPin3);
int buttonState4 = digitalRead(buttonPin4);
int buttonState5 = digitalRead(buttonPin5);
Serial.write(buttonState1);
Serial.write(buttonState2);
Serial.write(buttonState3);
Serial.write(buttonState4);
Serial.write(buttonState5);
}
}
void establishContact() {
while (Serial.available() 《= 0) {
Serial.print(‘A’); // send a capital A
delay(300);
}
}
處理草圖
import processing.serial.*;
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress dest;
Serial myPort; // The serial port
int[] serialInArray = new int[5]; // Where we‘ll put what we receive
int serialCount = 0; // A count of how many bytes we receive
int button1, button2, button3, button4, button5;
boolean firstContact = false; // Whether we’ve heard from the microcontroller
void setup() {
size(256, 256); // Stage size
noStroke(); // No border on the next thing drawn
// Print a list of the serial ports, for debugging purposes:
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my FTDI adaptor, so I open Serial.list()[0]。
// On Windows machines, this generally opens COM1.
// Open whatever port is the one you‘re using.
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 115200);
/* start oscP5, sending messages at port 9000 */
oscP5 = new OscP5(this,9000);
dest = new NetAddress(“127.0.0.1”,6448);
}
void draw() {
//Send the OSC message
sendOsc();
}
void serialEvent(Serial myPort) {
// read a byte from the serial port:
int inByte = myPort.read();
// if this is the first byte received, and it’s an A,
// clear the serial buffer and note that you‘ve
// had first contact from the microcontroller.
// Otherwise, add the incoming byte to the array:
if (firstContact == false) {
if (inByte == ’A‘) {
myPort.clear(); // clear the serial port buffer
firstContact = true; // you’ve had first contact from the microcontroller
myPort.write(‘A’); // ask for more
}
}
else {
// Add the latest byte from the serial port to array:
serialInArray[serialCount] = inByte;
serialCount++;
// If we have 3 bytes:
if (serialCount 》 4 ) {
button1 = serialInArray[0];
button2 = serialInArray[1];
button3 = serialInArray[2];
button4 = serialInArray[3];
button5 = serialInArray[4];
// print the values (for debugging purposes only):
println(button1 + “&” + button2 + “&” + button3 + “&” + button4 + “&” + button5);
// Send a capital A to request new sensor readings:
myPort.write(‘A’);
// Reset serialCount:
serialCount = 0;
}
}
}
void sendOsc() {
OscMessage msg = new OscMessage(“/wek/inputs”);
msg.add((float)button1);
msg.add((float)button2);
msg.add((float)button3);
msg.add((float)button4);
msg.add((float)button5);
oscP5.send(msg, dest);
}
設置ChucK
在輸出端,我們可以使用ChucK從Wekinator接收五個連續輸出,并根據這些輸出發出聲音。
現在打開終端并轉到您放置它的目錄并輸入以下行:
chuck FMSynth_5ContinousOutputs.ck
Chuck將開始收聽Wekinator的輸出并接收輸出,它將改變聲音的音高。
設置Wekinator
現在打開Wekinator并對設置進行以下調整:
將輸入設置為5并輸出為5
選擇輸出鍵入到所有連續
Wekinator將從Processing接收五個輸入,并在訓練后將向Chuck發送五個不同的輸出。從那里,ChucK將根據Wekinator輸出產生不同的聲音。
點擊 下一步 按鈕,您將看到此窗口:
按第一個按鈕,然后單擊 隨機化 。開始錄制一秒鐘,它將記錄一些樣本。
按第二個按鈕,然后單擊 隨機化 的。然后記錄一秒。
同樣,記錄其他三個按鈕的樣本。
記錄五個樣本后,單擊在 火車 上訓練Wekinator。然后單擊 運行 。現在當您按下按鈕時,程序將根據您提供的輸入發出聲音。
相關項目
如何構建Arduino演講者幾分鐘播放音樂
-
Processing
+關注
關注
0文章
10瀏覽量
8959 -
Arduino
+關注
關注
187文章
6464瀏覽量
186665
發布評論請先 登錄
相關推薦
評論