computer.program - プログラミングのお話

FotranとかcobolとかBasicとかCとかC++とかjavaとか…(以下略)

■ メインページ ■ サブボード修正

【最新20記事 [一覧] [ツリー] [一括] 】 【最新の記事は 107 番です.】
【前の20記事 [一覧] [ツリー] [一括] 【次の20記事 [一覧] [ツリー] [一括]
番から 番までの記事を
プログラミングのお話 に新しい記事を

#86: MidiPlayer
Date: 2001/03/17 11:02:18 Sat Author: GOO・豪 (tnet0077)
Parent Article: #85: MidiPlayer
Child Article: #87: MidiPlayer

>> MS はこれ以降 C# に任せて JAVA は載せないとか聞きますし、
> C# は名前は聞いたことがありますが、その実体は見たことはありません。

一応 .NET Framework SDK を入れればコマンドライン式のコンパイラと
実効環境は整いますのですぐできる状態ではありますよ。
私はまだ hello world したくらいでそれ以降手をつけていませんが、
一緒に入ってる VB の関数を C# から呼び出せたりしてかなり融通の利く
ものになっているみたいです。言語仕様が JAVA ライクで Delphi の
設計者が中心になっていると言うことで意外と人気が出てきているようです。

> でもこっちはこっちで、Windows系 OS マシンでしか動かないんでしょうね。

そうなんでしょうね。けど、もしかしたら MAC 用のランタイムとかは
出すかも知れませんね。へたしたら他の OS へも広げる?
もしそういう路線なら、JAVA が統一性にこだわる代わりに捨てた性能を、
少し機種依存を受け入れたようなちょっと違ったバランスで
持ち合わせてくれるものになるのかも。
まあ、いずれにせよまだベータですしこれからですが。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#85: MidiPlayer
Date: 2001/03/17 09:07:27 Sat Author: tos (tnet0004)
Parent Article: #84: MidiPlayer
Child Article: #86: MidiPlayer

> なんか JAVA の方針的にマルチメディアタイマーを使う気はないとか。

マシン非依存を前提に設計しているから、その方針は正しいでしょうね。
スレッドに対する扱いも、Win3.1 のような OS でも使えるように
低機能な物しか提供していないようです。

良くも悪くも、それが JAVA の限界なのでしょう。


> MS はこれ以降 C# に任せて JAVA は載せないとか聞きますし、

C# は名前は聞いたことがありますが、その実体は見たことはありません。
でもこっちはこっちで、Windows系 OS マシンでしか動かないんでしょうね。


tos.

レスチェック ■ この記事のコメントを書く

#84: MidiPlayer
Date: 2001/03/17 01:11:11 Sat Author: GOO・豪 (tnet0077)
Parent Article: #83: MidiPlayer
Child Article: #85: MidiPlayer

> いつか JavaVM が改善されるかもしれませんし。

なんか JAVA の方針的にマルチメディアタイマーを使う気はないとか。
SUN と MS の和解交渉とかで完全に MS と決別してしまいましたし、
MS はこれ以降 C# に任せて JAVA は載せないとか聞きますし、
いろいろと状況が悪いですね。ローカルで動かす JAVA アプリとして
作るにしても JAVA1.3 VM が必要ですし。他の OS でも動くのは
いいですけど。
そんなわけでこの話はとりあえず凍結しておこうと思います。

あと C# はアプレット的使い方はメインじゃないようですが、
できるらしいので、この可能性も要チェックかも知れないですね。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#83: MidiPlayer
Date: 2001/02/14 16:07:43 Wed Author: GOO・豪 (tnet0077)
Parent Article: #79: MidiPlayer
Child Article: #84: MidiPlayer

>> それから、MIDIデバイスのどれを選んでも、同じ(ウチではサウンドカード
>> のMIDI音源)になってしまいます。
> うちでも確認しました。バグ出しして直そうと思います。

