File: ecidoc_example.cpp

package info (click to toggle)
ecasound 2.9.3-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 6,292 kB
  • sloc: cpp: 39,475; sh: 4,335; lisp: 1,918; ansic: 1,883; makefile: 888; python: 617; ruby: 202
file content (55 lines) | stat: -rw-r--r-- 1,701 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*************************************************************************
 * Implementation of the following:
 * 
 * 1. Setup ECI to read audio from file, apply a 100Hz lowpass filter, and 
 *    send it to the soundcard (/dev/dsp).
 * 2. Every second, check the current position. If the stream has
 *    been running for over 15 seconds, exit immediately. Also,
 *    every second, increase the lowpass filter's cutoff frequency
 *    by 500Hz.
 * 3. Stop the stream (if not already finished) and disconnect the 
 *    chainsetup. Print chain operator status info.
 ************************************************************************/

#include <iostream>
#include <unistd.h>
#include <eca-control-interface.h>

/* compile with: 
 *
 * c++ -o ecidoc_example ecidoc_example.cpp `libecasoundc-config --cflags --libs`
 */

int main(int argc, char *argv[])
{
  double cutoff_inc = 500.0;

  ECA_CONTROL_INTERFACE e;
  e.command("cs-add play_chainsetup");
  e.command("c-add 1st_chain");
  e.command("ai-add foo.wav");
  e.command("ao-add /dev/dsp");
  e.command("cop-add -efl:100");
  e.command("cop-select 1");
  e.command("copp-select 1");
  e.command("cs-connect");
  e.command("start");
  while(1) {
    sleep(1);
    e.command("engine-status");
    if (e.last_string() != "running") break;
    e.command("get-position");
    double curpos = e.last_float();
    if (curpos > 15.0) break;
    e.command("copp-get");
    double next_cutoff = cutoff_inc + e.last_float();
    e.command_float_arg("copp-set", next_cutoff);
  }
  
  e.command("stop");
  e.command("cs-disconnect");
  e.command("cop-status");
  std::cerr << "Chain operator status: " << e.last_string() << std::endl;

  return(0);
}