スポンサーリンク

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 のいずれかを指定することにより、オクターブ追従を有効また は無効にすることができます (デフォルトでは無効です)。オクター ブ追従が有効になっている時は、1 組の音符を解釈すると、音符間で の音程の差が最小になるように必要に応じてオクターブが変化しま す。したがって、 ‘‘olbc’’ は ‘‘olb>c’’ のように、 ‘‘olcb’’ は ‘‘olc<b’’ のように演奏されます。オクターブ追従は、> と < と O[0123456] に続く、1 音符については無効です。 (オクターブ追従 機能は IBM BASIC ではサポートされていません。)

>
現在のオクターブを 1 つ上げます。

<
現在のオクターブを 1 つ下げます。

N n
音符 n を演奏します。 n は 1 から 84 か、現在の音長の休符とし て 0 です。付点記号を続けることもできます。

L n
音符の音長を設定します。デフォルトは L4 で、四分音符です。この 値は 1 から 64 までが認められます。 L1 は全音符に、 L2 は二分 音符に、 L4 は四分音符に、などと設定されます。

P n
n
を L n と同様に解釈した休符です。付点記号をつけることもでき ます。 ~ と書くこともできます。

T n
1 分あたりの四分音符の数を設定します。デフォルトは 120 です。 よくあるテンポの音楽名:

テンポ

分あたり拍数
とても遅い

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

スピーカデバイスファイル

関連項目

spkrtest(8)

作者

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

スポンサーリンク