EN JA
SPKR(4)
SPKR(4) FreeBSD Kernel Interfaces Manual SPKR(4)

名称

speaker, spkrコンソールスピーカのデバイスドライバ

書式

device speaker
#include < dev/speaker/speaker.h>

解説

スピーカデバイスドライバは、 FreeBSD を実行している IBM-PC 互換機でアプリケーションが PC コンソールスピーカを制御できるようにします。

いつでも、1 つのプロセスだけがこのデバイスをオープンできます。 open(2)close(2) はそれをロックしたり放棄するために使用されます。別のプロセスがデバイスをロックしていたとき、オープンしようとすると EBUSY エラー表示と共に -1 を返します。デバイスへの書き込みは単純な ASCII メロディ記法で `演奏ストリングズ (play strings)' として解釈されます。任意の周波数で音質 (トーン) 生成のための ioctl(2) リクエストもサポートされています。

音の生成はプロセッサを独占しません。実際、ドライバは PC ハードウェアが音 (トーン) を鳴らしている間の大半の時間をスリープするのに費やします。ドライバが実行している間に他のプロセスはビープ音を鳴らすことができます。

アプリケーションは直接スピーカードライバを制御するためにスピーカファイル記述子で ioctl(2) を呼び出すことができます。 ioctl(2) インタフェースのための定義は < dev/speaker/speaker.h> にあります。これらの呼び出しに使用される tone_t 構造体には、周波数 (Hz 単位で) と持続時間 (1/100 秒単位で) を指定する 2 つのフィードがあります。周波数 0 は休符と解釈されます。

現在のところ、そのような 2 つの ioctl(2) 呼び出しがあります。 SPKRTONE 3 番目のとして 1 つの tone 構造体へのポインタを受け取り、それを演奏します。 SPKRTUNE は tone 構造体の配列の先頭へのポインタを受け取り、それらを連続して演奏します。この配列は最後のメンバが 0 の持続時間で終わっていなければなりません。

演奏ストリング言語は IBM Advanced BASIC 2.0 の PLAY 文のコンベンション (仕様) を手本にしています。 PLAY の MB, MF, と X プリミティブは時分割環境では役に立たないので削除されます。 `オクターブ調節' 機能とスラーマークは新しいものです。

7 オクターブで 1-84 の番号が付けられた使用可能な 84 音があります。 0-6 の番号が付けられ、それぞれ C から B まで続きます。音階は等しく調律された A440 で、オクターブ 3 は真中の C から始まります。デフォルトでは演奏機能は半秒の音符を鳴らし、最後の 1/16 秒は休止します。

演奏ストリングは演奏コマンドグループのシリーズとして左から右に解釈されます。大文字小文字はは無視されます。演奏コマンドグループは次のとおりです:

CDEFGAB
文字 A から G で、現在のオクターブで対応する音符を演奏します。音符文字はオプションで # + または - の 1 つの“ 臨時記号”を続けることができます。これらの最初の 2 つは、半音シャープし (上げ)、最後は半音フラットし (下げ) ます。それは、また、時間の値の番号とサステイン付点を後に続けることができます (下記参照)。時間の値は下記の L コマンドとして解釈されます。
O n
n が数字であるなら、これは現在のオクターブを設定します。また、 nLN に設定することによりオクターブ調節を有効または無効にします (デフォルトでは無効です)。オクターブ調節がオンであるときに、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
nL 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 つの音符はついていないものの 3/2 の音長に、 2 つの音符は 9/4 の音長に、3 つの音符は 27/8 の音長になります。

音符とサステイン付点はスラーマーク (下線) を続けることもできます。音符の後に普段ある小さな休止が入れられて、次の音符をスラーでつなげます。 (スラー機能は IBM BASIC ではサポートされていません。)

演奏ストリング中の空白は単にスキップされるので、楽節を分けるために使うことができます。

関連ファイル

/dev/speaker
スピーカデバイスファイル

関連項目

spkrtest(8)

歴史

speaker デバイスは、 FreeBSD 1.0 で登場しました。

作者

Eric S. Raymond <esr@snark.thyrsus.com> June 1990

PORTED BY

Andrew A. Chernov <ache@astral.msk.su>

バグ

音程テーブルの丸めや音の発生とタイマハードウェアのこぼれ (どちらも精度を考慮していない) のため、音程の精度やタイミングは数学的に正確ではありません。音量 (ボリューム) 制御はありません。

2 つ以上のサステイン付点の動作は標準的な音楽記号を反映していません。それは、それぞれの付点は前の付点変更の半分だけ音長を長くするのであり、修正された音符の半分ではありません。つまり、付点が 1 つの音符はついていないものの 3/2 の音長に、 2 つの音符は 7/4 の音長に、3 つの音符は 15/8 の音長になります。しかしながら、3/2 倍にする解釈は IBM BASIC マニュアルに記されて、互換性のために保持されてています。

非常に長い (利用者のシステムの物理入出力ブロックより長い) 演奏ストリングでは、ブロック境界をまたがるために音符の末尾か数値がときどき間違って解析されるかもしれません。

November 10, 2005 FreeBSD