nas-1.9.4/0000755002344200017510000000000012224573334010454 5ustar jonjonnas-1.9.4/doc/0000755002344200017510000000000012203472161011212 5ustar jonjonnas-1.9.4/doc/xcon94paper.ps0000644002344200017510000024317012136617241013746 0ustar jonjon%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % $NCDId: @(#)xcon94paper.ps,v 1.2 1994/06/03 18:23:40 greg Exp $ % % FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0 % Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation. % All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor systemdict /colorimage known systemdict /currentcolortransfer known or def % Uncomment this line to force b&w on color printer % /FMPrintInColor false def /FrameDict 195 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath x1 y1 rad add moveto x1 y2 x2 y2 rad arcto x2 y2 x2 y1 rad arcto x2 y1 x1 y1 rad arcto x1 y1 x1 y2 rad arcto closepath 16 {pop} repeat } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 19 FMDOCUMENT 0 0 /Helvetica-Bold FMFONTDEFINE 1 0 /Times-Italic FMFONTDEFINE 2 0 /Courier FMFONTDEFINE 3 0 /Times-Roman FMFONTDEFINE 4 0 /Times-BoldItalic FMFONTDEFINE 5 0 /Helvetica FMFONTDEFINE 6 0 /Courier-Bold FMFONTDEFINE 7 0 /Helvetica-BoldOblique FMFONTDEFINE 8 1 /Symbol FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 .1 FMFILL 2 .3 FMFILL 3 .5 FMFILL 4 .7 FMFILL 5 .9 FMFILL 6 .97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 .9 FMFILL 18 .7 FMFILL 19 .5 FMFILL 20 .3 FMFILL 21 .1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "14" 14 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (14) 566.01 28 T 71.5 87.15 540.83 719.35 R 7 X V 1 18 Q 0 X (References) 71.5 707.35 T 2 12 Q ([Angebranndt91]) 71.5 685.35 T 3 F 0.3 0.44 (Susan Angebranndt et al., \322Integrating Audio and Telephony in a) 198 685.35 B -0.26 (Distributed Workstation Environment,\323) 198 670.85 P 1 F -0.26 (USENIX Proceedings) 390.45 670.85 P 3 F -0.26 (, Summer) 494.45 670.85 P (1991.) 198 656.35 T 2 F ([Billman92]) 71.5 635.85 T 3 F 0.3 0.23 (Richard Billman et al., \322Workstation Audio in the X Environment,\323) 198 635.85 B 1 F (The X Resource) 198 621.35 T 3 F (, Issue 4, O\325Reilly and Associates, 1992.) 273.95 621.35 T 2 F ([Glauert93]) 71.5 600.85 T 3 F 0.3 0.16 (Tim Glauert et al.,) 198 600.85 B 1 F 0.3 0.16 (X Synchronization Extension) 293.61 600.85 B 3 F 0.3 0.16 (, X Consortium draft) 437.02 600.85 B (standard, 1993.) 198 586.35 T 2 F ([Levergood93]) 71.5 565.85 T 3 F 0.3 0.49 (Thomas M. Levergood et al.,) 198 565.85 B 1 F 0.3 0.49 (AudioFile: A Network-Transparent) 355.8 565.85 B 0.3 0.73 (System for Distributed Audio Applications) 198 551.35 B 3 F 0.3 0.73 (, Digital Equipment) 432.21 551.35 B (Corporation Cambridge Research Laboratory, 1993.) 198 536.85 T 2 F ([Scheifler92]) 71.5 516.35 T 3 F -0.29 (Robert W. Scheifler and James Gettys,) 198 516.35 P 1 F -0.29 (X Window System) 385.43 516.35 P 3 F -0.29 (, Digital Press,) 470.79 516.35 P (1992.) 198 501.85 T 2 F ([Shelley93]) 71.5 481.35 T 3 F 0.3 0.32 (Robert N. C. Shelley et al.,) 198 481.35 B 1 F 0.3 0.32 (X Image Extension Protocol Reference) 341.78 481.35 B 0.3 0.07 (Manual, Version 4.12) 198 466.85 B 3 F 0.3 0.07 (, X Consortium Draft Standard, Special Issue C,) 304.52 466.85 B (O\325Reilly & Associates, Inc., January 1993.) 198 452.35 T FMENDPAGE %%EndPage: "14" 13 %%Page: "13" 13 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (13) 566.01 28 T 72 72 540.5 720.18 R 7 X V 1 14 Q 0 X (Example Programs) 72 710.85 T 3 12 Q 0.26 (The sample implementation of NetworkAudio contains a variety of example programs, including) 72 691.18 P -0.07 (a sound file \322chooser,\323 an audio data editor, a translator for converting among the various file and) 72 676.68 P 0.3 0.07 (data formats, a telephone dial-tone generator and recognizer, and a simple) 72 662.18 B 4 F 0.3 0.07 (audiotool) 438.46 662.18 B 3 F 0.3 0.07 (-like utility) 485.73 662.18 B 0.3 0.08 (for use with OpenWindows Deskset applications. A growing number of games and commercial) 72 647.68 B (software are being shipped with NetworkAudio support built in.) 72 633.18 T 1 18 Q (Future Directions) 72 590.68 T 3 12 Q 0.3 0.41 (Although NetworkAudio is rapidly gaining wide-spread use for simple-to-moderate audio) 72 568.68 B 0.3 0.01 (applications, it still needs additional support for tight synchronization with graphics for high-end) 72 554.18 B -0.2 (video conferencing. Some mixture of the model used by AudioFile and the primitives provided by) 72 539.68 P 0.3 0.7 (the proposed X Synchronization extension) 72 525.18 B 2 F 0.72 0.7 ([Glauert93]) 309.06 525.18 B 3 F 0.3 0.7 ( will probably be added to) 395.92 525.18 B (NetworkAudio shortly.) 72 510.68 T -0.21 (The Network Audio System was designed to be extensible at several levels. New data formats and) 72 490.18 P 0.3 0 (device types can be added to the server without requiring changes to applications; similarly, new) 72 475.68 B 0.3 0.01 (file formats can be added to the library transparently. As audio becomes more pervasive, both of) 72 461.18 B 0.3 0.01 (these elements will be tested by the addition of support for compressed data streams and MPEG.) 72 446.68 B 0.3 0.18 (Finally, virtual devices implemented in software, such as the radios mentioned before, should) 72 432.18 B (provide interesting avenues of exploration.) 72 417.68 T 1 18 Q (Summary) 72 375.18 T 3 12 Q 0.3 0.07 (NetworkAudio provides a powerful, yet simple, mechanism for transferring audio data between) 72 353.18 B 0.3 0.08 (applications and desktop X terminals, PCs, and workstations. Applications specify how various) 72 338.68 B 0.3 0.18 (inputs and outputs should be hooked together; the server automatically routes data among the) 72 324.18 B (components, converting sample rates and data formats as needed.) 72 309.68 T 0.3 0.05 (Sounds may be stored in the server and reused multiple times or can be sent directly to attached) 72 289.18 B 0.3 0.1 (output devices such as speakers. Applications may dynamically adjust the volume at which the) 72 274.68 B 0.3 0.6 (sounds are heard. Input devices such as microphones can be used to record audio data.) 72 260.18 B 0.3 0.01 (Applications can read the data back over the network, store the results in the server for later use,) 72 245.68 B (or even redirect it to an output device.) 72 231.18 T -0.11 (With the Network Audio System, X developers can combine the audio support needed for today\325s) 72 210.68 P (applications with the power and flexibility of networked computing needed for tomorrow\325s.) 72 196.18 T 1 18 Q (Where To Get Source) 72 153.68 T 3 12 Q 0.3 0.41 (Source code for the sample implementation of the Network Audio System is available for) 72 131.68 B -0.02 (anonymous ftp from) 72 117.18 P 1 F -0.02 (ftp.x.org) 172.89 117.18 P 3 F -0.02 (in the directory) 216.51 117.18 P 1 F -0.02 (/contrib/audio/nas/) 292.74 117.18 P 3 F -0.02 (. It uses the standard unrestrictive) 379.37 117.18 P 0.3 0.35 (copyright used by the X Consortium; vendors and application developers are welcome and) 72 102.68 B (encouraged to incorporate it into products.) 72 88.18 T FMENDPAGE %%EndPage: "13" 12 %%Page: "12" 12 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (12) 566.01 28 T 71.5 63 540.83 719.35 R 7 X V 3 12 Q 0 X 0.3 0.17 (The actual generation of audio data is done by an interrupt handler that is called from either a) 71.5 711.35 B 0.3 0.04 (hardware interrupt or an interval timer, depending upon the implementation. Multiple values are) 71.5 696.85 B 0.3 0.23 (computed at a time to reduce the frequency of interrupts and increase the performance of the) 71.5 682.35 B (system. Figure 10 summarizes the stages through which data moves:) 71.5 667.85 T 0.3 0.27 (When data is read from an input, it is automatically converted into the server\325s internal data) 71.5 463.33 B 0.3 0.21 (format and up-sampled to match the highest sample rate used by any of the active flows. The) 71.5 448.83 B 0.07 (computed output values are then down-sampled and converted to match the sample rates and data) 71.5 434.33 P (formats requested by the output.) 71.5 419.83 T 1 14 Q (Library) 71.5 387 T 3 12 Q 0.3 0.13 (The NetworkAudio library contains two pieces. At the lowest level is a collection of \322protocol) 71.5 367.33 B -0.07 (wrapper\323 routines which are used to communicate with the server. This layer is equivalent to Xlib) 71.5 352.83 P -0.29 (in that it tends only be used by higher level \322toolkits\323 or sophisticated applications. One difference) 71.5 338.33 P 0.3 0.12 (between Xlib and the NetworkAudio library is that the low-level routines in NetworkAudio all) 71.5 323.83 B 0.3 0.23 (have an argument which indicates whether to run asynchronously \050which is faster, but which) 71.5 309.33 B 0.3 0.33 (requires error handlers to deal with problems\051 or synchronously \050in which case any error is) 71.5 294.83 B -0.26 (returned to the caller immediately\051. This can greatly simplify error checking within an application.) 71.5 280.33 P 0.3 0.13 (In addition to the low level routines, a set of high-level utilities are provided to make common) 71.5 259.83 B 0 (NetworkAudio tasks quick and easy. In particular, simple functions are provided for reading from) 71.5 245.33 P 0.3 0.08 (and writing to audio files, storing sound buckets in the server, playing stored sounds, managing) 71.5 230.83 B 0.3 0.12 (audio events, and interacting with X programs \050NetworkAudio can hook right into an Xt/Motif) 71.5 216.33 B (main loop\051.) 71.5 201.83 T 0.3 0.16 (One of the especially nice features of the NetworkAudio library is its ability to read and write) 71.5 181.33 B -0.29 (audio data in a variety of file formats transparently to the application. This allows programs to mix) 71.5 166.83 P (and match sounds created from most of the other major audio platforms:) 71.5 152.33 T 3 11 Q (\245) 89.5 131.83 T 4 12 Q (.snd) 107.5 131.83 T 3 F (,) 127.83 131.83 T 4 F (.au) 133.83 131.83 T 3 F ( \320 Sun and Next hosts.) 149.49 131.83 T 3 11 Q (\245) 89.5 111.83 T 4 12 Q (.voc) 107.5 111.83 T 3 F ( \320 SoundBlaster cards on IBM PCs and compatibles.) 127.14 111.83 T 3 11 Q (\245) 89.5 91.83 T 4 12 Q (.wav) 107.5 91.83 T 3 F ( \320 MS-DOS and Microsoft W) 129.82 91.83 T (indows.) 271.58 91.83 T 3 11 Q (\245) 89.5 71.83 T 4 12 Q (.aif) 107.5 71.83 T (f) 123.61 71.83 T 3 F ( \320 Apple and SGI computers.) 127.6 71.83 T 1 F (Figure 10: Data Within A Flow) 228.21 501.83 T 71.5 639.72 71.5 519.96 2 L V 0.25 H 0 Z N 539.5 639.72 539.5 519.96 2 L V N 71.38 639.85 539.62 639.85 2 L V N 71.38 519.83 539.62 519.83 2 L V N 71.5 519.83 539.5 639.85 C 75.76 523.83 535.24 629.85 C 75.76 523.83 535.24 629.85 R 7 X 0 K V 128.43 593.35 128.43 557.35 168.03 557.35 168.03 539.35 200.43 575.35 168.03 611.35 168.03 593.35 7 Y 3 X V 200.43 593.35 200.43 557.35 240.03 557.35 240.03 539.35 272.43 575.35 240.03 611.35 240.03 593.35 7 Y V 272.43 593.35 272.43 557.35 312.03 557.35 312.03 539.35 344.43 575.35 312.03 611.35 312.03 593.35 7 Y V 344.43 593.35 344.43 557.35 384.03 557.35 384.03 539.35 416.43 575.35 384.03 611.35 384.03 593.35 7 Y V 416.43 593.35 416.43 557.35 456.03 557.35 456.03 539.35 488.43 575.35 456.03 611.35 456.03 593.35 7 Y V 125.09 599.02 125.09 563.02 164.69 563.02 164.69 545.02 197.09 581.02 164.69 617.02 164.69 599.02 7 Y 6 X V 1 H 2 Z 0 X N 0 10 Q (Convert) 142.21 583.47 T (Format) 142.21 573.47 T 197.09 599.02 197.09 563.02 236.69 563.02 236.69 545.02 269.09 581.02 236.69 617.02 236.69 599.02 7 Y 5 X V 0 X N (Upsample) 209.21 577.37 T 269.09 599.02 269.09 563.02 308.69 563.02 308.69 545.02 341.09 581.02 308.69 617.02 308.69 599.02 7 Y 4 X V 0 X N (Multiply) 286.21 583.47 T (Add) 286.21 573.47 T 341.09 599.02 341.09 563.02 380.69 563.02 380.69 545.02 413.09 581.02 380.69 617.02 380.69 599.02 7 Y 3 X V 0 X N 7 X 1 K (Downsample) 346.27 577.37 T 413.09 599.02 413.09 563.02 452.69 563.02 452.69 545.02 485.09 581.02 452.69 617.02 452.69 599.02 7 Y 2 X 0 K V 0 X N 7 X 1 K (Convert) 430.21 583.47 T (Format) 430.21 573.47 T 96.22 587.91 103.83 580.3 90.51 566.99 82.9 574.6 4 Y 0 X 0 K V 2 H 0 Z N 3 X 90 450 11.53 11.53 107.56 591.12 G 0 X 90 450 11.53 11.53 107.56 591.12 A 94.22 580.59 96.5 578.31 92.51 574.31 90.23 576.6 4 Y 7 X V 0 X N 5 6 Q (Microphone) 80.93 555.03 T 86.26 577.72 M 88.83 583.16 90.25 590.25 84.75 587.75 D 79.79 585.51 80.98 593.2 84.5 598 D N 491.28 558.43 520.99 605.96 R N 497.22 570.32 515.04 600.02 R 2 X V 0 X N 491.28 605.96 497.22 611.9 2 L N 520.99 605.96 526.93 611.9 2 L N 520.99 558.43 526.93 564.37 2 L N 497.22 611.9 526.93 611.9 2 L N 526.93 611.9 526.93 564.37 2 L N (Speaker) 494.97 561.64 T 507.01 557.71 M 506.6 549.03 498.23 544.46 498.78 549.59 D 499.71 558.83 491.39 554.1 490.93 550.88 D N 71.5 519.83 539.5 639.85 C 0 0 612 792 C FMENDPAGE %%EndPage: "12" 11 %%Page: "11" 11 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (11) 566.01 28 T 72 72 540.5 720.18 R 7 X V 1 14 Q 0 X (Flows) 72 710.85 T 3 12 Q 0.3 0.34 (One of the more distinguishing features of NetworkAudio is the way in which applications) 72 691.18 B 0.3 0.01 (specify the movement of data from inputs, through operators, to outputs using tree-structured set) 72 676.68 B 0.3 0.03 (of \322wiring instructions\323 known as) 72 662.18 B 4 F 0.3 0.03 (flows) 240.08 662.18 B 3 F 0.3 0.03 (. The application transmits this information to the server) 266.22 662.18 B 0.3 0 (in the form of a list of elements, each representing one node in the tree. Each node lists the other) 72 647.68 B 0.3 0.08 (elements from which it should receive data. This \322backwards chaining\323 is used by the server to) 72 633.18 B (reconstruct the original tree.) 72 618.68 T 0.15 (For example, Figure 9 shows a flow that could be used to dub in voice on top of a CD. The voice) 72 598.18 P -0.17 (data is converted from mono to stereo and then is merged with the CD data. The result is then sent) 72 583.68 P (to a stereo speaker for playing.) 72 569.18 T 0.3 0.04 (For each output in the flow, the server works backwards through the mathematical operations in) 72 333.02 B -0.05 (the flow to compute the amount that each input value will contribute to that output. The result is a) 72 318.52 P 0.3 0.2 (multiplier and offset constant for each track of the contributing inputs. In the example shown) 72 304.02 B (above, each track of the speaker output can be represented by the formula:) 72 289.52 T 2 F (\050\0500.3 *) 191.11 269.02 T 6 F (CD) 248.68 269.02 T 2 F (\051 + \0500.8 *) 263.07 269.02 T 6 F (MIC) 342.23 269.02 T 2 F (\051\051 * 0.5) 363.82 269.02 T 3 F (which, when simplified, yields:) 72 248.52 T 2 F (\0500.15 *) 216.3 228.02 T 6 F (CD\051) 273.87 228.02 T 2 F ( + \0500.4 *) 295.46 228.02 T 6 F (MIC) 367.42 228.02 T 2 F (\051) 389 228.02 T 3 F 0.3 0.2 (A nice property of this approach is that it is works for complex flows as well as simple ones,) 72 207.52 B (allowing sophisticated applications to run as efficiently as simple ones.) 72 193.02 T 1 14 Q (Master Flow) 72 160.18 T 3 12 Q -0.25 (A key design goal of NetworkAudio was to allow multiple applications to operate simultaneously.) 72 140.52 P 0.3 0.31 (It was unacceptable to require that only one flow be given access to each device at any one) 72 126.02 B 0.2 (moment. Instead, all active flows are merged together into what is called the \322master flow.\323 If an) 72 111.52 P 0.3 0.09 (output is used by more than one flow, all of the values from the individual flows are added \050or,) 72 97.02 B (optionally, averaged to prevent clipping\051 together.) 72 82.52 T 1 F (Figure 9: Dubbing Voice on Top of Stereo CD) 192.9 371.52 T 72 541.06 72 389.64 2 L V 0.25 H 0 Z N 540 541.06 540 389.64 2 L V N 71.88 541.18 540.12 541.18 2 L V N 71.88 389.52 540.12 389.52 2 L V N 72 389.52 540 541.18 C 103.92 393.52 508.08 531.18 C 103.92 393.52 508.08 531.18 R 7 X 0 K V 460.09 454.93 487.09 498.13 R 2 H 0 Z 0 X N 465.49 465.73 481.69 492.73 R 2 X V 0 X N 460.09 498.13 465.49 503.53 2 L N 487.09 498.13 492.49 503.53 2 L N 487.09 454.93 492.49 460.33 2 L N 465.49 503.53 492.49 503.53 2 L N 492.49 503.53 492.49 460.33 2 L N 5 6 Q (Speaker) 462.43 457.7 T 474.39 454.27 M 474.02 446.39 466.41 442.24 466.9 446.89 D 467.76 455.3 460.19 451 459.77 448.07 D N 5 X 90 450 18 18 135.17 508.6 G 2 Z 0 X 90 450 18 18 135.17 508.6 A 7 X 90 450 2.25 2.25 135.17 508.6 G 0 X 90 450 2.25 2.25 135.17 508.6 A (CD) 130.84 496.93 T 133.1 456.35 139.04 450.41 128.65 440.02 122.71 445.96 4 Y V 0 Z N 3 X 90 450 9 9 141.96 458.85 G 0 X 90 450 9 9 141.96 458.85 A 131.54 450.63 133.32 448.85 130.21 445.73 128.43 447.52 4 Y 7 X V 0 X N (Microphone) 117.73 430.35 T 125.33 448.39 M 127.33 452.64 125.13 456.72 120.83 454.77 D 116.96 453.02 115.83 457.77 118.58 461.52 D N 311.06 514.55 318.75 512.35 311.06 510.14 311.86 512.35 4 Y V 214 512.35 311.86 512.35 2 L 0.5 H 2 Z N 311.06 507.05 318.75 504.85 311.06 502.64 311.86 504.85 4 Y V 214 504.85 311.86 504.85 2 L N 319.25 434.43 355.08 521.93 R 2 H N 399.33 494.43 431.83 494.43 431.83 461.93 399.33 461.93 4 Y N 0 10 Q (* 0.5) 405.3 474.54 T (+) 334.25 474.54 T 241.42 470.48 276.42 470.48 276.41 424.53 241.42 424.53 4 Y N 311.06 453.72 318.75 451.52 311.06 449.31 311.86 451.52 4 Y V 277.33 451.52 311.86 451.52 2 L 0.5 H N 311.06 446.22 318.75 444.02 311.06 441.81 311.86 444.02 4 Y V 277.33 444.02 311.86 444.02 2 L N 173.98 449.71 181.67 447.5 173.98 445.3 174.78 447.5 4 Y V 154.17 447.5 174.78 447.5 2 L N 180.58 463.75 213.08 463.75 213.08 431.25 180.58 431.25 4 Y 2 H N (* 0.8) 186.55 443.86 T 451.89 484.14 459.58 481.93 451.89 479.73 452.7 481.93 4 Y V 431.5 481.93 452.7 481.93 2 L 0.5 H N 451.89 476.64 459.58 474.43 451.89 472.23 452.7 474.43 4 Y V 431.5 474.43 452.7 474.43 2 L N 389.39 484.14 397.08 481.93 389.39 479.73 390.2 481.93 4 Y V 355.67 481.93 390.2 481.93 2 L N 389.39 476.64 397.08 474.43 389.39 472.23 390.2 474.43 4 Y V 355.67 474.43 390.2 474.43 2 L N 233.98 449.71 241.67 447.5 233.98 445.3 234.78 447.5 4 Y V 214.17 447.5 234.78 447.5 2 L N 174.39 514.55 182.08 512.35 174.39 510.14 175.2 512.35 4 Y V 154 512.35 175.2 512.35 2 L N 174.39 507.05 182.08 504.85 174.39 502.64 175.2 504.85 4 Y V 154 504.85 175.2 504.85 2 L N 182.25 524.85 214.75 524.85 214.75 492.35 182.25 492.35 4 Y 2 H N (* 0.3) 188.22 504.95 T 276.02 447.54 M 259.52 447.63 262.18 449.13 260.81 451.95 D 259.31 455.09 251.39 454.62 242.6 454.31 D N 276.02 447.44 M 259.52 447.34 262.18 445.84 260.81 443.02 D 259.31 439.88 251.39 440.35 242.6 440.67 D N 275.61 447.41 M 260.11 446.91 261.39 450.33 260.02 456.49 D 258.52 463.34 250.61 462.31 241.81 461.63 D N 275.61 447.59 M 260.11 448.09 261.39 444.68 260.02 438.52 D 258.52 431.66 250.61 432.69 241.81 433.37 D N 233.59 439.2 241.5 438.02 234.16 434.83 234.67 437.12 4 Y V 226 447.52 M 226 440.88 230.38 437.86 234.68 437.12 D 0.5 H 0 Z N 5 6 Q (Inputs) 125.23 407.02 T (Input V) 179.33 407.02 T (olume) 198.01 407.02 T (Mono to Stereo) 238.42 407.02 T (Merge) 328.67 407.02 T (Output V) 395.75 407.02 T (olume) 419.09 407.02 T (Output) 467.13 407.02 T 264.25 447.5 241.92 447.5 2 L 2 H 2 Z N 72 389.52 540 541.18 C 0 0 612 792 C FMENDPAGE %%EndPage: "11" 10 %%Page: "10" 10 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (10) 566.01 28 T 71.5 72 540.83 719.35 R 7 X V 1 18 Q 0 X (Implementation) 71.5 707.35 T 3 12 Q 0.3 0.41 (Like X, the Network Audio System consists of a server which drives the hardware and an) 71.5 685.35 B (programming interface library against which client applications are linked \050see Figure 8\051.) 71.5 670.85 T 1 14 Q (Server) 71.5 325.17 T 3 12 Q 0.13 (The NetworkAudio server consists of a high-level, device-independent portion \050) 71.5 305.5 P 1 F 0.13 (diA) 457.04 305.5 P 3 F 0.13 ( and) 473.7 305.5 P 1 F 0.13 (os) 497.28 305.5 P 3 F 0.13 (\051 and a) 507.94 305.5 P 0.3 0.18 (low-level, device-dependent portion \050) 71.5 291 B 1 F 0.3 0.18 (ddA) 259.73 291 B 3 F 0.3 0.18 (\051. The portable) 279.61 291 B 1 F 0.3 0.18 (diA) 357.39 291 B 3 F 0.3 0.18 ( code handles parsing of the wire) 374.6 291 B 0.3 0.07 (protocol, allocation and management of resources, conversion of data formats and sample rates,) 71.5 276.5 B 0.3 0.03 (generation of tones from virtual devices implemented in software, and compilation of audio data) 71.5 262 B (Flows.) 71.5 247.5 T 0.3 0.03 (The) 71.5 227 B 1 F 0.3 0.03 (ddA) 93.56 227 B 3 F 0.3 0.03 ( code is made up of drivers for the particular devices to be controlled by the server. It is) 112.96 227 B (actually quite small, consisting of interfaces for performing the following operations:) 71.5 212.5 T 3 11 Q (\245) 89.5 192 T 3 12 Q (Initializing the various devices) 107.5 192 T 3 11 Q (\245) 89.5 172 T 3 12 Q (Setting device attributes such as gain, line mode, and sample rate.) 107.5 172 T 3 11 Q (\245) 89.5 152 T 3 12 Q (Enabling and disabling hardware interrupts.) 107.5 152 T 3 11 Q (\245) 89.5 132 T 3 12 Q (Reading from and writing to hardware.) 107.5 132 T -0.15 (Several) 71.5 112 P 1 F -0.15 (ddA) 110.32 112 P 3 F -0.15 ( layers have been written, ranging in complexity from direct hardware interfaces \050) 129.64 112 P 1 F -0.15 (e.g.) 520.52 112 P 3 F -0.15 (,) 537.84 112 P 0.3 0.06 (simple FIFO-driven devices\051 to software-only versions using vendor-supplied interface libraries) 71.5 97.5 B (and device drivers. New implementations seem to take between two days and two weeks to write.) 71.5 83 T 1 F (Figure 8: NetworkAudio Architecture Is Similar To X) 175.57 365 T 71.5 642.72 71.5 383.12 2 L V 0.25 H 0 Z N 539.5 642.72 539.5 383.12 2 L V N 71.38 642.85 539.62 642.85 2 L V N 71.38 383 539.62 383 2 L V N 71.5 383 539.5 642.85 C 78.82 387 532.18 632.85 C 78.82 387 532.18 632.85 R 7 X 0 K V 231.82 515.85 393.82 605.85 R 3 X V 231.87 520.89 389.53 605.56 R 2 X V 128.58 421.02 290.58 475.02 R 3 X V 128.82 425.14 286.04 474.64 R 2 X V 222.82 525.23 384.82 615.23 R 7 X V 2 H 2 Z 0 X N 119.58 430.02 281.58 466.02 R 5 X V 0.5 H 0 X N 119.58 466.02 245.58 484.02 R 5 X V 0 X N 245.58 466.02 281.58 484.02 R 5 X V 0 X N 0 10 Q (os) 257.75 471.92 T (diA) 174.53 471.92 T (ddA) 190.87 443.28 T 119.58 430.02 281.58 484.02 R 2 H N 7 F (Application) 278.29 621.11 T 222.82 579.23 276.82 579.23 276.82 552.23 303.82 552.23 303.82 525.23 222.82 525.23 6 Y 5 X V 0.5 H 0 X N 0 F (NetworkAudio) 231.13 539.26 T 384.82 606.23 357.82 606.23 357.82 579.23 330.82 579.23 330.82 552.23 303.82 552.23 303.82 525.23 384.82 525.23 8 Y 7 X V 0 X N (X API) 332.95 535.09 T 95.41 505.11 515.59 505.11 2 L 2 H 4 X N 265 524.4 265 485.81 2 L N 338.5 524.4 338.5 485.81 2 L N 7 F 0 X (NetworkAudio Server) 149.77 488.9 T (Network) 93.49 509.42 T 222.82 525.23 384.82 615.23 R N 329.42 421.02 491.42 475.02 R 3 X V 329.71 424.93 486.88 474.85 R 2 X V 320.42 430.02 482.42 466.02 R 7 X V 0.5 H 0 X N 356.42 466.02 482.42 484.02 R 7 X V 0 X N 320.42 466.02 356.42 484.02 R 7 X V 0 X N 0 F (os) 332.58 471.92 T (diX) 411.64 471.92 T (ddX) 391.98 443.28 T 320.42 430.02 482.42 484.02 R 2 H N 7 F (X Server) 381.14 488.9 T 0 F (API) 256.67 529.26 T 71.5 383 539.5 642.85 C 0 0 612 792 C FMENDPAGE %%EndPage: "10" 9 %%Page: "9" 9 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (9) 571 28 T 72 72 540.5 720.18 R 7 X V 1 14 Q 0 X (Storing Data In The Server) 72 710.85 T 3 12 Q 0.3 0.16 (Applications that use certain sounds more than once can save time and network bandwidth by) 72 691.18 B 0.3 0.05 (storing the data in the server in objects called) 72 676.68 B 4 F 0.3 0.05 (buckets) 297.1 676.68 B 3 F 0.3 0.05 (. Such data can then be used repeatedly as) 334.73 676.68 B 0.3 0.36 (input to other flows without have to transfer it across the network again. This technique is) 72 662.18 B (commonly used in applications that use lots of audible cues to draw the user\325s attention.) 72 647.68 T 0.3 0.06 (Buckets can be shared among all applications. This allows a control program, such as a desktop) 72 627.18 B 0.3 0.18 (manager, to store commonly-used sounds for cooperating applications to all use. Some server) 72 612.68 B (implementations even build in prerecorded sounds to save applications start-up time.) 72 598.18 T 1 14 Q (Virtual Input Devices) 72 565.35 T 3 12 Q 0.3 0.19 (As a convenience to the application, several types of simulated input devices are provided by) 72 545.68 B 0.1 (NetworkAudio. A variety of built-in) 72 531.18 P 4 F 0.1 ( wave forms) 246.62 531.18 P 3 F 0.1 ( \050see Figure 7\051 can used to generate simple tones) 306.11 531.18 P 0.3 0.13 (\050whose frequencies can be varied dynamically\051. These have been used to implement telephone) 72 516.68 B (dialers as well as fairly sophisticated sound effects.) 72 502.18 T 0.3 0.16 (Future implementations will also provide) 72 194.83 B 4 F 0.3 0.16 (radio) 280.89 194.83 B 3 F 0.3 0.16 ( devices that read from or write to the network) 307.68 194.83 B 0.3 0.2 (directly. When used with a datagram protocol, these will allow true, efficient broadcasting of) 72 180.33 B -0.12 (audio to multiple desktops from a single source. Additionally, they could provide direct server-to-) 72 165.83 P 0.3 0.12 (server transmission for teleconferencing that does not require transmitting the data through the) 72 151.33 B (application first.) 72 136.83 T 1 F (Figure 7: Sample Built-in Wave Forms) 210.73 233.33 T 72 474.06 72 251.46 2 L V 0.25 H 0 Z N 540 474.06 540 251.46 2 L V N 71.88 474.18 540.12 474.18 2 L V N 71.88 251.33 540.12 251.33 2 L V N 72 251.33 540 474.18 C 142.67 255.33 469.33 464.18 C 142.67 255.33 469.33 464.18 R 7 X 0 K V 219.5 275.18 453.5 275.18 2 L 1 H 0 Z 0 X N 219.5 383.18 219.5 395.47 237.5 395.47 237.5 370.89 255.5 370.89 255.5 395.47 273.5 395.47 273.5 370.89 291.5 370.89 291.5 395.47 309.5 395.47 309.5 370.89 327.5 370.89 327.5 395.47 345.5 395.47 345.5 370.89 363.5 370.89 363.5 395.47 381.5 395.47 381.5 370.89 399.5 370.89 399.5 395.47 417.5 395.47 417.5 370.89 435.5 370.89 435.5 395.47 453.5 395.47 453.5 383.18 28 L N 219.5 329.18 231.17 342.08 247 316.29 264.5 342.08 282.83 316.29 300.33 342.08 318.67 316.29 337 342.08 354.5 316.29 372.83 342.08 390.33 316.29 408.67 342.08 427 316.29 434.5 329.18 14 L N 0 10 Q (Sine) 151.67 439.63 T (W) 151.67 429.63 T (ave) 160.73 429.63 T (Square) 151.67 385.63 T (W) 151.67 375.63 T (ave) 160.73 375.63 T (Saw) 151.67 331.63 T (W) 151.67 321.63 T (ave) 160.73 321.63 T (Constant) 151.67 271.54 T 214.67 424.68 M 223.23 432.07 221.93 449.64 236.72 450.16 D 248.15 450.16 251.89 419.68 269.71 423.52 D 284.79 426.83 285.74 455.18 307.95 450.16 D 320.28 447.44 325.2 419.18 347.26 424.68 D 360.43 427.87 366.93 454.78 383.67 449.92 D 397.4 445.96 400.52 423.52 417.8 423.52 D 432.16 423.52 436.55 442.02 443.83 450.16 D N 72 251.33 540 474.18 C 0 0 612 792 C FMENDPAGE %%EndPage: "9" 8 %%Page: "8" 8 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (8) 571 28 T 71.5 72 540.83 719.35 R 7 X V 1 14 Q 0 X (Sending Audio Data Over The Network) 71.5 710.02 T 3 12 Q 0.3 0.14 (Although NetworkAudio provides a number of input devices and built-in sound generators, its) 71.5 690.35 B (primary purpose is to allow applications to play and record audio data over the network.) 71.5 675.85 T -0.14 (Clients send data to a special type of input element in a flow. Data from this element is used in the) 71.5 655.35 P -0.19 (flow just as if it were coming from any other input device. If a sound is to be used more than once,) 71.5 640.85 P 0.3 0.14 (the application can store it in the server by creating a) 71.5 626.35 B 4 F 0.3 0.14 (bucket) 339.51 626.35 B 3 F 0.3 0.14 ( object and directing the data to it) 372.99 626.35 B (instead of to an output device.) 71.5 611.85 T 0.18 (This process can be reversed to retrieve audio data from the server. Large amounts of data can be) 71.5 591.35 P -0.15 (passed back to the application directly from the various input devices without requiring temporary) 71.5 576.85 P 0.3 0.05 (storage for all of it in the server. Although the most common use of this mechanism is to record) 71.5 562.35 B 0.3 0.42 (data from microphone, it can be used with all supported input devices \050) 71.5 547.85 B 1 F 0.3 0.42 (e.g.) 446.12 547.85 B 3 F 0.3 0.42 (, buckets, tone) 465.11 547.85 B (generators, or radios\051.) 71.5 533.35 T 0.3 0.09 (Figure 6 shows several examples of very simple flows that transfer data to and from the server.) 71.5 512.85 B 0.3 0.24 (Putting a multiplier immediately before a speaker output allows the volume of the data to be) 71.5 498.35 B (adjusted dynamically.) 71.5 483.85 T -0.09 (In a client/server architecture, network transfer delays can sometimes make the arrival of data less) 71.5 182.5 P 0.3 0.05 (predictable than if it were coming from a physical device. This can result in underruns \050data not) 71.5 168 B 0.3 0.47 (arriving in time\051 or overruns \050more data arriving than there is room for\051 if the delays are) 71.5 153.5 B 0.3 0.07 (sufficiently large. If an underrun or overrun occurs, the affected element is \322Paused\323 until more) 71.5 139 B -0.18 (data or space becomes available. To avoid pauses, applications can control the amount of data that) 71.5 124.5 P 0.08 (is kept for each input and output element and can request notices whenever an input begins to run) 71.5 110 P 0.3 0.14 (out of data or an output has to buffer up too much data. These notices \050known as) 71.5 95.5 B 4 F 0.3 0.14 (watermarks) 477.41 95.5 B 3 F 0.3 0.14 (\051) 536.84 95.5 B (allow the application to balance server memory use with frequency of data transfer.) 71.5 81 T 1 F (Figure 6: Common Uses For Client Data) 204.98 221 T 71.5 455.72 71.5 239.12 2 L V 0.25 H 0 Z N 540 455.72 540 239.12 2 L V N 71.38 455.85 540.12 455.85 2 L V N 71.38 239 540.12 239 2 L V N 71.5 239 540 455.85 C 147.73 243 463.77 445.85 C 147.73 243 463.77 445.85 R 7 X 0 K V 403.95 323.74 430.95 366.94 R 2 H 0 Z 0 X N 409.36 334.54 425.56 361.54 R 2 X V 0 X N 403.95 366.94 409.36 372.34 2 L N 430.95 366.94 436.35 372.34 2 L N 430.95 323.74 436.35 329.14 2 L N 409.36 372.34 436.35 372.34 2 L N 436.35 372.34 436.35 329.14 2 L N 5 6 Q (Speaker) 406.29 326.52 T 436.35 341.74 M 442.98 353.11 458.52 352.48 453.1 346.87 D 446.07 339.63 459.85 335.62 462.73 339.62 D N 233.7 369.74 233.7 326.35 266.23 326.35 266.23 358.89 255.39 369.74 255.39 358.89 266.23 358.89 255.39 369.74 8 Y 7 X V 0 X N 90 450 3.87 2.21 245.21 339.2 G 1 H 90 450 3.87 2.21 245.21 339.2 A 249.16 339.18 249.16 358.82 2 L N 249.23 356.84 M 249.2 359.11 249.2 359.11 250.69 357.16 D 252.18 355.22 252.18 355.22 253.9 354.99 D 255.61 354.76 255.61 354.76 257.1 352.82 D 258.59 350.87 258.59 350.87 256.62 351.83 D 254.65 352.79 254.65 352.79 252.94 353.02 D 251.22 353.25 251.22 353.25 250.23 353.91 D 249.25 354.57 249.25 354.57 249.23 356.84 D O V 0.2 H N (Client) 242.3 329.62 T 233.7 438.7 233.7 395.31 266.24 395.31 266.24 427.85 255.4 438.7 255.4 427.85 266.24 427.85 255.4 438.7 8 Y 7 X V 2 H 0 X N 90 450 3.87 2.21 245.22 408.15 G 1 H 90 450 3.87 2.21 245.22 408.15 A 249.17 408.14 249.17 427.78 2 L N 249.23 425.8 M 249.21 428.07 249.21 428.07 250.7 426.12 D 252.19 424.18 252.19 424.18 253.9 423.95 D 255.62 423.72 255.62 423.72 257.11 421.77 D 258.6 419.83 258.6 419.83 256.63 420.79 D 254.66 421.75 254.66 421.75 252.95 421.98 D 251.23 422.21 251.23 422.21 250.24 422.87 D 249.26 423.53 249.26 423.53 249.23 425.8 D O V 0.2 H N (Client) 242.31 398.58 T 318.04 402.7 390.04 420.7 R 2 H N 327.04 420.7 327.04 402.7 2 L 1 H N 336.04 420.7 336.04 402.7 2 L N 345.04 420.7 345.04 402.7 2 L N 354.04 420.7 354.04 402.7 2 L N 363.04 420.7 363.04 402.7 2 L N 372.04 420.7 372.04 402.7 2 L N 381.04 420.7 381.04 402.7 2 L N (Bucket) 344.87 393.86 T 319.23 364.29 351.73 364.29 351.73 331.8 319.23 331.8 4 Y 2 H 2 Z N 0 10 Q (* 2) 329.37 344.4 T 392.69 351.35 404.23 348.04 392.69 344.74 392.69 348.04 4 Y V 353.35 348.04 392.69 348.04 2 L 0.5 H N 307.07 351.35 318.61 348.04 307.07 344.74 307.07 348.04 4 Y V 267.73 348.04 307.07 348.04 2 L N 306.05 415 317.58 411.7 306.05 408.39 306.05 411.7 4 Y V 266.7 411.7 306.05 411.7 2 L N (Store T) 156.73 418.07 T (o) 190.42 418.07 T (Bucket) 156.73 408.07 T (Play T) 156.73 350.5 T (o) 185.43 350.5 T (Speaker) 156.73 340.5 T 320.4 303.54 320.4 260.16 352.92 260.16 352.92 292.7 342.08 303.54 342.08 292.7 352.92 292.7 342.08 303.54 8 Y 7 X V 2 H 0 Z 0 X N 90 450 3.87 2.21 331.9 273 G 1 H 90 450 3.87 2.21 331.9 273 A 335.85 272.98 335.85 292.63 2 L N 335.92 290.64 M 335.89 292.91 335.89 292.91 337.38 290.97 D 338.87 289.02 338.87 289.02 340.59 288.79 D 342.3 288.57 342.3 288.57 343.79 286.62 D 345.28 284.67 345.28 284.67 343.31 285.64 D 341.34 286.6 341.34 286.6 339.63 286.82 D 337.91 287.05 337.91 287.05 336.93 287.71 D 335.94 288.38 335.94 288.38 335.92 290.64 D O V 0.2 H N 5 6 Q (Client) 328.99 263.42 T 307.07 285.16 318.61 281.85 307.07 278.54 307.07 281.85 4 Y V 267.73 281.85 307.07 281.85 2 L 0.5 H 2 Z N 0 10 Q (Record From) 156.73 284.3 T (Microphone) 156.73 274.3 T 248.54 289.76 254.48 283.82 244.09 273.42 238.15 279.36 4 Y V 2 H 0 Z N 3 X 90 450 9 9 257.4 292.26 G 0 X 90 450 9 9 257.4 292.26 A 246.98 284.04 248.76 282.26 245.64 279.14 243.86 280.92 4 Y 7 X V 0 X N 5 6 Q (Microphone) 233.17 263.76 T 240.77 281.8 M 242.77 286.05 240.56 290.12 236.27 288.17 D 232.4 286.42 231.27 291.17 234.02 294.92 D N 71.5 239 540 455.85 C 0 0 612 792 C FMENDPAGE %%EndPage: "8" 7 %%Page: "7" 7 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (7) 571 28 T 72 72 540.5 720.18 R 7 X V 3 12 Q 0 X 0.3 0.17 (All inputs and outputs may be shared among the applications. When two or more flows direct) 72 712.18 B 0.3 0.05 (sound data to the same output, the server automatically merges the data streams together so that) 72 697.68 B 0.3 0.23 (both sounds come out at the same time. If the various components in an flow contain data of) 72 683.18 B 0.3 0.03 (differing sample rates, the server internally converts all of the data streams to the highest rate. If) 72 668.68 B 0.3 0.02 (this results in more samples for an output than it expected, the server automatically throws away) 72 654.18 B (any unneeded values.) 72 639.68 T 1 14 Q (Stereo) 72 606.85 T 3 12 Q 0.3 0.19 (In addition to supporting simple monaural data \050) 72 587.18 B 1 F 0.3 0.19 (e.g.) 315.36 587.18 B 3 F 0.3 0.19 (, voice\051, NetworkAudio also provides the) 333.44 587.18 B 0.3 0.2 (ability to manipulate multitrack data such as stereo recordings. Applications can dynamically) 72 572.68 B (extract tracks from sound data as well as mix them together.) 72 558.18 T 0.3 0.35 (Some types of multitrack output devices \050especially stereo speakers\051 can be represented as) 72 537.68 B 0.3 0.04 (collections of single-track devices that applications may also wish to access separately. Figure 5) 72 523.18 B 0.3 0.23 (shows an example of stereo data sent from two separate clients actually being played on two) 72 508.68 B (mono speakers \050one of which is receiving data directly from the third client\051.) 72 494.18 T 0.3 0.19 (In this situation, the two sets of stereo data are mixed as if the stereo speaker were a physical) 72 188.83 B -0.13 (device. The individual tracks are then sent to the mono speakers, where the data for the right track) 72 174.33 P (is mixed with the data coming from the microphone.) 72 159.83 T 0.3 0.63 (By providing access to the separate mono speakers as well as the joint stereo speaker,) 72 139.33 B 0.3 0.54 (NetworkAudio gives applications fine-grained control over how sound is produced. For) 72 124.83 B 0.3 0.04 (convenience, however, most implementations provide at least one mono and one stereo speaker,) 72 110.33 B (even if they have to be simulated in software when appropriate hardware is not available.) 72 95.83 T 1 F (Figure 5: Stereo and Mono Outputs) 218.39 227.33 T 72 466.06 72 245.46 2 L V 0.25 H 0 Z N 540 466.06 540 245.46 2 L V N 71.88 466.18 540.12 466.18 2 L V N 71.88 245.33 540.12 245.33 2 L V N 72 245.33 540 466.18 C 142.67 249.33 469.33 456.18 C 142.67 249.33 469.33 456.18 R 7 X 0 K V 327.18 339.92 354.18 383.12 R 2 H 0 Z 0 X N 332.58 350.72 348.78 377.72 R 2 X V 0 X N 327.18 383.12 332.58 388.52 2 L N 354.18 383.12 359.58 388.52 2 L N 354.18 339.92 359.58 345.32 2 L N 332.58 388.52 359.58 388.52 2 L N 359.58 388.52 359.58 345.32 2 L N 5 6 Q (Speaker) 329.51 342.69 T 341.47 339.26 M 341.1 331.37 333.49 327.22 333.99 331.88 D 334.84 340.28 327.27 335.98 326.86 333.05 D N 411.01 265.82 427.88 292.82 R N 414.38 272.57 424.51 289.44 R 2 X V 0 X N 411.01 292.82 414.38 296.19 2 L N 427.88 292.82 431.26 296.19 2 L N 427.88 265.82 431.26 269.19 2 L N 414.38 296.19 431.26 296.19 2 L N 431.26 296.19 431.26 269.19 2 L N (Right) 433.97 283.3 T 419.94 265.41 M 419.71 260.48 414.96 257.88 415.27 260.79 D 415.8 266.04 411.07 263.36 410.81 261.53 D N 411.01 419.98 427.88 446.98 R N 414.38 426.73 424.51 443.61 R 2 X V 0 X N 411.01 446.98 414.38 450.36 2 L N 427.88 446.98 431.26 450.36 2 L N 427.88 419.98 431.26 423.36 2 L N 414.38 450.36 431.26 450.36 2 L N 431.26 450.36 431.26 423.36 2 L N (Left) 434.1 438.72 T 419.94 419.57 M 419.71 414.64 414.96 412.05 415.27 414.96 D 415.8 420.21 411.07 417.52 410.81 415.69 D N 403.6 306.64 408.07 295.51 398.38 302.58 400.99 304.61 4 Y 1 X V 361.5 355.82 401 304.6 2 L 0.5 H N 395.38 281.63 406.92 278.32 395.38 275.01 395.38 278.32 4 Y 0 X V 253.58 278.32 395.38 278.32 2 L 2 Z N 313.42 357.55 325.41 357.55 315.24 351.19 314.33 354.37 4 Y V 256.08 338.17 314.33 354.37 2 L N 315.67 383.67 325.41 376.65 313.44 377.44 314.56 380.56 4 Y V 253.58 402.33 314.56 380.55 2 L N (Speaker) 434.1 432.69 T (Speaker) 433.97 277.27 T 5 X 90 450 18 18 230.58 410.17 G 2 H 0 Z 0 X 90 450 18 18 230.58 410.17 A 7 X 90 450 2.25 2.25 230.58 410.17 G 0 X 90 450 2.25 2.25 230.58 410.17 A (CD) 226.25 398.5 T 211.92 366.33 211.92 316.56 249.25 316.56 249.25 353.89 236.8 366.33 236.8 353.89 249.25 353.89 236.8 366.33 8 Y 7 X V 0 X N 90 450 4.44 2.54 225.13 331.29 G 1 H 90 450 4.44 2.54 225.13 331.29 A 229.66 331.27 229.66 353.81 2 L N 229.73 351.54 M 229.71 354.14 229.71 354.14 231.42 351.91 D 233.12 349.67 233.12 349.67 235.1 349.41 D 237.07 349.15 237.07 349.15 238.77 346.92 D 240.48 344.69 240.48 344.69 238.22 345.79 D 235.96 346.89 235.96 346.89 233.99 347.15 D 232.02 347.42 232.02 347.42 230.89 348.17 D 229.76 348.93 229.76 348.93 229.73 351.54 D O V 0.2 H N (Client) 222.92 320.5 T 230.19 286.33 236.12 280.39 225.73 270 219.79 275.94 4 Y V 2 H N 3 X 90 450 9 9 239.04 288.83 G 0 X 90 450 9 9 239.04 288.83 A 228.63 280.62 230.41 278.84 227.29 275.72 225.51 277.5 4 Y 7 X V 0 X N (Microphone) 214.82 260.33 T 222.42 278.37 M 224.42 282.62 222.21 286.7 217.92 284.75 D 214.04 283 212.92 287.75 215.67 291.5 D N 398.45 425.01 408.08 432.17 403.7 420.99 401.08 423 4 Y 1 X V 361.5 370.67 401.08 423 2 L 0.5 H 2 Z N 315.67 391.17 325.41 384.15 313.44 384.94 314.56 388.06 4 Y 0 X V 253.58 409.83 314.56 388.05 2 L N 313.42 350.88 325.41 350.89 315.24 344.52 314.33 347.7 4 Y V 256.08 331.5 314.33 347.7 2 L N 0 10 Q (Client A) 154.42 406.52 T (Client B) 154.42 337.8 T (Client C) 154.42 274.59 T 72 245.33 540 466.18 C 0 0 612 792 C FMENDPAGE %%EndPage: "7" 6 %%Page: "6" 6 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (6) 571 28 T 79.67 81 549 710.35 R 7 X V 3 12 Q 0 X (Components may change state in several different ways:) 79.67 702.35 T 3 11 Q (\245) 97.67 681.85 T 3 12 Q (The application can explicitly set the state of each element.) 115.67 681.85 T 3 11 Q (\245) 97.67 661.85 T 3 12 Q (An element in the \337ow can set the state of itself or other elements in response to) 115.67 661.85 T (changes in its own state.) 115.67 647.85 T 3 11 Q (\245) 97.67 627.85 T 3 12 Q (If an input temporarily runs out of data, it becomes Paused.) 115.67 627.85 T 3 11 Q (\245) 97.67 607.85 T 3 12 Q (In an input permanently runs out of data, it becomes Stopped.) 115.67 607.85 T 0.3 0.08 (By default, all components in a flow will automatically be stopped if any of the elements in the) 79.67 587.85 B (flow become Stopped or Paused \050and have not reset themselves\051.) 79.67 573.35 T 1 14 Q (Automatic Actions) 79.67 540.52 T 3 12 Q 0.3 0.07 (NetworkAudio provides applications with the ability to force input and output elements to react) 79.67 520.85 B 0.3 0.03 (automatically in response to changes in other elements. This can be used to chain flows together) 79.67 506.35 B -0.04 (or to stop multiple flows \050to prevent pops and hisses that are caused by data temporarily not being) 79.67 491.85 P (ready\051.) 79.67 477.35 T 0.3 0.05 (Each component element in a flow may have associated with it a list of) 79.67 456.85 B 4 F 0.3 0.05 (actions) 432.02 456.85 B 3 F 0.3 0.05 ( to be performed) 467.71 456.85 B (when the element is Paused, Stopped, or Started:) 79.67 442.35 T 3 11 Q (\245) 97.67 421.85 T 4 12 Q -0.32 (Change Element State) 115.67 421.85 P 3 F -0.32 ( \320 The state of any element \050including the one triggering the) 225.66 421.85 P (change\051 can be explicitly set.) 115.67 407.85 T 3 11 Q (\245) 97.67 387.85 T 4 12 Q -0.43 (Notify Client) 115.67 387.85 P 3 F -0.43 ( \320 An event detailing the current state of the element can be sent to the) 178.87 387.85 P (client that created the \337ow containing the triggering element.) 115.67 373.85 T 0.3 0.23 (Applications frequently request Stopped Notices to know when a flow is finished and can be) 79.67 353.85 B (destroyed.) 79.67 339.35 T 1 18 Q (Manipulating Audio Data) 79.67 296.85 T 3 12 Q -0.27 (One of the key features provided by NetworkAudio is the ability to manipulate multiple sources of) 79.67 274.85 P 0.3 0.19 (and destinations for sound data without client interaction. Conveniently, simple mathematical) 79.67 260.35 B 0.3 0.07 (operations on the sample values \050such as those shown back in Figure 3\051 provide useful physical) 79.67 245.85 B (results:) 79.67 231.35 T 3 11 Q (\245) 97.67 210.85 T 3 12 Q -0.29 (Adding two sets of samples together is equivalent to playing them at the same time.) 115.67 210.85 P 3 11 Q (\245) 97.67 190.85 T 3 12 Q -0.42 (Multiplying a set of samples by a value greater than 1.0 increases the volume of the) 115.67 190.85 P (sound; a value less than 1.0 decreases the volume.) 115.67 176.85 T -0.01 (Sound data comes from inputs in the range of -1.0 to +1.0. Within a flow, values may temporarily) 79.67 156.85 P 0.19 (exceed this range, but are clipped back down when sent to an output. Constants used by elements) 79.67 142.35 P 0.3 0.03 (\050such as multiplication, addition, wave form frequencies, etc.\051 may be modified at any time. The) 79.67 127.85 B (structure of the flow cannot be edited; instead, the whole flow must be redefined.) 79.67 113.35 T FMENDPAGE %%EndPage: "6" 5 %%Page: "5" 5 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (5) 571 28 T 72 72 540.5 720.18 R 7 X V 1 18 Q 0 X (Playing and Recording) 72 708.18 T 3 12 Q 0.3 0.06 (The instructions that a client provides for arranging various inputs and outputs are called) 72 686.18 B 4 F 0.3 0.06 (Flows) 510.26 686.18 B 3 F -0.27 (\050see Figure 4\051, similar to the photoflow pipelines of the X Image Extension \050see) 72 671.68 P 2 F -0.64 ([Shelley93]) 454.35 671.68 P 3 F -0.27 (\051.) 533.51 671.68 P 0.3 0.26 (They are used in much the same way that musicians use audio mixers or patch-panels. They) 72 657.18 B 0.3 0.14 (indicate how the components should be connected, how multiple sounds should be mixed, and) 72 642.68 B (what changes in volume should be made.) 72 628.18 T 0.3 0.19 (A flow is made up of a series of) 72 405.33 B 4 F 0.3 0.19 (elements) 237.27 405.33 B 3 F 0.3 0.19 ( which describe sources of input data, operations to) 282.12 405.33 B 0.3 0.08 (perform on data, and places to output the data. A flow is often represented graphically as a tree) 72 390.83 B 0.3 0.64 (whose root and leaf nodes are input and output elements and whose interior nodes are) 72 376.33 B (mathematical or logical operations.) 72 361.83 T 0.21 (The input and output elements used in a flow are referred to as the) 72 341.33 P 4 F 0.21 (components) 396.07 341.33 P 3 F 0.21 ( of the flow. Data) 455.38 341.33 P 0.3 0.05 (moves along a flow at the highest sample rate used by its components. The server automatically) 72 326.83 B 0.3 0.12 (converts data to this sample rate when necessary. At each step, the components in the flow are) 72 312.33 B 0.13 (said to be in one of three) 72 297.83 P 4 F 0.13 (states) 194.47 297.83 P 3 F 0.13 (, depending upon whether or not they are producing or consuming) 221.79 297.83 P (any real data:) 72 283.33 T 3 11 Q (\245) 90 262.83 T 4 12 Q (Stopped) 108 262.83 T 3 F ( \320 An input element in this state has no real data ready and simply emits) 147.31 262.83 T (values of zero. An output element in this state discards any data sent to it.) 108 248.83 T 3 11 Q (\245) 90 228.83 T 4 12 Q -0.33 (Paused) 108 228.83 P 3 F -0.33 ( \320 When an input element temporarily runs out of data or an output element) 143.98 228.83 P (has reached its limit, it becomes Paused. This is similar to being Stopped, except) 108 214.83 T (that the component expects that it can resume where it left of) 108 200.83 T (f when more data or) 400.57 200.83 T (space becomes available.) 108 186.83 T 3 11 Q (\245) 90 166.83 T 4 12 Q -0.26 (Started) 108 166.83 P 3 F -0.26 ( \320 When input and elements are producing or consuming data, respectively) 143.32 166.83 P -0.26 (,) 498.76 166.83 P (they are said to be started.) 108 152.83 T 0.3 0.05 (When a flow is created, the components are initially placed in the Stopped state, preventing any) 72 132.83 B 0.3 0.11 (data from flowing. Once at least one component in the flow has been started, data can begin to) 72 118.33 B (move.) 72 103.83 T 1 F (Figure 4: Flows Connect Inputs to Outputs) 202.64 443.83 T 72 600.06 72 461.96 2 L V 0.25 H 0 Z N 540.5 600.06 540.5 461.96 2 L V N 71.88 600.18 540.62 600.18 2 L V N 71.88 461.83 540.62 461.83 2 L V N 72 461.83 540.5 600.18 C 142.92 465.83 469.58 590.18 C 142.92 465.83 469.58 590.18 R 7 X 0 K V 250.17 561.22 261.71 557.91 250.17 554.61 250.17 557.91 4 Y 0 X V 230.88 557.91 250.17 557.91 2 L 0.5 H 2 Z N 261.71 573.33 294.21 573.33 294.21 540.83 261.71 540.83 4 Y 2 H N 311.84 561.64 323.38 558.33 311.84 555.02 311.84 558.33 4 Y V 294.21 558.33 311.84 558.33 2 L 0.5 H N 323.38 486.66 359.21 574.16 R 2 H N 250.17 510.39 261.71 507.08 250.17 503.77 250.17 507.08 4 Y V 230.88 507.08 250.17 507.08 2 L 0.5 H N 261.71 523.25 294.21 523.25 294.21 490.75 261.71 490.75 4 Y 2 H N 311.84 510.3 323.38 507 311.84 503.69 311.84 507 4 Y V 292.54 507 311.84 507 2 L 0.5 H N 376.01 533.72 387.54 530.41 376.01 527.11 376.01 530.41 4 Y V 358.62 530.41 376.01 530.41 2 L N 0 10 Q (* 0.5) 267.68 553.44 T (* 0.5) 267.68 503.35 T (+) 338.37 526.77 T 389.3 506.11 416.3 549.31 R 2 H 0 Z N 394.7 516.91 410.9 543.91 R 2 X V 0 X N 389.3 549.31 394.7 554.71 2 L N 416.3 549.31 421.7 554.71 2 L N 416.3 506.11 421.7 511.51 2 L N 394.7 554.71 421.7 554.71 2 L N 421.7 554.71 421.7 511.51 2 L N 5 6 Q (Speaker) 391.64 508.89 T 421.7 524.11 M 428.33 535.48 443.87 534.85 438.45 529.24 D 431.41 522 445.2 517.99 448.08 521.99 D N 190.03 525.57 190.03 482.18 222.57 482.18 222.57 514.72 211.73 525.57 211.73 514.72 222.57 514.72 211.73 525.57 8 Y 7 X V 0 X N 90 450 3.87 2.21 201.55 495.03 G 1 H 90 450 3.87 2.21 201.55 495.03 A 205.5 495.01 205.5 514.66 2 L N 205.56 512.67 M 205.54 514.94 205.54 514.94 207.03 512.99 D 208.52 511.05 208.52 511.05 210.24 510.82 D 211.95 510.59 211.95 510.59 213.44 508.65 D 214.93 506.7 214.93 506.7 212.96 507.66 D 210.99 508.62 210.99 508.62 209.27 508.85 D 207.56 509.08 207.56 509.08 206.57 509.74 D 205.58 510.4 205.58 510.4 205.56 512.67 D O V 0.2 H N (Client) 198.64 485.45 T 204.71 568.67 210.65 562.73 200.25 552.33 194.31 558.28 4 Y V 2 H N 3 X 90 450 9 9 213.56 571.17 G 0 X 90 450 9 9 213.56 571.17 A 203.15 562.95 204.93 561.17 201.81 558.05 200.03 559.83 4 Y 7 X V 0 X N (Microphone) 189.34 542.67 T 196.94 560.71 M 198.94 564.96 196.73 569.04 192.44 567.08 D 188.56 565.33 187.44 570.08 190.19 573.83 D N 72 461.83 540.5 600.18 C 0 0 612 792 C FMENDPAGE %%EndPage: "5" 4 %%Page: "4" 4 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (4) 571 28 T 71.5 72 540.83 719.35 R 7 X V 1 14 Q 0 X (Data Formats) 71.5 710.02 T 3 12 Q 0.3 0.24 (The sequence of numbers that are used to encode audio data vary in value from -1.0 to +1.0,) 71.5 690.35 B 0.3 0.09 (representing the two extreme positions that a diaphragm can reach in a given device. The value) 71.5 675.85 B 0.02 (0.0 corresponds to the center of the device. However, since floating point numbers occupy a large) 71.5 661.35 P 0.3 0.12 (amount of space and are sometimes difficult to manipulate, most data formats store the sample) 71.5 646.85 B (values by multiplying them by 128 or 32768 and rounding to the closest integer.) 71.5 632.35 T (The most common data formats are:) 71.5 611.85 T 3 11 Q (\245) 89.5 591.35 T 4 12 Q (Linear) 107.5 591.35 T 3 F ( \320 Each 8- or 16-bit value contains a scaled sample; the lar) 140.82 591.35 T (ger version can) 421.06 591.35 T (more accurately represent the original data. Some variants store the signed values) 107.5 577.35 T (directly; others add 128 or 32768 to make them be unsigned. The 16-bit versions) 107.5 563.35 T (also come in most-signi\336cant byte \336rst and least-signi\336cant byte \336rst varieties.) 107.5 549.35 T 3 11 Q (\245) 89.5 529.35 T 8 12 Q (m) 107.5 529.35 T 4 F (LA) 114.41 529.35 T (W) 128.63 529.35 T 3 F ( \320 Each 8-bit value contains the sign and the) 139.29 529.35 T 1 F (logarithm) 354.48 529.35 T 3 F ( of a scaled sample.) 401.79 529.35 T -0.34 (This enables a lar) 107.5 515.35 P -0.34 (ger range of values to be represented in 8 bits by trading accuracy) 190.53 515.35 P -0.49 (at the extreme positions \050which aren\325) 107.5 501.35 P -0.49 (t used very often and can tolerate small errors\051) 283.05 501.35 P (for precision at the positions nearer to zero \050which are used most of the time\051.) 107.5 487.35 T 0.3 0.03 (NetworkAudio supports both of these data formats and their variants. In addition, since different) 71.5 467.35 B 0.07 (devices and applications use different data formats, NetworkAudio automatically converts among) 71.5 452.85 P (the various data formats whenever needed.) 71.5 438.35 T 1 14 Q (Audio Data Inputs and Outputs) 71.5 405.52 T 3 12 Q -0.12 (The essence of NetworkAudio is that it allows applications to \322wire up\323 one or more inputs to one) 71.5 385.85 P 0.3 0.04 (or more outputs. Servers provide a variety of inputs and outputs, based on the available physical) 71.5 371.35 B (hardware or software emulators:) 71.5 356.85 T 3 11 Q (\245) 89.5 336.35 T 4 12 Q (Physical Devices) 107.5 336.35 T 3 F ( \320 Most platforms support standard input and output jacks for) 190.43 336.35 T (attaching microphones, CD plays, speakers, tape recorders, etc.) 107.5 322.35 T 3 11 Q (\245) 89.5 302.35 T 4 12 Q -0.31 (V) 107.5 302.35 P -0.31 (irtual Devices) 114.84 302.35 P 3 F -0.31 ( \320 The audio server itself provides software that emulates hardware) 182.82 302.35 P -0.2 (tone generators and radio transmitters and receivers \050for data that is broadcast over) 107.5 288.35 P (a local area network\051.) 107.5 274.35 T 3 11 Q (\245) 89.5 254.35 T 4 12 Q (Client Data) 107.5 254.35 T 3 F ( \320 Applications can send data to and from the server over the network.) 164.48 254.35 T (By splitting the transmissions into pieces, applications can send or receive an) 107.5 240.35 T (unlimited amount of data.) 107.5 226.35 T 3 11 Q (\245) 89.5 206.35 T 4 12 Q (Buckets) 107.5 206.35 T 3 F ( \320 Audio data can be stored in the server) 146.81 206.35 T (, either as a result of being) 339.85 206.35 T -0 (recorded from another device or having been sent over the network from the appli-) 107.5 192.35 P (cation. This allows the data to be played multiple times without having to be) 107.5 178.35 T (retransmitted or rerecorded.) 107.5 164.35 T 0.3 0.07 (Outputs can receive data from more than one input at once; the server automatically merges the) 71.5 144.35 B 0.3 0.27 (data streams so that the sounds are heard together. Operations for mixing sounds, extracting) 71.5 129.85 B (individual tracks of data, and changing the volume are provided.) 71.5 115.35 T FMENDPAGE %%EndPage: "4" 3 %%Page: "3" 3 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (3) 571 28 T 72 63 540.5 720.18 R 7 X V 1 18 Q 0 X (What Is Audio Data?) 72 708.18 T 3 12 Q 0.26 (Physically, sounds are waves of compressed and expanded air. We are able to hear them because) 72 686.18 P -0.2 (the bones of the inner ear vibrate when struck by the waves; these vibrations are interpreted by the) 72 671.68 P 0.3 0.08 (brain as sound. Similarly, we speak by reversing the process, causing air to pass over our vocal) 72 657.18 B 0.3 0.32 (cords which vibrate back and forth. Audio devices such as microphones and speakers work) 72 642.68 B (essentially the same way.) 72 628.18 T -0.18 (Conveniently, these vibrations occur along a single direction. They can be measured by noting the) 72 607.68 P 0.3 0.18 (position of the) 72 593.18 B 4 F 0.3 0.18 (diaphragm) 148.05 593.18 B 3 F 0.3 0.18 ( that is pushing or being pushed by the air \050Figure 2\051. Microphones) 203.65 593.18 B 0.3 0.05 (work by translating the position of such a diaphragm into electronic signals. When these signals) 72 578.68 B 0.3 0.1 (are sent to a speaker, they cause another diaphragm to reproduce the original motion of the air,) 72 564.18 B (allowing us to hear the sound as it was produced.) 72 549.68 T 0.3 0.01 (Since the position of the microphone or speaker diaphragm varies smoothly with time, recording) 72 357.5 B 0.3 0.03 (it exactly would require an infinite number of measurements. Digital systems such as computers) 72 343 B 0.3 0 (and compact discs instead approximate the motion by taking) 72 328.5 B 4 F 0.3 0 (samples) 368.33 328.5 B 3 F 0.3 0 ( of the positions \050Figure 3\051.) 407.67 328.5 B 0.3 0.14 (The number of positions recorded per second is called the) 72 314 B 4 F 0.3 0.14 (sample rate) 363.7 314 B 3 F 0.3 0.14 (; higher rates result in a) 422.53 314 B (more accurate representation of the original sound, but take more space to store.) 72 299.5 T 0.3 0.1 (These sequences of position samples are used by NetworkAudio to represent sounds. Playing a) 72 103.65 B -0.19 (sound involves sending a sequence to a speaker; recording takes a sequence from a microphone or) 72 89.15 P (other input device and stores it into the server\325s memory.) 72 74.65 T 1 F (Figure 2: Continuous Graph of Audio Diaphragm Positions) 162.15 396 T (Figure 3: Sampled Graph of Audio Diaphragm Positions) 167.41 142.15 T 72 521.56 72 414.12 2 L V 0.25 H 0 Z N 540.5 521.56 540.5 414.12 2 L V N 71.88 521.68 540.62 521.68 2 L V N 71.88 414 540.62 414 2 L V N 72 271.38 72 160.28 2 L V N 540 271.38 540 160.28 2 L V N 71.88 271.5 540.12 271.5 2 L V N 71.88 160.15 540.12 160.15 2 L V N 72 414 540.5 521.68 C 142.92 418 469.58 511.68 C 142.92 418 469.58 511.68 R 7 X 0 K V 161.34 502.68 161.34 430.68 2 L 0.5 H 2 Z 0 X N 161.34 468.02 457.92 468.02 2 L N 161.34 488.63 M 199.74 495.73 199.74 495.73 209.34 492.25 D 218.94 488.77 218.94 488.77 228.54 471.39 D 238.13 454 238.13 454 247.73 464.43 D 257.33 474.86 257.33 474.86 266.93 464.43 D 276.53 454 276.53 454 295.73 471.39 D 314.92 488.77 314.92 488.77 324.52 460.95 D 334.12 433.13 334.12 433.13 353.32 460.95 D 372.52 488.77 372.52 488.77 430.11 440.09 D 2 H N 0 10 Q (Position) 0 -270 154.11 444.49 TF (T) 434.08 471.23 T (ime) 440.01 471.23 T 72 414 540.5 521.68 C 0 0 612 792 C 72 160.15 540 271.5 C 142.67 164.15 469.33 261.5 C 142.67 164.15 469.33 261.5 R 7 X 0 K V 161.09 252.5 161.09 171.5 2 L 0.5 H 2 Z 0 X N 161.09 213.51 457.67 213.51 2 L N 0 10 Q (Position) 0 -270 153.86 189.5 TF 161.09 236.85 170.36 236.85 170.36 244.67 207.43 244.67 207.43 236.85 216.7 236.85 216.7 229.03 225.97 229.03 225.97 221.2 225.97 213.38 235.24 213.38 235.24 197.73 244.5 197.73 244.5 205.55 253.77 205.55 253.77 221.2 263.04 221.2 263.04 213.38 263.04 205.55 272.31 205.55 272.31 197.73 281.58 197.73 281.58 205.55 290.84 205.55 290.84 213.38 300.11 213.38 300.11 221.2 300.11 229.03 309.38 229.03 318.65 229.03 318.65 213.38 327.92 213.38 327.92 205.55 327.92 182.08 337.18 182.08 337.18 189.9 346.45 189.9 346.45 197.73 355.72 197.73 355.72 205.55 355.72 213.38 364.99 213.38 364.99 229.03 383.52 229.03 383.52 221.2 392.79 221.2 392.79 213.38 402.06 213.38 402.06 197.73 411.33 197.73 411.33 189.9 420.59 189.9 420.59 182.08 429.86 182.08 54 L 2 H N (T) 433.83 217.84 T (ime) 439.76 217.84 T 72 160.15 540 271.5 C 0 0 612 792 C FMENDPAGE %%EndPage: "3" 2 %%Page: "2" 2 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (2) 571 28 T 71.5 72 540.83 719.35 R 7 X V 3 12 Q 0 X 0.3 0.03 (X software developers are demanding audio capabilities from workstations, X terminals, and PC) 71.5 711.35 B (X server vendors.) 71.5 696.85 T 0.3 0.27 (Although audio hardware is available on many platforms, there is no common programming) 71.5 676.35 B 0.3 0.01 (interface, forcing application developers to write new drivers for every software port. Worse yet,) 71.5 661.85 B 0.22 (most of the interfaces that are available do not allow audio applications to be run over a network,) 71.5 647.35 P 0.3 0 (preventing their use in distributed environments. In contrast, the Network Audio System uses the) 71.5 632.85 B (client/server model to split applications from specific hardware device drivers \050see Figure 1\051:) 71.5 618.35 T -0.18 (Previous efforts have typically focused on providing a simple stream to the audio interface for one) 71.5 333 P 0.3 0.08 (application at a time \050Sun\325s) 71.5 318.5 B 1 F 0.3 0.08 (/dev/audio) 210.13 318.5 B 3 F 0.3 0.08 (\051, simple storage of sounds) 261.52 318.5 B 2 F 0.72 0.08 ([Billman92]) 397.08 318.5 B 3 F 0.3 0.08 (, or had been) 477.07 318.5 B 0.3 0.37 (proprietary) 71.5 304 B 2 F 0.72 0.37 ([Angebranndt91]) 132.52 304 B 3 F 0.3 0.37 (. The system most similar to NetworkAudio is) 246 304 B 1 F 0.3 0.37 (AudioFile) 489.9 304 B 2 F ([Levergood93]) 71.5 289.5 T 3 F (, however it lacks server storage and conversion of data.) 165.05 289.5 T (The Network Audio System allows easy use of audio over the network, with emphasis on:) 71.5 269 T 3 11 Q (\245) 89.5 248.5 T 3 12 Q (Sounds can be sent from an application to the server for playing on any attached) 107.5 248.5 T (output devices.) 107.5 234.5 T 3 11 Q (\245) 89.5 214.5 T 3 12 Q -0.26 (If a microphone or other audio input device is attached to server) 107.5 214.5 P -0.26 (, sound data can be) 411.56 214.5 P (recorded and transmitted back to an application.) 107.5 200.5 T 3 11 Q (\245) 89.5 180.5 T 3 12 Q -0.14 (Sound data can be stored in the audio server for later use. This allows sounds to be) 107.5 180.5 P (repeatedly played without having to send them over the network every time.) 107.5 166.5 T 3 11 Q (\245) 89.5 146.5 T 3 12 Q -0.05 (Multiple sources of sound data can be mixed and manipulated in a variety of ways) 107.5 146.5 P (\050) 107.5 132.5 T 1 F (e.g.) 111.49 132.5 T 3 F (, made louder or softer) 128.81 132.5 T (, sampled more frequently or less\051.) 237.24 132.5 T 3 11 Q (\245) 89.5 112.5 T 3 12 Q (A variety of sound data formats are supported, with conversion performed auto-) 107.5 112.5 T (matically within the audio server) 107.5 98.5 T (.) 264.73 98.5 T 3 11 Q (\245) 89.5 78.5 T 3 12 Q (Simple function calls are provided to read and write many dif) 107.5 78.5 T (ferent \336le formats.) 402.41 78.5 T 1 F (Figure 1: Architecture of the Network Audio System) 178.92 371.5 T 71.5 590.22 71.5 389.62 2 L V 0.25 H 0 Z N 539.5 590.22 539.5 389.62 2 L V N 71.38 590.35 539.62 590.35 2 L V N 71.38 389.5 539.62 389.5 2 L V N 71.5 389.5 539.5 590.35 C 78.82 393.5 532.18 580.35 C 78.82 393.5 532.18 580.35 R 7 X 0 K V 96.82 460.12 537.82 460.12 2 L 3 X V 3 H 2 Z 2 X N 294.66 495.82 294.66 468.82 270.66 468.82 306.66 441.82 342.66 468.82 318.66 468.82 318.66 495.82 7 Y 3 X V 231.82 501.8 393.82 565.01 R V 231.87 505.34 389.53 564.8 R 2 X V 231.82 402.79 393.82 433.35 R 3 X V 232.06 405.13 389.28 433.14 R 2 X V 222.82 508.39 384.82 571.6 R 7 X V 2 H 0 X N 222.82 407.89 384.82 438.45 R 5 X V 0 X N 7 10 Q (Application) 278.29 558.33 T 0 F (NetworkAudio Server) 253 420 T 223.16 508.6 384.57 535.6 R 5 X V 0.5 H 0 X N (NetworkAudio API) 260.27 518.45 T 291.82 497.12 291.82 470.12 267.82 470.12 303.82 443.12 339.82 470.12 315.82 470.12 315.82 497.12 7 Y 5 X V 1 H 0 X N 222.82 508.39 384.82 571.6 R 2 H N 7 F (Network) 101.88 464.35 T 71.5 389.5 539.5 590.35 C 0 0 612 792 C FMENDPAGE %%EndPage: "2" 1 %%Page: "1" 1 612 792 0 FMBEGINPAGE 0 9 Q 0 X 0 K (1) 571 28 T 72 72 540.5 720.18 R 7 X V 1 28 Q 0 X (The Network Audio System) 154.98 641.52 T 1 20 Q (Make Your Applications Sing \050As Well As Dance\051!) 104.44 580.85 T 1 14 Q (Jim Fulton) 272.99 507.25 T 1 11 Q (\240) 334.01 512.85 T 1 14 Q (Greg Renda) 269.75 489.12 T 1 10 Q (\340) 337.75 493.92 T 1 18 Q (Abstract) 72 446.45 T 3 12 Q -0.1 (Audio input and output is rapidly becoming a standard feature in desktop devices and an expected) 72 424.45 P 2.2 (element of user interfaces. Workstations, X terminals, and personal computers now typically) 72 409.95 P -0.3 (include hardware capabilities ranging from 8 kHz mono \322voice quality\323 up through 48 kHz stereo.) 72 395.45 P 2.28 (Unfortunately, application programming interfaces vary widely across platforms, limiting the) 72 380.95 P (types of applications that can be developed in X environments.) 72 366.45 T 3.61 (The) 72 345.95 P 1 F 3.61 (Network Audio System) 97.26 345.95 P 3 F 3.61 (, commonly but unimaginatively known as) 213.07 345.95 P 1 F 3.61 (NetworkAudio) 442.95 345.95 P 3 F 3.61 (, was) 512.24 345.95 P 0.37 (developed by NCD for playing, recording, and manipulating audio data over a network. Like the) 72 331.45 P 1.44 (X Window System) 72 316.95 P 2 F 3.46 ([Scheifler92]) 170.6 316.95 P 3 F 1.44 (, it uses the client/server model to separate applications) 264.15 316.95 P 5.11 (from the specific drivers that control audio input and output devices. A free, sample) 72 302.45 P -0.53 (implementation of the NetworkAudio server and programming library is available for Sun and SGI) 72 287.95 P -0.4 (platforms; additional product versions are available or have been announced for NCD X terminals,) 72 273.45 P 2.18 (NCD PC-X servers, and SCO workstations. A number of commercial applications have also) 72 258.95 P (announced support, and the mailing list for NetworkAudio grows every day.) 72 244.45 T 1 18 Q (Introduction) 72 201.95 T 3 12 Q 0.3 0.06 (Users of the X Window System are rapidly finding that they want more from their desktop than) 72 179.95 B 0.3 0.01 (simply graphics. Driven by the wide-spread support for audio in personal computer applications,) 72 165.45 B 72 139.83 540.5 155.89 C 72 147.83 252 147.83 2 L 0.25 H 2 Z 0 X 0 K N 0 0 612 792 C 1 8 Q 0 X 0 K -0.37 (\240) 72 134.5 P 1 10 Q -0.46 (Jim Fulton \050) 77.63 130.5 P 4 F -0.46 (jim@ncd.com) 126.11 130.5 P 1 F -0.46 (\051 heads the Standards and Extensions group at NCD, where he focuses on future directions) 182.46 130.5 P 0.03 (in desktop technologies, Low Bandwidth X, network audio, and user interfaces. He has worked with and participated) 72 118 P (in the design of the X Window System since its inception at MIT in 1984.) 72 105.5 T 1 8 Q (\340) 72 81.83 T 1 10 Q (Greg Renda \050) 76 77.83 T 4 F (greg@ncd.com) 130.4 77.83 T 1 F (\051 is a Senior Engineer at NCD, where he focuses on 2d graphics and network audio.) 191.73 77.83 T FMENDPAGE %%EndPage: "1" 0 %%Trailer %%BoundingBox: 0 0 612 792 %%Pages: 14 -1 %%DocumentFonts: Helvetica-Bold %%+ Times-Italic %%+ Courier %%+ Times-Roman %%+ Times-BoldItalic %%+ Helvetica %%+ Courier-Bold %%+ Helvetica-BoldOblique %%+ Symbol nas-1.9.4/doc/mkpdf0000644002344200017510000000020212136617241012235 0ustar jonjon#!/bin/sh # # for i in *.ps do bname="`basename $i .ps`" echo "$bname.ps -> $bname.pdf" ps2pdf $bname.ps pdf/$bname.pdf done nas-1.9.4/doc/title.ps0000644002344200017510000005677612136617241012731 0ustar jonjon%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % Copyright 1993 Network Computing Devices, Inc. All rights reserved. % An unpublished work. % % $NCDId: @(#)title.ps,v 1.2 1993/03/16 23:14:18 mkm Exp $ % % FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0 % Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation. % All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor systemdict /colorimage known systemdict /currentcolortransfer known or def % Uncomment this line to force b&w on color printer % /FMPrintInColor false def /FrameDict 195 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath x1 y1 rad add moveto x1 y2 x2 y2 rad arcto x2 y2 x2 y1 rad arcto x2 y1 x1 y1 rad arcto x1 y1 x1 y2 rad arcto closepath 16 {pop} repeat } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 7 FMDOCUMENT 0 0 /Palatino-Roman FMFONTDEFINE 1 0 /Palatino-Bold FMFONTDEFINE 2 1 /Symbol FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 .1 FMFILL 2 .3 FMFILL 3 .5 FMFILL 4 .7 FMFILL 5 .9 FMFILL 6 .97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 .9 FMFILL 18 .7 FMFILL 19 .5 FMFILL 20 .3 FMFILL 21 .1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "i" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 72 81 612 720 R 7 X 0 K V 72 540 612 720 C 72 540 612 720 R 7 X 0 K V 208.12 576 342 693 R 0 X V 0.5 H 2 Z N 0 48 Q 7 X 1 K (NCD) 221.95 580.58 T 333 693 639 693 2 L 0 X 0 K N 0 0 612 792 C 0 18 Q 0 X 0 K (NCDaudio, V2.0) 207 508 T (Overview and Pr) 207 488 T (ogramming Guide) 343.15 488 T 0 14 Q (Mar) 207 426.67 T (ch 15, 1993) 232.51 426.67 T 0 10 Q (Network Computing Devices, Inc.) 207 157.33 T (350 North Bernar) 207 145.33 T (do A) 283.2 145.33 T (venue) 304.12 145.33 T (Mountain V) 207 133.33 T (iew) 259.9 133.33 T (, California 94043) 275.01 133.33 T (T) 207 121.33 T (elephone 415/694-0650) 212.21 121.33 T (F) 207 109.33 T (AX 415/961-771) 211.82 109.33 T (1) 282.57 109.33 T (Email: support@ncd.com) 207 97.33 T FMENDPAGE %%EndPage: "i" 2 %%Page: "ii" 2 612 792 0 FMBEGINPAGE 72 72 540 720 R 7 X 0 K V 1 11 Q 0 X (Copyright) 72 714 T 0 9 Q -0.08 (Copyright) 207 714 P 2 F -0.08 (\323 1993) 250.17 714 P 0 F -0.08 (by Network Computing Devices, Inc. The information contained) 279.59 714 P -0.11 (in this document is subject to change without notice. Network Computing Devices,) 207 703 P (Inc. shall not be liable for err) 207 692 T (ors contained her) 320.39 692 T (ein or for incidental or consequential) 389.27 692 T (damages in connection with the furnishing, performance, or use of this material.) 207 681 T (This document contains information which is pr) 207 670 T (otected by copyright. All rights ar) 398.25 670 T (e) 532.42 670 T (r) 207 659 T (eserved. No part of this document may be photocopied, r) 210.39 659 T (epr) 437.57 659 T (oduced, or translated) 450.67 659 T (to another language without the prior written consent of Network Computing) 207 648 T (Devices, Inc.) 207 637 T 1 11 Q (T) 72 603 T (rademarks) 78.11 603 T 0 9 Q (NCD and NCDaudio ar) 207 603 T (e trademarks of Network Computing Devices, Inc.) 301.36 603 T (X W) 207 592 T (indow System is a trademark of the Massachusetts Institute of T) 223.74 592 T (echnology) 479.24 592 T (.) 519.42 592 T 1 11 Q (Document V) 72 541 T (ersions) 134.56 541 T 0 9 Q (January) 207 541 T (, 1993) 237.18 541 T (Pr) 306 541 T (eliminary Release of this document.) 314.82 541 T (Febr) 207 530 T (uary 16, 1993) 224.75 530 T (V) 306 530 T (ersion 1.0) 311.49 530 T (Mar) 207 519 T (ch 15, 1993) 223.38 519 T (V) 306 519 T (ersion 2.0) 311.49 519 T 1 11 Q (NCDaudio V) 72 485 T (ersion) 136.99 485 T 0 9 Q (V) 207 485 T (ersion 1.0 \320 Initial version.) 212.49 485 T (V) 207 468 T (ersion 2.0 \320 Add mor) 212.49 468 T (e contr) 298.08 468 T (ol over action invocation) 325.08 468 T FMENDPAGE %%EndPage: "ii" 3 %%Trailer %%BoundingBox: 0 0 612 792 %%Pages: 2 1 %%DocumentFonts: Palatino-Roman %%+ Palatino-Bold %%+ Symbol nas-1.9.4/doc/protocol.txt0000644002344200017510000001505012136617241013622 0ustar jonjon Network Audio System Protocol Description ($Id: protocol.txt 9 1999-07-08 00:51:49Z jon $) ($NCDId: @(#)protocol.txt,v 1.2 1994/06/01 17:50:38 greg Exp $) Common Types __________________________________________________________________ Name Value __________________________________________________________________ LISTofFOO A type name of the form LISTofFOO means a counted list of elements of type FOO. The size of the length field may vary (it is not necessarily the same size as a FOO), and in some cases, it may be implicit. Except where explicitly noted, zero-length lists are legal. AUID 32-bit value (top three bits guaranteed to be zero) AUDEVICEID 32-bit value (top three bits guaranteed to be zero) AUBUCKETID 32-bit value (top three bits guaranteed to be zero) AUFLOWID 32-bit value (top three bits guaranteed to be zero) BYTE 8-bit value INT8 8-bit signed integer INT16 16-bit signed integer INT32 32-bit signed integer CARD8 8-bit unsigned integer CARD16 16-bit unsigned integer CARD32 32-bit unsigned integer AUFIXED CARD32 TIMESTAMP CARD32 BOOL {True, False} STRING8 LISTofCARD8 Connection Setup Connection Initiation byte-order: CARD8 protocol-major-version: CARD16 protocol-minor-version: CARD16 authorization-protocol-name: STRING8 authorization-protocol-data: STRING8 Server Response success: BOOL protocol-major-version: CARD16 protocol-minor-version: CARD16 length: CARD16 The client receives the following additional data if authorization fails: reason: STRING8 The client receives the following additional data if authorization is accepted: vendor: STRING8 release-number: CARD32 resource-id-base, resource-id-mask: CARD32 maximum-request-length: CARD16 min-sample-rate, max-sample-rate: CARD16 max-tracks: CARD8 data-formats: LISTofCARD8 elements: LISTofCARD8 wave-forms: LISTofCARD8 actions: LISTofCARD8 devices: LISTofDEVICEATTRIBUTES buckets: LISTofBUCKETATTRIBUTES radios: LISTofRADIOATTRIBUTES where: COMMON value-mask: CARD32 changable-mask: CARD32 id: AUID kind: CARD8 use: CARD8 format: CARD8 num-tracks: CARD8 access: CARD32 description: STRING8 DEVICE location: CARD32 gain: CARD32 min-sample-rate: CARD16 max-sample-rate: CARD16 line-mode: CARD8 children: LISTofAUDEVICEID BUCKET sample-rate: CARD16 num-samples: CARD32 DEVICEATTRIBUTES common: COMMON device: DEVICE BUCKETATTRIBUTES common: COMMON bucket: BUCKET RADIOATTRIBUTES XXX unimplemented XXX Requests *** ListDevices --> devices: LISTofDEVICEATTRIBUTES *** GetDeviceAttributes device: AUDEVICEID --> attributes: DEVICEATTRIBUTES *** SetDeviceAttributes device: AUDEVICEID attributes: DEVICEATTRIBUTES *** CreateBucket bucket: AUBUCKETID attributes: BUCKETATTRIBUTES *** DestroyBucket bucket: AUBUCKETID *** ListBuckets --> buckets: LISTofBUCKETATTRIBUTES *** GetBucketAttributes bucket: AUBUCKETID --> attributes: BUCKETATTRIBUTES *** SetBucketAttributes XXX unimplemented XXX bucket: AUBUCKETID attributes: BUCKETATTRIBUTES *** CreateRadio XXX unimplemented XXX *** DestroyRadio XXX unimplemented XXX *** ListRadios XXX unimplemented XXX *** GetRadioAttributes XXX unimplemented XXX *** SetRadioAttributes XXX unimplemented XXX *** CreateFlow flow: AUFLOWID *** DestroyFlow flow: AUFLOWID *** GetFlowAttributes XXX unimplemented XXX *** SetFlowAttributes XXX unimplemented XXX *** GetElements flow: AUFLOWID --> clocked: BOOL flow: AUFLOWID elements: LISTofELEMENT where: ELEMENT type: CARD16 element: IMPORTCLIENT or IMPORTDEVICE or IMPORTBUCKET or IMPORTWAVEFORM or IMPORTRADIO or BUNDLE or MULTIPLYCONSTANT or ADDCONSTANT or SUM or EXPORTCLIENT or EXPORTDEVICE or EXPORTBUCKET or EXPORTRADIO or EXPORTMONITOR ACTION flow: AUFLOWID element-num: CARD8 trigger-state: CARD8 trigger-prev-state: CARD8 trigger-reason: CARD8 action: CARD8 new-state: CARD8 TRACK element-num: CARD8 track: CARD8 IMPORTCLIENT sample-rate: CARD16 format: CARD8 num-tracks: CARD8 discard: BOOL max-samples: CARD32 low-water-mark: CARD32 actions: LISTofACTION IMPORTDEVICE sample-rate: CARD16 num-samples: CARD32 device: AUDEVICEID actions: LISTofACTION IMPORTBUCKET sample-rate: CARD16 num-samples: CARD32 bucket: AUBUCKETID offset: CARD32 actions: LISTofACTION IMPORTWAVEFORM sample-rate: CARD16 num-samples: CARD32 wave-form: CARD8 frequency: CARD32 actions: LISTofACTION IMPORTRADIO XXX unimplemented XXX BUNDLE tracks: LISTofTRACK MULTIPLYCONSTANT input: CARD16 constant: AUFIXED ADDCONSTANT input: CARD16 constant: AUFIXED SUM inputs: LISTofCARD16 EXPORTCLIENT sample-rate: CARD16 input: CARD16 format: CARD8 num-tracks: CARD8 discard: BOOL max-samples: CARD32 high-water-mark: CARD32 actions: LISTofACTION EXPORTDEVICE sample-rate: CARD16 input: CARD16 num-samples: CARD32 actions: LISTofACTION device: AUDEVICEID actions: LISTofACTION EXPORTBUCKET input: CARD16 num-samples: CARD32 bucket: AUBUCKETID offset: CARD32 actions: LISTofACTION EXPORTRADIO XXX unimplemented XXX EXPORTMONITOR event-rate: CARD16 input: CARD16 format: CARD8 num-tracks: CARD8 *** SetElements flow: AUFLOWID clocked: BOOL elements: LISTofELEMENT *** GetElementStates states: LISTofELEMENTSTATE --> states: LISTofELEMENTSTATE where: ELEMENTSTATE flow: AUFLOWID element-num: CARD8 state: CARD8 *** SetElementStates states: LISTofELEMENTSTATE *** GetElementParameters XXX unimplemented XXX *** SetElementParameters parameters: LISTofPARAMETER where: PARAMETER flow: AUFLOWID element-num: CARD8 parameters: LISTofCARD32 *** WriteElement flow: AUFLOWID element-num: CARD8 state: CARD8 data: LISTofBYTE *** ReadElement flow: AUFLOWID element-num: CARD8 num-bytes: CARD32 --> data: LISTofBYTE *** GrabComponent XXX unimplemented XXX *** UngrabComponent XXX unimplemented XXX *** SendEvent XXX unimplemented XXX *** GetAllowedUsers XXX unimplemented XXX *** SetAllowedUsers XXX unimplemented XXX *** ListExtensions XXX unimplemented XXX *** QueryExtension XXX unimplemented XXX *** GetCloseDownMode *** SetCloseDownMode *** KillClient *** GetServerTime *** NoOperation nas-1.9.4/doc/Imakefile0000644002344200017510000000265412136617241013037 0ustar jonjon/* * Copyright 1994 Network Computing Devices, Inc. * * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name Network Computing Devices, Inc. not be * used in advertising or publicity pertaining to distribution of this * software without specific, written prior permission. * * THIS SOFTWARE IS PROVIDED `AS-IS'. NETWORK COMPUTING DEVICES, INC., * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT * LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NONINFRINGEMENT. IN NO EVENT SHALL NETWORK * COMPUTING DEVICES, INC., BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING * SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF USE, DATA, * OR PROFITS, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND REGARDLESS OF * WHETHER IN AN ACTION IN CONTRACT, TORT OR NEGLIGENCE, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * $NCDId: @(#)Imakefile,v 1.8 1995/12/06 01:01:20 greg Exp $ */ #include "../config/NetAudio.tmpl" #define IHaveSubdirs #define PassCDebugFlags AuPassCDebugFlags SUBDIRS = man MakeSubdirs($(SUBDIRS)) DependSubdirs($(SUBDIRS)) nas-1.9.4/doc/library.ps0000644002344200017510000032774312136617241013247 0ustar jonjon%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments % % Copyright 1993 Network Computing Devices, Inc. All rights reserved. % An unpublished work. % % $NCDId: @(#)library.ps,v 1.2 1993/03/16 23:14:00 mkm Exp $ % % FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0 % Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation. % All rights reserved. % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor systemdict /colorimage known systemdict /currentcolortransfer known or def % Uncomment this line to force b&w on color printer % /FMPrintInColor false def /FrameDict 195 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath x1 y1 rad add moveto x1 y2 x2 y2 rad arcto x2 y2 x2 y1 rad arcto x2 y1 x1 y1 rad arcto x1 y1 x1 y2 rad arcto closepath 16 {pop} repeat } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 16 FMDOCUMENT 0 0 /Helvetica-Bold FMFONTDEFINE 1 0 /Palatino-Roman FMFONTDEFINE 2 0 /Courier FMFONTDEFINE 3 0 /Palatino-Italic FMFONTDEFINE 4 0 /Courier-Bold FMFONTDEFINE 5 0 /Palatino-BoldItalic FMFONTDEFINE 6 0 /Courier-Oblique FMFONTDEFINE 7 1 /ZapfDingbats FMFONTDEFINE 8 0 /Helvetica FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 .1 FMFILL 2 .3 FMFILL 3 .5 FMFILL 4 .7 FMFILL 5 .9 FMFILL 6 .97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 .9 FMFILL 18 .7 FMFILL 19 .5 FMFILL 20 .3 FMFILL 21 .1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 72 55.01 539.67 66.96 R 7 X 0 K V 0 9 Q 0 X ( Library-) 496.21 60.96 T (1) 534.67 60.96 T 72 741.31 306.65 748.66 R 7 X V 0 10 Q 0 X (NCDaudio) 72 741.99 T 70.83 738.67 540 738.67 2 L 0.2 H 2 Z N 305.35 741.29 540 748.63 R 7 X V 0 X (March 13, 1993) 468.89 741.97 T 72 87.98 540.5 720.18 R 7 X V 0 24 Q 0 X (The NCDaudio Programming Library) 124.67 704.18 T 1 11 Q (Applications may communicate with the NCDaudio server using a) 207 659.85 T -0.08 (library of C-language r) 207 646.85 P -0.08 (outines. The functions in this library generate) 317.69 646.85 P (network pr) 207 633.85 T (otocol packets and pr) 261.34 633.85 T (ovide a number of convenience util-) 365.16 633.85 T (ities to simplify operations performed by most applications.) 207 620.85 T 0 14 Q (Using the NCDaudio API) 72 587.85 T 1 11 Q (Pr) 207 567.85 T (ograms that wish to use the NCDaudio service should include the) 217.78 567.85 T (following \336le:) 207 554.85 T 2 12 Q (#include