3 error
= 'audiodev.error'
6 # Private instance variables
7 access frameratelist
, nchannelslist
, sampwidthlist
, oldparams
, \
8 params
, config
, inited_outrate
, inited_width
, \
9 inited_nchannels
, port
, converter
: private
11 frameratelist
= [(48000, AL
.RATE_48000
),
12 (44100, AL
.RATE_44100
),
13 (32000, AL
.RATE_32000
),
14 (22050, AL
.RATE_22050
),
15 (16000, AL
.RATE_16000
),
16 (11025, AL
.RATE_11025
),
17 ( 8000, AL
.RATE_8000
)]
18 nchannelslist
= [(1, AL
.MONO
),
20 sampwidthlist
= [(1, AL
.SAMPLE_8
),
27 self
.params
= [AL
.OUTPUT_RATE
, 0]
28 self
.config
= al
.newconfig()
29 self
.inited_outrate
= 0
31 self
.inited_nchannels
= 0
41 al
.setparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
48 while self
.port
.getfilled() > 0:
58 al
.setparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
61 def setoutrate(self
, rate
):
62 for (raw
, cooked
) in self
.frameratelist
:
64 self
.params
[1] = cooked
65 self
.inited_outrate
= 1
68 raise error
, 'bad output rate'
70 def setsampwidth(self
, width
):
71 for (raw
, cooked
) in self
.sampwidthlist
:
73 self
.config
.setwidth(cooked
)
79 self
.config
.setwidth(AL
.SAMPLE_16
)
80 self
.converter
= self
.ulaw2lin
82 raise error
, 'bad sample width'
84 def setnchannels(self
, nchannels
):
85 for (raw
, cooked
) in self
.nchannelslist
:
87 self
.config
.setchannels(cooked
)
88 self
.inited_nchannels
= 1
91 raise error
, 'bad # of channels'
93 def writeframes(self
, data
):
94 if not (self
.inited_outrate
and self
.inited_nchannels
):
95 raise error
, 'params not specified'
98 self
.port
= al
.openport('Python', 'w', self
.config
)
99 self
.oldparams
= self
.params
[:]
100 al
.getparams(AL
.DEFAULT_DEVICE
, self
.oldparams
)
101 al
.setparams(AL
.DEFAULT_DEVICE
, self
.params
)
103 data
= self
.converter(data
)
104 self
.port
.writesamps(data
)
108 return self
.port
.getfilled()
112 def getfillable(self
):
114 return self
.port
.getfillable()
116 return self
.config
.getqueuesize()
121 def ulaw2lin(self
, data
):
123 return audioop
.ulaw2lin(data
, 2)
125 class Play_Audio_sun
:
126 access outrate
, sampwidth
, nchannels
, inited_outrate
, inited_width
, \
127 inited_nchannels
, converter
: private
133 self
.inited_outrate
= 0
134 self
.inited_width
= 0
135 self
.inited_nchannels
= 0
136 self
.converter
= None
143 def setoutrate(self
, rate
):
145 self
.inited_outrate
= 1
147 def setsampwidth(self
, width
):
148 self
.sampwidth
= width
149 self
.inited_width
= 1
151 def setnchannels(self
, nchannels
):
152 self
.nchannels
= nchannels
153 self
.inited_nchannels
= 1
155 def writeframes(self
, data
):
156 if not (self
.inited_outrate
and self
.inited_width
and self
.inited_nchannels
):
157 raise error
, 'params not specified'
160 self
.port
= sunaudiodev
.open('w')
161 info
= self
.port
.getinfo()
162 info
.o_sample_rate
= self
.outrate
163 info
.o_channels
= self
.nchannels
164 if self
.sampwidth
== 0:
166 self
.o_encoding
= ENCODING_ULAW
168 info
.o_precision
= 8 * self
.sampwidth
169 info
.o_encoding
= SUNAUDIODEV
.ENCODING_LINEAR
170 self
.port
.setinfo(info
)
172 data
= self
.converter(data
)
173 self
.port
.write(data
)
189 return self
.port
.obufcount()
193 def getfillable(self
):
194 return BUFFERSIZE
- self
.getfilled()
199 return Play_Audio_sgi()
203 return Play_Audio_sun()
205 raise error
, 'no audio device'