sintonia/library/ecasound/pyecasound/eci.py
Paul Baranowski 6a39e4f5f5 Removed the Debian directory.
Renamed directory "dev" to "dev_tools".

Replaced the ecasound-2.7.2 with a new download of ecasound.  The reason is
that the previous ecasound directory had all the Makefiles checked in with
hardcoded paths from Naomi's computer.  This prevented anyone else from
being able to build.  I copied over the modified version of ecacontrol.py.
2011-03-09 18:20:34 -05:00

109 lines
2.8 KiB
Python

"""
# eci.ECI -- A higher-level interface to pyeca.
# Copyright 2001 Eric S. Tiedemann (est@hyperreal.org)
# GPLed
some updates by Janne Halttunen
"""
import pyeca as _pyeca
import types as _types
class ECIError(Exception):
def __init__(self, what):
Exception.__init__(self, what)
self.what = what
def __str__(self):
return '<ECIException %s>' % self.what
class ECI:
"""An ECI is and ECA Control Interface object.
It can be called with ECI command strings (and an optional
float value) as arguments. A list or tuple of command
strings is also accepted and commands can be separated
by newlines within a single string.
The value of a command (or of the last command in a sequence)
if returned as a value of the appropriate Python type
(possibly None).
On errors, an ECIException is raised that has a `what'
member with the exception message. These exceptions also
stringify prettily.
"""
def __init__(self, *args):
self.e = apply(_pyeca.ECA_CONTROL_INTERFACE, args)
def __call__(self, cmd, f=None):
if f != None:
self.e.command_float_arg(cmd, f)
else:
if type(cmd) == _types.ListType or type(cmd) == _types.TupleType:
v = None
for c in cmd:
v = self(c)
return v
else:
cmds = cmd.split('\n')
if len(cmds) > 1:
v = None
for c in cmds:
v = self(c)
return v
else:
self.e.command(cmd)
t = self.e.last_type()
if not t or t == '-':
return None
elif t == 'S':
return self.e.last_string_list()
elif t == 's':
return self.e.last_string()
elif t == 'f':
return self.e.last_float()
elif t == 'i':
return self.e.last_integer()
elif t == 'li':
return self.e.last_long_integer()
elif t == 'e' or self.e.error():
raise ECIError, '%s: %s' % (self.e.last_error(), cmd)
else:
raise ECIError, "unknown return type '%s'!" % t
if __name__ == '__main__':
import time, sys
file = sys.argv[1]
e = ECI()
# uncomment to raise an error :)
#e('foo')
e("""
cs-add play_chainsetup
c-add 1st_chain
ai-add %s
ao-add /dev/dsp
cop-add -efl:100
cop-select 1
copp-select 1
cs-connect
start"""
% file)
cutoff_inc = 500.0
while 1:
time.sleep(1)
if e("engine-status") != "running" or e("get-position") > 15:
break
e("copp-set", cutoff_inc + e("copp-get"))
e("""stop
cs-disconnect""")
print "Chain operator status: ", e("cop-status")