]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Hacked in audio support.
authorGuido van Rossum <guido@python.org>
Tue, 18 Aug 1992 16:01:07 +0000 (16:01 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 18 Aug 1992 16:01:07 +0000 (16:01 +0000)
Demo/sgi/video/makemovie.py

index d8b49d0bec6bb09a1cb397416f140fcb04f690d7..0a620c0a75086512a03fada89a5be66f9390f191 100755 (executable)
@@ -3,6 +3,7 @@
 import sv, SV
 import VFile
 import gl, GL, DEVICE
+import al, AL
 
 import time
 import sys
@@ -13,21 +14,28 @@ import string
 def main():
        QSIZE = 16
        TIME = 5
+       audio = 0
 
-       opts, args = getopt.getopt(sys.argv[1:], 'q:t:')
+       opts, args = getopt.getopt(sys.argv[1:], 'aq:t:')
        for opt, arg in opts:
-               if opt == '-q':
+               if opt == '-a':
+                       audio = 1
+               elif opt == '-q':
                        QSIZE = string.atoi(arg)
                elif opt == '-t':
                        TIME = string.atoi(arg)
 
        if args:
                filename = args[0]
-               if args[1:]:
-                       print 'Warning: only first filename arg is used'
        else:
                filename = 'film.video'
 
+       if audio:
+               if args[1:]:
+                       audiofilename = args[1]
+               else:
+                       audiofilename = 'film.aiff'
+
        gl.foreground()
 
        x, y = SV.PAL_XMAX / 4, SV.PAL_YMAX / 4
@@ -61,6 +69,7 @@ def main():
 
        print 'Click left mouse to start recording', TIME, 'seconds'
        ofile = None
+       afile = None
        # Mouse down opens the file & freezes window
        # Mouse up starts recording frames
 
@@ -81,9 +90,14 @@ def main():
                                gl.prefsize(x, y)
                                gl.winconstraints()
                                gl.wintitle('* ' + filename)
+                               if audio:
+                                       afile = initaudio(audiofilename)
                                continue
-
-                       # Mouse up -- actual recording
+                       # Mouse up -- start actual recording
+                       global recording, stop_recording
+                       if audio:
+                               stop_recording = 0
+                               recording.release()
                        t0 = time.millitimer()
                        v.StartCapture()
                        while 1:
@@ -91,11 +105,10 @@ def main():
                                if t >= TIME*1000:
                                        break
                                if v.GetCaptured() > 2:
-                                       print '(1)',
                                        doframe(v, ofile, x, y, t)
                        v.StopCapture()
+                       stop_recording = 1
                        while v.GetCaptured() > 0:
-                               print '(2)',
                                doframe(v, ofile, x, y, t)
                                t = time.millitimer() - t0
                        gl.wintitle(filename)
@@ -109,6 +122,8 @@ def main():
                        # Quit
                        if ofile:
                                ofile.close()
+                       if afile:
+                               afile.destroy()
                        posix._exit(0)
                        # EndCapture dumps core...
                        v.EndCapture()
@@ -121,4 +136,36 @@ def doframe(v, ofile, x, y, t):
        cd.UnlockCaptureData()
        ofile.writeframe(t, data, None)
 
+AQSIZE = 16000
+
+def initaudio(filename):
+       import thread, aiff
+       global recording, stop_recording
+       afile = aiff.Aiff().init(filename, 'w')
+       afile.nchannels = AL.MONO
+       afile.sampwidth = AL.SAMPLE_8
+       params = [AL.INPUT_RATE, 0]
+       al.getparams(AL.DEFAULT_DEVICE, params)
+       print 'rate =', params[1]
+       afile.samprate = params[1]
+       c = al.newconfig()
+       c.setchannels(AL.MONO)
+       c.setqueuesize(AQSIZE)
+       c.setwidth(AL.SAMPLE_8)
+       aport = al.openport(filename, 'r', c)
+       recording = thread.allocate_lock()
+       recording.acquire()
+       stop_recording = 0
+       thread.start_new_thread(recorder, (afile, aport))
+       return afile
+
+def recorder(afile, aport):
+       # XXX recording more than one fragment doesn't work
+       # XXX (the thread never dies)
+       recording.acquire()
+       while not stop_recording:
+               data = aport.readsamps(AQSIZE/2)
+               afile.writesampsraw(data)
+               del data
+
 main()