diff --git a/Demo/sgi/video/makemovie.py b/Demo/sgi/video/makemovie.py
index d8b49d0..0a620c0 100755
--- a/Demo/sgi/video/makemovie.py
+++ b/Demo/sgi/video/makemovie.py
@@ -3,6 +3,7 @@
 import sv, SV
 import VFile
 import gl, GL, DEVICE
+import al, AL
 
 import time
 import sys
@@ -13,21 +14,28 @@
 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 @@
 
 	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 @@
 				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 @@
 				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 @@
 			# Quit
 			if ofile:
 				ofile.close()
+			if afile:
+				afile.destroy()
 			posix._exit(0)
 			# EndCapture dumps core...
 			v.EndCapture()
@@ -121,4 +136,36 @@
 	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()
