• ベストアンサー

SMFのバイナリデータについて

Stabdard MIDI file をバイナリエディタで、直接いじってるんですけど、フォーマット1にして2つのトラックで音を同時に鳴らす際、トラックごとに音色を変えたいとおもったます。このときはやはり、プログラムチェンジの命令をつかうんでしょうか?いちおう、書いてはみたのですけど、上手くなりません。どなたか、実際にやってる方いらっしゃいましたら、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

回答が遅くなりましてすみません。 > GMオンというのはシステムエクスクルーシブメッセージですよね? ハイ。その通りです。 > 複数のトラックチャンクがある場合、一つ目だけにいれればいいんでしょうか? ハイ。その通りです。まぁ,どこに入れてもいいみたいですが,通例として第1トラック(トラックNo.0)に挿入するようです。中には第16トラックに入れてある例も見たことがありますが,この場合,必ず第1chへの命令でした。 また,このGMシステムオンのすぐあとにGSリセットやXGシステムオンと言うシステムエクスクルーシブメッセージが入ることもあります。 > このQuicktimeというものに対してのGMオンメッセージが見当たらないよな気がするんですが・・・。 > やはり、Quicktimeに対するなんか認識させるようなメッセージを書かないといけないんでしょうか? QuicktimeはGS互換です。ですから,GMシステムオンとGSリセットがそれにあたります。 ただし,GS互換と言うことはローランド社が提唱するGSシステムと同じではないため,無効になる命令もあります。 なお,バイナリエディタでの編集作業ですから, <GMシステムオン> F0 7E 7F 09 01 F7 <GSリセット> F0 41 10 42 12 40 00 7F 00 41 F7 を入力することになると思います。まぁ,普通はどちらかだけでいいようです。 ここで厄介になるのが,GMシステムオン命令だけなら音色を変更するのにプログラムチェンジだけでいいのですが,GSリセット命令を使った場合,バンクセレクト(MSB(0)とLSB(32):カッコ内はコントロールチェンジナンバーを表しています)と言うコントロールチェンジ命令をプログラムチェンジ命令の前に必ず挿入しなくてはいけなくなることです。これは,例えばグランドピアノ(プログラム 0)であっても何種類か存在し,それを指定するためなのです。 GSリセットの場合,この指定はMSB(0)を使用し,LSB(32)は必ず「0」を入力してください。 参考までにSC-8850で使われている音色マップをダウンロードできるページを参考URLに入れておきます。この中の「SC-55 マップ」(インストゥルメントとドラム)がQuicktimeでも使える音色だと思います。 ただし,GS互換をうたっているものの中にはただ単に「再生できる」というだけで,実際にはGM音源となんらかわりがないものもあります。

参考URL:
http://www.roland.co.jp/lib/download/Tone_list.html#SC8850
yabuchanchan
質問者

お礼

丁寧な御回答ありがとうございました。 さっそく、 GMオンをいれてみてつくってみましたら、音色のチェンジが できました!!! GSリセットはいれなくても、鳴ったみたいです。 でも、もっとそこら辺のところを追求してみたいと思います。 参考URLも非常に有用です。 ソフトを使ってるだけでは、絶対触れないようなことばかりで結構 難しいんですけど、がんばってみようと思います。 本当に、ありがとうございました。

その他の回答 (1)

回答No.1

GMオンなどの命令はちゃんと入れてありますか?これがないと上手くならないこともありますよ。 また,このGMオンなどの命令と同じタイミングではプログラムチェンジ命令などを実行させないでください。音源にもよりますがGMオンなどの命令をトラック1の第1小節第1拍目に入れ,それ以外の命令郡は第2拍目以降に入れてください。 ただし,これは4/4拍子・テンポ120の場合です。GMオンなどの命令が有効になるまでの時間は約1秒ありますのでそれを計算して他の命令を入力してください。 音色を変える命令は,プログラムチェンジでOKのはずですが・・・。MIDI音源によっては同時に処理が出来ない場合もあると思いますので,実行させるタイミングを少しずらしてあげてはいかがでしょう。

yabuchanchan
質問者

お礼

御回答ありがとうございました。GMオンというのはシステムエクスクルーシブメッセージですよね?複数のトラックチャンクがある場合、一つ目だけにいれればいいんでしょうか?また、音源としてMacでQuicktimeを使って作ったバイナリを鳴らしているんですが、このQuicktimeというものに対してのGMオンメッセージが見当たらないよな気がするんですが・・・。 やはり、Quicktimeに対するなんか認識させるようなメッセージを書かないといけないんでしょうか? いろいろ質問してすみません。もしよければお返事ください。