だめだ〜
Sequencer のトランスミッタにどのデバイス・シンセサイザの
レシーバをつないでも全く効果が無く、デフォルトと思われる
デバイスにしかデータを送ってくれません。

試しにローカルで動くクラスに移植してみましたが、そちらでも同じ状況で、
デフォルトと思われるデバイスが Java Sound Synthesizer である点だけが
アプレット版と異なっています。アプレット版では Win の MIDI マッパーが
デフォルトになっているようです。

鳴ることは鳴るんだしあきらめるしかないかな...
いや、やっぱりローカルで外部音源を使えないのは痛いですよね...

アプレット上でも一応使うことができる、というところを目標に
してみようかと思います。ローカルではもたりとかはありませんし、
いつか JavaVM が改善されるかもしれませんし。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#82: 継承関係で質問
Date: 2001/02/13 00:40:31 Tue Author: GOO・豪 (tnet0077)
Parent Article: #77: 継承関係で質問

> シーケンサが手に入れられるはずだ、デフォルトのシーケンサって言うくらいだし、
> と考えてしまっていたんです。

と、書きましたが、ここの記述には変なところがあります。
>非デフォルトシーケンサは、第 9 章「MIDI システムリソースへのアクセス」で説明したような方法で、取得可能です。

訳ミスなのかもしれませんが、私はこれに従って堂々巡りに陥ったのでした。
シーケンサの接続先を変更できない妙な挙動も気になるので、
もうちょっと調査が必要ですね。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#81: 継承関係で質問
Date: 2001/02/12 22:44:41 Mon Author: GOO・豪 (tnet0077)
Parent Article: #80: 継承関係で質問

> あとはデバイスの切り替えがきちんとできているかどうかの
> 確認ですが、また Java のデバイスが死んでしまったので再起動します。

最初に決定している状態からの変更が全くできていないようです。
接続の更新はしているし、それでエラーも返ってきていないのに、
おかしいです。もうちょっと調べてみます。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#80: 継承関係で質問
Date: 2001/02/12 20:56:48 Mon Author: GOO・豪 (tnet0077)
Parent Article: #78: 継承関係で質問
Child Article: #81: 継承関係で質問

> シーケンサは死んでいないと思います。単に、全体がハングアップした
> だけだと思います。

tos さんの説明で私もそのように理解したんですが、残念ながら
デフォルトシーケンサと Java Sound Synthesizer の両方が
死んでいるようです。片方だけが死ぬってのは今のところ経験がありません。

とりあえず、Java Sound Sequencer は表示しないようにしました。
あとはデバイスの切り替えがきちんとできているかどうかの
確認ですが、また Java のデバイスが死んでしまったので再起動します。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#79: MidiPlayer
Date: 2001/02/12 18:57:40 Mon Author: GOO・豪 (tnet0077)
Parent Article: #78: 継承関係で質問
Child Article: #83: MidiPlayer

> まず始めに、もしこの話題がもっと続くなら(プレイヤの制作を続けるなら)、
> 新しいサブボードを作りませんか?
> GOOさんの作るプレイヤ専用のサブボードを、です。

とりあえずここで一段落ですので、今は必要ないでしょう。
次に続けるときはそうしますね。

> プレイボタンを押してから音が鳴り始めるまで(プレイボタンが再びアクティブ
> になるまで)の間、シーケンサが MIDIデータを読み込んでいるのでしょうか?
> その時間がまず気になりました。

それは MIDI データ自体のブランクじゃないですか?
読み込み自体はアドレスを指定したときに行って、総時間とか TimeBase を
分析までできる状態で Sequence というクラスに収まっているので。
再生するときにはやっていないはずです。

> そして、 amazing02.mid を演奏させたときには気にならなかったのですが、
> bt4i.mid を演奏させると、音がもたりますね。

気になるテンポのデータじゃなかったってことですね。

> デフォルトのシーケンサでこうなるなら、どんなシーケンサを作っても
> これ以上良くならないのではないでしょうか?

