Hi,
I want to make is a DSP module that improves the sound quality
of the sound coming from the laptop builtin speakers by applying DSP
(FIR/IIR filters).
I want to route all audio played back (from for
instance an offline WAV or MP3 file, from a movie, or streamed from the internet) to
pass through the
DSP plugin whenever headphones are NOT connected. When headphones are connected no processing should be applied.
I
want to place the DSP module as close to the hardware as possible to
make sure all audio is really routed through the DSP plugin so I always
can enjoy
the DSP improvements made to the sound.
Where should I place this module/DSP code?
- As a plugin to PulseAudio?
- As a plugin to ALSA?
- As its own virtual sound card?
- In the audio driver for my built-in sound card?
- As a kernel module?
I have tried loading the LADSPA-module using the module-ladspa-sink in PulseAudio but I am not sure this is the best solution.
I need to remove some limitations in module-ladspa-sink to get it working properly ( multichannel audio, only DSP processing for internal speakers).
My requirements:
1) Must be able to detect if headphones are connected
2) Must be able to process stereo and multichannel (5.1/7.1) formats. I
need the multichannel formats to perform binaural downmixing to
stereo.
So it is important that I can receive multichannel audio and mix it down to stereo and output it to a stereo soundcard.
/Kim
Alex, I hope you don't mind quoting part of your message on the list,
as the subject is of general interest.
Alex stone wrote offlist:
> Fons, i've read in the mailing list in the thread concerning mixers,
> that you have something you're working on.
> ...
> More than any other facet of working in software for audio/midi/vid,
> i've been frustrated and tired out by poor navigation options, and i
> don't think i'm on my own.
> The mouse is insufficent for ease, speed, and pain free day in day out
> use, and i ask you to at least consider (or not, as you decide)
> alternatives such as the one above, to make a difference in the way
> users commonly interact with this type of software.
I more than agree with this. Defining the way a user interacts with a
large software mixer is 90% of the work of writing one. Common GUI
methods just don't work for this sort of thing.
The thing that is slowly taking some form here will observe some
GUI guidelines quite strictly, in particular there will be *NO*
repeat *NO* resizing, scrolling or moving of windows, menus will
be used sparingly and be small, and popup dialogs will be used
only for operations that can be assumed to be infrequent (mainly
setting up things, selecting and connecting plugins, etc.).
When setting up a new session, you define the resources:
- number of channel strips
- number of real groups
- number of control groups
- number of visible sections
- number of strips per section
- number of jack/alsa inputs
- number of jack/alsa outputs
These are more or less fixed afterwards, in the sense that you
can't remove any, but probably I can allow to increase these
numbers (the point here is that all snapshots taken for such
a configuration must remain valid without requiring changes
to the resources). Anyway there is no penalty (apart from a
small amount of memory used) for providing more than you need.
A _section_ is a group of strips, typically 8, 10 or 12.
Normally you should select the section size so you can have
two of them side by side, as this facilitates many operations.
For each visible section there is a control strip, which
contains e.g. buttons to select which strips are shown.
You will have default sections, e.g. inputs 1-8, 9-16, 17-24,
etc, same for real groups and control groups. There are also
user-defined sections: these can contain copies of any strip
you want in any order you want. For example you could group
all inputs used for drums in a secion, or have a 'master'
section that contains mainly groups and maybe some solo mics.
There is some 'intelligence' in the section selection buttons,
for example, if you select to see inputs 17-24 in the right
section, you click that button (or use a kb shortcut), then
clicking again restores the previous view. Or selecting a
section that is already visible will swap the two, etc.etc.
Each visible section is vertically divided in two, the bottom
half showing the faders, channel ID, mute, solo etc. most of
the time, while the top half can show parts of the strips, e.g.
EQ, sends or dynamics. Again this layout is configurable to some
extent, you can e.g. select to have some aux sends visible all
the time. The top part of each visible section can also be used
for plugins, metering, 'visual' panning, or whatever extra
functions that would need to be displayed.
All Jack/Alsa ports are generic, each of them can be assigned
to any function inside the mixer. That means e.g. that Jack
connections can remain fixed no matter how you 'rewire' the
mixer, and this in turn means that nothing is lost if you
connect directly to a multichannel Alsa device, e.g. a MADI
card.
The mixer will have its own plugin interface, and it will not
accept any of the existing standards. If someone wants to use
a LADSPA or LV2 I will consider porting it. Condition for this
will be the *quality* of the plugin, and nothing else.
Ciao from very hot Crete (I'll be cooling down 20m below the
water surface in a short time).
--
FA
There are three of them, and Alleline.
Comments anybody :-)
http://techrights.org/2010/08/27/throwing-a-wrench-at-protools/
...........................
I have heard from a reliable source, inside Digidesign, that they
actually have Protools running on Linux, and that the port from OSX
isn’t that hard, but are under contract obligation to Microsoft to not
release a Linux port. Otherwise Microsoft can revoke their access to
the Windows SDK.
..........................
Niels
http://nielsmayer.com
On Sat, Aug 28, 2010 at 6:44 PM, Alexander Kojevnikov
<alexander(a)kojevnikov.com> wrote:
> You can try running spekle under valgrind [1]. After testing it on a
> flac file I already see that spek_spectrogram_put_pixel() is used with
> wrong arguments causing an out-of-bounds memory write.
Thank you for the clue. I'm especially thankful that I won't have to
run valgrind for hours on end with my CPU fans whining at top-speed
just to decode a video or mp3 :-) ... I will just go straight to
debugging spek_spectrogram_put_pixel().
I've added your suggestion to my issue:
http://code.google.com/p/spekle/issues/detail?id=1#c3
> On a side note, feel free to submit patches adding batch support to
> Spek, there's even an open issue for it [ http://code.google.com/p/spek/issues/detail?id=6 ]
I added the following comment on your issue:
http://code.google.com/p/spek/issues/detail?id=6#c5
...........
http://spekle.googlecode.com is a fork of Spek 0.6 specifically
designed for batch use and for usage without an X server or GUI. It
would be great if the changes for spekle could be incorporated back
into Spek. Although down the road, some functionality I plan to add in
spekle ( http://vamp-plugins.org ) may be out-of-scope for Spek.
It's not something that'll be an obvious patch since I replaced spek.vala with
http://spekle.googlecode.com/svn/trunk/spekle/src/spekle.vala and
and spek-window.vala turned into
http://spekle.googlecode.com/svn/trunk/spekle/src/spek-object.vala and
there's a different set of build targets as well
http://spekle.googlecode.com/svn/trunk/spekle/src/Makefile.am ...
...........
Other code-mangling includes needing to add an extra callback
parameter to the Pipeline() constructor:
http://spekle.googlecode.com/svn/trunk/spekle/src/spek-pipeline.vala
and lots of small changes to
http://spekle.googlecode.com/svn/trunk/spekle/src/spek-spectrogram.vala
. To recognize what changed, comment-outs of your original 'spek-0.6'
code are done with "//" at the beginning of a line, and most of my
changes are marked with an "NPM" comment.
Since I just got 'spekle' running, and my current changes are a
first-pass hacking of your original spek sources, it probably makes
sense for me to continue doing development and debugging on 'spekle'
and at some point in time in the future, submitting a more definitive
patch for http://code.google.com/p/spek/issues/detail?id=6 .
In case you're interested in collaborating on spekle, I added you as a
committer (akojevnikov). It may also make sense to test out batch-mode
ideas in spekle first and then move them back to 'spek' when they've
settled down.
Let me know how you wish to proceed, and thanks for making Spek
available and GPL!
-- Niels
http://nielsmayer.com
Anybody have any ideas on
http://code.google.com/p/spekle/wiki/EvidenceOfMemoryCorruptionOnExit
(warning contains large images,
http://spekle.googlecode.com/svn/wiki/evidence-of-memory-corruption-on-exit…
for error text only).
issue: http://code.google.com/p/spekle/issues/detail?id=1
Summary: after successfully writing a spectrogram image in my first
Vala programming http://spekle.googlecode.com/ (a displayless-version
of
Alexander Kojevnikov's http://www.spek-project.org/ ) I get the
following error, despite not explicitly calling free() out of my Vala
code:
Spekle: saving 'j_s_bach-d_minor_invention.ogg.png'... DONE!
*** glibc detected *** spekle: free(): invalid pointer: 0x00007fa7e05ca010 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3ac0874ac6]
/usr/lib64/libpixman-1.so.0(pixman_image_unref+0x83)[0x3ac9e161b3]
/usr/lib64/libcairo.so.2[0x359c016b85]
/usr/lib64/libcairo.so.2(cairo_surface_finish+0x36)[0x359c02c9d6]
/usr/lib64/libcairo.so.2(cairo_surface_destroy+0x55)[0x359c02ca45]
spekle[0x406b1e]
/lib64/libgobject-2.0.so.0(g_object_unref+0x15f)[0x3ac380da1f]
spekle[0x407d3d]
/lib64/libgobject-2.0.so.0(g_object_unref+0x15f)[0x3ac380da1f]
spekle[0x403857]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x3ac081eb1d]
spekle[0x403439]
The errors seems to occur intermittently, and more often when using
media that is ogg. Retrieving via HTTP seems to reduce the error
potential, but it still happens that way too...
The relevant libraries and compiler I'm using:
vala-0.9.3-1.fc12.x86_64
vala-tools-0.9.3-1.fc12.x86_64
vala-devel-0.9.3-1.fc12.x86_64
libpng-devel-1.2.44-1.fc12.x86_64
libpng-1.2.44-1.fc12.x86_64
gtk2-devel-2.18.9-3.fc12.x86_64
gtk2-2.18.9-3.fc12.x86_64
ffmpeg-0.6-2.fc12.x86_64
ffmpeg-libs-0.6-2.fc12.x86_64
ffmpeg-devel-0.6-2.fc12.x86_64
See http://spekle.googlecode.com/svn/trunk/README for instructions on
obtaining by 'svn' and building on Linux.
Niels
http://nielsmayer.com
Hi,
As I was checking out the new mudita24, I noticed that the peak
line on the meters doesn't go to zero after the signal is
'silence'. I have to manually click "reset peaks".
Is this on purpose?
David
PS: nice overhaul, great work, thanks.
Am Samstag, den 28.08.2010, 14:21 -0400 schrieb Camilo Polymeris:
> Hi
> Sorry. According to that, it seems it's not an EMU 1010 based card.
> Probably a completely different beast.
>
> These are the card this app is intended for:
> http://www.emu.com/products/welcome.asp?category=505&
>
> Is yours one of those?
> If so, which version of the alsa drivers are you running?
>
> Greetings,
> Camilo
Ah okay, my is this one here :
http://en.wikipedia.org/wiki/Sound_Blaster_Live!
Sound Blaster Live! Platinum, it's EMU10K1 based.
EDIT://
alsa driver is snd-emu10k1 with kernel 2.6.33.6-rt26 #1 SMP PREEMPT RT Tue Jul 27 06:22:24 CEST 2010 i686 GNU/Linux
greats hermann
Hello all,
A long ago, I said on this list (I think), I had the intention to write
a graphical mixer/router for the EMU 10k cards (EMU 1212m & EMU 1616m).
I wanted to make a nice, well-written, full-featured app with routing
levels and eventually effects and all, but couldn't figure out all the
intricacies of the card's driver.
So, over the last two nights I hacked together a simple "Matrix"-style
app, very ugly in code, but functional, for me, at least.
I won't have time to maintain it, but if you want to try it out, at the
end of this message you'll find links to a screenshot, the source
package and an x86_64 build. You'll need Qt & ALSA libraries, of course.
Be aware that many features are missing, but basic routing works. I'll
put up a version control repo when I have time.
Any comments welcome.
Greetings,
Camilo
Links. Everything licensed under GPLv3:
http://www2.udec.cl/~cpolymeris/emutrix/Screenshot-EMutrix-1.pnghttp://www2.udec.cl/~cpolymeris/emutrix/emutrix-0.1.tar.bz2http://www2.udec.cl/~cpolymeris/emutrix/emutrix
Hi,
I have issues with jack client names that contain whitespaces.
Example:
$ jack_connect MPlayer [19079]:out_0 system:playback_2
ERROR [19079]:out_0 not a valid port
Any idea how I can make this work? I tried:
$ jack_connect "MPlayer [19079]:out_0" "system:playback_2"
ERROR MPlayer [19079]:out_0 not a valid port
$ jack_connect 'MPlayer [19079]:out_0' 'system:playback_2'
ERROR MPlayer [19079]:out_0 not a valid port
So I wonder whether spaces in jack client names and ports are even
allowed, since imho jack_connect is a rather fundamental tool, and
either the tool or those clients are broken.
--
Philipp
--
"Wir stehen selbst enttäuscht und sehn betroffen / Den Vorhang zu
und alle Fragen offen." Bertolt Brecht, Der gute Mensch von Sezuan
On Sun, Aug 8, 2010 at 7:59 AM, Geoff King <gsking1(a)gmail.com> wrote:
> I tried the source version of your 1.0.2 mudita release. I'm having
> problem with the build step. This is with FC13. Â Any thoughts?
>...
> -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0
> -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype
> -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0
> -lasound
> /usr/bin/ld: levelmeters.o: undefined reference to symbol 'log10@@GLIBC_2.0'
> /usr/bin/ld: note: 'log10@@GLIBC_2.0' is defined in DSO /lib/libm.so.6
Geoff -- thanks for reporting this issue. It is a configuration
mistake in this release which doesn't show up in F12, which is what
I'm still using. Apparently, Fedora13 wants it to link with "-lm", but
F12 links happily without "-lm" ...So I never saw this
misconfiguration when I tested my distro build on F12...
As a quick fix, you should be able to link successfully by adding
"-lm" to the end of the linking command:
gcc -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
-I/usr/include/pixman-1 -I/usr/include/freetype2
-I/usr/include/libpng12 -I/usr/include/alsa -g -O2 -o
envy24control envy24control.o levelmeters.o midi.o mixer.o patchbay.o
hardware.o driverevents.o volume.o profiles.o config.o -lgtk-x11-2.0
-lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0
-lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig
-lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lasound -lm
The correct approach is to add "-lm" to the configuration files (i
thought i had, but mistakenly modified the generated file rather than
the configuration input files -- and "make dist-gzip" didn't of
course include my modification) ... I will need to fix this
build-blunder in the next release. Sorry.
If anybody has a suggestion on the most portable/reliable way of doing
this, please let me know.
I believe adding a line to configure.in-gtk2 like
ENVY24CONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS -lm"
would do the trick, but you never know what happens to a simple line
of script out in the wild :-).
Is the above an accepted&proper way of adding "-lm" to an autoconf file?
-- Niels
http://nielsmayer.com