home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 May / maximum-cd-2010-05.iso / DiscContents / boxee-0.9.20.10711.exe / system / python / Lib / plat-mac / Audio_mac.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-07-20  |  4.4 KB  |  135 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. QSIZE = 100000
  5. error = 'Audio_mac.error'
  6.  
  7. class Play_Audio_mac:
  8.     
  9.     def __init__(self, qsize = QSIZE):
  10.         self._chan = None
  11.         self._qsize = qsize
  12.         self._outrate = 22254
  13.         self._sampwidth = 1
  14.         self._nchannels = 1
  15.         self._gc = []
  16.         self._usercallback = None
  17.  
  18.     
  19.     def __del__(self):
  20.         self.stop()
  21.         self._usercallback = None
  22.  
  23.     
  24.     def wait(self):
  25.         import time
  26.         while self.getfilled():
  27.             time.sleep(0.10000000000000001)
  28.         self._chan = None
  29.         self._gc = []
  30.  
  31.     
  32.     def stop(self, quietNow = 1):
  33.         self._chan = None
  34.         self._gc = []
  35.  
  36.     
  37.     def setoutrate(self, outrate):
  38.         self._outrate = outrate
  39.  
  40.     
  41.     def setsampwidth(self, sampwidth):
  42.         self._sampwidth = sampwidth
  43.  
  44.     
  45.     def setnchannels(self, nchannels):
  46.         self._nchannels = nchannels
  47.  
  48.     
  49.     def writeframes(self, data):
  50.         import time
  51.         bufferCmd = bufferCmd
  52.         callBackCmd = callBackCmd
  53.         extSH = extSH
  54.         import Carbon.Sound
  55.         import struct
  56.         import MacOS
  57.         if not self._chan:
  58.             Snd = Snd
  59.             import Carbon
  60.             self._chan = Snd.SndNewChannel(5, 0, self._callback)
  61.         
  62.         nframes = len(data) / self._nchannels / self._sampwidth
  63.         if len(data) != nframes * self._nchannels * self._sampwidth:
  64.             raise error, 'data is not a whole number of frames'
  65.         
  66.         while self._gc and self.getfilled() + nframes > self._qsize / self._nchannels / self._sampwidth:
  67.             time.sleep(0.10000000000000001)
  68.         if self._sampwidth == 1:
  69.             import audioop
  70.             data = audioop.add(data, '\x80' * len(data), 1)
  71.         
  72.         h1 = struct.pack('llHhllbbl', id(data) + MacOS.string_id_to_buffer, self._nchannels, self._outrate, 0, 0, 0, extSH, 60, nframes)
  73.         h2 = 22 * '\x00'
  74.         h3 = struct.pack('hhlll', self._sampwidth * 8, 0, 0, 0, 0)
  75.         header = h1 + h2 + h3
  76.         self._gc.append((header, data))
  77.         self._chan.SndDoCommand((bufferCmd, 0, header), 0)
  78.         self._chan.SndDoCommand((callBackCmd, 0, 0), 0)
  79.  
  80.     
  81.     def _callback(self, *args):
  82.         del self._gc[0]
  83.         if self._usercallback:
  84.             self._usercallback()
  85.         
  86.  
  87.     
  88.     def setcallback(self, callback):
  89.         self._usercallback = callback
  90.  
  91.     
  92.     def getfilled(self):
  93.         filled = 0
  94.         for header, data in self._gc:
  95.             filled = filled + len(data)
  96.         
  97.         return filled / self._nchannels / self._sampwidth
  98.  
  99.     
  100.     def getfillable(self):
  101.         return self._qsize / self._nchannels / self._sampwidth - self.getfilled()
  102.  
  103.     
  104.     def ulaw2lin(self, data):
  105.         import audioop
  106.         return audioop.ulaw2lin(data, 2)
  107.  
  108.  
  109.  
  110. def test():
  111.     import aifc
  112.     import EasyDialogs
  113.     fn = EasyDialogs.AskFileForOpen(message = 'Select an AIFF soundfile', typeList = ('AIFF',))
  114.     if not fn:
  115.         return None
  116.     
  117.     af = aifc.open(fn, 'r')
  118.     print af.getparams()
  119.     p = Play_Audio_mac()
  120.     p.setoutrate(af.getframerate())
  121.     p.setsampwidth(af.getsampwidth())
  122.     p.setnchannels(af.getnchannels())
  123.     BUFSIZ = 10000
  124.     while None:
  125.         data = af.readframes(BUFSIZ)
  126.         if not data:
  127.             break
  128.         
  129.         print 'wrote', len(data), 'space', p.getfillable()
  130.     p.wait()
  131.  
  132. if __name__ == '__main__':
  133.     test()
  134.  
  135.