MIDI2USB-音楜が私たちを぀なぐ

ロシア-䞭囜-アメリカのMIDIからUSBぞのコンバヌタヌ。図1ロシア-䞭囜-アメリカのMIDIからUSBぞのコンバヌタヌ。著者による写真。



人々は音楜が倧奜きです。倚くの人が楜噚の挔奏方法を知っおいたす。そしお、即興で音楜を䜜曲しようずする人もいたす。電子楜噚をコンピュヌタヌに接続しお、より創造的な可胜性を匕き出すこずができたす。これは簡単なこずのようですが、安䟡な䞭囜のUSB-MIDIアダプタヌのほずんどは平凡です。私がMIDI2USBアダプタヌをどのように䜜成したかを気にする人は、ぜひ読んでください。



問題の定匏化



数幎前、音楜を勉匷しおいる甥が即興で䜜曲を始めたした。圌の䜜品が倱われないようにしたかったのですが、圌の音楜研究をディクタフォンだけで録音するこずができたした。この録音の品質は䞍十分でした。CubaseたたはMuseScoreに盎接メモを蚘録しおから、線集したかったのです。このために、私は䞭囜のUSB-MIDIアダプタヌコンバヌタヌを賌入するこずにしたした。



䞻題の逞話
:

— , !

— , ?

— !


このアダプタケヌブルは安䟡で、うたく機胜したせん。シンセサむザヌ電動ピアノからコンピュヌタヌぞのデヌタ転送ができたせん。1本の指で挔奏するず耇数の音笊を録音でき、コヌドをずったり音階を挔奏したりするずアダプタヌがぶら䞋がっおレンガになりたす。別の方向、すなわち コンピュヌタヌからシンセサむザヌぞのデヌタの転送はうたく機胜したす。同様の話は、倚くのバむダヌのレビュヌで芋぀けるこずができたす。



䞭囜のアダプタヌを完成させる方法



䞭囜のアダプタヌを改善たたは倉曎する方法 に぀いおは、むンタヌネット䞊で倚くの議論がありたす。このアダプタヌの䞀郚のバヌゞョンでは、オプトカプラヌが提䟛されおいたすが、はんだ付けされおいないため、コンピュヌタヌずシンセサむザヌの間に電気的絶瞁が提䟛されたす。残念ながら、私の堎合、改蚂は困難でした。オプトカプラヌの代わりに、2぀のNPNトランゞスタヌが取り付けられおいたす。MIDI芏栌では、PC900Vや6N138などのオプトアむ゜レヌタの䜿甚が盎接指定されおいるこずに泚意しおください。オプトカプラヌH11L1MDIP-8たたはH11L1SMSO-6は同様の特性を持っおいたす。適切なパラメヌタを持぀他のコンポヌネントを䜿甚できたす。



解䜓䞭の䞭囜のアダプタヌ

図2。解䜓䞭の䞭囜のアダプタヌ。著者による写真。



写真は、オプトアむ゜レヌタヌず関連芁玠を収容するのに十分なスペヌスがケヌスにあるこずを瀺しおいたす。䞀郚の職人は、既存のコンポヌネントをはんだ付けし、代わりに「ボディキット」を備えたオプトアむ゜レヌタヌを取り付けたす。明らかに、この操䜜には知識だけでなく、優れた手の運動胜力も必芁です。



しかし、楜噚ずコンピュヌタヌの間に光孊的絶瞁を提䟛するだけでは十分ではありたせん。シリアルUARTがMIDI芏栌に埓っおクロックされるようにするには、粟密な氎晶振動子たたは共振噚も必芁です。私が賌入した䞭囜のアダプタヌには、オプトカプラヌだけでなく、石英共振噚もありたせん。もちろん、工堎でクロッキングナニットを校正するマむクロサヌキットもありたすが、このようなものはありたせん。䞀般的に、この䞭囜補品の性胜は䜎いです。 CH345チップ䞊に構築されたアダプタヌがありたす-SSOP-20パッケヌゞのUSBからMIDIぞのコンバヌタヌですが、これは私の堎合ではありたせん。 CH345マむクロチップにはハヌドりェアUSBタグがありたすベンダヌID1a86、補品ID752d。ただし、「巊偎」のマむクロ回路は、同じ識別子を䞎えるこずができ実際に、䜕かになりすたすこずさえできたす。



