]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add audio recording
authorGuido van Rossum <guido@python.org>
Thu, 20 Aug 1992 14:46:46 +0000 (14:46 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 20 Aug 1992 14:46:46 +0000 (14:46 +0000)
Demo/sgi/video/Vrec.py

index af3d8747d505280549206288089a6d9c19df252f..e246f5424af29563164526b8706c87d22db63a4d 100755 (executable)
@@ -75,11 +75,19 @@ def main():
                elif opt == '-t':
                        TIME = string.atoi(arg)
 
+       if args[2:]:
+               sys.stderr.write('usage: Vrec [options] [file [audiofile]]\n')
+               sys.exit(2)
+
        if args:
                filename = args[0]
        else:
                filename = 'film.video'
 
+       if args[1:] and not audio:
+               sys.stderr.write('-a turned on by appearance of 2nd file\n')
+               audio = 1
+
        if audio:
                if args[1:]:
                        audiofilename = args[1]
@@ -171,6 +179,8 @@ def record(v, filename, audiofilename):
        vout.writeheader()
        buffer = []
        thread.start_new_thread(saveframes, (vout, buffer))
+       if audiofilename:
+               initaudio(audiofilename, buffer)
        gl.wintitle('(rec) ' + filename)
        v.StartCapture()
        t0 = time.millitimer()
@@ -202,9 +212,9 @@ def saveframes(vout, buffer):
                        time.millisleep(10)
                else:
                        x = buffer[0]
-                       del buffer[0]
                        if not x:
                                break
+                       del buffer[0]
                        data, t = x
                        vout.writeframe(t, data, None)
                        del data
@@ -212,6 +222,42 @@ def saveframes(vout, buffer):
        vout.close()
 
 
+# Initialize audio recording
+
+AQSIZE = 8000
+
+def initaudio(filename, buffer):
+       import thread, aiff
+       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 'audio sampling 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)
+       thread.start_new_thread(audiorecord, (afile, aport, buffer))
+
+
+# Thread to record audio samples
+
+# XXX should use writesampsraw for efficiency, but then destroy doesn't
+# XXX seem to set the #samples in the header correctly
+
+def audiorecord(afile, aport, buffer):
+       while buffer[-1:] <> [None]:
+               data = aport.readsamps(AQSIZE/2)
+##             afile.writesampsraw(data)
+               afile.writesamps(data)
+               del data
+       afile.destroy()
+       print 'Done writing audio'
+
+
 # Don't forget to call the main program
 
 main()