Hi Guys, I'm proud to announce my first project on gitorious:
TerminatorX. I took the code from the old project site, and have done
some heavy recoding:
The entire audio part: -Now tX relies exclusively on JACK, and I intend
to keep it so.
-New mixer behind the scene: All
Turntables are stereo, you can still load mono files and the stream will
be copied to the left and right. This is intentional, since it allows to
use stereo Plugins on mono files (some sweet LADSPA plugins are only i
stereo).
-Mono plugins are also usable, their output is simply doubled
-Extra stereo outputs per Turntable
-Support for Rubberband, tempo of
client turntables can be autosynced to the master turntable.
- Exclusive use of sndfile
-Rewriting of the sequencer part,
not all is functional
There is lots to do: -profiling, since tX crashes sometimes (actually
many times:))
- throw out old C code, where its
possible: tX relies on C-style Gtk, which is a pain in the neck for a C
++ programmer like me.
- there are many C-extern functions. To
hell with them, they are bad coding style.
- the gui still displays one channel,
also for stereo files.
- the sequencer has to be checked,
fixed. I actually would like to redesign it, but more later.
- the save and load routines have to be
checked, since I added some parameters which are not yet saved/loaded
All in all tX needs a redesign in 3 integral parts,ordered by priority:
-The sequencer (tX_seqpar) is a mess. I even didn't really bother to
look that deep into the code. As I understand it, it just records
changes of the parameters, then replays them. I think this could be done
easier, and in strict C++ style. I need some ideas on how to construct a
good model.
-The Load and Save routines: I would like to convert all classes to
serializable ones!! This is more transparent, and would allow for nice
things like network sessions (Imagine tX on multiple PCs running with
netjack, and saving the session to one instance on one PC!)
-Last but by far not least: The GUI. If you look at the code, you see
that Alexander did not make a clear line between the GUI and the engine.
I think this is important, for stability reasons. Second, its C-Style
Gtk and not portable.
So the plan is to open another branch, in order to rework the GUI so
that a) It is at least codewise seperated from the engine (e.g extra
namespaces).
b) It's pure C++ and c) its portable. I think the only choice there is,
is to switch to Qt, but I'll leave that open for discussion.
So hope you get in and grab the code at
http://gitorious.org/terminatorx . Theres no configscript, you have to
change the makefile to you needs.
Lets revive this wonderfull program.
Gerald
P.S Sorry for the poor documentation !!
On Wed, 2010-08-11 at 09:09 +1000, Geoff Beasley wrote:
> boyz,
>
> as a longtime user of multiple ice1712 cards (4) in a 'multi' array, one
> thing envy24contol never offered was a way of "assembling" or even
> seeing multiple cards from within a single instance. You can of course
> address different cards with the -c option, but it would make sense if
> this could be done within the a single instance; and given that it
> writes it's own config/.asoundrc type file then would it be possible for
> mudita24 to create a multi card array easily?
>
> i have always, like John Rigg, made my own .asoundrc(thanks John!) to
> run the alsa multi plug which just runs at boot, but this can be very
> difficult for the neebie to even understand let alone create themselves
> and it would be good if each card had it's own 'page' for tweaking and
> metering within a single app instance. whilst you're doing this fine
> work I thought I'd chime this in.
>
> 2c
>
> g.
You're referring to http://www.jrigg.co.uk/linuxaudio/ice1712multi.html?
I'm new to the multiple Envy24 cards world, since some weeks I've got a
second card, but I also had a time out.
Full ACK.
+2c
Ralf
Hi Guys, I'm proud to announce my first project on gitorious:
TerminatorX. I took the code from the old project site, and have done
some heavy recoding:
The entire audio part: -Now tX relies exclusively on JACK, and I intend
to keep it so.
-New mixer behind the scene: All
Turntables are stereo, you can still load mono files and the stream will
be copied to the left and right. This is intentional, since it allows to
use stereo Plugins on mono files (some sweet LADSPA plugins are only i
stereo).
-Mono plugins are also usable, their output is simply doubled
-Extra stereo outputs per Turntable
-Support for Rubberband, tempo of
client turntables can be autosynced to the master turntable.
- Exclusive use of sndfile
-Rewriting of the sequencer part,
not all is functional
There is lots to do: -profiling, since tX crashes sometimes (actually
many times:))
- throw out old C code, where its
possible: tX relies on C-style Gtk, which is a pain in the neck for a C
++ programmer like me.
- there are many C-extern functions. To
hell with them, they are bad coding style.
- the gui still displays one channel,
also for stereo files.
- the sequencer has to be checked,
fixed. I actually would like to redesign it, but more later.
- the save and load routines have to be
checked, since I added some parameters which are not yet saved/loaded
All in all tX needs a redesign in 3 integral parts,ordered by priority:
-The sequencer (tX_seqpar) is a mess. I even didn't really bother to
look that deep into the code. As I understand it, it just records
changes of the parameters, then replays them. I think this could be done
easier, and in strict C++ style. I need some ideas on how to construct a
good model.
-The Load and Save routines: I would like to convert all classes to
serializable ones!! This is more transparent, and would allow for nice
things like network sessions (Imagine tX on multiple PCs running with
netjack, and saving the session to one instance on one PC!)
-Last but by far not least: The GUI. If you look at the code, you see
that Alexander did not make a clear line between the GUI and the engine.
I think this is important, for stability reasons. Second, its C-Style
Gtk and not portable.
So the plan is to open another branch, in order to rework the GUI so
that a) It is at least codewise seperated from the engine (e.g extra
namespaces).
b) It's pure C++ and c) its portable. I think the only choice there is,
is to switch to Qt, but I'll leave that open for discussion.
So hope you get in and grab the code at
http://gitorious.org/terminatorx . Theres no configscript, you have to
change the makefile to you needs.
Lets revive this wonderfull program.
Gerald
P.S Sorry for the poor documentation !!
On Sat, Aug 7, 2010 at 6:10 PM, Geoff Beasley
<geoff(a)laughingboyrecords.com> wrote:
> Niels, great that you and Tim have fixed this app ;) One thing, can you
> explain what those 'profiles' are for and how to use them?
Envy24control uses the same mechanism as your system does (see
/etc/asound.state and amixer(1)) to save the state of your ALSA
devices between boots. The difference is this mechanism puts the file
under your control at ~/.envy24control/profiles.conf and allows you to
set eight different profiles: allowing you to save or restore up to
eight different "asound.state"-like configurations per card.
The different profiles are most useful for storing routings set in
"Patchbay/Router" panel, as well as "Hardware Settings" panel clock
rate, or external SPDIF/wordclock sync. On cards with switchable
spdif/optical ins (Terratec/Terrasoniq), you can persist this extra
level of "routing" -- which is useful for "matrix routing" between two
digitally-interconnected and sync'd computers. ( I use profiles named:
44dmix-to-1&2&spdif, 48dmix-to-1&2&spdif, spdmix-to-1&2&spdif,
44all-outs-pcm, 48all-outs-pcm, spdif-all-outs-pcm,
96dmix-to-1&2&spdif and 96all-outs-pcm. ).
When you have a combination of settings in envy24control that you want
to return to, just go to the "Profiles" panel, enter the name of the
profile into the first free text field (initially these will be
numbered "1" through "8"). After entering a descriptive name, click
"Save active profile." To restore a given profile, just click on the
"button" area surrounding the text field, or even click within the
text field. You'll notice the selected profile "button" indicates
activation via coloration. After changing profiles, go to, for
example, Patchbay/Router or "Hardware Settings" panels,and note that
the previously saved state was restored.
Note that significant amounts of setting data gets saved in these files:
> ll ~/.envy24control/
-rw-r--r-- 1 npm npm 115253 2010-08-07 23:10 profiles.conf
For comparison:
> ll /etc/asound.state
-rw-r--r--. 1 root root 128079 2010-08-07 18:15 /etc/asound.state
(That's for a system with two envy24-based cards installed, thus size
is large, causing "save" to produce a brief but noticeable pause in
the metering on a slower system or "ondemand" throttled system).
Niels
http://nielsmayer.com
PS: speaking of envy24 anybody know whether this will work in standard
alsa/linux:
http://www.lionstracs.com/store/msaudio-board-envy24-p-122.html
and are those i2s connectors, or ttl-level spdif? i guess if it's i2s
you have to get:
http://www.lionstracs.com/store/mixer-board-p-210.html (which looks
pretty cool, esp w/ the onboard dream-based hardware synth w/ large
sample ROM).
The "Mudita24" package is a modification of alsa-tools' envy24control:
an application controlling the digital mixer, channel gains and other
hardware settings for sound cards based on the ice1712 chipset (
http://alsa.cybermirror.org/manuals/icensemble/envy24.pdf ). It
also displays a level meter for each input and output channel and
maintains peak level indicators. This utility is preferable to
alsamixer(1) for those with ice1712-based cards: M-Audio Delta 1010,
Delta 1010LT, Delta DiO 2496, Delta 66, Delta 44, Delta 410 and
Audiophile 2496. TerraTec EWS 88MT, EWS 88D, EWX 24/96, DMX 6Fire,
Phase 88. Hoontech SoundTrack DSP 24, SoundTrack DSP 24 Value,
SoundTrack DSP 24 Media 7.1. Event Electronics EZ8. Digigram VX442.
Lionstracs, Mediastaton. Terrasoniq TS 88. Partial support for
Roland/Edirol DA-2496.
Now available, version 1.02:
source: http://nielsmayer.com/envy24control/mudita24-1.0.2.tar.gz
binary: http://nielsmayer.com/envy24control/mudita24-1.0.2.x86_64.tgz
patch: http://nielsmayer.com/envy24control/mudita24-envy24control-0.6-to-1.0.2.pat…
'envy24control' is part of the "alsa-tools" package. For example,
under CCRMA's Fedora repos, it's part of
alsa-tools-1.0.22-1.1.fc12.ccrma.x86_64. This "mudita24" package
updates/replaces the alsa-tools /usr/bin/envy24control application.
The default "./configure ; make ; sudo make install" process on the
source-code leaves a binary in /usr/local/bin/envy24control and places
the man-page in /usr/local/man/man1/envy24control.1 . This means you
can still use the standard alsa-tools version in
/usr/bin/envy24control .
Screenshots (controlling either Terratec DMX6Fire or M-Audio Delta 66):
http://nielsmayer.com/envy24control/Mudita24-102-Monitor-Inputs.pnghttp://nielsmayer.com/envy24control/Mudita24-102-Monitor-Outputs.pnghttp://nielsmayer.com/envy24control/Mudita24-102-Patchbay+Router.pnghttp://nielsmayer.com/envy24control/Mudita24-102-Hardware-Settings.pnghttp://nielsmayer.com/envy24control/Mudita24-102-Analog-Volume.pnghttp://nielsmayer.com/envy24control/Mudita24-102-About.png
Changes since recent 1.0.0 and 1.0.1 releases:
* Peak-meter display is in dBFS, corresponding to displayed dBFS
peak-meter value and scale-widget dB labeling.
* Hardware mixer input attenuators provide more precise control to the
0 to -48dB range of adjustment, turning the associated input "off"
when the slider is moved to bottom of the scale. External MIDI control
of the hardware mixer via --midichannel and --midienhanced options
unaffected by this change.
* For M-Audio Delta series, add display of "Delta IEC958 Input Status"
under "Hardware Settings."
* Command line options --no_scale_mark, --channel_group_modulus affect
layout and presence of dB markings for sliders.
--channel_group_modulus allows override of Left/Right grouping of dB
labels for multichannel applications.
* Control of peak-meter coloring via --lights_color and --bg_color
options. Reasonable default colors used when these options are not
set. (1.0.1's use of Gtk skin to provide an automatic color choice
didn't work out that well on some systems.)
* Fixed command-line options --card and --device to allow valid ALSA
card and CTL device names
( https://bugzilla.redhat.com/show_bug.cgi?id=602900 ).
* Profiles created in ~/.envy24control and not "~/envy24control"
( http://bugtrack.alsa-project.org/alsa-bug/view.php?id=4738 ).
Summary of previous updates from envy24control 0.6.0 (GIT HEAD) to "1.0.2":
(1) Implemented "Peak Hold" functionality in meters; reimplemented
meters to do away with inefficient "faux LED" peak-meter display.
(2) Significantly reduced the number of timer interrupts generated by
this program by slowing down all updates to 10 per second --
previously meters updated 25x/second!
(3) All volumes are represented as decibels, including the 0 to -48dB
range of the hardware peak-meters, the 0 -to- -48dB&off attenuation
for all inputs to the digital mixer, the 0 -to- -63dB attenuation of
the analog DAC, and the +18 -to- -63dB attenuation/amplification of
the analog ADC.
(4) All gtk "scale" widgets have dB legends; the "PageUp" "PageDown"
keys allow rapid movement between the marked levels, and "UpArrow" and
"DownArrow" allow fine-adjustment.
Niels
http://nielsmayer.com
PS: Why "mudita24" ? An alternate name to avoid confusion with
"envy24control 0.6.0" until changes in this version propagate
upstream. See http://en.wikipedia.org/wiki/Envy#In_philosophy "In
Buddhism the third of the four divine abidings is mudita, taking joy
in the good fortune of another. This virtue is considered the antidote
to envy and the opposite of schadenfreude."
On Wed, Aug 4, 2010 at 1:20 AM, Raymond Yau <superquad.vortex2(a)gmail.com> wrote:
> The "-D" option seem to be used similar to  "amixer -Dabc"
> ctl.abc {Â type hw , card 2 }
Raymond --
Thanks for the clarification regarding the use of the -D argument for
alsa control devices. I've updated my code to handle things in the
same way that amixer does. The diffs for this change are at the end of
this message, and attached. ALSA names for examples/tests below from
http://nielsmayer.com/npm/dot-asoundrc.txt ....
.........................................
gnulem-277-~> /usr/bin/envy24control -D66 ##behavior on current
head and latest stable release
Segmentation fault (core dumped)
gnulem-278-~> envy24control -D66 ##behavior using this patch ...
using --- input_channels: 4
gnulem-279-~> envy24control -D666
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL 666
envy24control: cannot open mixer: No such file or directory - '666'
gnulem-280-~> envy24control -Dhw:66
envy24control: invalid ALSA audio device, invalid index or name for card: hw:66
gnulem-281-~> envy24control -Dhw:M66
using --- input_channels: 4
gnulem-282-~> envy24control -Dmulti
invalid card type (driver is HDA-Intel)
gnulem-283-~> envy24control -Ddefault
invalid card type (driver is USB-Audio)
gnulem-284-~> envy24control -c default
envy24control: invalid ALSA index or name for audio card: default
gnulem-285-~> envy24control -c SB
invalid card type (driver is HDA-Intel)
gnulem-286-~> envy24control -c multi
envy24control: invalid ALSA index or name for audio card: multi
gnulem-287-~> envy24control -c M66
using --- input_channels: 4
gnulem-299-~> amixer -Dhw:/dev/snd/controlC2 >! /tmp/foo
gnulem-301-~> amixer -D/dev/snd/controlC2 > ! /tmp/foo
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL /dev/snd/controlC2
amixer: Mixer attach /dev/snd/controlC2 error: No such file or directory
gnulem-290-~> envy24control -D/dev/snd/controlC2
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL /dev/snd/controlC2
envy24control: cannot open mixer: No such file or directory -
'/dev/snd/controlC2'
.........................................
diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c
index 0b2749e..e5d89d0 100644
--- a/envy24control/envy24control.c
+++ b/envy24control/envy24control.c
@@ -2084,3 +2166,3 @@ int main(int argc, char **argv)
view_spdif_playback = 0;
profiles_file_name = DEFAULT_PROFILERC;
default_profile = NULL;
while ((c = getopt_long(argc, argv, "D:c:f:i:m:Mo:p:s:w:vt:",
long_options, NULL)) != -1) {
switch (c) {
case 'D':
- name = optarg;
- card_number = atoi(strchr(name, ':') + sizeof(char));
- if (card_number < 0 || card_number >= MAX_CARD_NUMBERS) {
- fprintf(stderr, "envy24control: invalid card number %d\n", card_number);
- exit(1);
+ /* NPM: old code assumed ':' present, e.g. "-Dhw:66",
+ * (w/ .asoundrc "ctl.66 {type hw, card M66}") and would
+ * coredump if given "-D66". Prevent the coredump and even
+ * handle latter case even if keying off ':' is not a
+ * good way to do this. Note that for snd_card_get_index()
+ * "The accepted format is an integer value in ASCII
representation or the card
+ * identifier (the id parameter for sound-card drivers). The control device
+ * name like /dev/snd/controlC0 is accepted, too." */
+ if (!index(optarg, ':')) {
+ /* NPM: unlike old envy24control code, but behaving like amixer et al,
+ "-D66" is valid. Handle it. */
+ snd_mixer_t *mixer;
+ struct snd_mixer_selem_regopt selem_regopt = {
+ .ver = 1,
+ .abstract = SND_MIXER_SABSTRACT_NONE,
+ .device = optarg,
+ };
+ if ((err = snd_mixer_open(&mixer, 0)) < 0) {
+ fprintf(stderr, "envy24control: cannot open mixer: %s -
'%s'\n", snd_strerror(err), optarg);
+ exit(1);
+ }
+ if ((err = snd_mixer_selem_register(mixer, &selem_regopt, NULL)) < 0) {
+ fprintf(stderr, "envy24control: cannot open mixer: %s -
'%s'\n", snd_strerror(err), optarg);
+ exit(1);
+ }
+ name = optarg; /* NPM: now that device name validated, e.g.
pass "-D66" unaltered to snd_ctl_open()... */
+ }
+ else {
+ /* NPM: handle e.g. optarg == "hw:M66" */
+ card_number = snd_card_get_index(strchr(optarg, ':') +
sizeof(char)); /* NPM: use correct ALSA-specific call to fix
https://bugzilla.redhat.com/show_bug.cgi?id=602900 */
+ if (card_number < 0) {
+ fprintf(stderr, "envy24control: invalid ALSA audio device,
invalid index or name for card: %s\n", optarg);
+ exit(1);
+ }
+ name = optarg; /* e.g. optarg == "hw:M66" passed to
snd_ctl_open() below */
}
break;
case 'c':
- i = atoi(optarg);
- if (i < 0 || i >= MAX_CARD_NUMBERS) {
- fprintf(stderr, "envy24control: invalid card number %d\n", i);
+ card_number = snd_card_get_index(optarg); /* NPM: use correct
ALSA-specific call to fix
https://bugzilla.redhat.com/show_bug.cgi?id=602900 */
+ if (card_number < 0) { /* NPM: code orig from alsa-utils/alsamixer/cli.c */
+ fprintf(stderr, "envy24control: invalid ALSA index or name for
audio card: %s\n", optarg);
exit(1);
}
- card_number = i;
- sprintf(tmpname, "hw:%d", i);
+ sprintf(tmpname, "hw:%d", card_number); /* e.g. "hw:M66" for arg
"-cM66" passed to snd_ctl_open() below */
name = tmpname;
break;
case 'f':
.........................................
--Niels
http://nielsmayer.com
Hi
Nano-Basket v0.1 has been released. Source files are available from
http://github.com/royvegard/Nano-Basket
Nano-Basket is a configuration software for the Korg nanoSERIES
MIDI controllers. It's intended to run on operating systems where
the official configuration editor is not available (i.e. Linux).
It's written in Python, using pygtk for the GUI.
This is the first release. The feature set is limited to storing
scenes to the nanoKONTROL device.
Simple usage instructions are available from the wiki page:
http://wiki.github.com/royvegard/Nano-Basket/use
--
Roy Vegard Ovesen
On Tue, Aug 3, 2010 at 10:38 PM, Raymond Yau
<superquad.vortex2(a)gmail.com> wrote:
> 2010/8/4 Niels Mayer <nielsmayer(a)gmail.com>
>> Â * fixed --card and --device to allow valid ALSA names and numbers
>> Â Â Â Â ( https://bugzilla.redhat.com/show_bug.cgi?id=602900 ).
>
> ./envy24control -Ddefault
>
> card_number = atoi(strchr(name, ':') + sizeof(char));
>
> This bug seem still occur when name does not contain ":" since ctl device is
> "hw:n" where n is card number
I used similar code to what's in alsamixer to perform the same
functions as the old broken code. Now the code behaves as follows:
gnulem-238-~> envy24control -Dhw:default
envy24control: invalid ALSA audio device, invalid index or name for
card: hw:default
gnulem-239-~> envy24control -Dhw:M66
using --- input_channels: 4
--- output_channels: 4
--- pcm_output_channels: 8
--- spdif in/out channels: 2
gnulem-240-~> envy24control -Dhw:M66.0
envy24control: invalid ALSA audio device, invalid index or name for
card: hw:M66.0
gnulem-241-~> envy24control -Dhw:M66,0
envy24control: invalid ALSA audio device, invalid index or name for
card: hw:M66,0
gnulem-242-~> envy24control -DM66
envy24control: ALSA audio device syntax expects ':' character: M66
Current code:
while ((c = getopt_long(argc, argv, "D:c:f:i:m:Mo:p:s:w:vt:ng:",
long_options, NULL)) != -1) {
switch (c) {
case 'D':
name = optarg;
if (!index(name, ':')) {
fprintf(stderr, "envy24control: ALSA audio device syntax expects
':' character: %s\n", optarg);
exit(1);
}
card_number = snd_card_get_index(strchr(name, ':') + sizeof(char));
/* NPM: use correct ALSA-specific call to fix
https://bugzilla.redhat.com/show_bug.cgi?id=602900 */
if (card_number < 0) { /* NPM: code orig from alsa-utils/alsamixer/cli.c */
fprintf(stderr, "envy24control: invalid ALSA audio device,
invalid index or name for card: %s\n", optarg);
exit(1);
}
break;
case 'c':
card_number = snd_card_get_index(optarg); /* NPM: use correct
ALSA-specific call to fix
https://bugzilla.redhat.com/show_bug.cgi?id=602900 */
if (card_number < 0) { /* NPM: code orig from alsa-utils/alsamixer/cli.c */
fprintf(stderr, "envy24control: invalid ALSA index or name for
audio card: %s\n", optarg);
exit(1);
}
sprintf(tmpname, "hw:%d", card_number);
name = tmpname;
break;
-- Niels
http://nielsmayer.com