約 3,551,743 件
https://w.atwiki.jp/hmiku/pages/18274.html
【検索用 あんふりちゅーともしゅれーしょん 登録タグ 2011年 VOCALOID あ ナナホシ管弦楽団 初音ミク 曲 曲あ】 + 目次 目次 曲紹介 歌詞 コメント 作詞:ナナホシ管弦楽団 作曲:ナナホシ管弦楽団 編曲:ナナホシ管弦楽団 唄:初音ミク 曲紹介 曲名:『アンプリチュード・モジュレーション』 サムネイルおよび動画に使われているイラストからイメージを得たという爽やかで少し寂しい歌。 なお、アンプリチュード・モジュレーションは日本語だと「振幅変調」。電波の強弱で情報を伝達する変調方式。 歌詞 (ピアプロより転載) 今日はきっと誰もが 雲を眺めラジオ聴いて ビニールシートの上 サンドイッチでもかじるんだろう 電波セット 風向き良好なんて言ってみたり 遥か空から DJごっこ続けてるんだよ メーデー、メーデー こちら世界の果て もう何回問うたのだろう 10037回目の放送 始めるよ ハロー、ハロー 僕の声は誰かに届いてますか ハロー、こちらラジオ局39(サーティナイン) お便り募集中 ハロー、ハロー 今日はどこも熱いくらいの快晴で ハロー、こちらラジオ局39(サーティナイン) それではよい朝を 今日もきっと誰かが 傘を差してラジオ聴いて 天気予報なんか 満場一致であてにならない きっと全部 僕が知らないだけでいつも通りで 今週のコーナーは 君に向かって飛ばしてるんだよ メーデー、メーデー 大きすぎる空で 誰に向けて喋ればいいんだよ 10038回目の放送 始めるよ ハロー、ハロー 誰の声も僕に届いてないけれど ハロー、こちらラジオ局39(サーティナイン) お便り募集中 ハロー、ハロー 今日はどこも泣きたくなるような大雨で ハロー、こちらラジオ局39(サーティナイン) 世界は答えない ひとりぼっち 誰も彼もどこに行ったのか おはようもおやすみも全部 言う相手がいなくなったよ どこにいるの 〝ハロー、ハロー 僕の声は誰かに届いてますか〟 〝ハロー、こちらラジオ局39(サーティナイン) お便り募集中──〟 ハロー、ハロー 僕の声は確かに届いてますか ハロー、こちらラジオ局39(サーティナイン) お便り募集中 ハロー、ハロー 明日もきっと眩しいぐらいの快晴で ハロー、こちらラジオ局39(サーティナイン) それではさようなら コメント これは埋まっていい曲じゃない… -- 名無しさん (2011-10-16 06 07 03) もっと評価されてほしい。 -- ゆう (2011-10-28 09 34 52) 過剰埋没しすぎだろ・・orz -- 名無しさん (2011-11-12 21 05 33) 大好きな曲です。 -- 名無しさん (2011-12-28 16 33 54) めっちゃ好き。この人の曲もっと伸びろ!! -- 和 (2012-01-24 12 24 29) 名前 コメント コメントを書き込む際の注意 コメント欄は匿名で使用できる性質上、荒れやすいので、 以下の条件に該当するようなコメントは削除されることがあります。 コメントする際は、絶対に目を通してください。 暴力的、または卑猥な表現・差別用語(Wiki利用者に著しく不快感を与えるような表現) 特定の個人・団体の宣伝または批判 (曲紹介ページにおいて)歌詞の独自解釈を展開するコメント、いわゆる“解釈コメ” 長すぎるコメント 『歌ってみた』系動画や、歌い手に関する話題 「カラオケで歌えた」「学校で流れた」などの曲に直接関係しない、本来日記に書くようなコメント カラオケ化、カラオケ配信等の話題 同一人物によると判断される連続・大量コメント Wikiの保守管理は有志によって行われています。 Wikiを気持ちよく利用するためにも、上記の注意事項は守って頂くようにお願いします。
https://w.atwiki.jp/vst_prog/pages/86.html
VST Tips(準備中) 簡単な音源(VSTi)の仕様 ここで作成する音源(VSTi)は前項で説明したシンセサイザーの構成から大幅に機能を削減した簡易なものとする。 今回作成する音源(VSTi)の仕様は下記のとおりである。 機能 対応内容 最大同時発音数 8 波形 正弦波のみ フィルタ、エンベロープジェネレータ、LFO なし 操作可能なパラメーター なし その他 ピッチベンド、モジュレーションホイール未対応 また今回作成する音源は下記の構成をとっている。 簡単な音源(VSTi)で処理すべき内容の概要 今回の音源(VSTi)で処理すべき内容の概要については以下のとおりである。 項目 処理内容 MIDIメッセージを受け取る Midiメッセージを受け取り、processReplacing()関数内で処理できるようにする。 MIDIメッセージにあわせてVoiceをOn/Offする Note Onの場合→停止中のVoiceを探して、発音させる。Note Offの場合→Note OffのNoteNo.と同じNoteNo.で発音中のVoiceを停止させる。その他のMidiメッセージ→無視する Voiceの出力を足し合わせて出力バッファに書き込む processReplacing()関数内でVoiceの出力を合計して出力バッファに書き込む Voiceの作成 上記3つの機能に対応したVoiceクラスを作成する それぞれの実装方法 構成図の各部位は以下のようにして実装する。 部位 実装方法 Voice CVoiceクラスを作成 Oscillator Voiceクラス内に直接記述 MIDI Controller CMidiMsgクラスを継承して実装 Voice Controller AudioEffectXクラスを継承したクラスに直接記述 Mixer AudioEffectXクラスを継承したクラスに直接記述 次へ 同一カテゴリのTips 項目 No. 概要
https://w.atwiki.jp/vst_prog/pages/75.html
トップページ MIDIメッセージを処理するVSTについて ここでは最小構成のVSTで作成したVSTを基にMIDIメッセージにあわせて動作するVSTを作成する。 作成するVSTはロードされると常にノイズを発生させる(音量注意)。このノイズのボリュームをMIDI CC7でコントロールできるVSTを作成する。 最小構成のVSTのソースコード全体はここにある。 MIDIメッセージを処理するに当たって最小構成のVSTに以下の追加を行う。 受け取ったMIDIメッセージを確保するための変数の追加 ホストアプリケーション(Cubase,Sonar等)からのMIDIメッセージを上記変数に保存するprocessEvents()関数の追加 processReplacing()関数内に受け取ったMIDIメッセージを処理するコードの追加 なお、ここに記載している内容についてはMIDIメッセージについてある程度の知識があることを前提としている。 また、ここで作成するVSTサンプルのソースコード全体はここにある。 MIDIメッセージ用の構造体の定義 まず始めにMIDIメッセージ用の構造体を定義する。 MIDIメッセージ用の構造体ではMIDIメッセージ・チャンネル番号・MIDIデータ1・MIDIデータ2に加え、MIDIメッセージの処理タイミングを示すVstInt32型の変数を定義するとよい。 (MIDIメッセージの処理タイミングを示すVstInt32型の変数の詳細は後述。) 具体的には以下のようになる。 struct MidiMessage{VstInt32 deltaFrames; //MIDIメッセージを処理するタイミングunsigned char message; //MIDIメッセージ番号unsigned char channel; //MIDIチャンネルunsigned char data1; //MIDIデータ1unsigned char data2; //MIDIデータ2}; VSTのクラス定義 続いてVSTの基本となるクラスを作成する。 最小構成のVSTに、先ほど定義したMidiMessage型のバッファとホストアプリケーションからMIDIメッセージを受け取るためのprocessEvents()関数を追加で定義する。 具体的には以下のようになる。 #define MIDIMSG_MAXNUM 255 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);}; 次へ 同一カテゴリの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/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/24.html
Steinberg VST Audio Plug-Ins SDK 2.4のインストール方法(2010年4月14日) Visual C++へのパス追加 Visual C++のオプション設定 Visual C++を起動し、メニューから「ツール」→「オプション」を選択 Visual C++へのパス追加 開いたオプションダイアログの左側で「プロジェクトおよびソリューション」→「VC++ ディレクトリ」を選択。 右側の「ディレクトリを表示するプロジェクト」を「インクルードファイル」にする。 フォルダマークを押し、新しい行を追加する。 その後、新しい行の右側「...」を押す 開いたダイアログで以下のフォルダを選択する。(VST SDK 2.4をC \以外に保存している場合はその場所を指定する) C \vstsdk2.4 同様の手順で以下2つのフォルダを追加する。 C \vstsdk2.4\vstpublic.sdk\sorce\vst2.x C \vstsdk2.4\pluginterface\vst2.x C \vstsdk2.4\vstgui.sf\vstgui 合計: - 今日: - 昨日: -
https://w.atwiki.jp/dtmer/pages/139.html
LFO(ローフリケンシーオシレーター)で周期をつけて、特定の要因をゆらすタイプ。 オートパン、トレモロ、ビブラート、フェイザー、コーラス、フランジャー、レスリースピーカー オートパン パンを振る トレモロ 音量を揺らす ビブラート ピッチを揺らす フェイザー 位相を揺らす コーラス 音にステレオ的な厚みを出したり、さわやかな感じの音を作ったりするエフェクト。 原理的には数十msのディレイを重ね、さらにLFOでディレイ時間を揺らすというもの。 なんでこうなるのかは話が長くなるけど、ピッチがずれたような効果が生まれ、厚みができる。 フランジャー ジェット機効果とかジェットマシーンとかいうやつだ コーラスと構造は同じだが、ディレイタイムは数msとかなり短い。こうすると原音とディレイ音が干渉し合い、特定の周波数が強調されたり打ち消しあうらしい。だからこの極小ディレイタイム圏でディレイ時間を揺らすことで、フランジャー独特の周波数変化、音のうねりを作るのである。 レスリースピーカー ロータリーとも。音を出しているスピーカー自体をぶん回すことで、ドップラー効果とかによる音のゆらぎを作れるやつ。オルガンのあれ。実感がわかんという人は、アイポッドのイヤホンをぶんぶん回してみると回転のうねりというのをなんとなく感じられると思う。 とかとか。いいかげんに書きすぎた気がする。 2010.7.25白くろ
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/vst_prog/pages/55.html
VST Tips(準備中) VC++ プロジェクトの作成 ここではVC++でVST用のプロジェクトを作成する方法については記載する。 Visual C++ プロジェクト作成ウィザードの起動 Visual C++を起動し、メニューから「ファイル」→「新規作成」→「プロジェクト」を選択する。 プロジェクト作成ウィザードが起動する。 プロジェクト種別、プロジェクト名の入力 開いたダイアログのテンプレートから「Win32 プロジェクト」を選択。 ダイアログ下側の「プロジェクト名」に今回作成するプロジェクトの名前を入力し、「OK」を押す。 プロジェクト種別の確認 現在のプロジェクト設定が「Windowsアプリケーション」となっていることを確認し、「次へ」を押す アプリケーションの設定 アプリケーションの種類で「DLL」を選択。追加オプションとして「空のプロジェクト」を選択して完了を押す。 完了を押すとプロジェクトが作成される。 次へ 同一カテゴリのTips 項目 No. 概要 VC++ プロジェクトの準備 No.1 VC++でVST用のプロジェクトを作成する No.2 VSTを作成するに当たって必要なVST SDKファイルをVC++のプロジェクトに追加する No.3 VSTを作成するに当たって必要なvstplug.defファイルを作成する No.4 VSTを作成するに当たって必要なコンパイラ、リンカ設定を追加する No.5 VSTをコンパイルするの際の注意事項
https://w.atwiki.jp/kennbanist/pages/21.html
音量や音程を、一定の周期で揺らすエフェクター。 コーラス フェイザー トレモロ ロータリースピーカ コーラス 【例】ピアノ+コーラス 【例】エレピ+コーラス フェイザー 【例】エレピ+フェイザー 【例】クラビ+フェイザー トレモロ 【例】エレピ+トレモロ ロータリースピーカ 【例】オルガン+ロータリースピーカ 名前 コメント
https://w.atwiki.jp/vst_prog/pages/89.html
VST Tips(準備中) MySynthSampleVSTクラスの実装 ここでは音源に必要なクラスの定義で定義したMySynthSampleVSTクラスについて説明する。 MySynthSampleVSTの初期化 MySynthSampleVSTの初期化では初期化ルールに従い初期化を行っている。 MySynthSampleVST MySynthSampleVST (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はないので必ずこの関数を呼び出す。 //上記の関数を呼び出した後に初期化を行う} ただし、作成するものが音源(VSTi)のためisSynth()関数の引数にtrueを入れている。 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 //Synthの場合…true、Effectorの場合…false MIDIメッセージをホストアプリケーションから受け取る processEvents()関数でMIDIメッセージを受け取る。 詳細については省略する。(詳しくはMIDIメッセージをホストアプリケーションから受け取る関数参照) 受け取ったMIDIメッセージの振り分け 受け取ったMIDIメッセージをメッセージごとに処理を振り分ける。 今回の音源のMIDI Controllerにあたる部分となる。 実装についてはCMidiMsgクラスからオーバーライドしたMidiProc()関数が該当する。 詳細については省略する。 MIDI ノードOn/Offメッセージを受け取った時の処理 今回の音源のVoice Controllerにあたる部分を実装する。 今回の音源の仕様で記述したとおり、ノートOnメッセージを受け取った場合、まず停止中(OFF状態)のボイスを探す。 停止中のボイスが見つかれば、そのボイスを発音(start)させ、停止中ボイスの検索を打ち切る。 void MySynthSampleVST onMidiKeyOn (unsigned char channel, unsigned char noteNo, unsigned char velo){// OFF状態のボイスを探すfor(int i = 0; i MAX_VOICES; i++){if(cvoice[i].getStatus() == VOICE_STATE_OFF){// OFF状態のボイスをONにして検索終了cvoice[i].start(noteNo);break;}}} なお、上記のコードはすべて発音中の場合、それ以上音が出ないという不具合(仕様)がある。(この仕様の修正についてはそのうち説明予定。) 次にノートOnメッセージを受け取った場合であるが、これは発音中(ON状態)かつ音程(ノートナンバー)が一致するものを探し出し、見つかればそのボイスを停止(stop)させるという処理を実施している。 void MySynthSampleVST onMidiKeyOff (unsigned char channel, unsigned char noteNo, unsigned char velo){// ON状態でかつノートNoと一致するボイスを探すfor(int i = 0; i MAX_VOICES; i++){if(cvoice[i].getStatus() == VOICE_STATE_ON cvoice[i].getNoteNo() == noteNo){// ON状態のボイスをOFFにして検索終了cvoice[i].stop();break;}}} processReplacing()関数 作成中 次へ(準備中) 同一カテゴリのTips 項目 No. 概要