blog

Profile

mewlist
mewlist
寄り道する
音楽バカ
  • mixi
  • friendfeed
  • twitter

  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2

Categories

Discography

  • Unities_128 UNiTiES
    2009
  • Human_128 HUMAN
    2005
MMC (MIDI Machine Control)
midiomのMTCフレーム送信部にフレーム落ちする可能性のあることが判明したため、次回アップデートで修正します。その際MMCコマンドの実装も追加されます。

MTCに対応するソフトウェアをいくつか試してみたのですが、いくつかのソフトウェアでは、対応し切れていないものがありました。

ロック時刻を指定し、その時刻のタイムコードが来たときにしか再生を開始しないもの(任意位置からの再生に対応してくれません)や、ロックに異常に時間がかかるものなど、市販ソフトウェアでも中途半端な実装が多いようです……。

そもそも、オーディオソフトウェアなどは、時間情報がずれても出力の圧縮や伸長をするべきではなく(ピッチが変わってしまうし、そんな重たい処理を許容すると大変なことになる)、一旦ロックされてしまえば、あとはMTCが来ているかを監視しつつ、内部のクロックで再生を進めてしまうという処理が適切なのですが、無駄にstrictにロックを試みようとして処理が遅れたりするのは、間違っていると思います。時間軸は一定で進むのですから、8フレームもあれば精度の高い同期は可能なはずです。

midiom以外のMTCマスターで同期を試みてみたのですが、結果は同じでした。

数あるソフトすべてで試すことはできませんが、
Cubase,Nuendoはシームレスな同期をしてくれます。


以下ぼやき。

MMCの資料が少ない。ネットを探しても用語解説ばかり。
MIDIバイブルII(リットーミュージック社刊)が本当にバイブルに。

現状のMTCで他ソフトウェアとの同期はできるのだが、Cubase上で編集作業を行っているときに再生ボタンを押して、midiomも再生してくれて、さらに、midiom上での再生ボタンにもCubaseが追従するような動作をしたい場合、midiomがMMCスレーブに対応していれば真にシームレスな編集が行えるため実装を検討する。

我が家のCubaseSX2はMMCコマンドの送信はするのだが、スレーブとしてMMCコマンドを受け付けてはくれないので(あれだけ高額なソフトなので、少々驚き。需要がないのかなぁ。今はReweireがあるからソフトウェア上の動作はそっちまかせなのかも)、midiomをスレーブ対応する必要がある。

MTC: midom マスター > CubaseSX2 スレーブ
MMC: CubaseSX2 マスター > midiomスレーブ

この構成で、シームレスにmidiomがCubaseの外部エディタになったような感覚で使用できる。Cubase上で再生カーソルの移動を行うと、リアルタイムにロケーション情報が送られるので、midiomも同位置にカーソルをシーク。結構気持ち良いです。

再生命令を受けたmidiomは再生を開始し、MTCフレーム情報をCubaseに送信、MTC時間情報にロックされて、Cubaseの再生が開始します。



最初は、DefferdPlayとStop、Locateの三つに対応できれば、ほぼ問題ないため、簡単だろう・・・と思いきや。

開発機に接続している KORG U1が、エクスクルーシヴメッセージを取りこぼす。おそらくドライバの実装のバグ。 しかも、受信バッファの開放時に書き込みポインタをリセットしないらしく、エクスクルーシヴを受信するたびにバッファの後ろに追加されていき、使い物にならない始末。 オーディオもジッターノイズ見たいのがたまに入るし、困ったもんだ・・・。 書き込みポインタはバッファ受理後に自分でリセットすることで対応できるのだが(本来このような処理をする必要などない。ドライバのバグ…)、データの取りこぼしには対応のしようが無いので、音楽機内部でMIDI Yokeによる結線をする。

ところが、MIDI Yokeにも不具合が見つかる。受信バッファを複数確保しても、スイッチングしないので、一つのバッファを受信後、その処理中にエクスクルーシヴ受信が起こると、そのバッファを上書きしてしまうため、不正なデータが受信される場合がある。規格どおりに考えれば、エクスクルーシヴの送信に適度な間を挟まなければいけないので、その辺はさほど問題ではないが。

PCのMIDIドライバは、エクスクルーシヴを受信する機会は多く無いため、十分な検証がされないままリリースされていることが多いようです・・・。


