History

python/ext/py-source.c: add seek, thanks @davebrent for the heads up

Paul Brossier committed 12 years ago

Commit 11b49d71 parent 24931d52 files · +46 −6Browse files

Showing the changes to python (2 of 2 files). Show all

Unified · Split

2 files
  1. python/ext/py-source.c +26 −0
  2. python/tests/test_source.py +20 −6
python/ext/py-source.c+26−0
@@ -69,6 +69,11 @@ static char Py_source_close_doc[] = "" · 68 unmodified lines
6969 "\n"
7070 "Close this source now.";
7171
72+static char Py_source_seek_doc[] = ""
73+"x.seek(position)\n"
74+"\n"
75+"Seek to resampled frame position.";
76+
7277 static PyObject *
7378 Py_source_new (PyTypeObject * pytype, PyObject * args, PyObject * kwds)
7479 {
@@ -238,6 +243,25 @@ Pyaubio_source_close (Py_source *self, PyObject *unused) · 163 unmodified lines
238243 Py_RETURN_NONE;
239244 }
240245
246+static PyObject *
247+Pyaubio_source_seek (Py_source *self, PyObject *args)
248+{
249+ uint_t err = 0;
250+
251+ uint_t position;
252+ if (!PyArg_ParseTuple (args, "I", &position)) {
253+ return NULL;
254+ }
255+
256+ err = aubio_source_seek(self->o, position);
257+ if (err != 0) {
258+ PyErr_SetString (PyExc_ValueError,
259+ "error when seeking in source");
260+ return NULL;
261+ }
262+ Py_RETURN_NONE;
263+}
264+
241265 static PyMethodDef Py_source_methods[] = {
242266 {"get_samplerate", (PyCFunction) Pyaubio_source_get_samplerate,
243267 METH_NOARGS, Py_source_get_samplerate_doc},
@@ -249,6 +273,8 @@ static PyMethodDef Py_source_methods[] = { · 5 unmodified lines
249273 METH_NOARGS, Py_source_do_multi_doc},
250274 {"close", (PyCFunction) Pyaubio_source_close,
251275 METH_NOARGS, Py_source_close_doc},
276+ {"seek", (PyCFunction) Pyaubio_source_seek,
277+ METH_VARARGS, Py_source_seek_doc},
252278 {NULL} /* sentinel */
253279 };
254280
python/tests/test_source.py+20−6
@@ -32,7 +32,7 @@ class aubio_source_test_case(aubio_source_test_case_base): · 31 unmodified lines
3232
3333 class aubio_source_read_test_case(aubio_source_test_case_base):
3434
35− def read_from_sink(self, f):
35+ def read_from_source(self, f):
3636 total_frames = 0
3737 while True:
3838 vec, read = f()
@@ -42,25 +42,26 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 3 unmodified lines
4242 print "(", total_frames, "frames", "in",
4343 print total_frames / f.hop_size, "blocks", "at", "%dHz" % f.samplerate, ")",
4444 print "from", f.uri
45+ return total_frames
4546
4647 def test_samplerate_hopsize(self):
4748 for p in list_of_sounds:
4849 for samplerate, hop_size in zip([0, 44100, 8000, 32000], [ 512, 512, 64, 256]):
4950 f = source(p, samplerate, hop_size)
5051 assert f.samplerate != 0
51− self.read_from_sink(f)
52+ self.read_from_source(f)
5253
5354 def test_samplerate_none(self):
5455 for p in list_of_sounds:
5556 f = source(p)
5657 assert f.samplerate != 0
57− self.read_from_sink(f)
58+ self.read_from_source(f)
5859
5960 def test_samplerate_0(self):
6061 for p in list_of_sounds:
6162 f = source(p, 0)
6263 assert f.samplerate != 0
63− self.read_from_sink(f)
64+ self.read_from_source(f)
6465
6566 def test_wrong_samplerate(self):
6667 for p in list_of_sounds:
@@ -85,11 +86,23 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 18 unmodified lines
8586 f = source(p, 0, 0)
8687 assert f.samplerate != 0
8788 assert f.hop_size != 0
88− self.read_from_sink(f)
89+ self.read_from_source(f)
90+
91+ def test_seek_to_half(self):
92+ from random import randint
93+ for p in list_of_sounds:
94+ f = source(p, 0, 0)
95+ assert f.samplerate != 0
96+ assert f.hop_size != 0
97+ a = self.read_from_source(f)
98+ c = randint(0, a)
99+ f.seek(c)
100+ b = self.read_from_source(f)
101+ assert a == b + c
89102
90103 class aubio_source_readmulti_test_case(aubio_source_read_test_case):
91104
92− def read_from_sink(self, f):
105+ def read_from_source(self, f):
93106 total_frames = 0
94107 while True:
95108 vec, read = f.do_multi()
@@ -100,6 +113,7 @@ class aubio_source_readmulti_test_case(aubio_source_read_test_case): · 4 unmodified lines
100113 print f.channels, "channels and",
101114 print total_frames / f.hop_size, "blocks", "at", "%dHz" % f.samplerate, ")",
102115 print "from", f.uri
116+ return total_frames
103117
104118 if __name__ == '__main__':
105119 from unittest import main

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t