約 2,613,255 件
https://w.atwiki.jp/vst_prog/pages/77.html
トップページ MIDIメッセージをホストアプリケーションから受け取る関数 MIDIメッセージをホストアプリケーションから受け取るにはprocessEvents()関数を利用する。 processEvents()関数 VstInt32 processEvents (VstEvents* events) 戻り値と引数については以下のとおりである。 戻り値(型) 説明 VstInt32 戻り値についてはホストアプリケーションで無視される。ただし、念のため1を返すようにするとよい。 引数 説明 VstEvents* events イベントを保持しているVstEvents型変数(後述)へのポインタ processEvents()関数はMIDIメッセージだけを受け取る関数ではなく、VSTに関するホストアプリケーションからのイベントをすべて受け取る関数となっている。 ただし、実装されているメッセージは現在(2010年11月)のところMIDIに関する以下の2つだけである。 MIDIメッセージ MIDI System Exclusiveメッセージ processEvents()関数との関係 ホストアプリケーションはprocessReplacing()関数を呼び出す前に必ず1度だけprocessEvents()関数呼び出し、イベントをVSTに通知する。 また、processEvents()関数で渡されるイベントは直後に呼び出すprocessReplacing()関数に関連するイベントのみとなっている。 ホストアプリケーション側の処理のイメージとしては以下のような感じである。 【ホストアプリケーションの動作】 ①processEvents()関数呼び出し ↓ ②processReplacing()関数呼び出し ↓ ③いろいろ処理 ↓ ④processEvents()関数呼び出し ↓ ⑤processReplacing()関数呼び出し ↓ ⑥いろいろ処理 ↓ ⑦processEvents()関数呼び出し ↓ ⑧processReplacing()関数呼び出し ↓ : : ホストアプリケーションは①でprocessEvents()関数を呼び出した際に、②processReplacing()関数に関連するイベントのみをVSTに渡す。 (ホストアプリケーションは②に無関係のイベント(⑤や⑧に関連するイベント)については渡してはいけない。) サンプルコード processEvents()関数でMIDIメッセージを保存するサンプルコードは以下のとおり。 VstInt32 MyMidiSampleVST processEvents (VstEvents* events){// MIDIのリストを初期化します。midimsgnum = 0;memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); // VSTイベントの回数だけループをまわす。int loops = (events- numEvents);for (int i = 0;i loops; i++){// 与えられたイベントがMIDIならばmidimsgbufにストックするif ((events- events[i])- type == kVstMidiType){VstMidiEvent *midievent = (VstMidiEvent*)(events- events[i]); midimsgbuf[midimsgnum].deltaFrames = midievent- deltaFrames;midimsgbuf[midimsgnum].message = midievent- midiData[0] 0xF0; // MIDIメッセージmidimsgbuf[midimsgnum].channel = midievent- midiData[0] 0x0F; // MIDIチャンネルmidimsgbuf[midimsgnum].data1 = midievent- midiData[1]; // MIDIデータ1midimsgbuf[midimsgnum].data2 = midievent- midiData[2]; // MIDIデータ2midimsgnum++; // MIDIメッセージのバッファがいっぱいの場合はループを打ち切る。if (i = MIDIMSG_MAXNUM){break;}}} // 1を返しておくreturn 1;} サンプルコードの解説 まず引数のVstEvents構造体は以下のように定義されている。 変数 型 説明 numEvents VstInt32 VSTイベントの数。 reserved VstIntPtr 使われていない変数。0で固定 events [2] VstEvent * VSTイベントへのポインタ。numEvents分だけVSTイベントが格納されている。 ホストアプリケーションからのVSTイベント自体は上記のVstEvents構造体のVstEvent * events[]に格納されている。 VstEvent構造体は以下のように定義されている。 変数 型 説明 type VstInt32 VSTイベントのタイプ。実装されているタイプは以下の2つのみ。kVstMidiType…data[ ]に保存されているデータがMIDIメッセージであることを示すkVstSysExType…data[ ]に保存されているデータがMIDI System Exclusiveメッセージであることを示す byteSize VstInt32 VstEvent構造体のtypeとbyteSizeを除いたバイト数。24固定。 deltaFrames VstInt32 processReplacing()関数内でMIDIメッセージの処理タイミング。0~sampleFramesの範囲の値を持つ。 flags VstInt32 使われていない変数。 data[16] char 実際のVSTイベントデータ。typeよって内容が変わる。 サンプルコードでは、最初にMIDIメッセージを保存するバッファを初期化している。(3~5行目) midimsgnum = 0; memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); 次にVSTイベントの数だけ処理するループを作成している。(8~29行目) // VSTイベントの回数だけループをまわす。 int loops = (events- numEvents); for (int i = 0;i loops; i++) { : : } ループの中で与えられたVSTイベントがMIDIメッセージか確認し、MIDIメッセージならばバッファに保存する(12~28行目) バッファに保存する際、VstEvent構造体のままでは扱いにくいため、VstMidiEvent構造体(後述)に型変換している。 if ((events- events[i])- type == kVstMidiType) { VstMidiEvent *midievent = (VstMidiEvent*)(events- events[i]); midimsgbuf[midimsgnum].deltaFrames = midievent- deltaFrames; midimsgbuf[midimsgnum].message = midievent- midiData[0] 0xF0; // MIDIメッセージ midimsgbuf[midimsgnum].channel = midievent- midiData[0] 0x0F; // MIDIチャンネル midimsgbuf[midimsgnum].data1 = midievent- midiData[1]; // MIDIデータ1 midimsgbuf[midimsgnum].data2 = midievent- midiData[2]; // MIDIデータ2 midimsgnum++; } VstMidiEvent構造体については以下のように定義されている。 変数 型 説明 type VstInt32 VstEvent構造体と同じ。 byteSize VstInt32 VstEvent構造体と同じ。 deltaFrames VstInt32 VstEvent構造体と同じ。 flags VstInt32 使われていない変数。 noteLength VstInt32 用途不明 noteOffset VstInt32 用途不明 midiData [4] char MIDIメッセージ。midiData[0]…MIDIステータス(メッセージ)とMIDIチャンネルが入っている。midiData[1]…MIDIメッセージのデータ1midiData[2]…MIDIメッセージのデータ2midiData[3]…将来的な拡張のため予約。0が入っている。 detune char 用途不明。-64~+63の値が入っている。 noteOffVelocity char 用途不明。0~127の値が入っている。 reserved1 char 将来的な拡張のため予約。0が入っている reserved2 char 将来的な拡張のため予約。0が入っている 次へ 同一カテゴリのTips 項目 No. 概要 MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化 No.3 ホストアプリケーションからMIDIメッセージを受け取る方法 No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法 No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)
https://w.atwiki.jp/vst_prog/pages/74.html
トップページ MIDIメッセージ処理 MIDIメッセージにあわせて動作するVSTのサンプルである。 下記VSTはSynthとしてロードされ、常にノイズを発生させる。実行時は音量に注意してほしい。 ノイズのボリュームをMIDI CC7でコントロールできる。 サンプルコード全体 ソースコードのダウンロード→ここをクリック // ============================================================================================// インクルードファイル// ============================================================================================#include stdlib.h #include string.h #include "audioeffectx.h" // ============================================================================================// 設計情報の記入// ============================================================================================#define MY_VST_INPUT_NUM 2 //入力数。モノラル入力=1、ステレオ入力=2#define MY_VST_OUTPUT_NUM 2 //出力数。モノラル出力=1、ステレオ出力=2 #define MY_VST_UNIQUE_ID SMPL //ユニークID //公開する場合は以下URLで発行されたユニークIDを入力する。 //http //ygrabit.steinberg.de/~ygrabit/public_html/index.html #define MY_VST_PRESET_NUM 1 //プリセットプログラムの数#define MY_VST_PARAMETER_NUM 0 //パラメータの数 // ============================================================================================// MIDI処理用の定義// ============================================================================================#define MIDIMSG_MAXNUM 255 struct MidiMessage{VstInt32 deltaFrames; //MIDIメッセージを処理するタイミングunsigned char message; //MIDIメッセージ番号unsigned char channel; //MIDIチャンネルunsigned char data1; //MIDIデータ1unsigned char data2; //MIDIデータ2}; // ============================================================================================// VSTの基本となるクラス// ============================================================================================class MyMidiSampleVST public AudioEffectX{protected int midimsgnum; //受け取ったMIDIメッセージの数MidiMessage midimsgbuf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ // ノイズのボリュームfloat volume;public MyMidiSampleVST (audioMasterCallback audioMaster); // 音声信号を処理するメンバー関数virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); // MIDIメッセージをホストアプリケーションから受け取るためのメンバー関数VstInt32 processEvents (VstEvents* events);}; // ============================================================================================// このVSTのを生成するための関数// ============================================================================================AudioEffect* createEffectInstance (audioMasterCallback audioMaster){//newでこのVSTを生成したポインタを返すreturn new MyMidiSampleVST (audioMaster);} MyMidiSampleVST MyMidiSampleVST (audioMasterCallback audioMaster) AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){//VSTの初期化を行う。 //以下の関数を呼び出して入力数、出力数等の情報を設定する。//必ず呼び出さなければならない。setNumInputs (MY_VST_INPUT_NUM); //入力数の設定setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 //Synthの場合…true、Effectorの場合…false canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。 //音声処理を行わないVSTはないので必ずこの関数を呼び出す。 //上記の関数を呼び出した後に初期化を行うmidimsgnum = 0;memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); volume = 1.0f;} void MyMidiSampleVST processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames){//入力、出力は2次元配列で渡される。//入力は-1.0f~1.0fの間で渡される。//出力は-1.0f~1.0fの間で書き込む必要がある。//sampleFramesが処理するバッファのサイズfloat* outL = outputs[0]; //出力 左用float* outR = outputs[1]; //出力 右用 // midieventlistの読み込み位置int midimsg_cursol = 0; for (int i = 0; i sampleFrames; i++){//ここで音声処理を行う。 // MIDIメッセージがあるか確認if ( midimsgnum 0){// MIDIメッセージを処理するタイミングかどうかを確認する。if( midimsgbuf[midimsg_cursol].deltaFrames = i){// MIDIメッセージがコントロールチェンジのボリューム変更(CC7)であった場合if( midimsgbuf[midimsg_cursol].message == 0xB0 midimsgbuf[midimsg_cursol].data1 == 7){volume = (float)( midimsgbuf[midimsg_cursol].data2) / 127.0f;} // midimsgbufからMIDIメッセージを読み出したので// 読み込み位置を進め、MIDIメッセージの数を減らすmidimsgnum--;midimsg_cursol++;}} //出力バッファへ書き込む。outL[i] = volume * (float)((rand() % 256) -128) / 255.0f;outR[i] = volume * (float)((rand() % 256) -128) / 255.0f;}} // MIDIメッセージを処理するメンバー関数// processReplacing()の前に必ず1度だけ呼び出される。// VstInt32 MyMidiSampleVST processEvents (VstEvents* events){// MIDIのリストを初期化します。midimsgnum = 0;memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); // VSTイベントの回数だけループをまわす。int loops = (events- numEvents);for (int i = 0;i loops; i++){// 与えられたイベントがMIDIならばmidimsgbufにストックするif ((events- events[i])- type == kVstMidiType){VstMidiEvent *midievent = (VstMidiEvent*)(events- events[i]); midimsgbuf[midimsgnum].deltaFrames = midievent- deltaFrames;midimsgbuf[midimsgnum].message = midievent- midiData[0] 0xF0; // MIDIメッセージmidimsgbuf[midimsgnum].channel = midievent- midiData[0] 0x0F; // MIDIチャンネルmidimsgbuf[midimsgnum].data1 = midievent- midiData[1]; // MIDIデータ1midimsgbuf[midimsgnum].data2 = midievent- midiData[2]; // MIDIデータ2midimsgnum++; // MIDIメッセージのバッファがいっぱいの場合はループを打ち切る。if (i = MIDIMSG_MAXNUM){break;}}} // 1を返しておくreturn 1;} VST Tipsトップページへ 同一カテゴリのTips 項目 No. 概要 MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化 No.3 ホストアプリケーションからMIDIメッセージを受け取る方法 No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法 No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)
https://w.atwiki.jp/vst_prog/pages/76.html
トップページ VSTクラスの初期化 ここでは前項で定義したMyMidiSampleVSTの初期化を行う。 VSTとしての最低限の初期化を行うとともに以下2つのMIDIに関するメンバー変数を初期化する。 midimsgnum … 受け取ったMIDIメッセージの数。0に初期化しておく midimsgbuf[ ] … 受け取ったMIDIメッセージを保管するバッファ。バッファすべてを0に初期化しておく サンプルコード サンプルコードは以下のとおり。 MyMidiSampleVST MyMidiSampleVST (audioMasterCallback audioMaster) AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){//VSTの初期化を行う。 //以下の関数を呼び出して入力数、出力数等の情報を設定する。//必ず呼び出さなければならない。setNumInputs (MY_VST_INPUT_NUM); //入力数の設定setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 //Synthの場合…true、Effectorの場合…false canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。 //音声処理を行わないVSTはないので必ずこの関数を呼び出す。 //上記の関数を呼び出した後に初期化を行うmidimsgnum = 0;memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); volume = 1.0f;} サンプルコードの解説 まず2行目~17行目でVSTの初期化を行っている。(詳細はVST初期化ルールのとおり) なお、Synthとして動作させるため、isSynth()関数にtrueを引き渡している。 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 次に19~20行目で2つのMIDIに関するメンバー変数を初期化している。 midimsgnum = 0; memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); 次へ 同一カテゴリのTips 項目 No. 概要 MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化 No.3 ホストアプリケーションからMIDIメッセージを受け取る方法 No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法 No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)
https://w.atwiki.jp/akatonbowiki/pages/5941.html
このページはこちらに移転しました MIDIのうた 作詞/197スレ296 ミーディー!ミ・ミ・ミミーディー!! 打ち込みなんでもおkwwwwwwww ミーディー!ミ・ミ・ミミーディー!! ひたすらキーボードでうpwwwwwww ピアノにギターにドラムにベース らくらくの69鍵 昼からマターリ食らうよスペース 意外とでかいのさー ミーディー!ミ・ミ・ミミーディー!! 打ち込みなんでもおkwwwwwwww ミーディー!ミ・ミ・ミミーディー!! ひたすらMIDIでうpwwwwwww
https://w.atwiki.jp/desktopmusic/pages/24.html
最もシンプルな例 特徴 PCオンリーで構築できるDTM環境です。何も買わなくてもOK。 出来心で始める環境はまさにコレです。 必要なもの midiシーケンサー ソフトウェア音源かサウンドカードに搭載されている内臓音源 出力用のヘッドフォンかスピーカー 簡単な説明 シーケンサーからのmidi信号がPCに搭載されているサウンドカードの内臓音源やソフトウェア音源に送られ、音声出力がなされるというものです。 ちなみに、ソフトウェア音源を用いる際はこの状態は必ず組み込まれます。 外部音源を使う例 特徴 外部音源モジュールやシンセサイザー等、midi通信が可能な機材をPCと繋げて使うDTM環境です。ちゃんとした外部音源を使うことでクオリティの高い音を得ることができます。 midiを楽しむためには絶対に欠かせない構成です。 必要なもの midiシーケンサー 外部midi音源 外部midi音源と繋げるためのmidiインターフェイス(最近はUSB接続できるものが多いです。) 出力用のヘッドフォンかスピーカー 簡単な説明 シーケンサーからのmidi信号が外部に接続したmidi音源に送られ、音声出力がなされるというものです。 注意するべき事は、音声はPCからではなく接続したmidi音源から出力されることです。 図ではmidi音源から出た音声を録音できるように、PCのサウンドカードへライン入力しています。 トップページ>DTM全般
https://w.atwiki.jp/cw-port/pages/19.html
素材 →素材:WAVE MIDICardWirth関連サイト 一般向け素材サイト リンク集 閉鎖・消失・配布終了サイト MIDI CardWirth関連サイト サイト-spacing-12345678 管理者-spacing-1234 備考 fs blast 大場康弘さん MotiVoid がじろーさん(代理公開おーりさん) →がじろーさんサイト:Dance the Melody FANTATHEATER annex tzさん Glossy Jet Materials GJMさん HANDのページ HANDさん IvyMaze リイさん →blog MONOMANIA NINAさん OLD WOODS HUT VaLSeさん USED@待避所 SHIMOさん(代理公開MNSさん) スラム街の猫 ちゃおぶんさん 細胞壁INN(@音紡ぎ) みょしださん もりのせいかつ 綾田姚狐さん (旧HN:伊倉”姚狐”たら子さん) きたまくら。の隠れ家 たくやんさん(代理公開せなさん) TED's WebSite!! TEDさん Sound of Dream コダマさん 一般向け素材サイト サイト-spacing-12345678 管理者-spacing-1234 備考 FREEDOM HOUSE 2nd 氷石 彩亜さん ツクール向け中心 Mutopia Project 著作権切れ音楽の配布 TAM Music Factory TAMさん 魔王魂 KOUICHIさん ツクール向け中心 SILDRA COMPANY yukinoさん かるがも行進局 とびさん ツクール向け中心 リンク集 紡いだ音の先には・・・ CardWirth関係のmidi素材配布サイトリンク集。みょしださんによる一言解説つき。最終更新:2005/10/16 閉鎖・消失・配布終了サイト サイト 管理者 備考 理容ハマダ オオバヤスさん notfound ARTIFICIAL-DREAM Disさん notfound
https://w.atwiki.jp/nicoratch/pages/1135.html
概要 3Band EQとオーディオインターフェイスを搭載した2chDJコントローラー。Virtual DJ LE同梱。 スペック表 Rec, Master and Booth RCA outputs Balanced XLR output 1/4" and 1/8" (3.5mm) headphone out with volume control XLR and 1/4" mic input with mic volume control Unit dimensions 360*260*70mm (W*D*H) Unit weight 2.0kgs MIDI-7 http //www.wjtch.com/content/?38.html
https://w.atwiki.jp/ano_gakki/pages/22.html
イノセンサーのMIDI対応(Air Play)について 「MIDI対応やAirPlayがよくわからない!」というご意見が多かったので、ちょっと補足しておきます。 対応しているMIDIファイル形式(SMF)は、Format0と呼ばれるものです。 Format0では、すべてのデータが1トラック、1チャンネルにまとめられて記録されている。 イノセンサーは4音同時再生まで対応なので、一つのトラックにまとめられたMIDIデータのうち、同時に4音以上鳴るときには、以降のコマンドを無視して発生しません。 また、音色切り替えなどのコマンドには対応していないため、あらかじめ設定してある音色ですべてのパートが再生されます。 自分であてぶり用のMIDIファイルを作成する場合にはよいのですが、すでにあるMIDIファイルを読み込ませるときには、Format0への変換が必要です。 フォーマット変換には、ExSMFなどのツールなどを使うことによって変換することが出来ます。 このように、用意したMIDIファイルをWebページにアップロードし、イノセンサーの設定画面にて、アップロードしたMIDIファイルのURLを入力してアプリに読み込みます。
https://w.atwiki.jp/windsynth/pages/49.html
MIDIコントローラー (フットコントローラー、フィジカルコントローラー) について。 目次 YAMAHA MFC-10? KORG nanoKONTROL? YAMAHA MFC-10? MFC10|製品情報|ヤマハシンセサイザー&ミュージックプロダクション WX IN端子を装備するフットコントローラー。 KORG nanoKONTROL? nanoシリーズ nanoKONTROL|KORG INC. 安価なUSB-MIDIフィジカルコントローラー。
https://w.atwiki.jp/windsynth/pages/75.html
目次 MOTU - FastLane MOTU - micro express MOTU - micro line MOTU - MIDI Express 128 MOTU - MIDI Express XT MOTU - MIDI Timepeace AV Roland UM-1 (販売終了) Roland UM-1G, UM-2G, UM-3G (販売終了) Roland UM-ONE YAMAHA UX16 関連情報 アルファベット順で。 MOTU - FastLane 2 IN / 2 OUT MOTU - micro express 4 IN / 6 OUT MOTU - micro line 5 IN / 5 OUT MOTU.com - Products High Resolution - MOTU MOTU - MIDI Express 128 8 IN / 9 OUT MOTU - MIDI Express XT 8 IN / 8 OUT MOTU - MIDI Timepeace AV 8 IN / 8 OUT Roland UM-1 (販売終了) 製品情報 UM-1 Roland UM-1G, UM-2G, UM-3G (販売終了) UM-1G Products Cakewalk (MIDI-IN ×1, MIDI-OUT×1) UM-2G Products Cakewalk (MIDI-IN ×2, MIDI-OUT×2) UM-3G Products Cakewalk (MIDI-IN ×3, MIDI-OUT×3, UM-3Gを3台連結して MIDI-IN/OUTを9個にすることが可能) Roland UM-ONE UM-ONE 製品 ローランド 2011年3月上旬 発売 USB, 1 IN / 1 OUT YAMAHA UX16 UX16 - AUDIO/MIDIインターフェース - ヤマハ株式会社 2001年10月 発売 USB, 1 IN / 1 OUT 関連情報 2ch MIDIインターフェイス すれ ■MIDIインターフェイスについて 3台目 MIDIインターフェイスは何を使ってる? 2台目 貴様ら、MIDIインターフェースは何をお使いですか? 関連 EWI4000sとMIDIインターフェイスの動作報告