衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino Processing和Wekinator按鈕更改聲音播放器的音高

454398 ? 來(lái)源:工程師吳畏 ? 2019-07-30 14:33 ? 次閱讀

設(shè)置Arduino Board

這個(gè)項(xiàng)目使用連接到Arduino Uno的五個(gè)按鈕。使用Arduino為按鈕建立連接,如下圖所示。

項(xiàng)目草圖

在輸入端,我們將有一個(gè)Arduino草圖和一個(gè)Processing草圖。 Arduino草圖將讀取五個(gè)按鈕的狀態(tài),并通過(guò)串行通信將其轉(zhuǎn)發(fā)到Processing。 Processing sketch將接收此數(shù)據(jù),并通過(guò)OSC(開(kāi)放式聲音控制)協(xié)議將其轉(zhuǎn)發(fā)給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);

}

設(shè)置ChucK

在輸出端,我們可以使用ChucK從Wekinator接收五個(gè)連續(xù)輸出,并根據(jù)這些輸出發(fā)出聲音。

下載您正在使用的操作系統(tǒng)的FM Synthesis示例。

現(xiàn)在打開(kāi)終端并轉(zhuǎn)到您放置它的目錄并輸入以下行:

chuck FMSynth_5ContinousOutputs.ck

Chuck將開(kāi)始收聽(tīng)Wekinator的輸出并接收輸出,它將改變聲音的音高。

設(shè)置Wekinator

現(xiàn)在打開(kāi)Wekinator并對(duì)設(shè)置進(jìn)行以下調(diào)整:

將輸入設(shè)置為5并輸出為5

選擇輸出鍵入到所有連續(xù)

Wekinator將從Processing接收五個(gè)輸入,并在訓(xùn)練后將向Chuck發(fā)送五個(gè)不同的輸出。從那里,ChucK將根據(jù)Wekinator輸出產(chǎn)生不同的聲音。

點(diǎn)擊 下一步 按鈕,您將看到此窗口:

按第一個(gè)按鈕,然后單擊 隨機(jī)化 。開(kāi)始錄制一秒鐘,它將記錄一些樣本。

按第二個(gè)按鈕,然后單擊 隨機(jī)化 的。然后記錄一秒。

同樣,記錄其他三個(gè)按鈕的樣本。

記錄五個(gè)樣本后,單擊在 火車(chē) 上訓(xùn)練Wekinator。然后單擊 運(yùn)行 。現(xiàn)在當(dāng)您按下按鈕時(shí),程序?qū)⒏鶕?jù)您提供的輸入發(fā)出聲音。

相關(guān)項(xiàng)目