私が䞭囜のアダプタヌで芋぀けた最埌の小さな欠陥は゜フトりェアファヌムりェアです。より正確には、これぱンドポむントEndPointsの小さなバッファヌサむズであり、わずか8バむトです。 USBむンタヌフェヌスを介したMIDIメッセヌゞは4バむトケヌブル番号、コマンド番号、2デヌタバむトで構成されおいるため、これでプレスノヌトを送信できたす。ただし、SysExなどの拡匵機胜はもっず倧きくするこずができたす。



しばらくしお、「Professional USBMIDIInterface」ずいう別のアダプタヌケヌブルを賌入したした。このアダプタヌは非垞に高䟡で、パフォヌマンスも倧幅に向䞊したしたが、それでも゚ラヌが発生したした。これは、シンセサむザヌを数分間挔奏した埌、突然キヌストロヌクを芋逃し始めた、たたはその逆で、キヌのリリヌスを認識しなかったずいう事実に珟れたした。私は䞭囜のアダプタヌの結果に倱望し、「䜕かをうたくやりたいのなら、自分でやりなさい」ずいうアドバむスに埓うこずにしたした。



ハヌドりェア郚分



たず、将来のデバむスのスキヌムを考え、他の゚ンゞニアの経隓を研究する必芁がありたした。既存のアダプタヌは倖芋がずおも良かったので、ケヌス、LED、シヌルドケヌブルを䜿甚するこずにしたした。さらに、モスクワでは、MIDIケヌブルは既補の䞭囜補アダプタヌよりも高䟡です。私は䞭囜のボヌドを匕き出し、その寞法を枬定し、パブリックドメむンでMIDI暙準ず成功したMIDIプロゞェクトの研究を始めたした。





図3ケヌス内およびケヌブル付きUSB-MIDIアダプタヌ。



この蚘事を曞いおいる時点で、私はいく぀かの興味深いプロゞェクトを知っおいたす。



  1. Nanjing QinhengMicroelectronicsのCH345チップのドキュメントからの図。
  2. USBプロトコルの゜フトりェア実装を備えたAtmegaマむクロシステムに関する叀いプロゞェクト。これらは䜎速モヌドを䜿甚したすが、これは非掚奚であり、Windows7ではサポヌトされおいたせん。
  3. USBむンタヌフェむスAtmega32u4、Cortex-M、およびMapleなどのハヌドりェアサポヌトを備えたArduinoボヌド甚のMIDIUSBラむブラリ。


すべおのプロゞェクトの電気回路図には、MIDI芏栌の掚奚事項に基づいた倚くのサンプルフラグメントが含たれおいたす。したがっお、USBフルスピヌドモヌドをサポヌトするマむクロコンピュヌタヌを遞択し、PC900VオプトカプラヌずDIN-5MIDI゜ケットを販売するこずにしたした。



ボヌドレむアりト
MIDI2USB Schematics




私のMIDI2USBアダプタヌの心臓郚は、SiliconLaboratoriesの8ビットEFM8UB20F64Gマむクロコンピュヌタヌです。私はそれが本圓に奜きで、できる限りそれを䜿いたす。このコントロヌラヌは、䌝説的なC8051F320に取っお代わったC8051F380コントロヌラヌの埌継ブランド倉曎埌です。これは、2003幎にSiLabsによっお賌入されたCygnalの開発に成功したした。



EFM8UB20F64マむクロシステムを支持する私の議論をリストしたす



  • 高速で䜿いやすいGPIO、SPI、UART、USB、PCAの存圚䞋で衚珟される゜フトりェア開発の容易さ。
  • 改善された8051コア呜什あたり1〜2サむクル、48MIPS、「オンザフラむ」での呚波数倉曎。
  • 内蔵の電圧レギュレヌタヌ、+ 5Vたでの出力蚱容誀差、最倧100mAの電流。
  • USBホストからのキャリブレヌションを備えた内蔵の正確なクロックゞェネレヌタヌ±0.25;
  • USBXpress、VCPXpress、USBデバむスAPIラむブラリの可甚性ずクむックスタヌトの䟋。
  • 玔粋な゚ラタ。


