sound - wav ファイルを再生する

1 説明

wav ファイルを再生するためのシンプルなライブラリです (PlaySound API の wrapper です)。

同時に 1 つの wav ファイルしか再生できません。 また、一時停止などの制御機能はありません。

2 インストール

NetInstaller でインストールした場合は 4 以降を、 NetInstaller + ni-autoload を使っている人は 5 以降で OK です。

  1. の api.l が必要なのでインストールします。

    <URL:http://xyzzy.s53.xrea.com/wiki/index.php?%B3%C8%C4%A5lisp%2Fwinapi>

  2. アーカイブをダウンロードします。

    <URL:http://miyamuko.s56.xrea.com/xyzzy/archives/sound.zip>

  3. アーカイブを展開して、$XYZZY/site-lisp 配下にファイルをコピーします。
  4. ~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加します。

    ;; sound
    (require "sound")
  5. 設定を反映させるため xyzzy を再起動してください。

    ※siteinit.l に記述した場合には再ダンプが必要です。

  6. (sound-play "wav ファイル") で wav ファイルを再生できます。

3 リファレンス

3.1 パッケージ

本ライブラリの関数は sound パッケージ (別名 snd) で定義されます。 簡単なインターフェイスとアプリ的なものは editor で定義して export しています。

3.2 関数

以下の関数は editor パッケージ内で定義され export されています。

sound-play sound &key async loop nodefault nostop nowait

指定された sound を再生します。sound には以下の値が指定可能です。

その他のキーワード引数で再生時の動作を指定できます。

async

サウンドを非同期再生します。 このオプションを指定すると再生開始後にこの関数はすぐに制御を戻します。

(sound-play 'SystemStart :async t)

非同期再生中のサウンドは sound-stop で停止できます。

loop
サウンドを繰り返し再生します。
async t も同時に指定したとみなされます。
nodefault
指定されたサウンドが見つからなかった場合、既定のサウンド(一般の警告音) を再生せずに終了します。
nostop
既にサウンドが再生されている場合、なにもせずに終了します。 このフラグを指定しなかった場合、現在再生されているサウンドを停止して 指定された新しいサウンドを再生します。
nowait
ドライバがビジー状態の場合、指定されたサウンドを再生せずに即座に制御を返します。
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

サウンド識別子の一覧を返します。

default-only t を指定した場合、Windows のイベントのみ返します。

以下のようなリストを返します。

((アプリ識別子1 "アプリ名1" ((サウンド識別子1 "サウンド名1" "ファイル名1")
                             (サウンド識別子2 "サウンド名2" "ファイル名2")
                               ; 繰り返し
                             ))
 (アプリ識別子2 "アプリ名2" ((サウンド識別子1 "サウンド名1" "ファイル名1")
                             (サウンド識別子2 "サウンド名2" "ファイル名2")
                               ; 繰り返し
                             ))
   ; 繰り返し
 )

3.3 変数

なし

4 サンプルスクリプト

5 ToDo

6 既知のバグ・制限事項

7 関連するページ

api.l
<URL:http://xyzzy.s53.xrea.com/wiki/index.php?%B3%C8%C4%A5lisp%2Fwinapi>
Microsoft Windows と Web ページでのオーディオ プログラミング: 概要
<URL:http://www.microsoft.com/japan/msdn/directx/techart/audiooverview.asp>
PlaySound - MSDN
<URL:http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpmltimd/html/_win32_playsound.asp>

8 ライセンス

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.