annotate pylearn/io/wavread.py @ 1512:7f166d01bf8e

Remove deprecation warning.
author Frederic Bastien <nouiz@nouiz.org>
date Mon, 12 Sep 2011 11:59:55 -0400
parents f3b7d6956209
children
rev   line source
671
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
1 """`WavRead` Op"""
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
2 __docformat__ = "restructuredtext en"
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
3
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
4 import numpy
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
5 import theano
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
6 import wave
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
7
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
8 class WavRead(theano.Op):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
9 #TODO: add the samplerate as an output
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
10 """Read a wave file
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
11
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
12 input - the path to a wave file
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
13 output - the contents of the wave file in pcm format, and the samplerate
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
14
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
15 """
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
16
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
17 out_type = None
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
18 """The type for the output of this op.
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
19
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
20 Currently only wvector (aka int16) and dvector (aka double) are supported
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
21 """
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
22
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
23 def __init__(self, out_type):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
24 self.out_type = out_type
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
25 if out_type not in [theano.tensor.dvector, theano.tensor.wvector]:
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
26 raise TypeError(out_type)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
27 def __eq__(self, other):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
28 return (type(self) == type(other)) and (self.out_type == other.out_type)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
29 def __hash__(self):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
30 return hash(type(self)) ^ hash(self.out_type)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
31 def make_node(self, path):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
32 return theano.Apply(self, [path], [self.out_type(), theano.tensor.dscalar()])
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
33 def perform(self, node, (path,), (out, sr)):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
34 w = wave.open(path)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
35
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
36 if w.getnchannels() != 1:
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
37 raise NotImplementedError()
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
38 if w.getsampwidth() != 2: #2 bytes means 16bit samples
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
39 raise NotImplementedError()
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
40
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
41 samples = numpy.frombuffer(w.readframes(w.getnframes()), dtype='int16')
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
42
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
43 if self.out_type == theano.tensor.wvector:
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
44 out[0] = samples
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
45 elif self.out_type == theano.tensor.dvector:
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
46 out[0] = samples * (1.0 / 2**15)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
47 else:
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
48 raise NotImplementedError()
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
49
674
f3b7d6956209 changes to tzanetakis and wavread
James Bergstra <bergstrj@iro.umontreal.ca>
parents: 671
diff changeset
50 sr[0] = numpy.asarray(w.getframerate(),dtype='float64')
671
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
51
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
52 def grad(self, inputs, g_output):
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
53 return [None for i in inputs]
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
54
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
55 wav_read_int16 = WavRead(theano.tensor.wvector)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
56 wav_read_double = WavRead(theano.tensor.dvector)
9e62fd6b6677 adding wavread and tzanetakis dataset
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
57