如何構(gòu)建Arduino演講者幾分鐘播放音樂(lè)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Processing
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    8971
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    187844
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    海貝R1便攜音樂(lè)播放器開(kāi)箱

    作為一個(gè)愛(ài)聽(tīng)音樂(lè)打發(fā)時(shí)間的玩家,我已經(jīng)習(xí)慣隨身攜帶一款小巧輕便的音樂(lè)播放器,從早期的CD播放器到現(xiàn)在的數(shù)碼播放器,它總能在不經(jīng)意間中給我?guī)?lái)簡(jiǎn)單的快樂(lè)。不管是逛街等人的時(shí)候,還是工作壓力大的時(shí)候
    的頭像 發(fā)表于 12-09 09:40 ?278次閱讀
    海貝R1便攜音樂(lè)<b class='flag-5'>播放器</b>開(kāi)箱

    AM3354處理wince系統(tǒng)調(diào)playsound播放聲音,有電流雜音怎么解決?

    335板子wince7系統(tǒng)下調(diào)用playsound接口播放wav格式聲音總是有雜音,同一塊板子如果用播放器播放音頻 是沒(méi)有雜音的。 同一塊板子wince6系統(tǒng)下調(diào)用playsoun
    發(fā)表于 10-29 06:46

    TLV320AIC3106335板子wince系統(tǒng)下調(diào)用playsound接口播放wav格式聲音總是有雜音,怎么解決?

    TLV320AIC3106335板子wince系統(tǒng)下調(diào)用playsound接口播放wav格式聲音總是有雜音,同一塊板子如果用播放器播放音頻 是沒(méi)有雜音的。 我用用飛思卡爾的某個(gè)ce系
    發(fā)表于 10-25 08:00

    變速播放器1和2的區(qū)別

    關(guān)于變速播放器1和2的區(qū)別,由于這里并未明確指出“變速播放器1”和“變速播放器2”具體指的是哪兩款軟件,因此我無(wú)法提供這兩款特定軟件之間的對(duì)比。不過(guò),我可以從一般意義上探討變速播放器
    的頭像 發(fā)表于 10-14 09:48 ?272次閱讀

    步步高AB915D DVD播放器維修圖紙

    步步高AB915D DVD播放器采用ZIVA-4.1芯片方案
    發(fā)表于 09-29 10:18 ?0次下載

    為什么好的播放器還要配解碼

    好的播放器之所以需要配備解碼,是因?yàn)橐纛l和視頻文件的編碼和解碼是一個(gè)復(fù)雜的過(guò)程,涉及到多種技術(shù)和標(biāo)準(zhǔn)。解碼的作用是將壓縮的音頻和視頻數(shù)據(jù)還原成可以被播放設(shè)備識(shí)別和
    的頭像 發(fā)表于 09-23 18:02 ?1732次閱讀

    數(shù)字播放器和解碼

    數(shù)字播放器和解碼的組合能夠提供更優(yōu)質(zhì)的音頻體驗(yàn)。數(shù)字播放器負(fù)責(zé)處理和傳輸音頻數(shù)據(jù),而解碼則負(fù)責(zé)將這些數(shù)據(jù)轉(zhuǎn)換為高質(zhì)量的模擬信號(hào)。它們的配合可以確保你聽(tīng)到的音頻既清晰又真實(shí)。
    的頭像 發(fā)表于 09-06 17:35 ?1368次閱讀
    數(shù)字<b class='flag-5'>播放器</b>和解碼<b class='flag-5'>器</b>

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主頁(yè)面和視頻播放頁(yè)面
    的頭像 發(fā)表于 04-24 14:52 ?989次閱讀
    HarmonyOS開(kāi)發(fā)案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發(fā)表于 04-23 17:25 ?789次閱讀
    HarmonyOS開(kāi)發(fā)案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開(kāi)發(fā)案例:【音樂(lè)播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的音樂(lè)播放器應(yīng)用
    的頭像 發(fā)表于 04-23 15:44 ?1163次閱讀
    HarmonyOS開(kāi)發(fā)案例:【音樂(lè)<b class='flag-5'>播放器</b>】

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    基于video、swiper和slider組件,實(shí)現(xiàn)簡(jiǎn)單的視頻播放器,可支持海報(bào)輪播、視頻播放等功能。
    的頭像 發(fā)表于 04-22 21:06 ?556次閱讀
    HarmonyOS開(kāi)發(fā)案例:【視頻<b class='flag-5'>播放器</b>】

    用STM32F105的USB做了一個(gè)讀U盤(pán)MP3的播放器,為什么聽(tīng)到的音樂(lè)播放速度很快?

    最近用STM32F105的USB做了一個(gè)讀U盤(pán)MP3的播放器,使用I2S2_DMA輸出音頻數(shù)據(jù),再使用TAS5711數(shù)字功放進(jìn)行輸出聲音。讀出文件的采樣為44.1khz, I2S也設(shè)置為此采樣率。不知為何,聽(tīng)到的音樂(lè)播放速度很快
    發(fā)表于 04-02 06:52

    鴻蒙開(kāi)發(fā)-視頻播放器方案

    使用on(\'stateChange\')方法監(jiān)聽(tīng)狀態(tài)變化。如果應(yīng)用在視頻播放器處于錯(cuò)誤狀態(tài)時(shí)執(zhí)行操作,系統(tǒng)可能會(huì)拋出異常或生成其他未定義的行為。 圖1 播放狀態(tài)變化示意圖 當(dāng)播放處于prepared
    發(fā)表于 02-19 17:20

    如何將按鈕連接到Arduino

    在本快速入門(mén)指南中,您將學(xué)習(xí)如何將按鈕連接到Arduino板,并根據(jù)按鈕是否被按下來(lái)讀取HIGH或LOW。您將使用電路板上隨附的發(fā)光二極管 (LED)通過(guò)按鈕打開(kāi)和關(guān)閉,以便驗(yàn)證
    的頭像 發(fā)表于 02-11 10:52 ?4182次閱讀
    如何將<b class='flag-5'>按鈕</b>連接到<b class='flag-5'>Arduino</b>板

    如何連接Arduino聲音傳感以控制帶有聲音的LED

    在本教程中,您將學(xué)習(xí)如何連接Arduino聲音傳感以控制帶有聲音的LED。在本指南結(jié)束時(shí),您將擁有一個(gè)可以正常工作的聲控LED!
    的頭像 發(fā)表于 02-11 10:21 ?3333次閱讀
    如何連接<b class='flag-5'>Arduino</b><b class='flag-5'>聲音</b>傳感<b class='flag-5'>器</b>以控制帶有<b class='flag-5'>聲音</b>的LED
    大发888娱乐登陆| 一筒百家乐的玩法技巧和规则| 网上百家乐官网是现场吗| 华宝娱乐城| 太阳城ktv| 澳门赌百家乐心法| 网上百家乐官网赌场娱乐网规则| 梦幻城百家乐的玩法技巧和规则 | 百家乐官网投注双赢技巧| 六合彩香港| 大哥大百家乐的玩法技巧和规则| 24山分阴阳| 百家乐官网永利娱乐平台| 百家乐官网技术方式| 大发888体育投注| 老人头百家乐的玩法技巧和规则 | 鼎尊国际娱乐| 全讯网网址导航| 百家乐群sun811| 百家乐官网群shozo| 百家乐官网投注心得和技巧| 网络百家乐赌场| 大发888娱乐游戏可以玩吗| 百家乐双龙出海| 百家乐网址是多少| 百家乐官网如何买大小| 百家乐官网赢的秘籍在哪| 金沙足球投注网| 德州扑克小游戏| 水果机的规律| 喜来登百家乐的玩法技巧和规则| 百家乐投注方法网| 百家乐官网网站那个诚信好| 百家乐官网AG| 百家乐官网娱乐城博彩正网| 布拖县| bet365提款多久到账| 大发888娱乐大发体育| 金海岸百家乐的玩法技巧和规则| 百家乐ag厅投注限额| 百家乐园千术大全|