Introduction to NAS(Network Audio System) NAS(Network Audio System)入門 *contents o 対象 o Disclaimer o What's NAS o 基本用語 o eventについて o actionについて o audio libraryの使い方 o 簡単な使い方 o 基本的な使い方 o advancedな使い方 o 録音等について o examples o Xtとの連携 o その他触れておくべき事 o NASの入手及びinstallの仕方 o 参考文献 o Contact *対象 NASの入門です。 C++についての簡単な知識は仮定します。Cで使うには少しばかりの変更で 大丈夫でしょう。(iostream,変数の宣言を最初に持ってくる等。) (Xでのプログラミングの知識があると助けになるでしょう。 と言うか無いとつらいかな?) audio dataについての基本的な事は仮定します。 NASを用いて音が出せるようになって、ちょっとした制御が出来る様 になることを目標にします。 これを読めば後は大体manを見れば何とかなるという様になるのが理想です。 (録音等については解説しませんが、参考にはなるでしょう。 (単に使った事が無いだけですが…。)) NASについて網羅的に解説する事は目標ではありません。 (結果としてそうなってしまうかも知れませんが。) しかし対象となる人っていったい何人くらいいるのだらう。殆んどいないような…。 もしいらしたら感想等聞かせて頂ければ幸いです。又、間違い等発見されましたら報せてください。 また、提案、意見その他も歓迎します。 *Discailmer この文章は無保証です。この文書及び付属のsample programを利用した、 あるいは出来なかった、しなかったことによる結果に対する責任はいっさい負いません。 各自の責任で使用してください。 *What's NAS NASとはNCDによって開発されたものでnetwork上でaudio dataを再生したり録音したり、その他色々な操作を行えるものです。 NASはXをお手本にしている様で、cilent server modelによっています。 Xと同様netowork透過です。 Application(client):NAS API----------network-----------------NAS Server 以下NASに付属のFAQからの引用。 > Key features of the Network Audio System include: > > o Device-independent audio over the network > o Lots of audio file and data formats > o Can store sounds in server for rapid replay > o Extensive mixing, separating, and manipulation of audio data > o Simultaneous use of audio devices by multiple applications > o Use by a growing number of ISVs > o Small size > o Free! No obnoxious licensing terms 現在サーバーは以下のplathomeであるようです。(これもFAQからの引用。) > o Sun Sparc 1 AM79C30A Digital Subscriber Controller and > Sparc 10 Dual Basic Rate ISDN Interface > (SunOS 4.1.[23], Solaris 2.x) > > o SGI Indigo (IRIX 5.x) > > o VOXware (FreeBSD, Linux, SVR4.[02]) > > o HPUX note:manを見てみるとnot implementedとなっていたりする事があるので注意が必要です。 *基本用語 flow flowとはclientが入力や出力やデータの操作をどの様にするか指定する物です。 具体的には次に示すelementの幾つかにより指定されます。 (この説明で良く分からなくても具体例でやってみれはすぐ分かると思います。) element dataの入力元やデータに行う操作やデータの出力先を示します。 component elementのうちデータの入力元とデータの出力先になるものを特にcomponent と呼びます。Stopped,Paused,Startedのstateがあります。(説明不要でしょう。) elementとcomponentの例をあげます。 componentの例(当然elementでもあります。) physical device(speaker,mic,cd等の音を再生するもの) virtual device(sine wave,square wave,saw wave,constantがあります。 数学的に作り出す音です。) bucket(データを貯めておくための物です。例えば頻繁に再生するデータをサーバー側に置いておいたり、録音したデータを一時的に保持しておくためのものです。) elementの例(後で説明します。) Monitor element(再生の状況を一報告します。) add(一定数を加えます。) sum(mixingに使います。) bundle(trackをあわせます。) multiply(一定数をかけます。これで音量調整をする事が出来ます。。) *eventについて 何か変化があるとそれはEventという形でclientに通知されます。 eventについては次のものがあります。 AuEventTypeElementNotify:elementの状態が変化したときなどに通知されます。(再生が開始したとか再生が終了したとか。) AuEventTypeGrabNotify AuEventTypeMonitorNotify:monitor elementから通知されるイベント(?) 専ら使うのはNotify Eventでしょう。 例えばデータの再生が終了したといったことを知ることができます。 state *actionについて componentにactionを登録することができます。 具体的にはcomponentが指定した状態の変化があったときに特定の動作を させるものです。(残念ながら関数が登録出来るわけではありません。) これにより例えばデータをループさせて再生させるといった事が出来ます。 *audio libraryの使い方 HowToCompile 次のファイルをincludeしましょう。 #include