SPKR(4) FreeBSD/i386 カーネルインタフェースマニュアル SPKR(4)
名称
speaker, spkr − コンソールスピーカのデバイスドライバ |
書式
pseudo-device speaker #include <machine/speaker.h> |
解説
スピーカデバイスドライバは、 FreeBSD が走っている IBM-PC 互換 PC 上で、ア プリケーションがコンソールスピーカを制御できるようにします。 いかなるときでも、このデバイスをオープンできるのはただ 1 つのプロセスだけ です。このため、このデバイスのロックと解放には、 open(2) と close(2) を使 用します。他のプロセスがデバイスを独占している時にオープンしようとする と、 EBUSY エラーを示して -1 を返します。デバイスへの書き込みは、 ASCII 文字で単純にメロディを表記した演奏文字列 (‘play string’) として解釈されま す。 ioctl(2) リクエストによる任意の周波数の発音もサポートされています。 発音することでプロセッサを独占することはありません。実際には、ドライバは PC ハードウェアが音を発している間のほとんどの時間をスリープして待っていま す。他のプロセスはドライバが走っている間にビープを鳴らすことができます。 アプリケーションは、スピーカのファイル記述子に対して ioctl(2) 呼び出しを することにより、スピーカドライバを直接制御可能です。 ioctl(2) インタ フェースについての定義は /usr/include/machine/speaker.h にあります。これ らの呼び出しに使われる tone_t 構造体には、周波数 (ヘルツ) と持続時間 (1/100 秒単位で) を指定する 2 つのフィールドがあります。周波数 0 は、休符 と解釈されます。 現在そのような ioctl(2) 呼び出しは 2 つあります。 SPKRTONE は、第 3 引数 に単一の tone 構造体へのポインタ 1 個を受け取り、それを演奏します。 SPKRTUNE は、単一の tone 構造体配列の先頭へのポインタ 1 個を受け取り、そ れらを順番に演奏します。この配列は末尾が持続時間 0 のメンバで終っているこ とが必要です。 演奏文字列の語法は IBM Advanced BASIC 2.0 の PLAY 文の習慣を模倣していま す。 PLAY 文の MB, MF, X 要素は時分割環境では役に立たないため除かれます。 ‘オクターブ追従’ 機能とスラー記号は新しく追加されたものです。 7 オクターブ 84 音が使用可能で 1-84 の番号がついています。それぞれのオク ターブは C から B まで続いていて 0-6 の番号がついています。音階は A440 に 合わせて調律されていて、オクターブ 3 は真中の C から始まります。デフォル トでは演奏機能は半秒の音符を発音し、そのうち最後の 1/16 秒は休みます。 演奏文字列は左から右へと、演奏コマンドグループの連続として解釈されます。 大文字小文字は区別されません。演奏コマンドグループは次の通りです: |
CDEFGAB
A から G までの文字は対応する音を現在のオクターブで鳴らしま す。音符文字にはオプションで、 # + - のうちいずれかひとつの ‘‘ 臨時記号’’ を続けることができます。このうち最初の 2 つは音を半 音高くし、最後のものは音を半音低くします。また音符文字の後には 音長を表す数字と付点記号 (後述) をつけることもできます。音長は 次の L コマンドの場合と同様に解釈されます。 O n > < N n L n P n T n |
テンポ |
分あたり拍数 |
|||||
Larghissimo |
||||||
Largo |
40-60 |
|||||
Larghetto |
60-66 |
|||||
Grave |
||||||
Lento |
||||||
Adagio |
66-76 |
|||||
Adagietto |
||||||
Andante |
76-108 |
|||||
Andantino |
||||||
Moderato |
108-120 |
|||||
Allegretto |
||||||
Allegro |
120-168 |
|||||
Vivace |
||||||
Veloce |
||||||
Presto |
168-208 |
|||||
Prestissimo |
M[LNS]
調音を設定します。 MN (N は普通 (normal) を示します) がデフォ ルトで、音符の最後 1/8 を休みます。レガート (休みなし) にする には ML を、スタッカート (1/4 休む) にするには MS を設定できま す。 音符 (つまり CDEFGAB または N コマンド文字グループ) には付点記号 (.) を続 けることができます。それぞれの付点記号は 1 つにつき、音符の音長を 1.5 倍 にします。したがって、付点記号が 1 つついた音符はついていないものの 3/2 の音長に、 2 つついた音符は 9/4 の音長に、 3 つついた音符は 27/8 の音長に なります。 音符と付点記号にはスラー記号 (_) を続けることができます。これによって音符 の後に普段ある小さな休みが埋められて、音符を次の音符にスラーでつなげま す。(スラー機能は IBM BASIC ではサポートされていません。) 演奏文字列中の空白は単に飛ばされるので、楽節を分けるのに使うことができま す。 バグ |
音程テーブルの丸めや、発音ハードウェアやタイマハードウェアのこぼれ (どち らも精度を考慮していない) のため、音程の正確さやタイミングは数学的に厳密 ではありません。音量調節はありません。 2 つ以上の付点記号の動作は標準的な音楽記号を反映していません。標準的に は、それぞれの付点記号は前の付点の半分だけ音長を長くするのであり、付点に よって修正された音符の半分ではありません。つまり、付点記号が 1 つついた音 符はついていないものの 3/2 の音長に、 2 つついた音符は 7/4 の音長に、 3 つついた音符は 15/8 の音長になります。それでも、3/2 倍にする解釈は IBM BASIC マニュアルに記されているため、互換性のためにそのままにしています。 非常に長い (システムの物理 I/O ブロックよりも長い) 演奏文字列では、ブロッ ク境界をまたがるために、音符の修飾や数値が時々間違って解釈されることがあ ります。 |
関連ファイル
/dev/speaker
スピーカデバイスファイル 関連項目 |
作者
Eric S. Raymond 〈esr@snark.thyrsus.com〉 1990 年 6 月 |
移植者
Andrew A. Chernov 〈ache@astral.msk.su〉 |
歴史
speaker デバイスは FreeBSD 1.0 に初めて登場しました。 FreeBSD November 7, 1993 FreeBSD |