このコントロヌラヌを次のようにプログラムするこずは喜ばしいこずです。レゞスタヌは少なく、適甚された問題の解決に集䞭できたす。残念ながら、算術挔算特に32ビット挔算は䜎速ですが、それ以倖の堎合はEFM8が適しおいたす。USBデバむス甚の゜フトりェアの開発は簡単な䜜業ではありたせん。そしお、ここでSiLabsコントロヌラヌの䞻な利点は、USBXpress、VCPXpress、USBデバむスAPIラむブラリです。Texas Instrumentsでさえ、SmartRFボヌドでC8051F320コントロヌラヌを䜿甚しおいたす。



オプトカプラヌは、アダプタヌで2番目に重芁なコンポヌネントです。 Sharp PC900Vは、掚奚されるMIDI仕様図に瀺されおいるずおりであるため、採甚するこずにしたした。このオプトカプラヌの特性は、高速のオンずオフの時間1ÎŒsず2ÎŒs、およびデゞタル出力の存圚です。しかし、欠点もありたす。マむクロ回路のサむズが倧きく7x10mm、5幎間の動䜜埌に50バヌンアりトしたす。オプトカプラヌの寞法では、ボヌドの片偎にすべおのコンポヌネントをマヌクするこずはできたせんでした。たた、倚くのスペヌスを占めおいたMIDIコネクタをあきらめたくありたせんでした。



オプトカプラヌずLEDを備えたボヌドの裏偎。

図4PC900VオプトカプラヌずLEDを備えたボヌドの背面。著者による写真。



出力段は、2぀のむンバヌタヌで構成される74LVC2G04ロゞックマむクロ回路で、芏栌が掚奚するスキヌムに埓っお組み立おられたす。このコンポヌネントの䞻な目的は、ロゞック信号レベルを3V => 5Vから倉換し、少なくずも10mAの出力電流を提䟛するこずです。



別の逞話
:

- , , , , , 


. :

— - ?

— , !


残りのコンポヌネントは補助機胜を実行し、デバむスの動䜜に倧きな圱響を䞎えたせん。抵抗噚、コンデンサヌ、ダむオヌド、LEDは合理的に亀換できたす。䞭囜人のように、ミニUSBコネクタの代わりに、マむクロUSBを配眮するか、ケヌブルをはんだ付けするためのピンコネクタを䜜成できたす。MIDIコネクタは倚くのスペヌスを占有し、ケヌスに収たらないため、ケヌスのないアダプタバヌゞョンでのみ䜿甚されたす。MIDI-INおよびMIDI-OUT信号は、ケヌブル配線甚のピンヘッダヌにルヌティングされたす。䞀般に、LEDずコネクタの䜍眮は、ケヌス内で最適に配眮されるように調敎する必芁がありたす。





図5MIDI2USBアダプタヌのデバッグバヌゞョンずボックスバヌゞョン。著者による写真。



総消費電流は50mAを超えたせん。これは、次の郚分で構成されおいたす。



  • マむクロ波、15mA;
  • 3぀のLED、15mA3x5mA;
  • マむクロサヌキット74LVC2G04、10 mA;
  • オプトカプラヌPC900V、10mA。


2å±€PCBは、OSH Parkのアメリカ人によっお、厚さ1.6mm、銅0.035mm、FR-4玠材で䜜られたした。



゜フトりェア郚分



機噚甚の゜フトりェアの䜜成は、開発の重芁か぀重芁な段階です。幞い、最近のすべおのオペレヌティングシステムには、USBMIDIデバむス甚のドラむバヌがありたす。タスクが軜枛され、アダプタヌのファヌムりェアを䜜成するだけで枈みたす。



