diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2015-05-22 10:34:21 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2016-01-20 13:28:48 +0100 | 
| commit | 60cd3f9dc45b194198198591a7bf48e2d8afb16c (patch) | |
| tree | 1f32bc03dbd42da23f5c4707f8aa9d51f1193eb3 /drumgizmo | |
| parent | fd501c7dc4042ce993b16a2d079d5b05af2ecb07 (diff) | |
Added framesize control mechanism to the engine, and made us of it in the cachemanager and drumkitloader.
Diffstat (limited to 'drumgizmo')
| -rw-r--r-- | drumgizmo/drumgizmoc.cc | 19 | ||||
| -rw-r--r-- | drumgizmo/output/alsa/alsa.cc | 12 | 
2 files changed, 30 insertions, 1 deletions
| diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 1ccc151..ab91423 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -328,6 +328,8 @@ int CliMain::run(int argc, char *argv[])    DrumGizmo gizmo(oe, ie); +  gizmo.setFrameSize(oe->getBufferSize()); +    if(kitfile == "" || !gizmo.loadkit(kitfile)) {      printf("Failed to load \"%s\".\n", kitfile.c_str());      return 1; @@ -357,7 +359,22 @@ int CliMain::run(int argc, char *argv[])      return 1;    } -  gizmo.run(endpos); +  size_t pos = 0; +  size_t nsamples = oe->getBufferSize(); +  sample_t *samples = (sample_t *)malloc(nsamples * sizeof(sample_t)); + +  ie->start(); +  oe->start(); + +  while(gizmo.run(pos, samples, nsamples) == true) { +    pos += nsamples; +    if(endpos != -1 && pos >= (size_t)endpos) break; +  } + +  ie->stop(); +  oe->stop(); + +  free(samples);    printf("Quit.\n"); fflush(stdout); diff --git a/drumgizmo/output/alsa/alsa.cc b/drumgizmo/output/alsa/alsa.cc index 71e0c3d..f9a2068 100644 --- a/drumgizmo/output/alsa/alsa.cc +++ b/drumgizmo/output/alsa/alsa.cc @@ -49,6 +49,7 @@ public:    void pre(size_t size);    void run(int channel, sample_t* data, size_t size);    void post(size_t size); +  size_t bufsize();    size_t samplerate();  private: @@ -158,6 +159,11 @@ void Alsa::post(size_t size)    snd_pcm_writei(handle, data, size);  } +size_t Alsa::bufsize() +{ +  return frames; +} +  size_t Alsa::samplerate()  {    return srate; @@ -217,6 +223,12 @@ extern "C" {      alsa->post(s);    } +  size_t bufsize(void *h) +  { +    Alsa *alsa = (Alsa*)h; +    return alsa->bufsize(); +  } +    size_t samplerate(void *h)    {      Alsa *alsa = (Alsa*)h; | 