音楽機のRokandUM-4はその辺完璧でした。さすがです。(KORGの名誉の為に書いておくと、U1は中身がONKYOの製品のOEMです。)

MIDIバイブルを開いて、
Locateコマンド (F0 7F devID 06 44 06 01 hr mn sc fr ff F7) に応答するように機能追加を考える。

ff : 標準時刻(ffタイプ)

意味がわからないので、SMPTEのフレームタイプだと信じてコーディング。しかし、受信をモニタすると、どうもフレームタイプはhrの6,7ビットに設定されていることが判明。その際ffは0がセットされている。

検索してみると、
ttp://www.cakewalk.com/Support/Docs/MMCandSYSX.asp

ff はsubframes(1/100フレーム)と書いているじゃないか…。
フレームタイプも案の定hrに合成されている。

昨日は間違った処理、間違った記述に悩まされた一日だった…。
midiom version1.01を公開しました。
1.00にて要望の多かったSMF Format0の読み込み機能を追加しました。

グリッドエディタ上で、コントローラビューのサイズ変更が可能となりました。ピッチベンドなどの広いレンジにも対応できるようになります。

テンポトラックをグリッドエディタで開いた場合、コントローラビューでテンポ編集ができるようになりました。

デフォルトインストールフォルダ名が変更になったので、必要な場合は、設定ファイルのコピー・上書きをしてください。
設定ファイルはアンインストールしても同フォルダ内に残るようになっているので、アンインストール後のバックアップも可能です。


数値入力型 MIDIシーケンサ midiom Version 1.00 正式リリースしました
midiomWEBサイトはこちら

数値入力型 MIDIシーケンサ midiom Version 1.00 は本日無事リリースと相成りました。

今まで数多くの方のご支援を受けたことに深くお礼申し上げます。

失速してしまった数値入力の文化の復権と、新しく使いやすいMIDI編集の形を今後も提案していければと思います。

今後とも、midiomをよろしくお願いいたします。


(追記)------------------------------------
Version 1.0になって新規に追加された機能をリストアップしておきます。

製品版では、

・MTC同期(24 25 30drop 30フレームを自動検出)
・MTC送信
・グリッドエディタのレイヤー表示。レイヤー状態では Wキーでバックグラウウンドのトラックと入れ替えができます。
・コントロールカーブを既存のデータに加算合成する、加算コントロールカーブ機能

両バージョン共通では、

・ソート機能
・トラックビュー上でのカット、削除機能
・ミュート・ソロ・レコーディング状態の一括解除ボタン
・トランスポートバー上でのメトロノームのスイッチング
・発音が鳴り止まないときの、「MIDIデバイスのリセット」機能
・SMF1の書き出し機能
・グリッドエディタ上にトラック変更コンボボックスの配置
・トラックビュー、グリッドエディタ上でスペースキーによる再生・停止(キーカスタマイズによって数値入力エディタ上でもこの動作を定義でき、一般的なDAWソフトウェアに近い動作を得ることができます)
・右クリックメニューの整備
・グリッドエディタでのグリッド関連の動作
 Shift+G カーソル位置の小節のノート配置からフリーグリッドを作成
 Ctrl+G  グリッドのon/off切り替え
・細かなカスタマイズ


加算コントロールカーブを利用して、トップページの画像のような複雑な合成関数のようなカーブも書くことができるようになっています。
SMF1の書き出しは負荷の大きな処理であるため、曲データによっては数秒時間がかかる場合がありますが固まってはいないのでご安心下さい。


2005年7月11日 midiom 正式リリースします
明日2005年7月11日、’数値入力型 MIDIシーケンサ midiom Version 1.00 製品版/フリーウェア版’を正式リリース開始いたします。

長い期間がかかってしまいましたが、その間、皆様にご意見、ご支援頂きましたことを改めて御礼申し上げます。

個人ソフトウェア開発者の時間的、環境的な制約から皆様のご期待全てに添える形になったとは言い切れない部分があるかもしれません。
しかし、現在の段階で実用に耐えうるクォリティに達したと判断いたしまして、リリースの運びとなりました。


今後とも midiomをよろしくお願いいたします。