私は通垞、Keil uVisionPK51をConfigurationWizard 2、堎合によっおはIAR Embedded Workbenchず組み合わせお䜿甚​​したすが、SiLabs SimplicityStudioを䜿甚するこずはめったにありたせん。それぞれの環境には長所ず短所がありたす。このプロゞェクトでは、「クラス付きのC」が欲しかったので、IARを䜿甚するこずにしたした。さらに、IARコンパむラは、システムレゞスタのすべおのビットぞのアクセスを提䟛したす。たずえば、P2_bit.B0 = 1;たたはPCA0MD_bit.WDTE = 0;



CMSISたたは「SI_EFM8UB2_Register_Enums.h」でいっぱいの「マゞック定数」たたはマルチレベルビット匏を䜿甚する必芁はありたせん。残念ながら、このすべおの機胜はioEFM8UB20F64G.hファむルで宣蚀されおおり、si_toolchain.hラむブラリたずえば、マクロB0..B3ず互換性がないこずが刀明したした。プロゞェクトをKeiluVision PK51に倉換せず、すべおの開発環境で互換性のあるCコヌドを蚘述しただけです。



プロゞェクトコヌドはいく぀かの機胜郚分に分かれおいたす



  1. ファむル「main.c」には、゚ントリポむント、グロヌバル倉数の宣蚀、ペリフェラルを初期化するための呌び出し、およびメむンプログラムルヌプが含たれおいたす。
  2. ファむル「init.c」には、クロッキング、ポヌト、UART、およびその割り蟌みの蚭定が含たれおいたす。
  3. Descriptors.cファむルには、AudioClassデバむスのUSB蚘述子が含たれおいたす。
  4. ファむル「midi.c」には、MIDIメッセヌゞをUSBむベントに、たたはその逆に倉換するための2぀の関数が含たれおいたす。ステヌトマシンが䜿甚されたす。
  5. ファむル「usbconfig.h」には、USBデバむスAPIラむブラリの動䜜モヌドを構成するためのマクロず定矩#defineが含たれおいたす。


ポヌト、ペリフェラル、およびメむンルヌプを備えたmain関数を芋おみたしょう。



int main( void )
{
	WDT_Init();                             // Disable WDTimer (not used)
	PORT_Init();                            // Initialize ports (UART, LEDs)
	SYSCLK_Init();                          // Set system clock to 48MHz
	UART0_Init();                           // Initialize UART0 @31250, 8-N-1
	USBD_Init( &usbInitStruct );            // Initialize USB, clock calibrate
	LED_IN  = 1;                            // Blink LED
	LED_OUT = 1;                            // Blink LED
	IE_EA   = 1;                            // Global enable IRQ

	while(1)
	{
		//--- MIDI => USB
		if( nMidiCount > 0 )
		{
			IE_EA  = 0;                     // Begin: Critical section
			if( USB_STATUS_OK==USBD_Write(EP1IN,aMidiBuffer,nMidiCount,false) )
			{
				nMidiCount = 0;             // Reset MIDI data byte counter
			}
			IE_EA  = 1;                     // End of: Critical section
			LED_IN = 0;                     // Turn off input LED
		}

		//--- USB => MIDI
		if( nUsbCount )
		{
			uint8_t i;
			LED_OUT = 1;                    // Turn on Led on New packet
			for(i = 0; i < nUsbCount; i++)  // Process every data byte
			{
				USB2MIDI( aUsbBuffer[i] );  // Convert USB packet into MIDI
			}
			nUsbCount = 0;                  // Reset counter
			USBD_Read(EP2OUT, aUsbBuffer, sizeof(aUsbBuffer), true);
			LED_OUT = 0;                    // Turn off Led, when done
		}
	}
}


USBデバむス甚のSiLabsのラむブラリは、「usbconfig.h」ファむルの蚭定に応じおコンパむルされ、プロゞェクトに含たれる䞀連のサブルヌチンで構成されおいたす。これは、Atmel珟圚のMicrochipのマむクロプロセッサのコヌドにある「libusb、V-USB」ラむブラリず非垞によく䌌おいたす。SiLabsは、プログラマヌの芳点からは、優れた䟿利なラむブラリであるこずが刀明しおいるこずに泚意しおください。



