[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:4204] Sound support



>>>>> [meadow-develop : No.4207] にて
>>>>> "himi" = MIYASHITA Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxx> さんは書きました:
himi> 理想的にはこっちですが、それは当分先のことなので、まず、MCIを入れるのは
himi> それほど悪くない選択だと思います。大事なのは、まず、MCIに忠実な下位層を
himi> 作成し、その後、Emacsの上位層のelisp APIをemulateするという構成が望ましいと
himi> 思われます。MCIは、ほとんどcommand送るだけの単純構成だし、primitive APIも
himi> 簡単に作れるでしょう。

実験的に、手元で、次の primitive function を実装してみました。

(mw32-mci-send-string COMMAND NOTIFY-CALLBACK-FUNC NOTIFY-CALLBACK-ARG)
(mw32-mci-get-error-string ERROR-CODE)

次のようにして WAV データを再生できています。

(mw32-mci-send-string "open c:/WINDOWS/Media/tada.wav alias x")
(mw32-mci-send-string "play x")
(mw32-mci-send-string "close x")

で、質問があります。

(1) 利用する MCI レイヤ
MCI にもいろんなレイヤがあるようなのですが、himi さんが想定してい
るのは、この文字列でコマンドを送るレイヤでいいのでしょうか?

(2) コールバックの実装
ループ再生のためなどに、再生完了時に発生する MM_MCINOTIFY イベン
トをひろってコールバック関数を実行しようと思っているのですが、う
まくいきません。

NOTIFY-CALLBACK-FUNC を safe_call()で実行するときにエラーとなりま
す。

多分、メッセージスレッドで safe_call() しているのが悪いと思われる
ので、メインスレッドで実行させたいのですが、その方法が分かりませ
ん。

分かる方教えてください。

;; 多分 Emacs イベントを介すればできそうだけど、よく分かりません。

--
三好 雅則 mailto:miyoshi@xxxxxxxxxxxxxxxx
          http://www.boreas.dti.ne.jp/~miyoshi/ (Meadow2 のページ始めました)