0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:工程师吴畏 2019-07-30 14:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

设置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接收五个连续输出,并根据这些输出发出声音。

下载您正在使用的操作系统的FM Synthesis示例。

现在打开终端并转到您放置它的目录并输入以下行:

chuck FMSynth_5ContinousOutputs.ck

Chuck将开始收听Wekinator的输出并接收输出,它将改变声音的音高。

设置Wekinator

现在打开Wekinator并对设置进行以下调整:

将输入设置为5并输出为5

选择输出键入到所有连续

Wekinator将从Processing接收五个输入,并在训练后将向Chuck发送五个不同的输出。从那里,ChucK将根据Wekinator输出产生不同的声音。

点击 下一步 按钮,您将看到此窗口:

按第一个按钮,然后单击 随机化 。开始录制一秒钟,它将记录一些样本。

按第二个按钮,然后单击 随机化 的。然后记录一秒。

同样,记录其他三个按钮的样本。

记录五个样本后,单击在 火车 上训练Wekinator。然后单击 运行 。现在当您按下按钮时,程序将根据您提供的输入发出声音。

相关项目

如何构建Arduino演讲者几分钟播放音乐

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Processing
    +关注

    关注

    0

    文章

    11

    浏览量

    9211
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195960
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    花椒直播开源鸿蒙专属直播播放器 助力高效开发高性能直播应用

    近日,花椒直播开源了专注于直播场景的播放器“HJPlayer”。它基于自研的通用多媒体框架“HJMedia”打造,与早前开源的推流“HJPusher”共同构成了覆盖主播推流到观众播放的完整客户端
    的头像 发表于 10-22 11:20 197次阅读
    花椒直播开源鸿蒙专属直播<b class='flag-5'>播放器</b> 助力高效开发高性能直播应用

    创通联达助力飞傲M27革新便携HiFi播放器体验

    2025年8月15日,飞傲在第19届深圳国际音频展(SIAS)正式发布年度旗舰播放器FIIO M27。作为基于创通联达TurboX C6490 SOM打造的标杆产品,M27凭借该模块的卓越性能与飞傲自研声学技术形成协同突破,为用户带来全方位、全场景的优秀音频体验,全面革新便携HiFi
    的头像 发表于 08-19 16:15 1591次阅读

    多路混音声音播放芯片型号推荐

    以下是唯创知音旗下主流的多路声音播放芯片深度解析,结合精准参数、丰富场景及技术特性,满足智能设备多样化音频需求: 一、WTV380/890 系列:高集成多模态交互芯片 核心参数 通道能力:支持8 路
    的头像 发表于 08-15 16:51 604次阅读

    Made with KiCad(135):Echo - 开源的音乐播放器

    “  Echo 是一个开源硬件平台,专为音乐播放器设计。该项目的目标是开发一款基于开源软件并采用开源设计的高品质音乐播放器。 ”   Made with KiCad 系列将支持新的展示方式。直接将以
    的头像 发表于 07-16 11:17 2729次阅读
    Made with KiCad(135):Echo - 开源的音乐<b class='flag-5'>播放器</b>

    基于STM32的音乐播放器电路+PCB源文件+源码+论文等打包下载

    基于STM32的音乐播放器电路+PCB源文件+源码+论文等打包,推荐下载!
    发表于 05-29 21:37

    【开源分享】用ESP32复刻一个iPod :便携式音乐播放器Tangara

    Tangara是一款便携式开源音乐播放器,硬件电路使用KiCad设计,而且它的外壳和固件也是100%开源,点击阅读原文或下载链接可跳转下载。它通过3.5毫米耳机插孔或蓝牙输出高品质声音,电池续航
    的头像 发表于 04-22 08:05 1732次阅读
    【开源分享】用ESP32复刻一个iPod :便携式音乐<b class='flag-5'>播放器</b>Tangara

    【开源分享】用ESP32复刻一个iPod :便携式音乐播放器Tangara

    Tangara 是一款便携式音乐播放器。它通过 3.5 毫米耳机插孔或蓝牙输出高品质声音,电池续航时间长,并包括一个功能强大的处理,足以支持您可以投入的任何音频格式。它也是运行开源软件的 100
    发表于 04-21 11:35

    Made with KiCad:Tangara 便携式音乐播放器

    “ Tangara 是一款便携式音乐播放器。它可通过 3.5 毫米耳机插孔或蓝牙输出高品质音质,电池续航时间长。” Made with KiCad 系列将支持新的展示方式。直接将以下链接复制到
    发表于 04-16 14:01

    一款新的播放器:Xibo for ChromeOS介绍

    我们非常高兴地宣布与 ChromeOS 合作推出一款新的播放器。为您带来 Xibo for ChromeOS!这一最新的可靠、高度安全且易于管理的数字标牌解决方案使客户能够充分利用 Xibo CMS
    的头像 发表于 03-14 09:26 1016次阅读

    海贝HiBy R1播放器体验

    之前分享过用接入便携耳放来提升音质,让手机端也能享受HiFi级的听感体验。这个方案对于没有数码播放器的初烧用户来说,确实是种非常高效的方法。 但缺点也是有的,比如歌曲存放需要占用手机存储空间,手机
    的头像 发表于 01-24 11:27 4677次阅读
    海贝HiBy R1<b class='flag-5'>播放器</b>体验

    蛇年焕新,数字标牌播放器点亮新春营销

    春节期间,商场成为人们欢聚、购物的热门场所。在商场入口处,大型数字标牌展示着精心制作的新春广告,高清画质将喜庆氛围完美呈现,流畅的切换效果瞬间将顾客带入热闹的春节气氛中。 借助数字标牌播放器
    的头像 发表于 01-24 11:26 624次阅读
    蛇年焕新,数字标牌<b class='flag-5'>播放器</b>点亮新春营销

    将基于PC的MP3播放器软件移植到ADSP-21262 SHARC处理

    电子发烧友网站提供《将基于PC的MP3播放器软件移植到ADSP-21262 SHARC处理上.pdf》资料免费下载
    发表于 01-03 14:54 0次下载
    将基于PC的MP3<b class='flag-5'>播放器</b>软件移植到ADSP-21262 SHARC处理<b class='flag-5'>器</b>上

    索尼发布空间现实显示播放器新版本

    索尼于2024年12月发布适用于空间现实显示屏ELF-SR1和ELF-SR2的空间现实显示播放器新版本。
    的头像 发表于 12-24 15:19 947次阅读

    毕业设计竞赛选题推荐 | 嵌入式Linux应用之音乐播放器项目实战(含文档及源码)

    01引言随着数字化娱乐日益普及,音乐播放器作为人们生活中不可或缺的一部分,扮演着重要的角色。无论是通勤途中、健身锻炼还是工作学习,一个好用的音乐播放器都能为用户提供愉悦的音频体验,丰富生活的同时也
    的头像 发表于 12-23 16:50 1356次阅读
    毕业设计竞赛选题推荐 | 嵌入式Linux应用之音乐<b class='flag-5'>播放器</b>项目实战(含文档及源码)

    海贝R1便携音乐播放器开箱

    作为一个爱听音乐打发时间的玩家,我已经习惯随身携带一款小巧轻便的音乐播放器,从早期的CD播放器到现在的数码播放器,它总能在不经意间中给我带来简单的快乐。不管是逛街等人的时候,还是工作压力大的时候
    的头像 发表于 12-09 09:40 1983次阅读
    海贝R1便携音乐<b class='flag-5'>播放器</b>开箱