Mercurial > pylearn
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 |