自作楽器用音源モジュール作成(2)
音色やらその他については今回の設計においては後回しなので、受け取ったMIDIデータをVS1053bのリアルタイムMIDIモードに投げつけて鳴らすことにする。
VS1053bに関して
VS1053bに電源供給。Real-Time MIDIで起動するには
GPIO0=LOW
GPIO1=HIGH
とデータシート57ページに記載がある。
https://www.sparkfun.com/datasheets/Components/SMD/vs1053.pdf
PSoCに関して
基板のピン都合上、SCBは使わない方向で行く。
BAUDRATEの設定がComboBoxに31.25kHzが無いと思ったら外部クロックで駆動させればいける。(ExternalClock / Oversampling rate [Hz]になる)
あとはプログラムだがひとまず鳴らすように書いた。
#include <project.h> int main() { uint8_t i,j; uint8_t midiData[3] = {0x90, 0x70, 0x7f}; CyGlobalIntEnable; UART_VS1053b_Start(); LCD_Char_1_Start(); LCD_Char_1_Position(0,0); LCD_Char_1_PrintString("CTRL NOTE"); for(i = 0 ;; ++i) { for(j = 0 ; j < 0x7f ; ++j){ /* LCD */ LCD_Char_1_Position(1,0); LCD_Char_1_PrintNumber(j); /* Cn:Program Change */ midiData[0] = 0xc0; midiData[1] = j; UART_VS1053b_PutArray(midiData, 2); for(i = 0x40 ; i < 0x50 ; ++i){ /* LCD */ LCD_Char_1_Position(1,5); LCD_Char_1_PrintNumber(i); /* 9n:Note On */ midiData[0] = 0x90; midiData[1] = i; midiData[2] = 0x3f; UART_VS1053b_PutArray(midiData, 3); CyDelay(200); /* 8n:Note Off*/ midiData[0] = 0x80; midiData[2] = 0x0; UART_VS1053b_PutArray(midiData, 3); } } } }
動作
適当なイヤフォンを繋いで動作が確認できた、そろそろ箱の方も考えたい。