source: trunk/third/esound/docs/esound.sgml @ 17105

Revision 17105, 19.4 KB checked in by ghudson, 23 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r17104, which included commits to RCS files with non-trunk default branches.
Line 
1<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2 ]>
3
4<book id="index">
5
6  <!-- ========================================== -->
7
8  <bookinfo>
9    <date>1998-01-13</date>
10    <title>EsounD</title>
11    <subtitle>The Enlightened Sound Daemon</subtitle>
12    <releaseinfo>documentation in progress</releaseinfo>
13    <authorgroup>
14      <author>
15        <firstname>Eric</firstname>
16        <othername>'Ricdude</othername>
17        <surname>Mitchell</surname>
18      </author>
19    </authorgroup>
20    <address>
21      <email>ericmit@ix.netcom.com</email>
22    </address>
23    <copyright>
24      <year>1998</year>
25      <holder>Eric B. Mitchell</holder>
26    </copyright>
27    <legalnotice id="legalnotice">
28      <para>
29        This document can be freely redistributed according to the
30        terms of the GNU General Public License.
31      </para>
32    </legalnotice>
33  </bookinfo>
34 
35  <chapter id="introduction">
36    <title>Introduction</title>
37   
38    <para>
39      So you've got your (insert sound playing program here) cruising
40      at full tilt, and you want to check out this cool Monty Python
41      quote, but you don't want to kill the original sound?  This is
42      just the fix, with a little tweaking, of course. =P
43    </para>
44   
45    <para>
46      The Enlightened Sound Daemon can mix several audio streams into
47      one sound device.  It will mix in pre-loaded samples, too.  Want
48      to play a frightening sound whenever the user presses the
49      &quot;go&quot; button?  No problem, just cache it, and play it
50      back by sample id number.
51    </para>
52   
53    <sect1 id="caveats">
54      <title>Caveats</title>
55     
56      <para>
57        This is hot off the presses software, get it while it's still
58        hot.  It's still got a ways to go yet.  Be prepared for a
59        bumpy ride.  Any and all reasonable patches and improvements
60        accepted.  I expect the communication protocol to change at
61        least once more before it hits 1.0.
62      </para>
63     
64    </sect1>
65   
66    <sect1 id="requirements">
67      <title>Requirements</title>
68
69      <para>
70        The Enlightened Sound Daemon requires the following:
71      </para>
72
73      <para>
74        Linux, version 2.??? or higher.  I run 2.0.34-RH5.1, but I don't think
75        the sound API has significantly changed recently.  If you find it to
76        be incompatible with different kernel/OSS revs, let me know.
77      </para>
78
79      <para>And of course, a sound device.
80      </para>
81
82      <para>
83        Currently, this only runs under Linux.  Everything except recording
84        seems to work ok on SGI/Irix soon.  Reports indicate it works ok on
85        Solaris.  Ports to other platforms are requested.  Basic drivers for
86        other platforms are in the distribution, but may need work from what's
87        in the driver_platform.c files.
88      </para>
89
90    </sect1>
91
92  </chapter>
93
94  <!-- ========================================== -->
95
96  <chapter id="downloading-compiling-installing">
97    <title>Downloading, Compiling, and Installing</title>
98
99    <sect1 id="downloading">
100      <title>Downloading</title>
101
102      <para>
103        The Enlightened Sound Daemon is available for download from
104
105        <itemizedlist>
106          <listitem>
107            <para><ulink url="ftp://ftp.enlightenment.org/pub/ricware/esound-0.2.4.tar.gz">
108                Enlightenment.org public ftp site</ulink></para>
109          </listitem>
110
111          <listitem>
112            <para><ulink url="http://winblowz.com/~e/files/TAR/esound-0.2.4.tar.gz">
113                Winblowz.com Enlightenment Mirror Site</ulink></para>
114          </listitem>
115
116          <listitem>
117            <para><ulink url="http://www.netcom.com/~ericmit/esound_0_2_4.tgz">
118                The EsounD Web Site</ulink></para>
119          </listitem>
120        </itemizedlist>
121
122      </para>
123
124    </sect1>
125
126    <sect1 id="compiling">
127      <title>Compiling</title>
128
129      <procedure>
130
131        <step>
132          <para>Extract the contents of the archive.</para>
133          <literallayout>
134            <prompt>&gt; </prompt><userinput> tar xvfz esound-0.2.4.tar.gz</userinput>
135          </literallayout>
136        </step>
137
138        <step>
139          <para>To compile the package, change to the newly created
140            esound-0.2.4 directory, and type:</para>
141          <literallayout>
142            <prompt>&gt; </prompt><userinput> configure ; make all</userinput>
143          </literallayout>
144        </step>
145
146        <step>
147          <para>A sample test script is provided, follow the directions
148            given by the test script:</para>
149          <literallayout>
150            <prompt>&gt; </prompt><userinput> ./test-script</userinput>
151          </literallayout>
152        </step>
153
154      </procedure>
155
156      <para>
157        The sound daemon, and the command line toolset should build as is.
158        All executables should run fine from the source directory.
159      </para>
160
161    </sect1>
162
163    <sect1 id="installing">
164      <title>Installing</title>
165
166      <procedure>
167        <para>
168          Installing the EsounD package is accomplished by typing:
169        </para>
170
171        <step>
172          <para>
173            <literallayout>
174              <prompt>&gt; </prompt><userinput> make isntall</userinput>
175            </literallayout>
176          </para>
177        </step>
178      </procedure>
179
180      <para>
181        This will copy all relevant files to useful/accessible places.
182      </para>
183
184    </sect1>
185
186  </chapter>
187
188  <!-- ========================================== -->
189
190  <chapter id="running-esound">
191    <title>Running EsounD</title>
192
193    <sect1 id="esd">
194      <title>esd</title>
195
196      <para>
197        The Enlightened Sound Daemon
198      </para>
199
200      <para>
201        <command>esd</command> <option>[options]</option>
202      </para>
203
204      <informaltable frame="all">
205        <tgroup cols="2">
206          <thead>
207            <row><entry>option</entry><entry>purpose</entry></row></thead>
208          <tbody>
209            <row>
210              <entry>-nobeeps</entry>
211              <entry>inhibits the default startup tone sequence</entry>
212            </row>
213            <row>
214              <entry>-d DEVICE</entry>
215              <entry>use audio device DEVICE (esd -h for values)</entry>
216            </row>
217            <row>
218              <entry>-b</entry>
219              <entry>run server in 8 bit sound mode</entry>
220            </row>
221            <row>
222              <entry>-r RATE</entry>
223              <entry>run server at sample rate of RATE</entry>
224            </row>
225            <row>
226              <entry>-as SECS</entry>
227              <entry>free audio device after SECS of inactivity</entry>
228            </row>
229            <row>
230              <entry>-vt</entry>
231              <entry>enable trace diagnostic info (debug builds only)</entry>
232            </row>
233            <row>
234              <entry>-vc</entry>
235              <entry>enable comms diagnostic info (debug builds only)</entry>
236            </row>
237            <row>
238              <entry>-vm</entry>
239              <entry>enable mixer diagnostic info (debug builds only)</entry>
240            </row>
241            <row>
242              <entry>-port port</entry>
243              <entry>accept connections on given port (default=5001)</entry>
244            </row>
245          </tbody>
246        </tgroup>
247      </informaltable>
248
249      <para>
250        In addition, "kill -HUP esd-pid resets ownership of the daemon.
251        The file, &tilde;/.esd-auth, is used for authentication, and is
252        created if needed.
253      </para>
254
255    </sect1>
256
257    <sect1 id="esdctl">
258      <title>esdctl</title>
259
260      <para>
261        controls certain aspects of the sound daemon. 
262      </para>
263
264      <para>
265        <command>esdctl</command> <option>[options]</option>
266      </para>
267
268      <informaltable frame="all">
269        <tgroup cols="2">
270          <thead>
271            <row><entry>commands</entry><entry>purpose</entry></row></thead>
272          <tbody>
273            <row>
274              <entry>lock</entry>
275              <entry>foreign clients may not use the server</entry>
276            </row>
277            <row>
278              <entry>unlock</entry>
279              <entry>foreign clients may use the server</entry>
280            </row>
281            <row>
282              <entry>standby, off</entry>
283              <entry>suspend sound output for other programs</entry>
284            </row>
285            <row>
286              <entry>resume, on</entry>
287              <entry>resume sound output</entry>
288            </row>
289            <row>
290              <entry>cache SAMPLE</entry>
291              <entry>cache sample from file SAMPLE in the server</entry>
292            </row>
293            <row>
294              <entry>getid NAME</entry>
295              <entry>retrieve a sample id from its name</entry>
296            </row>
297            <row>
298              <entry>free NAME</entry>
299              <entry>uncache a sample in the server by NAME</entry>
300            </row>
301            <row>
302              <entry>play NAME</entry>
303              <entry>play a cached sample once</entry>
304            </row>
305            <row>
306              <entry>loop NAME</entry>
307              <entry>play a cached sample in a loop</entry>
308            </row>
309            <row>
310              <entry>stop NAME</entry>
311              <entry>stop a looping sample at end of sample</entry>
312            </row>
313            <row>
314              <entry>serverinfo</entry>
315              <entry>get server info from server</entry>
316            </row>
317            <row>
318              <entry>allinfo</entry>
319              <entry>get player and sample info from server</entry>
320            </row>
321            <row>
322              <entry>panstream ID LEFT RIGHT</entry>
323              <entry>set left and right volume levels for a stream</entry>
324            </row>
325            <row>
326              <entry>pansample ID LEFT RIGHT</entry>
327              <entry>set default left and right volume levels for a sample</entry>
328            </row>
329          </tbody>
330        </tgroup>
331      </informaltable>
332
333      <para>
334        lock - only the "owner" of the daemon can play sounds.  the first key
335        (obtained from &tilde;/.esd-auth) submitted to the daemon identifies
336        the owner.
337      </para>
338
339      <para>
340        unlock - anyone can play sounds through the daemon.
341      </para>
342
343      <para>
344        standby - frees the audio device for use by other programs.  all
345        sounds are ignored until the daemon is resumed.
346      </para>
347
348      <para>
349        resume - brings daemon out of standby mode
350      </para>
351
352      <para>
353        NOTE: more than one option may be listed on the command line
354      </para>
355
356    </sect1>
357
358    <sect1 id="esdcat-esdmon-esdrec">
359      <title>esdcat, esdmon, esdrec</title>
360
361      <para>
362        esdcat plays a raw audio stream through the daemon. esdmon outputs the
363        mixed stream from the daemon. esdrec outputs from the sound device's
364        current input.
365      </para>
366
367      <para>
368        <command>esdcat</command> <option>[options] [file=stdin]</option>
369      </para>
370      <para>
371        <command>esdmon</command> <option>[options] [file=stdout]</option>
372      </para>
373      <para>
374        <command>esdrec</command> <option>[options] [file=stdout]</option>
375      </para>
376
377      <informaltable frame="all">
378        <tgroup cols="2">
379          <thead>
380            <row><entry>option</entry><entry>purpose</entry></row></thead>
381          <tbody>
382            <row>
383              <entry>-s SERVER</entry>
384              <entry>communicate with esound running at SERVER</entry>
385            </row>
386            <row>
387              <entry>-b</entry>
388              <entry>read/write 8 bit sample data</entry>
389            </row>
390            <row>
391              <entry>-m</entry>
392              <entry>read/write mono data</entry>
393            </row>
394            <row>
395              <entry>-r RATE</entry>
396              <entry>use a sampling rate of RATE</entry>
397            </row>
398          </tbody>
399        </tgroup>
400      </informaltable>
401
402      <para>
403        NOTE: options for esdcat, esdmon, and esdrec default to 16 bit
404        (signed), stereo, 44.1kHz
405      </para>
406
407    </sect1>
408
409    <sect1 id="esdsample-esdloop">
410      <title>esdsample, esdloop</title>
411
412      <para>
413        esdsample is test scaffolding for sample cache, play back, and free.
414        esdloop is test scaffolding for sample cache, loop, and free.  These
415        utilities have no practical purpose beyond testing sample
416        functionality.
417      </para>
418
419      <para>
420        <command>esdsample</command> <option>[options] file</option>
421      </para>
422      <para>
423        <command>esdloop</command>   <option>[options] file</option>
424      </para>
425
426      <informaltable frame="all">
427        <tgroup cols="2">
428          <thead>
429            <row><entry>option</entry><entry>purpose</entry></row></thead>
430          <tbody>
431            <row>
432              <entry>-s SERVER</entry>
433              <entry>communicate with esound running at SERVER</entry>
434            </row>
435            <row>
436              <entry>-b</entry>
437              <entry>read/write 8 bit sample data</entry>
438            </row>
439            <row>
440              <entry>-m</entry>
441              <entry>read/write mono data</entry>
442            </row>
443            <row>
444              <entry>-r RATE</entry>
445              <entry>use a sampling rate of RATE</entry>
446            </row>
447          </tbody>
448        </tgroup>
449      </informaltable>
450
451      <para>
452        options:
453        -s server = communicate with esound running at server
454
455        -b = 8 bit unsigned char
456
457        -m = mono
458
459        -r rate = sample rate of rate Hz.
460      </para>
461
462      <para>
463        options for esdsample and esdloop default to 16 bit signed short,
464        stereo, 44.1kHz
465      </para>
466
467    </sect1>
468
469    <sect1 id="environment-variables">
470      <title>Environment Variables</title>
471
472      <para>
473        All client programs (except esdctl) can connect to remote hosts via
474        the <envar>ESPEAKER</envar> environment variable:
475
476        <literallayout>
477          <prompt>bash $ </prompt><userinput>export ESPEAKER=inet.addr.of.host:port</userinput>
478
479          <prompt>tcsh &gt; </prompt><userinput>setenv ESPEAKER inet.addr.of.host:port</userinput>
480        </literallayout>
481
482        The client will connect to EsounD running on the specified host on the
483        specified port.
484      </para>
485
486    </sect1>
487
488  </chapter>
489
490  <!-- ========================================== -->
491
492  <chapter id="miscellaneous">
493    <title>Miscellaneous Information</title>
494
495    <sect1 id="new-features">
496      <title>New Features</title>
497
498      <para>
499        Version 0.2.4
500
501        more bug fixes, mostly works on irix now.
502
503        incompatible changes to client side API.  streams and samples
504        now have names, and you can specify a host in esd_open_sound().
505      </para>
506
507      <para>
508        Version 0.2.3
509
510        bug fixes
511
512      </para>
513
514      <para>
515        Version 0.2.2
516
517        added reference counting to samples, so freeing samples works
518
519        added first cut at drivers for other platforms.  no idea if they work
520
521      </para>
522
523      <para>
524        Version 0.2.1
525
526        the configure style installation now works if you don't already have a
527        previous version installed.  Evil gnu automake &gt;=P
528
529        better handling of "dead" time: should use 0&percnt; cpu if it's not actually
530        doing anything
531      </para>
532
533      <para>
534        Version 0.2
535
536        a configure style installation is now available.
537
538        added network support
539
540        optional /dev/dsp fallback for stream play and record
541
542        other forgotten features and bug fixes
543
544      </para>
545
546    </sect1>
547
548    <sect1 id="deficiencies">
549      <title>Known Problems, Deficiencies, and Possible Workarounds</title>
550
551      <para>
552        "unsupported sound format: 33" - This happens on cards that don't
553        support playback of 16bit, stereo, 44.1kHz sound.  Try running in 8
554        bit mode (esd -b), or at a lower playback rate (esd -r 22050), or both
555        (esd -b -r 22050)
556      </para>
557
558      <para>
559        "unable to connect to server at port 35091" - This means the client
560        cannot contact the server.  Make sure you have SysV IPC enabled in
561        your kernel
562      </para>
563
564      <para>
565        Documentation of the API is in sad shape, but for now it's still in
566        development (i.e. subject to change).  See the source of the sample
567        command line driver utilities (esd?*) for usage.
568      </para>
569
570      <para>
571        Any other pressing issues, problems, or patches may be directed to
572        ericmit@ix.netcom.com.  Please mention EsounD and the version number
573        (date for cvs checkouts) in the subject line.
574      </para>
575
576    </sect1>
577
578    <sect1 id="planned-development">
579      <title>Planned Development and Top Suggestions So Far...</title>
580
581      <para>
582        Porting of more sound playing applications.  For sound programs that
583        send their output to /dev/dsp, this is usually a trivial process.
584        Anyone willing to lend a hand in this effort will be duly appreciated.
585      </para>
586
587    </sect1>
588
589    <sect1 id="feature-additions">
590      <title>Planned Feature Additions</title>
591
592      <para>
593        See the TODO file for unorganized thoughts about where to go from
594        here.
595      </para>
596
597    </sect1>
598
599  </chapter>
600
601  <!-- ========================================== -->
602
603  <chapter id="supported-programs">
604    <title>Enlightened Sound Daemon Aware Audio Programs</title>
605
606    <sect1 id="emusic">
607      <title>eMusic</title>
608
609      <para>
610        <ulink url="http://www.icom.net/~smelecat/emp3/index.htm"> eMusic</ulink>
611        is an Enlightenend music player, which is capableof playing MP3, MOD,
612        WAV, AU, and CD files.  All graphic elements of the program are fully
613        customizable.
614      </para>
615
616    </sect1>
617
618    <sect1 id="xmp">
619      <title>The Extended Module Player</title>
620
621      <para>
622        <ulink url="http://xmp.home.ml.org"> Extended Mudule Player</ulink>
623        is a MOD tracker, which also has an Xwindows interface.
624      </para>
625
626    </sect1>
627
628    <sect1 id="mpg123">
629      <title>mpg123</title>
630
631      <para>
632        <ulink url="http://www.netcom.com/~ericmit/mpg123_esd.tgz">
633          mpg123</ulink> is a command line program which plays mpeg layer 3
634        audio files.
635      </para>
636
637    </sect1>
638
639  </chapter>
640
641  <!-- ========================================== -->
642
643  <chapter id="esound-api">
644    <title>The EsounD API</title>
645
646    <sect1 id="put-something-useful-here">
647      <title>Need to put something useful in here.</title>
648
649      <para>
650        Better yet, extract it from the source files.
651      </para>
652
653    </sect1>
654
655  </chapter>
656
657  <!-- ========================================== -->
658
659  <chapter id="design-docs">
660    <title>Rough Design Docs</title>
661
662    <sect1 id="covered-formats">
663      <title>Covered Formats</title>
664
665      <para>
666        Digital Waveforms
667      </para>
668
669      <para>
670        No MIDI, No MOD
671      </para>
672
673    </sect1>
674
675    <sect1 id="organization">
676      <title>Client/Server Organization</title>
677
678      <para>
679        Server does the dirty work for byte swapping, scaling, etc.
680      </para>
681
682    </sect1>
683
684    <sect1 id="signal-path">
685      <title>The Audio Signal Path</title>
686
687      <para>
688        The audio signal travels the following path from source to speaker.
689        Samples and streams are read via players
690      </para>
691
692    </sect1>
693
694    <sect1 id="authentication">
695      <title>Authentication Model</title>
696
697      <para>
698        Your .esd_auth file
699      </para>
700
701    </sect1>
702
703    <sect1 id="player-type">
704      <title>The Player Type</title>
705
706      <para>
707        read_player()
708      </para>
709
710    </sect1>
711
712    <sect1 id="anything-else">
713      <title>Anything Else?</title>
714
715      <para>
716        Anything Else?
717      </para>
718
719    </sect1>
720
721  </chapter>
722
723  <!-- ========================================== -->
724
725  <reference>
726
727    <title>EsounD Command Reference</title>
728
729    <refentry id="refentry-esd">
730
731      <refmeta>
732        <refentrytitle>esd</refentrytitle>
733        <manvolnum>1</manvolnum>
734      </refmeta>
735
736      <refnamediv>
737        <refname>esd</refname>
738        <refpurpose>The Enlightened Sound Daemon</refpurpose>
739        <indexterm id="index-esd"><primary>esd</primary></indexterm>
740      </refnamediv>
741
742      <refsynopsisdiv>
743        <refsynopsisdivinfo>
744          <date>August 26, 1999</date>
745        </refsynopsisdivinfo>
746
747        <synopsis>
748          esd [options]
749        </synopsis>
750
751        <refsect2 id="rs2-options">
752          <refsect2info>
753            <date>6 march 1996</date>
754          </refsect2info>
755          <title>options</title>
756          <variablelist>
757            <varlistentry>
758              <term><replaceable class="parameter">-nobeeps</replaceable></term>
759              <listitem>
760                <para>
761                  Specifies an array of child widgets.  Each child must be
762                  of class RectObj or any subclass thereof.
763                </para>
764              </listitem>
765            </varlistentry>
766            <varlistentry>
767              <term><replaceable class="parameter">-as [SECS]</replaceable></term>
768              <listitem>
769                <para>
770                  Specifies the number of elements in <replaceable
771            class="parameter">children</replaceable>.
772                </para>
773              </listitem>
774            </varlistentry>
775          </variablelist>
776        </refsect2>
777      </refsynopsisdiv>
778
779      <refsect1 id="r1-1007-unmanagechildren-2">
780        <title>usage</title>
781        <para>
782          unmanaging widgets is the usual method for temporarily making
783          them invisible.  they can be re-managed with
784          <function>xtmanagechildren()</function>.
785        </para>
786      </refsect1>
787    </refentry>
788
789  </reference>
790
791  <!-- --------------------------------------------------------------------- -->
792
793  <appendix id="Remaining-details">
794    <title>Remaining details</title>
795
796    <para>
797      Although this booklet is quite complete, here I will mention some
798      details I never got to.
799    </para>
800
801    <sect1 id="Use-of-the-word-dude">
802      <title>Use of the word dude</title>
803
804      <para>
805        Here's an example of how to say <emphasis>dude</emphasis>: DUDE.
806
807      </para>
808
809    </sect1>
810
811  </appendix>
812
813  <!-- --------------------------------------------------------------------- -->
814
815</book>
Note: See TracBrowser for help on using the repository browser.