関連するQ&A

  • バイナリでSMFを直接つくる

    質問させて頂きます。バイナリで直接MIDIファイルを作ってるんですが、あるポイントで和音を鳴らしたいんです・・・。この和音を鳴らす方法ってどのようにやってますか?ほぼ同時に幾つか音をノートオンすれば鳴りそうですがもっとうまい方法ってないもんでしょうか? どなたか、おしえて下さい。

  • バイナリファイルの書き出し

    バイナリファイルにデータを書き込むプログラムを作りたいと思っています。実は、Standard MIDI Fileのバイナリファイルを作りたいんです。 SMFについては、今まで、直接バイナリエディタで開き、16進数の数字をいじくって、データ書き換えたりしてたので直接バイナリファイルに16進数での数字を書きたいんです。 たとえば、テキストファイルに903C408360803C0000みたいに吐き出すプログラムでは、バイナリファイルに書き出してからバイナリエディタで開くと こいつがさらに16進数に変換されてしまいますよね? そうならないようにするにはどうやればいいんですか?

  • この方法でバイナリデータが読めるのでしょうか

    あるプログラムでバイナリ出力しているファイルがあります。これを単純にfread()で読み込んで、今度はfprintf()で出力すればどうなりますか?やりたいことは、バイナリ出力されたファイルをテキストファイルに変換したいのですが、この方法で、バイナリファイルが読めるでしょうか? ちなみに、読みたいバイナリファイルは、fwrite()で書き出したファイルです。 あと、「バイナリファイルです」と言って貰ったファイルを、windowsのテキストエディタなどで開くと、appleなどの通常のアルファベットの単語と、あとは訳のわからないものが見えるのですが、これってバイナリファイルじゃないですよね?appleなどと書いてあるのですから。 間違えていましたら、訂正お願いします。

  • バイナリファイルについて

    DataForkerというバイナリエディタで、MIDIのデータを書いたのですが 保存のしかたがよくわかりません。そのまま、適当にファイル名付けて、 .midと拡張子付けただけでは、これはMIDIファイルとして認識されないんでしょうか?

    • ベストアンサー
    • Mac
  • バイナリエディタって?

    ファイルをいろいろなアプリケーションプログラムから 開くことができますが、バイナリデータとしてみる あるいは16進数表示のデータとして表示するのはバイナリエディタとやらを使ってひらくのでしょうか? それってどこにあるのかわかりません。フリーウエアでダウンロードするのか プリインストールされているのでしょうか。昔はダンプリストとやらで ずらずらっとファイルを16進数表示できてましたが。 このあたりについておわかりの方お教えください。

  • FORTRAN77で作ったプログラムを開くとバイナリファイルと認定され、編集できません

    FORTRAN77を最近勉強し始めました(プログラミング自体が超初心者です)。 ネットで情報を集め、コンパイラーはFTN77、エディタはCPadというフリーソフトを インストールし、実際にプログラムを作って実行してみたました。 一応は上手くいったみたいなのですが(非常に簡単な計算なので)、 いったんエディタを閉じて再び開いてみると、 「ファイル~~~はバイナリファイルと判定されました。無視して開きますか?」 という警告が出て、開いてみると意味不明な文字列が書いてあるだけで もともと何が書いてあったかわかりません。 どうしてこのようなことになってしまうのでしょうか?

  • スタンダードMIDIファイルを作りたい。~音色の設定について~『Performer』

    PCはMAC、シーケンスソフトは『Performer』を使ってます。 そして『TRITON』を音源として使ってます。 スタンダードMIDIファイルとして保存する方法はわかるのですが、問題は音色の設定です。 通常『Performer』でスタンダードMIDIファイルを作る時、デフォルトパッチの設定はトラックには書き込まれないので、トラックの先頭に、プログラムチェンジを(イベントとして)入力しておく必要があるそうです。 そうしようとしたのですが、例えばプログラムチェンジを「♯1」としたら、 「piano」となってほしいのに「Patch 1」となってしまい、困ってます。 どの音色でも同様です。 あと、10チャンネルにいれてもドラムの設定になりません。 GM音源を『performer』で、普通に使いこなせるためにはどんな設定をすればいいんでしょうか? 説明書も読んだんですが、どこに解決法がのってるかわかりません。 どうか、早めに回答お願いします。

  • バイナリファイルとプログラミング

    バイナリファイルとプログラミング 今、とあるバイナリファイル(NIfTI)をC言語で可視化したいと思っています。 ただバイナリファイルを利用するにはフォーマットさえわかればいいんでしょうか? http://nifti.nimh.nih.gov/nifti-1/ のようなフォーマットの形式を見ても 実際にプログラミングではどういう風にやっていけばいいのか何もわかりません。 アドバイスをお願いします。

  • C++でバイナリデータの扱い方

    以下のプログラムで接続先からバイナリデータを取得しているのですが coutで出力しても画面に何も表示されません。 ------------------------------------------------------ /*include部分は省きます*/ std::string bin; //1 clx::http session(clx::uri::encode(ip), 80); //2 session.get(clx::uri::encode(param)); //3 bin = session.body(); //4 std::cout << bin << std::endl; //5 ------------------------------------------------------ 上記プログラムを空ファイルにリダイレクトしバイナリエディタで見たら ちゃんとデータは書き込まれていました。 5行目を以下のように変えても空欄が出力されただけで文字は表示されませんでした std::cout << std::hex << bin << std::endl; しかし以下のようにすると文字数は表示されました。 std::cout << bin.length() << std::endl; やりたいこととしてはphpのpack()、unpack()的な部分です。 例えば 値をフォーマットを指定してバイナリデータとして出力 $val=pack("L", 35); とか バイナリデータを変数から指定バイト分取り出して10進数で画面に出力 $bin=(バイナリデータ); $val=unpack("c",$bin); echo(sprintf("%d",$val)); です。 バイナリの扱いはリトルエンディアンです。 ご教示お願いしますm(__)m

  • FA-06、Import SMFについて

    FA-06を使っているシンセ初心者です。 1.FAで楽曲のスケッチを行う 2. DAW(Studio One)を使用してMIDIデータを編集する 3. FAにImport SMFから戻して伴奏として使う 以上のことをしようとしていたのですが、3.にて問題が起こりまして、1つのパートに全てのパートのMIDIデータがごっちゃになった状態で読み込まれてしまいます。 SMFのフォーマットを1にして読み込む、あらかじめプログラムチェンジで音をそれぞれ指定するなども試してみたのですが、一向に解決せず、お手上げの状態です。 どなたか解決法をお知りの方がいらっしゃいましたら、ご教示いただけると幸いです。 ※OKWaveより補足:「電子楽器メーカーローランド製品、ボス製品」についての質問です。