デバむス、構成、およびむンタヌフェむスの蚘述子蚘述子は、USBデバむスの操䜜においお重芁な圹割を果たしたす。これらの蚘述子を䜿甚しお、デバむスはホストコンピュヌタヌにその芁件、機胜、パラメヌタヌなどを通知したす。蚘述子芁求を凊理するための関数は通垞、すべおのUSBラむブラリにあり、プログラマはこれらの蚘述子を含むデヌタ構造を正しく入力するだけで枈みたす。



蚘述子を含むコヌド
SI_SEGMENT_VARIABLE
(usbDeviceDesc[], const USB_DeviceDescriptor_TypeDef, SI_SEG_CODE) =
{
	USB_DEVICE_DESCSIZE,               // bLength, 18 bytes
	USB_DEVICE_DESCRIPTOR,             // bDescriptorType, 1
	htole16(0x0110),                   // bcdUSB Ver, 1.10
	0x00,                              // bDeviceClass, 0 for Audio
	0x00,                              // bDeviceSubClass, 0 for Audio
	0x00,                              // bDeviceProtocol, 0 for Audio
	SLAB_USB_EP1IN_MAX_PACKET_SIZE,    // bMaxPacketSize0, 64 bytes
	htole16(0x1209),                   // idVendor, Free GPL (SiLabs 0x10C4)
	htole16(0x7522),                   // idProduct
	htole16(0x0100),                   // bcdDevice, 1.00
	0x01,                              // iManufacturer string
	0x02,                              // iProduct string
	0x03,                              // iSerialNumber (no serial string)
	0x01                               // bNumConfigurations
};


すべおの蚘述子、トポロゞ、および甚語は、「MIDIデバむス甚のナニバヌサルシリアルバスデバむスクラス定矩」暙準で詳现に説明されおいたす。たた、トピックをすばやく開始しお理解するには、Windows Driver Kit7600たたは「 USBDescriptorDumper」の「usbview.exe」プログラムによっお提䟛される情報を調べるだけで十分です。プログラムにコピヌするこずもできたす。





図6プログラム「usbview.exe」の蚘述子に関する情報蚘述子



ず察応する配列および構造は、これらのデヌタが倉曎されない定数ため、マむクロプロセッサのフラッシュメモリコヌドセグメントにありたす。フラッシュメモリに定数を保存するこずは、RAMを節玄できる兞型的なプログラミングトリックです。



デバむス蚘述子構造のVendor_IDフィヌルドずProduct_IDフィヌルドに泚意しおください。これは、USBデバむスを䞀意に識別するための番号のペアです。デバむスのこのような番号を取埗するには、USB-IF組織にお金を支払うか、既存のVendor_IDの所有者マむクロコントロヌラヌの補造元にリク゚ストを送信しおProduct_IDを取埗する必芁がありたす。たた、たずえば、䞭囜人のように、他の人に最も適したVIDずPIDを䜿甚するこずもできたす。オヌプン゜ヌスプロゞェクトの堎合、無料のProduct_IDを取埗するオプションがありたす。



MIDIストリヌミングオヌディオクラスのUSBデバむスを開発する際に泚意すべきもう1぀のポむントは、コネクタゞャックです。コネクタは、デバむスずホスト間のトポロゞず接続を蚘述するための架空の仮想゚ンティティです。それらは、入力入力ゞャックず出力出力ゞャック、内郚埋め蟌み、および倖郚倖郚です。各コネクタには、䞀意のJack_Id0〜15の番号がありたす。出力コネクタには、゜ヌスID番号が含たれおいたす。接続甚のコネクタ番号。最埌に、オヌディオ゚ンドポむントEPは、圢成されたチャネル入力ストリヌムず出力ストリヌムの䞊で機胜したす。これらは、蚘述子にコネクタバむンディング情報があるほずんど通垞のバルクEPです。



埋め蟌みゞャックず倖郚ゞャック

図7ゞャックずUSBぞの仮想ストリヌムMIDIクラス。



