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

Re: [MD:4204] Sound support



MCI の primitive function を commit しました。

今後は、
o elisp でのイベントハンドリングの実装。また、utility 関数の実装
  (mw32mci.el?)、
o play-sound() の実装(mw32mci.el?)、
を実装するつもりです。

>>>>> [meadow-develop : No.4247] にて
>>>>> "himi" = MIYASHITA Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxx> さんは書きました:
himi> > 実験的に、手元で、次の primitive function を実装してみました。

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

himi さんのアドバイスに従って次のように変更しました。

o (mw32-mci-send-string COMMAND)

mciSendString() を使って、MCI コマンドを送信します。
正常終了した場合には、コマンドの実行結果を表す文字列を返します。
例えば、`open' を実行した場合には、`open' したデバイスの ID を文字
列で返します。エラー発生時には、エラーコードを数値で返します。

o (mw32-mci-get-error-string ERROR-CODE)
エラーコードからエラーの内容を文字列で取得します。

使い方は次のとおりです。

(mw32-mci-send-string "open c:/WINDOWS/Media/tada.wav alias tada")
 => "1" ; デバイス ID
(mw32-mci-send-string "play tada")
 => ""
(mw32-mci-send-string "close tada")
 => ""

また、notify を指定することで、 MM_MCINOTIFY イベントを捕獲できます。

(mw32-mci-send-string "open c:/WINDOWS/Media/tada.wav alias tada")
 => "1" ; デバイス ID
(progn
  (mw32-mci-send-string "play tada notify")
  (read-event))
 => (mw32-mci mw32-mci-notify-successful 1 nil)
(mw32-mci-send-string "close tada")
 => ""


himi> 次に、lispy eventを定義します。これは、Lisp Objectとして、
himi> eventがどうあらわされるかを決定するものです。Emacsは、
himi> XEmacsと違って、この辺が例によっていい加減です。どうせ、MCI
himi> は、今までになかったeventの種類なので自分で定義した方が良い
himi> でしょうね。

himi> (mw32-mci <MCI-EVENT-TYPE> <DEVICE-ID> [EVENT-TYPE-SPECIFIC-PARAMETER])

MCI-EVENT-TYPE として、
mw32-mci-notify-aborted, mw32-mci-notify-failure,
mw32-mci-notify-successful, mw32-mci-notify-superseded
を定義しました。意味は MCI API と同じです。

今のところ、MCI-EVENT-TYPE に係わらず 
EVENT-TYPE-SPECIFIC-PARAMETER は nil です。

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