midiomの使用デモ というか……がんばりすぎた
<%image(20050630-powered_by_midiom.jpg|160|59|powered by midiom)%>
デモを二曲クロスフェードで公開します。

こちらで公開しています
本家サイトが死んでるのでたまには覗いてやってください(汗。



ちょっと、客観的なmidiomのレポートは難しいとおもうので、ソフトの製作者の意見として、書きます。

こんなシーケンサーを待っていた!

という感じでしょうか…?
昔からテクノ的なアプローチをしたかったのですが、ループするフレーズをひたすら回して、変化を加えていくというシーケンス作業の面倒さに辟易していたのですが、今回使ってみて威力を発揮したのが、グリッドエディタでした。

ドラムシーケンスのヴェロシティを数字キーで指定できるというのは、レコンポーザのリズムトラックエディタを意識してのものなのですが、これがかなり自分的に使いやすい。

あとは、コントロールカーブで、シーケンスに少しだけ揺らぎを与えることで、ループシーケンスが活き活きと鳴ってくれたり、狙ったとおりの力を発揮してくれて大満足。

------------------------------------------------

デモトラックについて少し解説。

環境は以前紹介したのと同じで、Cubaseをマスターとして、midiomをスレーブで同期させてCubase上にバウンスしました。

「あ、ここなんか足りないな」
と思えば、Cubase上に作ったトラックを鳴らしながら、midiom上で編集を行い、同期再生でまたバウンス。外部MIDIエディタのような感覚でMIDIを編集できました。MIDIのピアノやベースフレーズなどのレコーディングもCubaseのMIDIトラックは一切使用せずに、midiom上で全て録音作業を行いました。

MTCすごいっす。


音はボーカルとボコーダ以外は、全てXV5080とSC88Proで鳴らしています。バウンス後に、オートメーションをCubase上で書いたり、ミックスバランスを調整したりして、最終形態に仕上げました。

アルバム作るぞー!って感じっす。

と、その前に音楽はまた一休みして、midiomVersion1.0の製作にまた復帰します(汗
midiom製品版までの目途
目途が立ちそうな感じです。

「midiomをつかったカッコイイデモがあったほうがいい」な感じで言われたので、外部同期のテストもかねて、本気モードの曲作り。

作っていく過程で、いろいろと細かいチューニングがまだ必要であることが露呈しつつも、4分ほどの楽曲の打ち込みのラフを終えました。以前よりも打ち込みの速度は上がった気がします。自分自身がリファレンスとなった操作体系なので、打ち込みが早いのは当たり前ですが…。

私自身がレコポを使用していたときは基本 FKEYモードで、

[鍵盤を抑える]>[FKEYにてレングス決定]

というプロセスが主で、その使用感は軽快に再現されているようです。数値編集にはあまり向いていないレコーディング後のデータは、サーチ機能によるゴミ取りや、例外的なデータのリミッティングによって、的確な編集ができました。


今回検証した環境として、

CubaseSX2(MTCマスター) -> midiom(MTCスレーブ)

外部音源は
midiom - XV5080, SC-88Pro

の構成です。Cubaseをクロックソースにし、midiomをスレーブにすることで、CubaseSXの外部エディタ的な使い方をするという試みです。

MTCの信号は MIDI Yokeを使って内部結線された仮想MIDIデバイスでやりとりしています。

自分自身MIDIによる同期を今まで信用していない部分があったのですが、自分でそのプロセスをはっきり認識することで、かなりの信頼を置けるものだと理解。またもや、反省。特にMTCは時間軸での同期を行うので、MIDIクロック同期のようなヨレはほとんどありません。midiom側も経過時間を予測しつつ再生を進めていくので、1ms単位まで綺麗に追従します。

自分的には大きな山場であった、同期エンジンに、SMF1の書き出しも実装できたので、胸をなでおろせました。SMFの書き出しに関しては、midiomのフレーズ機能や、プラグインの出力の関係で、書き出し時に擬似再生を行わなければならないため、再生エンジンが最終的な仕様策定がされない限り手をつけられなかった部分であったため、遅れました。


いよいよ完成の日も近い…といいな。

今作っている楽曲はデモトラックとして、近いうちに、アップしたいと思います。

製品版のリリースに際しては、製品版のラインナップとは別に、フリーウェア版も予定しています。数値入力部、グリッドエディタ部に関する機能削減は一切しないつもりです。

MTC 同期
MTC(MIDI Time Code)同期とは、SMPTEのタイムコードをMIDI信号でやり取りしようというもの。

F1で始まる8つのメッセージがそれぞれSMPTEの時間情報を格納している。

F1 0n フレーム LSB
F1 1n フレーム MSB
F1 2n 秒 LSB
F1 3n 秒 MSB
F1 4n 分 LSB
F1 5n 分 MSB
F1 6n 時 LSB
F1 7n 時 MSB と SMPTEタイプ

F1 7nに関しては、

01110ttm

tt SMPTEタイプ
00 24フレーム
01 25フレーム
10 30フレームドロップ
11 30フレームノンドロップ

m 時MSB

となっている。

この時間情報が完成するのに8MIDIメッセージ、送信間隔が、1/4フレームとなっているので、時刻情報が確定するまでに2フレームの遅れが生じる。

プログラム側では、時刻情報を正確に読み取り、追従して再生する処理を書かなければいけない。しかし、MIDIカウントベースの同期と違って、絶対時間を扱うため、同期開始時のテンポよれなどは最小限に抑えられる。

受信側の実装としては、とりわけMIDIのカウントベースで処理している場合には、時間軸->小節、拍軸への変換がスピーディに行えるような設計になっていなければならない。

信号線上を演奏情報などもやり取りした場合に、遅れなどがしょうじるので、MTC用に専用ポートを使うべきである。


以上メモ。


同期プログラムは、動いた瞬間バンザイしたくなる。


midiom Version0.95を公開しました。
midiomはプレビュー版はこちらよりダウンロードできます。

ようやっと、キーカスタマイズ機能を搭載しました。STed互換にも設定可能だと思います。(仕様策定までかなり悩みました……。とはいえ最終的には単純なキーマップの定義に落ち着きました)

プリミティブなキー操作は一部変更できません。

トラックビュー上でのコピーペーストが可能になりました。複数トラックの同時コピーにも対応しています。
これにより、リプリケートをグラフィカルに行うことが可能となりました。

GS/XG音源対応のプロシージャを多数追加しました。通常利用で使うものは網羅したつもりです。

その他、数多くのバグを修正しています。

キー定義に関しては、このままの仕様で製品版に導入しようと思っていますので、キー動作をカスタマイズした場合は、インストールフォルダの keymap.datをご自分でバックアップしておくと便利です。

よろしくお願いします。


ソースの行数
以前作ったゲームのエンジン、約10,000行

midiom 現在35,000行オーバー。
半年前まで15000行いっていなかったと思うのだが……。

GUIアプリケーションは、単純なアルゴリズムの集合体であるが、その集合が超巨大化する。Windowシステムはユーザーは多大な恩恵に与ることができるが、開発に伴う作業量は爆発的に大きくなる。

ただ、その作業量に見合うだけの結果が得られているかという点に関しては、必ずしもそうではないと思う。GUIのインターフェイスには、めったに行われないような操作と、頻繁に行われる操作と、ほぼ同等のアクセス性を実現しなければならないし、機能を追加するに伴って、例外的な処理(マウス操作などはユーザーが思いもよらない操作を行いがちである)全てに何らかの対処を組み入れなければならない。
この点を簡単にするべく、いろんな試みが行われているが、いつまでたっても楽にはならない。

実際、N88 BASIC時代にマウスによるドット絵ツールを作ったときから、マウス処理のコーディングに関しては、全然楽になっていない……。

midiom Version0.935を公開しました。
2005/6/3 Version 0.935

0.93で追加された機能とあわせて、改めてリストアップします。

*マーカー機能搭載
*グローバルリンク機能搭載
*Roland Fantom / Roland SRXシリーズ / Roland SC-8850 / Roland SD-90 / YAMAHA MOTIF / YAMAHA MU128 音色定義追加
*サーチ機能搭載(Hキー)
*インサートモードが編集モード時のMIDI入力モードとの連携状態をチューニングしました。
*メジャープレイ機能搭載(Mキー)
*POLY/VEL, MONO/VELモード追加
*サーチ機能のドキュメントを整備しました。
*データのコピーの際、Windowsのクリップボードを利用するようにしました。midiomを終了しても、コピーデータは保持されるようになります。

こちらでダウンロードできます