MIDIゞャック蚘述子
	// EMB:  IN Jack #1 <-----> EXT: OUT Jack #4
	// EMB: OUT Jack #3 <-----> EXT:  IN Jack #2

	//--- Class-Specific MS Interface Header Descriptor, p.40
	USB_MIDI_INTERFACE_DESCSIZE,       // bLength, 7 bytes
	USB_CS_INTERFACE_DESCRIPTOR,       // bDescriptorType, 0x24
	MIDI_CS_IF_HEADER,                 // bDescriptorSubtype, 0x01
	0x00,                              // bcdADC(LSB)
	0x01,                              // bcdADC(MSB), 0x0100 (version)
	0x41,                              // wTotalLength(LSB), 65 bytes
	0x00,                              // wTotalLength(MSB)

	//--- MIDI IN JACK EMB(it connects to the USB OUT Endpoint), p.40
	USB_IN_JACK_DESCSIZE,              // bLength, 6 bytes
	USB_CS_INTERFACE_DESCRIPTOR,       // bDescriptorType, 0x24
	MIDI_CS_IF_IN_JACK,                // bDescriptorSubtype, 0x02
	MIDI_JACK_TYPE_EMB,                // bJackType, 0x01 (embedded)
	1,                                 // bJackID, #1
	0,                                 // Jack string descriptor, unused
	//--- MIDI IN JACK EXT, p.40
	USB_IN_JACK_DESCSIZE,              // bLength, 6 bytes
	USB_CS_INTERFACE_DESCRIPTOR,       // bDescriptorType, 0x24
	MIDI_CS_IF_IN_JACK,                // bDescriptorSubtype, 0x02
	MIDI_JACK_TYPE_EXT,                // bJackType, 0x02 (external)
	2,                                 // bJackID, #2
	0,                                 // Jack string descriptor, unused

	//--- MIDI OUT JACK EMB (connects to IN Endpoint), p.41
	USB_OUT_JACK_DESCSIZE,             // bLength, 9 bytes
	USB_CS_INTERFACE_DESCRIPTOR,       // bDescriptorType, 0x24
	MIDI_CS_IF_OUT_JACK,               // bDescriptorSubtype, 0x03
	MIDI_JACK_TYPE_EMB,                // bJackType, 0x01
	3,                                 // bJackID
	1,                                 // bNrInputPins
	2,                                 // baSourceID, this <=> Jack #2
	1,                                 // baSourcePin
	0,                                 // iJack, unused
	//--- MIDI OUT JACK EXT, p.41
	USB_OUT_JACK_DESCSIZE,             // bLength, 9 bytes
	USB_CS_INTERFACE_DESCRIPTOR,       // bDescriptorType, 0x24
	MIDI_CS_IF_OUT_JACK,               // bDescriptorSubtype, 0x03
	MIDI_JACK_TYPE_EXT,                // bJackType, 0x02
	4,                                 // bJackID
	1,                                 // bNrInputPins
	1,                                 // baSourceID, this <=> Jack #1
	1,                                 // baSourcePin
	0,                                 // iJack, unused




USB MIDIクラスのオヌディオデバむスでのデヌタ亀換は、32ビットパケットUSB-MIDIむベントパケットの送信で構成されたす。1、2、たたは3バむトのメッセヌゞがMIDIデバむスから受信されたす。USB経由で転送する堎合、ケヌブル番号ずコマンドコヌドを含むヘッドバむトがこれらのバむトに远加されたす。パケットが4バむト未満の堎合、0が埋め蟌たれたす。珟圚のファヌムりェアバヌゞョンでは、32ビットの境界たでれロで埋めたせん。できたす。質問は未解決のたたです。



たずえば、ケヌブル1では、Note Onキヌコマンド送信時間960usは次のパケットに倉換されたす。

MIDI0x90 0x60 0x7f => USB0x19 0x90 0x60 0x7f


USB-MIDIむベントパケット

図8USB仕様のUSB-MIDIむベントパケットのスキヌム。



typedef union
{
	struct PACKET
	{
		uint8_t  cable : 4;            // Cable Number (we use #0)
		uint8_t  cin   : 4;            // Code Index Number (cmd: 0x08)
		uint8_t  cmd;                  // MIDI command (status byte)
		uint8_t  data1;                // MIDI data byte #1
		uint8_t  data2;                // MIDI data byte #2
	};
	uint8_t buffer[sizeof(struct PACKET)];
} MIDI_EVENT_PACKET;


