FotranとかcobolとかBasicとかCとかC++とかjavaとか…(以下略)
■ メインページ ■ サブボード修正
> 試しに seq = (Sequencer)MidiDevice; とやってみましたがどうもそこで > 止まってしまうようです(^^; 自己レスですが、さまよってたらこんなコードがボンと出てきました。 http://tick.informatik.uni-stuttgart.de/~pfistere/jsexamples/MidiPlayer.java.html 眺めてみると Sequencer seq = (Sequencer)MidiDevice; といったことをばっちりやっているではありませんか(^^; というわけで、おそらく止まるのは別の理由だったのでしょう。 これさえできるならばとりあえず方向性ははっきりします。 なんか眺めていると JDK1.3 のバグとか回避の方法なんかも書いてあります。 JDK のバグに振り回されるのはいやだなぁ GOO E-Mail: goo_n@hotmail.com
というわけで MIDI プレイヤーアプレットを作っているわけですが、 セキュリティ関連がなかなか難しそうです。ローカルのファイルに基本的には アクセスできないですし。まあ、とりあえずそれは置いといて・・・ ちょっと再生デバイスとシーケンスとをつなげるのに苦労しています。 public interface Sequencer extends MidiDevice というインターフェイスがあって、 静的なメソッドが集まった MidiSystem クラスを使って、 Sequencer seq = MidiSystem.getSequencer(); seq.setSequence(MIDI ファイル); seq.start(); といった感じで再生できるはずなんですが、getSequencer() は デフォルトデバイスの Sequencer を返すメソッドなんです。 で、ほかのデバイスを選択するには、MidiDevice getDevice(Device.Info) しかないらしいんです。そこからはもっと低レベルなコントロールの方に 持っていくらしいんですが、できれば Sequencer の簡単なインターフェイスに 持っていきたいです。MidiDevice を Sequencer にできないものでしょうか? 試しに seq = (Sequencer)MidiDevice; とやってみましたがどうもそこで 止まってしまうようです(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> とりあえず私は、GOO さんが制作したプログラムを実行できる環境を > 整えないと行けないと言うことですかね。 (笑) 自動ダウンロードされなかったんですか? なんだったらここで直にダウンロードもできます。 http://java.sun.com/j2se/1.3/ja/jre/index.html > しかし、C++とJAVAを両方覚えようとすると、ごっちゃになって > 訳が分からなくなりそうだなぁ。 ^^; どうやら Forte があればほとんど覚えなくて良さそうですよ。 VS6 ばりの補完機能もあるし、ビジュアルに GUI を張り付けて イベントを選択し、それにイベントハンドラをコーディングするという、 わかりやすい構成になっています。Forte が担当する GUI 生成部は 一つの関数になっていてコンストラクタから呼ばれていて、編集不可(!) になっています。押しつけられるのはいやな人もいるかもしれませんが、 自分でやりたい初期化はコンストラクタに続けて書けばいいわけですし、 元々いろいろ従わなければならないビジュアル開発なのでこれでいいのかもしれません。 GUI 部分を適当に作ってみました。 http://www.geocities.co.jp/SiliconValley-SanJose/4825/java/ MIDI アプリケーションらしいのは MIDI デバイスの列挙ができている ところくらいですね(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> とりあえずいったん Forte の方を試してみようと思います。 とりあえず私は、GOO さんが制作したプログラムを実行できる環境を 整えないと行けないと言うことですかね。 (笑) しかし、C++とJAVAを両方覚えようとすると、ごっちゃになって 訳が分からなくなりそうだなぁ。 ^^; tos.
BeOS でも標準で統合環境(IDE)がついていましたが、 JAVA の方でも二つも無料の IDE があるのには驚きました。 JBuilder4Foundation http://www.borland.co.jp/jbuilder/foundation/index.html Forte for JAVA Community Edition http://www.sun.co.jp/forte/ffj/index.html 今日 JAVA PRESS なる本を立ち読みしたところ、 IDE の特集をしていました。 どうも Forte の方がパワフルで使いやすいようです。 JBuilder の方では GUI の編集がいまいちつかめなかったので、 とりあえずいったん Forte の方を試してみようと思います。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> すみません、よく見てみたら HTML に、標準の VM ではなくプラグインを使うように > JavaScript で指定されているようです。<A JavaScript の部分だけ私のテストアプレットを表示させる HTML にコピーしてみたら IE がハングアップしました(笑)中身を見てもそんなにおかしくはなさそうなんですが... と、FAQ をのぞいてみたら HTML Converter なるものがあるようです。 これで変換した HTML で表示させたらばっちりプラグインを使って swing の方も 動いてくれました。 http://java.sun.com/products/plugin/1.3/docs/ja/htmlconv.html HTML への applet タグの記述はこれに任せることにします。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> いえ、ダウンロードする以前に、表示を諦めてエラーになっているようです。 > 表示できる JAVAアプレットもあるのに、何か違うんでしょうか。 > 1.3 のプラグインとやらがない、と自動検出しているんでしょうか。 すみません、よく見てみたら HTML に、標準の VM ではなくプラグインを使うように JavaScript で指定されているようです。http://java.sun.com/products/plugin/1.3.0_01/ja/demos/index.html 1.3 のを動かすにはこういうことをしないといけないわけですね。 やっと安心して進められそうです。 > そう言えば、JBuilder で作ると、それ専用のライブラリとかは必要ないん > でしょうか。 みんな、jarファイルの中に含めてくれるのかな?? 分からないですね。まあ、基本的には標準クラスライブラリだけで やっていくつもりではありますが。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
>> せっかく作っても、使える人が少なくなってしまいそう。 >> 私の所では、動くというデモが動きませんし。 ^^; > 1.3 のプラグインは手に入ったんですよね? > うちの場合そのページでは自動的にダウンロードされてきましたが。 いえ、ダウンロードする以前に、表示を諦めてエラーになっているようです。 表示できる JAVAアプレットもあるのに、何か違うんでしょうか。 1.3 のプラグインとやらがない、と自動検出しているんでしょうか。 > java.applet.Applet クラスだとふつうに動くんですが(そりゃそうだ)、 > javax.swing.JApplet クラスで作ると動いてくれない。 > というわけでふつうはあきらめるところなんですが、 > 先に書いたページでふつうに swing の GUI が動作しているので、 > 何かおかしいなと。調査続行中です。 そう言えば、JBuilder で作ると、それ専用のライブラリとかは必要ないん でしょうか。 みんな、jarファイルの中に含めてくれるのかな?? tos.
> せっかく作っても、使える人が少なくなってしまいそう。 > 私の所では、動くというデモが動きませんし。 ^^; 1.3 のプラグインは手に入ったんですよね? うちの場合そのページでは自動的にダウンロードされてきましたが。 > 開発環境も、ウチにはないです。 無料で手にはいるはずだとは思いますが。 JBuilder4Foundation は試していますが、 元々そんなにコードの量は多くならないですし、 そのまま swing を使ったようではどうもうまく動かない様子ですので、 勉強込みで最初のうちは手書きでやってみようと思っています。 java.applet.Applet クラスだとふつうに動くんですが(そりゃそうだ)、 javax.swing.JApplet クラスで作ると動いてくれない。 というわけでふつうはあきらめるところなんですが、 先に書いたページでふつうに swing の GUI が動作しているので、 何かおかしいなと。調査続行中です。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> とりあえずサウンド関係が実装されたのは 1.3 からのようなので、 > JAVA1.3 plug-in(7.5MB) を自動ダウンロードしてもらうのがまず壁になりますね(^^; > しかし、MIDI が 1.3 からの機能である以上仕方がないところです。 > あとは対応状況ですがいまいち分からない状態です。 せっかく作っても、使える人が少なくなってしまいそう。 私の所では、動くというデモが動きませんし。 ^^; 開発環境も、ウチにはないです。 無料で手にはいるはずだとは思いますが。 // そう言えば、一応、JBuilder が手元にあったような。 tos.
とりあえずサウンド関係が実装されたのは 1.3 からのようなので、 JAVA1.3 plug-in(7.5MB) を自動ダウンロードしてもらうのがまず壁になりますね(^^; しかし、MIDI が 1.3 からの機能である以上仕方がないところです。 あとは対応状況ですがいまいち分からない状態です。 動かないサンプルプログラムがあったり、こんなデモはきちんと動いていたり。 基本的には制限なしと言うことで進めて良さそうですが、ちょっと不安です。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> 分業は、クラスの仕様が完全に決まったら可能ですが、それまでが大変ですよ。 OOP での設計はやったことないし、いろんな話を聞きますので、 そういわれると引いてしまいそうになります(^^; 分業する規模じゃないかもしれませんし IE プラグインなどの 状況もちょっと今調べているところですので、 まだまだどうなるか分かりません。 > とりあえず、音の長さと発音タイミングをクォンタイズして音符に変換 > するだけでも、実用になると思います。 つい縦にまとめるくらいはやらないと使い物にならないと考えてしまいましたが、 最初はその前からですね。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> とりあえず表示再生の部分を T-NET のメンバーで共同製作しませんか? > オブジェクト指向ですし共同作業には向いているかと思います。 > とりあえず私はふつうのアプレットを作れるように勉強ですね(^^; 分業は、クラスの仕様が完全に決まったら可能ですが、それまでが大変ですよ。 >> // ピアノロールよりも楽譜出力の方が見栄えはしていいですが。 ^^; > 楽譜の文化は捨てるわけにはいかないので是非とも欲しいところですが、 > あれってなかなかに難しいですよね。譜面表示機能だけで製品になっちゃうくらい。 楽譜は、MIDIデータをそのまま出力するだけで良いのではないでしょうか? そもそも、MIDIデータは楽譜へ変換にするための情報は含まれていない のですから。 まずは、MIDIデータを素直に書いてしまうバージョンを作って、それから より見栄えの良い出力処理を加えてバージョンアップしていった方が良いと 思います。 とりあえず、音の長さと発音タイミングをクォンタイズして音符に変換 するだけでも、実用になると思います。 tos.
> 頑張ってください。 JAVAの MIDIシーケンサ 一番乗りができるかも? とりあえず表示再生の部分を T-NET のメンバーで共同製作しませんか? オブジェクト指向ですし共同作業には向いているかと思います。 とりあえず私はふつうのアプレットを作れるように勉強ですね(^^; > // ピアノロールよりも楽譜出力の方が見栄えはしていいですが。 ^^; 楽譜の文化は捨てるわけにはいかないので是非とも欲しいところですが、 あれってなかなかに難しいですよね。譜面表示機能だけで製品になっちゃうくらい。 まあ、そんなに高度な表示を必要とするわけではないですが、 おはよさんに楽譜の分析技術を教えてもらうことになるかもしれませんね。 こういう場合はタイで表示しなきゃいけないとか、休符の取り入れ方とか、 その辺の一般法則ですね。こういった細かいところは正式に学習した人でないと 分からないことが多いと思います。 私なんて楽譜は見て分かればいいと言う程度にしか考えていませんし(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> これは JAVA アプレットなどでも MIDI シーケンサを作れると言うことでしょうか? > もしそうだったら、とりあえず T-NET で譜面(ピアノロール)表示で再生も行う > アプレットなどを考えることもできますよね。 > なんかおもしろそうです。ちょっと勉強しながら試してみますね。 WinAPI相当のものがそろっているみたいですね。 やろうと思えばシーケンサも作れそうです。 道のりは険しいと思いますが、 頑張ってください。 JAVAの MIDIシーケンサ 一番乗りができるかも? // ピアノロールよりも楽譜出力の方が見栄えはしていいですが。 ^^; tos.
JAVA はまだ使ったことがないのであまり分かっていないんですが、 次のようなドキュメントがありました。 http://java.sun.com/j2se/1.3/ja/docs/ja/guide/sound/ これは JAVA アプレットなどでも MIDI シーケンサを作れると言うことでしょうか? もしそうだったら、とりあえず T-NET で譜面(ピアノロール)表示で再生も行う アプレットなどを考えることもできますよね。 なんかおもしろそうです。ちょっと勉強しながら試してみますね。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> 亀レスですが、縦スクロールピアノロールは有用だと常日頃から考えていました。 > 横スクロールが一般的なのは譜面の影響が強いと思います。 > ゲームで採用されるように、直感的なのは縦の方だと思います。 確かに、直感的には分かりやすいのかも知れませんが、慣れないと 縦でも横でも同じです。 ^^; あと、音の長さが分かりにくいですね。ピアノロールを縦にした ような表示だと、棒の長さでタイミングが分かってやりやすい ような気がします。 >> とりあえず、midiStream を使って MIDI音源から音を出すプログラムを >> 作ってみました。ドの音が1回だけ鳴ります。(苦笑) >> // しかし、これに辿り着くまでに半日掛かりました。 ^^; > 足場固めですね。大切ですよね。 しかし結局、midi player らしき物を作った所までで、挫折しました。 ^^; ドットを縦に流す所まではできたのですが、それをタイミング良く音楽に 合わせてとなると、ちょっと難しいようです。 >> キーポイントは、MEVT_F_SHORT 時の MIDIEVENT 構造体は 12バイトだという >> ことです。ずっと 16 バイトだと思って作っていたので、midiStreamOut() が >> エラーを返していました。 > これってノートとかプログラムチェンジとかを指定する構造体なんですか? そうです。 MIDIEVENT構造体に MIDIデータ1つが割当たります。 だから、1音(key on)だけで、12byte バッファが必要です。 > 私としてはどちらかというとやるなら BeOS で作ってみたいですね。 > 扱いやすい API と Win とは比較にならない時間精度、 > MIDI キットも充実していますのでその辺は楽でしたし。 > まあ、いかんせん使用できる環境が限られているのが痛いところですが。 ぜひ、チャレンジしてみてください。 1つ作っておくと、いろいろな 音楽ゲームに応用が利くと思います。 tos.
> 「キーボードマニア」が PC上で作れないものかと、ちょっと考えています。 亀レスですが、縦スクロールピアノロールは有用だと常日頃から考えていました。 横スクロールが一般的なのは譜面の影響が強いと思います。 ゲームで採用されるように、直感的なのは縦の方だと思います。 > とりあえず、midiStream を使って MIDI音源から音を出すプログラムを > 作ってみました。ドの音が1回だけ鳴ります。(苦笑) > > // しかし、これに辿り着くまでに半日掛かりました。 ^^; 足場固めですね。大切ですよね。 > キーポイントは、MEVT_F_SHORT 時の MIDIEVENT 構造体は 12バイトだという > ことです。ずっと 16 バイトだと思って作っていたので、midiStreamOut() が > エラーを返していました。 これってノートとかプログラムチェンジとかを指定する構造体なんですか? 私としてはどちらかというとやるなら BeOS で作ってみたいですね。 扱いやすい API と Win とは比較にならない時間精度、 MIDI キットも充実していますのでその辺は楽でしたし。 まあ、いかんせん使用できる環境が限られているのが痛いところですが。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> オブジェクトを作るときに別のオブジェクトを渡したりする場合がありますが > オブジェクトを delete するときにどのオブジェクトが渡したオブジェクトを > delete するか、というような問題です。 > きちんとコピーしておかないと2重に消してしまったりしますよね。 了解しました。 私の件では、2重解放とはちょっと違って、誰も解放しない 領域が発生しないか心配していました。 クラスって、自分で明示的に確保解放しなくても領域が確保開放されたり、 するので、さらに複雑になって難しいですね。 その点、Java は自動解放するので、そんな悩みがなくて素晴らしいです。 // C++ でも、そう言うメモリ管理をしてもらえないだろうか? tos.
>> まだしっかりと分かっていないです>オブジェクトの所有権 > オブジェクトの所有権? 私には初耳な言葉ですが。 ^^; C++ マスターな方の話ではそう言っていましたが、言い方が違うのかも。 オブジェクトを作るときに別のオブジェクトを渡したりする場合がありますが オブジェクトを delete するときにどのオブジェクトが渡したオブジェクトを delete するか、というような問題です。 きちんとコピーしておかないと2重に消してしまったりしますよね。 そう言う話です。 tos さんの話も似たようなものだと思って書いたんです。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場