wav ファイルを再生するためのシンプルなライブラリです (PlaySound API の wrapper です)。
同時に 1 つの wav ファイルしか再生できません。 また、一時停止などの制御機能はありません。
NetInstaller でインストールした場合は 4 以降を、
NetInstaller + ni-autoload
を使っている人は 5 以降で OK です。
の api.l が必要なのでインストールします。
<URL:http://xyzzy.s53.xrea.com/wiki/index.php?%B3%C8%C4%A5lisp%2Fwinapi>
アーカイブをダウンロードします。
~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加します。
;; sound (require "sound")
設定を反映させるため xyzzy を再起動してください。
※siteinit.l に記述した場合には再ダンプが必要です。
本ライブラリの関数は sound パッケージ (別名 snd) で定義されます。 簡単なインターフェイスとアプリ的なものは editor で定義して export しています。
以下の関数は editor パッケージ内で定義され export されています。
sound-play sound &key async loop nodefault nostop nowait
指定された sound を再生します。sound には以下の値が指定可能です。
wav ファイルのファイル名 (文字列)
wav ファイルのファイル名を指定して再生します。もっとも基本的な使い方です。
;; チャイムを再生する。 (sound-play "c:/WINDOWS/Media/chimes.wav")
なお、再生時に自動的に以下のパスが検索されるためディレクトリ名は省略できる場合があります。 詳細は MSDN の PlaySound の説明を参照してください。
ネットワークにマップされているディレクトリ
;; チャイムを再生する (ディレクトリ省略)。 (sound-play "chimes.wav")
サウンド識別子 (シンボル or 文字列 or 定数)
定義済みのサウンド識別子を指定して wav ファイルを再生します。
サウンド識別子の確認は sound-show-alias で行うことができます。 サウンドの設定は「コントロールパネル」の「サウンドとオーディオ デバイス」 (XP の場合) で設定します。
サウンド識別子はシンボル・文字列・定数を指定できます。 以下の指定はすべて同じで「Windows の起動」音を再生します。
ex)
(sound-play 'SystemStart) (sound-play :SystemStart) (sound-play "SystemStart") (sound-play winapi::SND_ALIAS_SYSTEMSTART)
なお、Win32 API の PlaySound では Windows のサウンド識別子 (Windows の起動や Windows のログオフなど) のみ指定可能ですが、sound.l ではその他のプログラムのサウンド識別子 (たとえば「エクスプローラ」の「ごみ箱を空にする」('EmptyRecycleBin) など) も指定可能です。
メモリ上に読み込んだ wav ファイル (chunk)
ファイル名やサウンド識別子で指定すると毎回 wav ファイルをメモリ上に読み込みます。 頻繁に再生する wav の場合、事前にメモリ上に読み込んでおいて再生することができます。
wav ファイルのメモリ上への読み込みは snd::load-sound を利用します。
ex)
(defvar *chimes* (snd::load-sound "c:/WINDOWS/Media/chimes.wav")) (sound-play *chimes*)
その他のキーワード引数で再生時の動作を指定できます。
サウンドを非同期再生します。 このオプションを指定すると再生開始後にこの関数はすぐに制御を戻します。
(sound-play 'SystemStart :async t)
非同期再生中のサウンドは sound-stop で停止できます。
sound-play-async sound &key loop nodefault nostop nowait
sound-play の非同期版です。wav ファイルの再生終了を待ちません。
(sound-play sound :async t) と同じです。
sound-stop
sound-show-alias
「コントロールパネル」の「サウンドとオーディオ デバイス」 (XP の場合) で設定されているサウンドの一覧を表示します。
実行例)
定義済みのサウンド識別子 説明 現在の設定 ------------------------ ---- ---------- ■Windows (.Default): .Default 既定のビープ音 C:\WINDOWS\media\Windows XP Ding.wav AppGPFault アプリケーション エラー (なし) CCSelect 選択 (なし) Close アプリケーションの終了 (なし) CriticalBatteryAlarm バッテリ消耗アラーム C:\WINDOWS\media\Windows XP Battery Critical.wav DeviceConnect デバイスの接続 C:\WINDOWS\media\Windows XP Hardware Insert.wav
以下の関数は sound (snd) パッケージ内で定義さています。
snd::load-sound filename
指定されたファイルをメモリ上に読み込みます。 戻り値はサウンドファイルの chunk とファイルサイズを多値で返します。
ファイルが見つからない場合や読み込みに失敗した場合は simple-error を throw します。
[注意] sound-play はいくつかのパスから指定されたサウンドファイルを検索しますが、 snd::load-sound はパスの検索は行いません。
(sound-play "chimes.wmv") ;; => OK (snd::load-sound "chimes.wmv") ;; => NG (ファイルが見つかりません) (snd::load-sound "c:/WINDOWS/Media/chimes.wav") ;; => OK
snd::alias-p alias-name
指定されたサウンド識別子が存在する場合 non-nil を返します。 存在しない場合は nil を返します。
(snd::alias-p 'SystemExit) ;; => t (snd::alias-p 'hoge) ;; => nil
snd::alias-to-file alias-name
指定されたサウンド識別子に設定されているサウンドファイルを返します。 設定されていない場合は nil を返します。
(snd::alias-to-file 'SystemExit) ;; => "C:\\WINDOWS\\media\\Windows XP Shutdown.wav"
snd::list-alias &key default-only
サウンド識別子の一覧を返します。
以下のようなリストを返します。
((アプリ識別子1 "アプリ名1" ((サウンド識別子1 "サウンド名1" "ファイル名1") (サウンド識別子2 "サウンド名2" "ファイル名2") ; 繰り返し )) (アプリ識別子2 "アプリ名2" ((サウンド識別子1 "サウンド名1" "ファイル名1") (サウンド識別子2 "サウンド名2" "ファイル名2") ; 繰り返し )) ; 繰り返し )
なし
xyzzy 終了時に Windows のログオフ時のサウンドを再生する。
(require "sound") (add-hook '*kill-xyzzy-hook* (lambda () (ignore-errors (sound-play :WindowsLogoff :nowait t :nodefault t))))
何かするたびに「エクスプローラ」の「ナビゲーション開始」時のサウンドを再生します。
頻繁に実行するため事前に wav ファイルをメモリ上にロードしています。
(require "sound") (let ((sound (snd::load-sound (snd::alias-to-file :Navigating)))) (add-hook '*post-command-hook* (lambda (&rest ignore) (ignore-errors (sound-play-async sound :nowait t :nostop t :nodefault t)))))
sound は修正 BSD ライセンスに基づいて利用可能です。
Copyright (C) 2005 MIYAMUKO Katsuyuki. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1 Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified. 2 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.