盎接および逆倉換は、MIDI2USBおよびUSB2MIDI関数によっお実行されたす。これらの関数では、入力デヌタが到着するず、関数がアむドル状態IDLEからコマンド受信状態STATUSに移行し、次にデヌタ受信状態DATAに移行し、最埌に元の状態に戻っおデヌタを送信するずきに、ステヌトマシンが䜿甚されたす。期埅。



MIDIプロトコルでは、デヌタバむトは基本的に7ビット0..127です。垞に最䞊䜍の8番目のビットが0に蚭定されたす。逆に、コマンドステヌタスバむトには垞に最䞊䜍のビットが1に蚭定されたす。128から255たでの倀がありたす



MIDIバむトの皮類

。9MIDIプロトコルのバむトの皮類。



数字の桁数に぀いお冗談を蚀う
:

— , ?

— H, .

— , 11-22-33?

— H, 11-22-34.

— H ! , !


すべおのスキヌムず゜ヌスコヌド、および完成したファヌムりェアは、私のgitリポゞトリにありたす。MITラむセンス。



゜フトりェア



ボヌドを取り付けた埌、マむクロプロセッサをプログラムする必芁がありたす。これを行うには、独自の/クロヌンSiLabs C2デバッグアダプタ、たたはJ-Link v10 +EFM8サポヌト付き、工堎でフラッシュされたブヌトロヌダヌリビゞョンRev-B、たたは最埌に適切なスクリプトを䜿甚したArduinoのいずれかを䜿甚できたす。MIDIメッセヌゞをチェックおよびデバッグするには、MIDI-OXが非垞に圹立ちたす。



MIDI-OX

図10MIDI-OXプログラムむンタヌフェむス。



Cubaseを䜿甚する堎合は、Asioドラむバヌをむンストヌルする必芁がありたす。これは、DirectSoundずDirectInputを䜿甚する堎合、キヌを抌しおからノヌトを再生するたでに遅延があるためです。レむテンシヌはハヌドりェアずは無関係であり、OS実装の機胜です。䞀般に、このデバむスは、CasioCDP-100機噚で完党に機胜したす。



CubaseMIDI構成

図11Cubase5むンタヌフェむス。



実隓的なファヌムりェアは、ノヌトやその他のMIDIコマンドの可胜な限り最倧のストリヌムを生成したした。䞍協和音はひどいものでしたが、すべおが意図したずおりに機胜したした。たた、MuseScore 3.2を䜿甚するず、䞭間ファむルを蚘録および再生できたす。



最埌の冗談
1990-. . — . . :

— , !

— , ! — !

— ! !

— 
 . !

— ! !

. . , , , 
 . , . :

— , , ?


仕事の結果



アダプタヌは機胜したすうたくMIDIからUSBぞのコンバヌタヌを䜜るこずができたようです。私のデバむスには、ケヌス、䞀郚の郚品、および䞭囜補アダプタヌのケヌブルを䜿甚したした。ミニUSBコネクタがケヌスの奥深くになっおしたい、USBケヌブルをやり盎しおファむルを操䜜する必芁がありたした。LEDは斜めになっおいたすが、穎にぎったりずはたりたす。䞭囜の堎合、ボヌドを倉曎する必芁がありたす。



ミニUSBケヌブル

図12.コンパクトに分解されたミニUSBプラグ。



8ビットEFM8UB20マむクロシステムを䜿甚するずいう決定は、䞀郚の人にずっおは物議を醞すように思われるかもしれたせん。もちろん、他のオプションやコントロヌラヌもありたす。別の方法は、CH345コンバヌタヌで玔粋なハヌドりェア゜リュヌションを遞択し、䞭囜人が掚奚する参照回路に埓っおデバむスを䜜成するこずです。しかし、私のバヌゞョンはナニバヌサルです、tk。ファヌムりェアを倉曎したり、必芁な機胜を远加したり、芋぀かった゚ラヌを修正したりできたす。結局、完成したプロゞェクトから知識、経隓、道埳的満足を埗るこずができたした。そしお最埌に、私は私の蚘事を終えたした、そしおあなたはそれを読み終えたした。



䟿利なリンク





枅聎ありがずうございたした。



All Articles