Browse Source

when we are doing producing, also notify that we are finished...

disable a bunch of debugging print's...

document why we need to keep a pauseProducing, bug in twisted...

[git-p4: depot-paths = "//depot/": change = 1423]
main
John-Mark Gurney 15 years ago
parent
commit
9bfcbeea97
1 changed files with 25 additions and 12 deletions
  1. +25
    -12
      audioraw.py

+ 25
- 12
audioraw.py View File

@@ -1,5 +1,6 @@
#!/usr/bin/env python
# Copyright 2009 John-Mark Gurney <jmg@funkthat.com>

'''Audio Raw Converter'''

from DIDLLite import AudioItem, Album, Resource, ResourceList
@@ -38,17 +39,25 @@ class DecoderProducer:
implements(IPullProducer)

def __init__(self, consumer, decoder, tbytes, skipbytes):
'''skipbytes should always be small. It is here in case
someone requests the middle of a sample.'''

self.decoder = decoder
self.consumer = consumer
self.tbytes = tbytes
self.skipbytes = skipbytes
#print 'DPregP', `self`, `self.tbytes`, `self.skipbytes`
consumer.registerProducer(self, False)
self.resumeProducing()

def pauseProducing(self):
print 'DPpP, doing nothing'
# XXX - bug in Twisted 8.2.0 on pipelined requests this is
# called: http://twistedmatrix.com/trac/ticket/3919
pass

def resumeProducing(self):
r = self.decoder.read(8*1024)
#print 'DPrP', `self`
r = self.decoder.read(oneblk=True)
if r:
#print 'DPrP:', len(r)
if self.skipbytes:
@@ -60,16 +69,19 @@ class DecoderProducer:
r = r[:send]
self.tbytes -= len(r)
self.consumer.write(r)
#print 'write %d bytes, remaining %d' % (len(r), self.tbytes)
if self.tbytes:
return

print 'DPurP'
#print 'DPurP', `self`
self.consumer.unregisterProducer()
self.consumer.finish()

def stopProducing(self):
print 'DPsP'
#print 'DPsP', `self`
self.decoder.close()
self.decoder = None
self.consumer = None

class AudioResource(resource.Resource):
isLeaf = True
@@ -95,6 +107,7 @@ class AudioResource(resource.Resource):
return start, end - start + 1

def render(self, request):
#print 'render:', `request`
decoder = self.dec(self.f)
request.setHeader('content-type', makemtfromdec(decoder))
bytespersample = decoder.channels * decoder.bitspersample / 8
@@ -105,15 +118,15 @@ class AudioResource(resource.Resource):
request.setHeader('accept-ranges', 'bytes')

if request.requestHeaders.hasHeader('range'):
print 'range req:', `request.requestHeaders.getRawHeaders('range')`
#print 'range req:', `request.requestHeaders.getRawHeaders('range')`
start, cnt = self.calcrange(
request.requestHeaders.getRawHeaders('range')[0],
tbytes)
skipbytes = start % bytespersample

print 'going:', start / bytespersample
#print 'going:', start / bytespersample
decoder.goto(self.start + start / bytespersample)
print 'there'
#print 'there'

request.setHeader('content-length', cnt)
request.setHeader('content-range', 'bytes %s-%s/%s' %
@@ -126,7 +139,7 @@ class AudioResource(resource.Resource):
return ''

DecoderProducer(request, decoder, tbytes, skipbytes)
print 'producing render'
#print 'producing render', `decoder`, `tbytes`, `skipbytes`

# and make sure the connection doesn't get closed
return server.NOT_DONE_YET
@@ -149,10 +162,10 @@ class AudioDisc(FSObject, Album):
# XXX - exclude track 1 pre-gap?
kwargs['content'] = AudioResource(self.file,
kwargs.pop('decoder'), 0, kwargs['samples'])
print 'doing construction'
#print 'doing construction'
Album.__init__(self, *args, **kwargs)

print 'adding resource'
#print 'adding resource'
self.url = '%s/%s' % (self.cd.urlbase, self.id)
self.res = ResourceList()
r = Resource(self.url, 'http-get:*:%s:*' % makeaudiomt(bitsps,
@@ -164,7 +177,7 @@ class AudioDisc(FSObject, Album):
r.bitsPerSample = bitsps
r.nrAudioChannels = nchan
self.res.append(r)
print 'completed'
#print 'completed'

def sort(self, fun=lambda x, y: cmp(int(x.title), int(y.title))):
return list.sort(self, fun)
@@ -173,7 +186,7 @@ class AudioDisc(FSObject, Album):
r = [ str(x['number']) for x in
self.cuesheet['tracks_array'] if x['number'] not in
(170, 255) ]
print 'gC:', `r`
#print 'gC:', `r`
return r

def findtrackidx(self, trk):


Loading…
Cancel
Save