> 何か、シーケンサから出力デバイスへのデータの流し方がまずいのでは
> ないでしょうか?

確かに向上する余地がないのではってのが心配ですけどね(^^;
いや、実はすでにサンプルプログラムがあって、
それでこんな状態だったから、最低限の状態で
どの程度のパフォーマンスを稼げるかということを
試したかったんです。ちょっといろんな事をやっているサンプルだったので。
こっちの方もちょっとアップロードしてみますね。
http://www.geocities.co.jp/SiliconValley-SanJose/4825/test/

> それから、MIDIデバイスのどれを選んでも、同じ(ウチではサウンドカード
> のMIDI音源)になってしまいます。

うちでも確認しました。バグ出しして直そうと思います。

> シーケンサのレシーバは、パソコン外部からの MIDIデータをレコーディング
> するためにあるのだと思いますが、違いますか?

> 「デフォルトのシーケンサ」と「デフォルトのシンセサイザ」は別の
> ものだと思います。シーケンサの中に音を発音する機能はないはずです。

やっと分かってきました。シーケンサのレコーディングのところにも
そのように書いてありました。getSequencer で Sequencer を手に入れて
なにも接続せずに sequencer.start() していたので、てっきり
内部にシンセサイザーを持っているものと勘違いしていましたが、
これでは録音するためのポートが無く、つじつまが合いませんね。
確認はしていませんが、おそらく初期状態では
Java sound Synthesizer の Receiver が Sequencer の
Transmitter にセットされているんでしょう。

> 一方、「デフォルトのデバイス」が具体的に何を指しているのかは
> 分かりません。もしかすると、「デフォルトのデバイス」は入力用
> として用意されたデバイスなのかも?

どうなんでしょうね。サンプルの方では最初に VM のシンセサイザが
なったり、突然外部音源が鳴り出したり、安定しません。

私が選んでいたデフォルトのデバイスは、最初に勘違いしていたときに、
Sequencer.getDeviceInfo() (MidiDevice クラスから継承したメソッド)
で、デバイス情報を手に入れ、それと列挙されたデバイス情報と比較して
決めていました。だから特に意味のあるものではないです。

> だとすると、シーケンサの出力に繋ぐべきなのは、実は「デフォルトの
> デバイス」でなく「デフォルトのシンセサイザ」の方だったのかも
> 知れません。これで、音のももたりが解決するかも。

Synthesizer extends MidiDevice で、結局は MidiDevice として
扱うことになりますし、その違いは JavaVM 内で音声合成までを行う
デバイスであるというだけなので、つなぐ対象が MidiDevice であることには
違いないと思います。用意されるメソッドもソフトシンセ用のものばかりですし。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#78: 継承関係で質問
Date: 2001/02/12 08:04:09 Mon Author: tos (tnet0004)
Parent Article: #77: 継承関係で質問
Child Article: #79: MidiPlayer #80: 継承関係で質問

まず始めに、もしこの話題がもっと続くなら(プレイヤの制作を続けるなら)、
新しいサブボードを作りませんか?
GOOさんの作るプレイヤ専用のサブボードを、です。


> 再生してみてどうでしょうか?うちでは重くてとても使い物になりませんでした。
> これでは着メロ編集がいいところでしょう。いや、そもそも時間精度が
> やばいのかもしれないからこれもきついかも(^^;

プレイボタンを押してから音が鳴り始めるまで(プレイボタンが再びアクティブ
になるまで)の間、シーケンサが MIDIデータを読み込んでいるのでしょうか?
その時間がまず気になりました。

そして、 amazing02.mid を演奏させたときには気にならなかったのですが、
bt4i.mid を演奏させると、音がもたりますね。


> いずれにせよシーケンサとして仕上げるには文字通り
> 自前でシーケンサを作ることになるとは思いますが。

デフォルトのシーケンサでこうなるなら、どんなシーケンサを作っても
これ以上良くならないのではないでしょうか?

何か、シーケンサから出力デバイスへのデータの流し方がまずいのでは
ないでしょうか?

それから、MIDIデバイスのどれを選んでも、同じ(ウチではサウンドカード
のMIDI音源)になってしまいます。
それから、「Java Sound Sequencer」は表示しない方が良いでしょう。


> しかもその信じられない仕様のせいでうちのようにデフォルトデバイスが
> 死んでしまったときには再生すらできないようになってしまっていたんです。
> こんな不安定なシーケンサじゃなくて他のデバイス情報を持った

それは、出力デバイスであるデフォルトデバイスが死んだだけで、
シーケンサは死んでいないと思います。単に、全体がハングアップした
だけだと思います。


> シーケンサが手に入れられるはずだ、デフォルトのシーケンサって言うくらいだし、
> と考えてしまっていたんです。
> 他の API (Win32 とか)でもこういう扱い方をしているんでしょうか?

WinAPI でも、デフォルトのシーケンサがあります。単にプレイヤを作る
だけなら、それを使えば簡単に作れます。

ただ、ちょっと凝ったこと(音に合わせて画面を動かそうとするなど)を
しようとすると、辛くなってきます。


> けどやっぱりシーケンシング専用のデバイスとしてシーケンサを
> 提供して欲しいなぁ。トランスミッタだけ持っているような。
> 自分で作れってか

シーケンサのレシーバは、パソコン外部からの MIDIデータをレコーディング
するためにあるのだと思いますが、違いますか?

「デフォルトのシーケンサ」と「デフォルトのシンセサイザ」は別の
ものだと思います。シーケンサの中に音を発音する機能はないはずです。

一方、「デフォルトのデバイス」が具体的に何を指しているのかは
分かりません。もしかすると、「デフォルトのデバイス」は入力用
として用意されたデバイスなのかも?

だとすると、シーケンサの出力に繋ぐべきなのは、実は「デフォルトの
デバイス」でなく「デフォルトのシンセサイザ」の方だったのかも
知れません。これで、音のももたりが解決するかも。

// いや、あの Sun の解説書に分かりやすい概念図が1つあるだけで、
// スッキリと理解できるはずなんですが、それがないんですよね。


tos.

レスチェック ■ この記事のコメントを書く

#77: 継承関係で質問
Date: 2001/02/11 19:55:25 Sun Author: GOO・豪 (tnet0077)
Parent Article: #76: 継承関係で質問
Child Article: #78: 継承関係で質問 #82: 継承関係で質問

> デフォルトのシーケンサの出力を、getMidiDevice()で取得したデバイスの
> 入力に繋いでみてください。これで、GOO さんの悩みはすべて解決する
> ものと思われます。

その通りでした(^^;
再生できるようになりましたので、ご確認ください。

> もちろん、デフォルトのシーケンサの持つ機能が不満で、自分でシーケンサを
> 作りたいというなら、それはまた別な(高尚な)悩みですが。 ^^;

再生してみてどうでしょうか?うちでは重くてとても使い物になりませんでした。
これでは着メロ編集がいいところでしょう。いや、そもそも時間精度が
やばいのかもしれないからこれもきついかも(^^;
いずれにせよシーケンサとして仕上げるには文字通り
自前でシーケンサを作ることになるとは思いますが。

> そう、シーケンサは録音再生するだけの機能で、音は発音しない。
> そして、getMidiDevice() で取得できるデバイスは、シーケンサの機能は
> 持たず、音を発音したり、MIDI データを入力するための物理デバイスです。
> MIDI インタフェースに、シーケンサの機能はないでしょう?

それが音を発するし MIDI インターフェイスでもあるシーケンサが
再生機能を持っているので混乱してしまっていたんです(^^;
しかもその信じられない仕様のせいでうちのようにデフォルトデバイスが
死んでしまったときには再生すらできないようになってしまっていたんです。
こんな不安定なシーケンサじゃなくて他のデバイス情報を持った
シーケンサが手に入れられるはずだ、デフォルトのシーケンサって言うくらいだし、
と考えてしまっていたんです。
他の API (Win32 とか)でもこういう扱い方をしているんでしょうか?

いや、けどホントに助かりました。ありがとうございます。
本当に自分でシーケンサを作るまで気づかなかったかもしれません。

けどやっぱりシーケンシング専用のデバイスとしてシーケンサを
提供して欲しいなぁ。トランスミッタだけ持っているような。
自分で作れってか
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#76: 継承関係で質問
Date: 2001/02/11 15:47:03 Sun Author: tos (tnet0004)
Parent Article: #75: 継承関係で質問
Child Article: #77: 継承関係で質問

> Sequencer extend MidiDevice なので、デバイスの一種なのは確かです。
> そして、MidiDevice はレシーバとトランスミッタを持っていて、
> シーケンサがもつトランスミッタを他のデバイスのレシーバに接続させ、
> シーケンサを再生スタートさせれば tos さんが言うように他のデバイスが
> 鳴るはずです。しかし、そもそもシーケンサが手に入らないのです。

ウソを言っているかも知れませんが、とりあえず信じてやってみてください。

デフォルトのシーケンサの出力を、getMidiDevice()で取得したデバイスの
入力に繋いでみてください。これで、GOO さんの悩みはすべて解決する
ものと思われます。

もちろん、デフォルトのシーケンサの持つ機能が不満で、自分でシーケンサを
作りたいというなら、それはまた別な(高尚な)悩みですが。 ^^;


> つまり、シーケンサは再生するためのものであって、
> デフォルトデバイスがついているのはおまけのようなものなんでしょうか?
> デフォルトではシーケンサが持つレシーバにシーケンサのトランスミッタが
> つながっていると。そういうわけでしょうか。

そう、シーケンサは録音再生するだけの機能で、音は発音しない。

そして、getMidiDevice() で取得できるデバイスは、シーケンサの機能は
持たず、音を発音したり、MIDI データを入力するための物理デバイスです。

MIDI インタフェースに、シーケンサの機能はないでしょう?


tos.

レスチェック ■ この記事のコメントを書く

#75: 継承関係で質問
Date: 2001/02/11 15:21:34 Sun Author: GOO・豪 (tnet0077)
Parent Article: #70: 継承関係で質問
Child Article: #76: 継承関係で質問

なんか違う方向に走っちゃったきがするので、返事を書き直しです(^^;

> MidiSystem.getSequencer() で得られるのは「デフォルトのシーケンサ」
> だと思うのですが、違うでしょうか?

その通りです。デフォルト以外のデバイスは
MidiDevice.Info[] MidiSystem.getMidiDeviceInfo()
で調べ、
MidiDevice MidiSystem.getMidiDevice(MidiDevice.Info info)
でデバイスを取得と言うことになります。
他のデバイスの Sequencer は手に入れることはできないのです。
ファイルから手に入れた Sequence クラスのデータをセットして
再生するメソッドを持つのは Sequencer だけであるにもかかわらずです。

> そして、シーケンサ は デバイスの一種で、デバイス同士をトランスミッタと
> レシーバを接続することによって、MIDIデータを処理し演奏するんだと
> 思います。
〜
> よって、シーケンサのトランスミッタと、(MIDI音源)デバイスのレシーバを
> 接続することによって、音が鳴るようになるのではないでしょうか?

Sequencer extend MidiDevice なので、デバイスの一種なのは確かです。
そして、MidiDevice はレシーバとトランスミッタを持っていて、
シーケンサがもつトランスミッタを他のデバイスのレシーバに接続させ、
シーケンサを再生スタートさせれば tos さんが言うように他のデバイスが
鳴るはずです。しかし、そもそもシーケンサが手に入らないのです。
特にデフォルトデバイスがうちの環境でよく死ぬので・・・

って、ここまで書いて気づきましたが、最初に選択するデバイスは
デフォルトシーケンサの取得でチェックしています。これ自体が分かると
言うことはシーケンサ自体は手に入れられているわけで、
その中のデバイスは死んでいるということになるのでしょうか。
つまり、シーケンサは再生するためのものであって、
デフォルトデバイスがついているのはおまけのようなものなんでしょうか?
デフォルトではシーケンサが持つレシーバにシーケンサのトランスミッタが
つながっていると。そういうわけでしょうか。

もしそうだったら tos さんの言うとおりで、私は大きな勘違いをしていた
ようです(^^; シーケンサがデバイスであるということに惑わされていたわけですね。
まあ、とにかく試してみます。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#74: 無料 JAVA 統合環境
Date: 2001/02/11 09:30:10 Sun Author: GOO・豪 (tnet0077)
Parent Article: #71: 無料 JAVA 統合環境

> ただ、勝手に IME-97 が出てきました。普段は ATOK13 を使っているのですが。

JAVA VM がそういうことをするようです。
Forte とか JBuilder も JAVA アプリケーションなので
なぜか勝手に IME にされてしまってそうさが違うので困ってしまいます。
変換キーで ATOK 起動するようにしているので、
半角/全角キーに手を伸ばさなくてはならないだけで苦痛です。
と思ったら IME2000 の方でもこのようにキー設定を変えられました。
これで変換精度の違いくらいで我慢できるようになりました(^^;

> あと、MIDIデバイスリストの日本語と思われる部分が文字化けしています。

これ、何かコード変換すれば表示できるんでしょうかね?
コード変換の API あるかな...
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#73: 継承関係で質問
Date: 2001/02/11 09:11:12 Sun Author: GOO・豪 (tnet0077)
Parent Article: #72: 継承関係で質問

自己レス

> MidiDevice で渡されるけどインスタンスは Sequencer なんでしょうかね。

instanceof で調べてみたところ、JAVA Sound Sequencer に限って、
MidiDevice MidiSystem.getMidiDevice(MidiDevice.Info info)
で得られる、MidiDevice が Sequencer でもあることが分かりました。
他のデバイスは全部 Sequencer ではないので (Sequencer)MidiDevice の
キャストはできないんですね。

> このために例の見つけたコードでも (Sequencer)MidiDevice というキャストを
> やっていたのかもしれません。JAVA Sound Sequencer が
> Synthesizer でもあるというあたりがポイントでしょうか。
> これは説明にも書いてありますが MidiDevice instanceof Synthesizer
> で調べられるらしいのでとりあえず表示できるようにしてみますね。

表示するようにしてみましたが、シンセサイザーってのはプログラム内で
音声合成を行うデバイスですので、JAVA Sound Synthesizer と
JAVA Sound Sequencer がそれにあたると言うことが分かりました。
MidiDevice が Synthesizer であるかどうかは Sequencer で
あるかどうかとは関係がないわけですね。とにかく JAVA Sound Sequencer
だけ特別扱いなのははっきりしました。

GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#72: 継承関係で質問
Date: 2001/02/11 06:52:40 Sun Author: GOO・豪 (tnet0077)
Parent Article: #70: 継承関係で質問
Child Article: #73: 継承関係で質問

> そして、シーケンサ は デバイスの一種で、デバイス同士をトランスミッタと
> レシーバを接続することによって、MIDIデータを処理し演奏するんだと
> 思います。

なんで getSequencer(指定のデバイス) といった指定の仕方が
用意されていないのかが納得いかないところですが、
もしかしたら Sequencer ってのはデバイス情報だけでなく
tos さんが言うようにつなぎ方などもできあがっていないと
いけないためにそれがよく分かっているデフォルトデバイスに
限ってこういうわかりやすいインターフェイスを用意している
のかなぁとか考えたりもします。

とにかく、tos さんはそっちの方向が正しいのではないかと
あの説明からは読みとったわけですね。私もそっちしか残っていないと
思うのでその方向で考えてみようと思います。

> よって、シーケンサのトランスミッタと、(MIDI音源)デバイスのレシーバを
> 接続することによって、音が鳴るようになるのではないでしょうか?

そのシーケンサってのはシーケンスをセット(Sequencer.setSequence(Sequence))
してデバイス情報を持たない状態で再生するだけのデバイスとして
扱う形でしょうか。

ところで、今までデフォルトの JAVA Sound Sequencer が
死んでいて気づかなかったんですが、これに限っては例外違反が起きませんね。
MidiDevice で渡されるけどインスタンスは Sequencer なんでしょうかね。
このために例の見つけたコードでも (Sequencer)MidiDevice というキャストを
やっていたのかもしれません。JAVA Sound Sequencer が
Synthesizer でもあるというあたりがポイントでしょうか。
これは説明にも書いてありますが MidiDevice instanceof Synthesizer
で調べられるらしいのでとりあえず表示できるようにしてみますね。
Synthesizer でない MidiDevice の場合は tos さんの言うような
つなぎ合わせで実現する、と。

ちょっとあそこの説明ではわかりにくかったですが
とりあえずシーケンスの再生スケジューリングはシーケンサしか
やってくれないようなので、とりあえず試してみます。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#71: 無料 JAVA 統合環境
Date: 2001/02/10 20:13:22 Sat Author: tos (tnet0004)
Parent Article: #69: 無料 JAVA 統合環境
Child Article: #74: 無料 JAVA 統合環境

> ところで、うちではデフォルトデバイスである "JAVA Sound Sequencer" が
> よく死んでしまってそれ以降ずっと使えない状態になってしまったりします。
> そういうことはありませんか?

GOO さんのプログラムを操作していて、ハングしたことはありません。

ただ、勝手に IME-97 が出てきました。普段は ATOK13 を使っているのですが。

あと、MIDIデバイスリストの日本語と思われる部分が文字化けしています。


tos.

レスチェック ■ この記事のコメントを書く

#70: 継承関係で質問
Date: 2001/02/10 20:02:08 Sat Author: tos (tnet0004)
Parent Article: #68: 継承関係で質問
Child Article: #72: 継承関係で質問 #75: 継承関係で質問

私は、GOO さんの示した資料を読んだだけなので本当の所は分かりませんが、


> Sequencer seq = MidiSystem.getSequencer(); でデフォルトデバイスのSequencer が手にはいるって言うのに

ここが間違いだと思います。


MidiSystem.getSequencer() で得られるのは「デフォルトのシーケンサ」
だと思うのですが、違うでしょうか?

そして、シーケンサ は デバイスの一種で、デバイス同士をトランスミッタと
レシーバを接続することによって、MIDIデータを処理し演奏するんだと
思います。

第8章 MIDI パッケージの概要より
シーケンサは、MIDI イベントのシーケンスの取り込み および再生を行うデバイスです。
よって、シーケンサのトランスミッタと、(MIDI音源)デバイスのレシーバを 接続することによって、音が鳴るようになるのではないでしょうか? tos.
レスチェック ■ この記事のコメントを書く

#69: 無料 JAVA 統合環境
Date: 2001/02/10 13:19:19 Sat Author: GOO・豪 (tnet0077)
Parent Article: #67: 無料 JAVA 統合環境
Child Article: #71: 無料 JAVA 統合環境

> さっそくダウンロードしてみました。でも、先のデモを表示させようと
> すると、再びインストール要求のウィンドウが出てきました。
> 私は一体何をダウンロードしたのでしょうか? ^^;

インストールしてあるのにまた要求されたんですか?IE 用のは
入っていなかったんでしょうかね...

> こちらは、ちゃんと実行することができました。とりあえず、これで
> 安心と言ったところでしょうか。

とりあえずテストしてもらえる人がいてくれて心強いです(^^;
ところで、うちではデフォルトデバイスである "JAVA Sound Sequencer" が
よく死んでしまってそれ以降ずっと使えない状態になってしまったりします。
そういうことはありませんか?
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#68: 継承関係で質問
Date: 2001/02/10 13:05:51 Sat Author: GOO・豪 (tnet0077)
Parent Article: #66: 継承関係で質問
Child Article: #70: 継承関係で質問

> 眺めてみると Sequencer seq = (Sequencer)MidiDevice;
> といったことをばっちりやっているではありませんか(^^;
> というわけで、おそらく止まるのは別の理由だったのでしょう。

と思っていましたがやっぱりだめだったようです。
try & catch(JAVA 使うまで使ったことがなかった(ぉ
してみたんですが、ClassCastExceprion が発生しています。
これはもう間違いないでしょう。

http://www.geocities.co.jp/SiliconValley-SanJose/4825/java/
ここで、デバイスが何か選択されていて、有効な MIDI ファイルの URL を
渡している状態で「再生・一時停止」を押すと
Sequencer seq = (Sequencer)MidiDevice; の形の文を実行するように
なっています。

最近になって多態性の使い方として、受け側にスーパークラスを使って
区別せずに済んでらくちん、ってのを何とか理解したところでして、
その逆なんてできるのか?いや、概念的にも何かおかしい、
とか思ってはいたんです。

さてこれでまた MidiDevice + Sequence = Sequencer でいけるはずの道が
閉ざされてしまいました。たぶん馬鹿なことで騒いでるんだと思うんです。
Sequencer seq = MidiSystem.getSequencer(); でデフォルトデバイスの
Sequencer が手にはいるって言うのにデフォルト以外の Sequencer を得るための
システムメソッドが用意されていないわけですし、説明の方でも
MidiDevice から Sequencer への持っていき方はかかれていません。
順に見ていくと堂々巡りになります。

MidiDevice も Sequencer もインターフェイスなのが肝なのかなぁ。
両方を implement したクラスを作れば何とかなるんだろうか。
そもそもインターフェイス自体、コードを持たず implement した
クラスの取り扱い方を増やすだけのもののように見ていたんで、
なんでそんなものがこうもたくさんの機能を持つのか不思議です。
インターフェイスにはまだ何か私の知らない秘密があるということでしょうか。
GOO
E-Mail: goo_n@hotmail.com

レスチェック ■ この記事のコメントを書く

#67: 無料 JAVA 統合環境
Date: 2001/02/10 10:31:38 Sat Author: tos (tnet0004)
Parent Article: #64: 無料 JAVA 統合環境
Child Article: #69: 無料 JAVA 統合環境

>> とりあえず私は、GOO さんが制作したプログラムを実行できる環境を
>> 整えないと行けないと言うことですかね。 (笑)
> 自動ダウンロードされなかったんですか?
> なんだったらここで直にダウンロードもできます。
> http://java.sun.com/j2se/1.3/ja/jre/index.html

さっそくダウンロードしてみました。でも、先のデモを表示させようと
すると、再びインストール要求のウィンドウが出てきました。
私は一体何をダウンロードしたのでしょうか? ^^;


> GUI 部分を適当に作ってみました。
> http://www.geocities.co.jp/SiliconValley-SanJose/4825/java/
> MIDI アプリケーションらしいのは MIDI デバイスの列挙ができている
> ところくらいですね(^^;

こちらは、ちゃんと実行することができました。とりあえず、これで
安心と言ったところでしょうか。

ちなみに、その下にある MIDIファイルをクリックすると、ウチは
TMIDIが起動するようになっています。(笑)


tos.

レスチェック ■ この記事のコメントを書く

レスチェックした記事を
【最新20記事 [一覧] [ツリー] [一括] 】 【最新の記事は 107 番です.】
【前の20記事 [一覧] [ツリー] [一括] 【次の20記事 [一覧] [ツリー] [一括]
番から 番までの記事を
プログラミングのお話 に新しい記事を

T-Net ■ メインページ