“MIDI(电子琴)”的版本间的差异
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献) |
小 (→使用教程) |
||
第22行: | 第22行: | ||
== 使用教程 == | == 使用教程 == | ||
+ | 串口波特率:31250bps | ||
MIDI音符音色代码资料: | MIDI音符音色代码资料: | ||
* [http://wiki.labplus.cn/images/1/16/MIDI%E9%9F%B3%E7%AC%A6%E4%BB%A3%E7%A0%81%E8%A1%A8.zip MIDI音符代码表] | * [http://wiki.labplus.cn/images/1/16/MIDI%E9%9F%B3%E7%AC%A6%E4%BB%A3%E7%A0%81%E8%A1%A8.zip MIDI音符代码表] |
2018年3月9日 (五) 17:38的版本
概述
用于播放乐符,可模拟电子琴等各种乐器演奏效果
技术参数
- 工作电压:VCC 3.3-5V
- 通讯方式:UART
- 集成功放、双声道喇叭
- 模块尺寸:24x46x7.5mm
引脚定义
VCC | 电源 |
RXD | 串口接收 |
TXD | 串口发送 |
GND | 地 |
使用教程
串口波特率:31250bps MIDI音符音色代码资料:
Arduino示例
#include <SoftwareSerial.h> #include "vs1103b.h" #define NOTE_C3 60 #define NOTE_D3 62 #define NOTE_E3 64 #define NOTE_F3 65 #define NOTE_G3 67 #define NOTE_A3 69 #define NOTE_B3 71 #define NOTE_C4 72 #define NOTE_D4 74 #define NOTE_E4 76 #define NOTE_F4 77 #define NOTE_G4 79 #define NOTE_A4 81 #define NOTE_B4 83 #define VELOCITY1 0x7F #define VELOCITY2 0x00 uint8_t noteArr[14] = { 60, 62, 64, 65, 67, 69, 71, 72, 74, 76, 77, 79, 81, 83 }; Vs1103bClass vs1103b(A5, A4); //RX TX ; void midiVolume(uint8_t vol); void setup() { vs1103b.begin(); vs1103b.usartSendChannelMsg(CHANNEL0, MSG_CONTROL_CHANGE, DAT1_RESET, 0); //复位 vs1103b.usartSendChannelMsg(CHANNEL0, MSG_CONTROL_CHANGE, DAT1_NOTE_OFF, 0); //关闭所有音 midiVolume(180); //音量设置 } void loop() { /*音调测试*/ for (int i = 0; i < 14; i++) { vs1103b.usartSendChannelMsg(CHANNEL0, MSG_NOTE_OPEN, noteArr[i], 0x7F); delay(500); vs1103b.usartSendChannelMsg(CHANNEL0, MSG_NOTE_OPEN, noteArr[i], 0x00); delay(500); } } void midiVolume(uint8_t vol) { vs1103b.usartSendChannelMsg(CHANNEL0, MSG_CONTROL_CHANGE, 0x07, vol); delay(2); }
from microbit import * #初始化 def midiInit(volume=127): i2c.write(0x0c, bytearray([0x01, 0x12, 0x7a])) # set baudrate 31250 sleep(2) i2c.write(0x0c, bytearray([0x02, 0xb0, 0x78, 0x00])) # all sound off sleep(2) i2c.write(0x0c, bytearray([0x02, 0xb0, 0x79, 0x7f])) # reset all controllers sleep(2) i2c.write(0x0c, bytearray([0x02, 0xb0, 0x07, volume])) # set volume sleep(10) #设置音量(0-127) def midiSetVolume(vol): i2c.write(0x0c, bytearray([0x02, 0xb0, 0x07, vol])) # set volume sleep(2) # 选择乐器 def midiChangeProgram(channel, ins): # select instrument i2c.write(0x0c, bytearray([0x02, (0xC0|(channel & 0x0F)), ins])) sleep(2) # 播放音调 def midiNoteOn(data1, data2=127, cmd=0x90): i2c.write(0x0c, bytearray([0x02, cmd, data1, data2])) # 停止音调播放 def midiNoteOff(data1, data2=0, cmd=0x80): i2c.write(0x0c, bytearray([0x02, cmd, data1, data2])) # test code midiInit() midiChangeProgram(0,40) midiSetVolume(40) while True: ''' #播放单个音调 midiNoteOn(i) sleep(200) midiNoteOff(i) sleep(2000) ''' #播放组合音调 midiNoteOn(61) midiNoteOn(65) midiNoteOn(75) sleep(200) midiNoteOff(61) midiNoteOff(65) midiNoteOff(75) sleep(2000)