1 error
= 'audiodev.error'
4 # Private instance variables
5 access frameratelist
, nchannelslist
, sampwidthlist
, oldparams
, \
6 params
, config
, inited_outrate
, inited_width
, \
7 inited_nchannels
, port
, converter
, classinited
: private
10 frameratelist
= nchannelslist
= sampwidthlist
= None
14 Play_Audio_sgi
.frameratelist
= [
15 (48000, AL
.RATE_48000
),
16 (44100, AL
.RATE_44100
),
17 (32000, AL
.RATE_32000
),
18 (22050, AL
.RATE_22050
),
19 (16000, AL
.RATE_16000
),
20 (11025, AL
.RATE_11025
),
21 ( 8000, AL
.RATE_8000
),
23 Play_Audio_sgi
.nchannelslist
= [
27 Play_Audio_sgi
.sampwidthlist
= [
32 Play_Audio_sgi
.classinited
= 1
36 if not self
.classinited
:
39 self
.params
= [AL
.OUTPUT_RATE
, 0]
40 self
.config
= al
.newconfig()
41 self
.inited_outrate
= 0
43 self
.inited_nchannels
= 0
53 al
.setparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
60 while self
.port
.getfilled() > 0:
70 al
.setparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
73 def setoutrate(self
, rate
):
74 for (raw
, cooked
) in self
.frameratelist
:
76 self
.params
[1] = cooked
77 self
.inited_outrate
= 1
80 raise error
, 'bad output rate'
82 def setsampwidth(self
, width
):
83 for (raw
, cooked
) in self
.sampwidthlist
:
85 self
.config
.setwidth(cooked
)
92 self
.config
.setwidth(AL
.SAMPLE_16
)
93 self
.converter
= self
.ulaw2lin
95 raise error
, 'bad sample width'
97 def setnchannels(self
, nchannels
):
98 for (raw
, cooked
) in self
.nchannelslist
:
100 self
.config
.setchannels(cooked
)
101 self
.inited_nchannels
= 1
104 raise error
, 'bad # of channels'
106 def writeframes(self
, data
):
107 if not (self
.inited_outrate
and self
.inited_nchannels
):
108 raise error
, 'params not specified'
111 self
.port
= al
.openport('Python', 'w', self
.config
)
112 self
.oldparams
= self
.params
[:]
113 al
.getparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
114 al
.setparams(AL
.DEFAULT_DEVICE
, self
.params
)
116 data
= self
.converter(data
)
117 self
.port
.writesamps(data
)
121 return self
.port
.getfilled()
125 def getfillable(self
):
127 return self
.port
.getfillable()
129 return self
.config
.getqueuesize()
134 def ulaw2lin(self
, data
):
136 return audioop
.ulaw2lin(data
, 2)
138 class Play_Audio_sun
:
139 access outrate
, sampwidth
, nchannels
, inited_outrate
, inited_width
, \
140 inited_nchannels
, converter
: private
146 self
.inited_outrate
= 0
147 self
.inited_width
= 0
148 self
.inited_nchannels
= 0
149 self
.converter
= None
156 def setoutrate(self
, rate
):
158 self
.inited_outrate
= 1
160 def setsampwidth(self
, width
):
161 self
.sampwidth
= width
162 self
.inited_width
= 1
164 def setnchannels(self
, nchannels
):
165 self
.nchannels
= nchannels
166 self
.inited_nchannels
= 1
168 def writeframes(self
, data
):
169 if not (self
.inited_outrate
and self
.inited_width
and self
.inited_nchannels
):
170 raise error
, 'params not specified'
172 import sunaudiodev
, SUNAUDIODEV
173 self
.port
= sunaudiodev
.open('w')
174 info
= self
.port
.getinfo()
175 info
.o_sample_rate
= self
.outrate
176 info
.o_channels
= self
.nchannels
177 if self
.sampwidth
== 0:
179 self
.o_encoding
= ENCODING_ULAW
181 info
.o_precision
= 8 * self
.sampwidth
182 info
.o_encoding
= SUNAUDIODEV
.ENCODING_LINEAR
183 self
.port
.setinfo(info
)
185 data
= self
.converter(data
)
186 self
.port
.write(data
)
202 return self
.port
.obufcount()
206 def getfillable(self
):
207 return BUFFERSIZE
- self
.getfilled()
212 return Play_Audio_sgi()
216 return Play_Audio_sun()
220 return Audio_mac
.Play_Audio_mac()
222 raise error
, 'no audio device'
224 def test(fn
= 'f:just samples:just.aif'):
226 af
= aifc
.open(fn
, 'r')
227 print fn
, af
.getparams()
229 p
.setoutrate(af
.getframerate())
230 p
.setsampwidth(af
.getsampwidth())
231 p
.setnchannels(af
.getnchannels())
232 BUFSIZ
= af
.getframerate()/af
.getsampwidth()/af
.getnchannels()
234 data
= af
.readframes(BUFSIZ
)
240 if __name__
== '__main__':