Changeset 1a121ca


Ignore:
Timestamp:
Feb 23, 2014, 9:32:49 PM (10 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
060a3135
Parents:
31a5c405
Message:

python/ext/py-sink.c: add channels and do_multi

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/ext/py-sink.c

    r31a5c405 r1a121ca  
    77  char_t* uri;
    88  uint_t samplerate;
     9  uint_t channels;
    910} Py_sink;
    1011
     
    1718  char_t* uri = NULL;
    1819  uint_t samplerate = 0;
    19   static char *kwlist[] = { "uri", "samplerate", NULL };
     20  uint_t channels = 0;
     21  static char *kwlist[] = { "uri", "samplerate", "channels", NULL };
    2022
    21   if (!PyArg_ParseTupleAndKeywords (args, kwds, "|sI", kwlist,
    22           &uri, &samplerate)) {
     23  if (!PyArg_ParseTupleAndKeywords (args, kwds, "|sII", kwlist,
     24          &uri, &samplerate, &channels)) {
    2325    return NULL;
    2426  }
     
    4446  }
    4547
     48  self->channels = 1;
     49  if ((sint_t)channels > 0) {
     50    self->channels = channels;
     51  } else if ((sint_t)channels < 0) {
     52    PyErr_SetString (PyExc_ValueError,
     53        "can not use negative or null value for channels");
     54    return NULL;
     55  }
     56
    4657  return (PyObject *) self;
    4758}
    4859
    49 AUBIO_INIT(sink , self->uri, self->samplerate)
     60static int
     61Py_sink_init (Py_sink * self, PyObject * args, PyObject * kwds)
     62{
     63  if (self->channels == 1) {
     64    self->o = new_aubio_sink ( self->uri, self->samplerate );
     65  } else {
     66    self->o = new_aubio_sink ( self->uri, 0 );
     67    aubio_sink_preset_channels ( self->o, self->channels );
     68    aubio_sink_preset_samplerate ( self->o, self->samplerate );
     69  }
     70  if (self->o == NULL) {
     71    PyErr_SetString (PyExc_StandardError, "error creating sink with this uri");
     72    return -1;
     73  }
     74  self->samplerate = aubio_sink_get_samplerate ( self->o );
     75  self->channels = aubio_sink_get_channels ( self->o );
     76
     77  return 0;
     78}
    5079
    5180AUBIO_DEL(sink)
    5281
    5382/* function Py_sink_do */
    54 static PyObject * 
     83static PyObject *
    5584Py_sink_do(Py_sink * self, PyObject * args)
    5685{
     
    75104  }
    76105
    77  
    78  
     106
     107
    79108
    80109
     
    85114}
    86115
     116/* function Py_sink_do */
     117static PyObject *
     118Py_sink_do_multi(Py_sink * self, PyObject * args)
     119{
     120  /* input vectors python prototypes */
     121  PyObject * write_data_obj;
     122
     123  /* input vectors prototypes */
     124  fmat_t * write_data;
     125  uint_t write;
     126
     127
     128  if (!PyArg_ParseTuple (args, "OI", &write_data_obj, &write)) {
     129    return NULL;
     130  }
     131
     132
     133  /* input vectors parsing */
     134  write_data = PyAubio_ArrayToCFmat (write_data_obj);
     135
     136  if (write_data == NULL) {
     137    return NULL;
     138  }
     139
     140
     141
     142
     143
     144  /* compute _do function */
     145  aubio_sink_do_multi (self->o, write_data, write);
     146  Py_RETURN_NONE;
     147}
     148
    87149AUBIO_MEMBERS_START(sink)
    88150  {"uri", T_STRING, offsetof (Py_sink, uri), READONLY, ""},
    89151  {"samplerate", T_INT, offsetof (Py_sink, samplerate), READONLY, ""},
     152  {"channels", T_INT, offsetof (Py_sink, channels), READONLY, ""},
    90153AUBIO_MEMBERS_STOP(sink)
    91154
     
    98161
    99162static PyMethodDef Py_sink_methods[] = {
    100   {"close", (PyCFunction) Pyaubio_sink_close,
    101     METH_NOARGS, ""},
     163  {"__call__", (PyCFunction) Py_sink_do, METH_VARARGS,
     164    "x.__call__(vec, write)\n"
     165    "write monophonic vector to sink"
     166    ""},
     167  {"do", (PyCFunction) Py_sink_do, METH_VARARGS,
     168    "x.do(vec, write)\n"
     169    "write monophonic vector to sink"
     170    ""},
     171  {"do_multi", (PyCFunction) Py_sink_do_multi, METH_VARARGS,
     172    "x.do_multi(mat, write)\n"
     173    "write polyphonic vector to sink"},
     174  {"close", (PyCFunction) Pyaubio_sink_close, METH_NOARGS,
     175    "x.close()\n"
     176    "close this sink now"},
    102177  {NULL} /* sentinel */
    103178};
Note: See TracChangeset for help on using the changeset viewer.