Add audio recording

This commit is contained in:
Guido van Rossum 1992-08-20 14:46:46 +00:00
parent 3accf984b3
commit 8a861be7f3
1 changed files with 47 additions and 1 deletions

View File

@ -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()