home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Demo / sgi / cl / lin2ulaw.py < prev    next >
Text File  |  1993-02-19  |  1KB  |  40 lines

  1. # This program converts a raw linear audio stream into a U-law stream.
  2. # Input comes from standard input, output goes to standard output.
  3. # Since in U-law the channels are encoded independently from each
  4. # other and there is no dependence on the sampling frequency, we can
  5. # get away with the frame rate of 8000 samples per second and telling
  6. # the compressor that the data is mono.
  7.  
  8. import cl, CL
  9.  
  10. def lin2ulaw(infile, outfile, nchannels):
  11.     comp = cl.OpenCompressor(CL.G711_ULAW)
  12.     if nchannels == 1:
  13.         orig = CL.MONO
  14.     elif nchannels == 2:
  15.         orig = CL.STEREO_INTERLEAVED
  16.     # The important parameters are ORIGINAL_FORMAT and the two
  17.     # sizes.  The FRAME_RATE doesn't matter in U-law, and the
  18.     # BITS_PER_COMPONENT is 16 by default.
  19.     # Notice that the COMPRESSED_BUFFER_SIZE is twice the needed
  20.     # size.
  21.     params = [CL.ORIGINAL_FORMAT, orig, \
  22.           CL.BITS_PER_COMPONENT, 16, \
  23.           CL.FRAME_RATE, 8000, \
  24.           CL.FRAME_BUFFER_SIZE, 8192, \
  25.           CL.COMPRESSED_BUFFER_SIZE, 8192]
  26.     comp.SetParams(params)
  27.     dummy = comp.Compress(0, '')
  28.     while 1:
  29.         audio = infile.read(8192)
  30.         if not audio:
  31.             break
  32.         data = comp.Compress(len(audio) / (nchannels * 2), audio)
  33.         outfile.write(data)
  34.     comp.CloseCompressor()
  35.  
  36. def main():
  37.     import sys
  38.  
  39.     lin2ulaw(sys.stdin, sys.stdout, 1)
  40.