Hi Yann, fixed the frequency issue.
Gerald
On 18.04.2015 15:46, Yann Collette wrote:
OK, thanks, it works better. Now, it starts.
But I've got a glitch when nothing is connecter:
Near the 'frequency' label, random ascii are displayed.
When I close the windows, a hangs happens.
Here is the gdb log:
#0 0x00007ffff58208d7 in raise () at /lib64/libc.so.6
#1 0x00007ffff582253a in abort () at /lib64/libc.so.6
#2 0x00007ffff5863da3 in () at /lib64/libc.so.6
#3 0x00007ffff586f9f5 in free () at /lib64/libc.so.6
#4 0x000000000040819e in SynthBase::~SynthBase() (this=0x6b2910,
__in_chrg=<optimized out>) at ../synthbase.cpp:52
#5 0x0000000000407be1 in SquareSynth::~SquareSynth() (this=0x6b2910,
__in_chrg=<optimized out>) at ../squaresynth.h:22
#6 0x0000000000407be1 in SquareSynth::~SquareSynth() (this=0x6b2910,
__in_chrg=<optimized out>) at ../squaresynth.h:22
#7 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#8 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#9 0x00007ffff7447189 in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#10 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#11 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#12 0x00007ffff7447189 in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#13 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#14 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#15 0x00007ffff75d3cc9 in QScrollArea::~QScrollArea() () at
/lib64/libQt5Widgets.so.5
#16 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#17 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#18 0x00007ffff7447189 in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#19 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#20 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#21 0x00007ffff75a5099 in QStackedWidget::~QStackedWidget() () at
/lib64/libQt5Widgets.so.5
#22 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#23 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#24 0x00007ffff75b5819 in QTabWidget::~QTabWidget() () at /lib64/libQt5Widgets.so.5
#25 0x00007ffff6b4a32c in QObjectPrivate::deleteChildren() () at
/lib64/libQt5Core.so.5
#26 0x00007ffff7446f2a in QWidget::~QWidget() () at /lib64/libQt5Widgets.so.5
#27 0x00000000004052ed in main(int, char**) (argc=1, argv=<optimized out>) at
../main.cpp:23
Le 18/04/2015 13:58, Yann Collette a écrit :
Hello,
I also met a hang with GuitarSynth.
I use fedora 21 64. I compiled aubio from sources (the one on fedora is too old).
There is no stack trace in gdb, but there are some messages at startup:
Samplerate 48000 Buffersize 256
QObject::connect: No such slot GSEngine::setInputGain(int) in
../mainwindow.cpp:62
QObject::connect: (sender name: 'InputVol')
QObject::connect: No such slot GSEngine::setOutputGain(int) in
../mainwindow.cpp:64
QObject::connect: (sender name: 'OutputVol')
[New Thread 0x7fffe347d700 (LWP 23722)]
*** Error in `/home/collette/repositories/GuitarSynth/build/GuitarSynth2':
double free or corruption (out): 0x000000000066da60 ***
YC
Le 18/04/2015 13:37, Gerald a écrit :
Clam dep is removed. Can you compile it and
run it again? Set jack
samplerate to 44100 and Periods to 512 (my settings).
Gerald
On 18.04.2015 13:24, Gerald wrote:
>>> I'll look into that. I used clam
since it had prettier knobs but dropped
>>> it again, as it isn't developed anymore (?)
>>> Gerald
>>>
>>> On 18.04.2015 08:56, Patrick Shirkey wrote:
>>>
>>>> On Sat, April 18, 2015 8:30 am, Gerald wrote:
>>>>> Hi guys, I've started/hacked a small project called GuitarSynth.
It is
>>>>> meant as a playfield for exploring pitchdetection and synthesis for
>>>>> Guitar, since I'm a guitarist. You can get on Github (git clone
>>>>>
https://github.com/geraldmwangi/GuitarSynth.git).
>>>>> Its really basic but its fun to play with. It take an audio signal
(your
>>>>> guitar) extracts the
fundamental pitch and drives some wavetable
synths.
>>>>> Feel free to manipulate it,
I'll be happy to grant people write access
>>>>> to the repo.
>>>>> Btw on IRC my Nick is JimsonDrift, the name of my band (see
>>>>>
www.jimson-drift.de).
>>>>> Cheers Gerald
>>>>>
>>>
>>>
>>>> Looks like an interesting and fun tool.
>>>> I had to add this library:
>>>> apt-get install libclam-qtmonitors-dev
>>>> - I built the code but when I run I get a segfault:
>>>> $ make
>>>> /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../mainwindow.ui -o
ui_mainwindow.h
>>>>
/usr/lib/x86_64-linux-gnu/qt5/bin/uic ../SynthBase.ui -o ui_SynthBase.h
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o main.o
../main.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W
-D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o mainwindow.o
>>>> ../mainwindow.cpp
>>>> In file included from /usr/include/c++/4.9/backward/strstream:51:0,
>>>> from ../mainwindow.cpp:23:
>>>> /usr/include/c++/4.9/backward/backward_warning.h:32:2: warning: #warning
>>>> This file includes at least one deprecated or antiquated header
which may
>>>> be removed without further notice
at a future date. Please use a
>>>> non-deprecated interface with equivalent functionality instead. For a
>>>> listing of replacement headers and interfaces, consult the file
>>>> backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
>>>> #warning \
>>>> ^
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o gausssynth.o
>>>> ../gausssynth.cpp
>>>> ../gausssynth.cpp: In member function ‘virtual void
>>> GaussSynth::InitSynth()’:
>>>> ../gausssynth.cpp:29:11: warning: unused variable ‘norm’
>>> [-Wunused-variable]
>>>> float norm=0;
>>>> ^
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o gsengine.o
>>>> ../gsengine.cpp
>>>> ../gsengine.cpp: In member function ‘void GSEngine::InitNetwork()’:
>>>> ../gsengine.cpp:50:13: warning: ‘jack_client_t* jack_client_new(const
>>>> char*)’ is deprecated (declared at /usr/include/jack/jack.h:97)
>>>> [-Wdeprecated-declarations]
>>>> mClient=jack_client_new("GuitarSynth");
>>>> ^
>>>> ../gsengine.cpp:50:42: warning: ‘jack_client_t* jack_client_new(const
>>>> char*)’ is deprecated (declared at /usr/include/jack/jack.h:97)
>>>> [-Wdeprecated-declarations]
>>>> mClient=jack_client_new("GuitarSynth");
>>>> ^
>>>> ../gsengine.cpp:66:82: warning: deprecated conversion from string
constant
>>>> to ‘char_t* {aka char*}’
[-Wwrite-strings]
>>>
mPitchDetector=new_aubio_pitch("yinfft",2*mBufferSize,mBufferSize,mSamplerate);
>>> ^
>>>> ../gsengine.cpp: In static member function ‘static GSEngine*
>>>> GSEngine::getInstance()’:
>>>> ../gsengine.cpp:123:19: warning: suggest parentheses around assignment
>>>> used as truth value [-Wparentheses]
>>>> if(mInstance=0)
>>>> ^
>>>> ../gsengine.cpp:125:1: warning: no return statement in function
returning
>>>> non-void [-Wreturn-type]
>>>> }
>>>> ^
>>>> ../gsengine.cpp: At global scope:
>>>> ../gsengine.cpp:127:52: warning: unused parameter ‘arg’
>>> [-Wunused-parameter]
>>>> int GSEngine::process(jack_nframes_t frames, void *arg)
>>>> ^
>>>> ../gsengine.cpp: In static member function ‘static float
>>>> GSEngine::getMagnitude(jack_nframes_t, float*)’:
>>>> ../gsengine.cpp:175:18: warning: comparison between signed and unsigned
>>>> integer expressions [-Wsign-compare]
>>>> for(int i=0;i<frames;i++)
>>>> ^
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o sinussynth.o
>>>> ../sinussynth.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o squaresynth.o
>>>> ../squaresynth.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o synthbase.o
>>>> ../synthbase.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o synthcontrol.o
>>>> ../synthcontrol.cpp
>>>> /usr/lib/x86_64-linux-gnu/qt5/bin/moc -DQT_NO_DEBUG -DQT_WIDGETS_LIB
>>>> -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64
>>>> -I/home/patrick/code/GuitarSynth -I/usr/include/x86_64-linux-gnu/qt5
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtGui
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/4.9
>>>> -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
>>>> -I/usr/include/x86_64-linux-gnu -I/usr/include ../mainwindow.h -o
>>>> moc_mainwindow.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o moc_mainwindow.o
>>>> moc_mainwindow.cpp
>>>> /usr/lib/x86_64-linux-gnu/qt5/bin/moc -DQT_NO_DEBUG -DQT_WIDGETS_LIB
>>>> -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64
>>>> -I/home/patrick/code/GuitarSynth -I/usr/include/x86_64-linux-gnu/qt5
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtGui
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/4.9
>>>> -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
>>>> -I/usr/include/x86_64-linux-gnu -I/usr/include ../gsengine.h -o
>>>> moc_gsengine.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o moc_gsengine.o
>>>> moc_gsengine.cpp
>>>> /usr/lib/x86_64-linux-gnu/qt5/bin/moc -DQT_NO_DEBUG -DQT_WIDGETS_LIB
>>>> -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64
>>>> -I/home/patrick/code/GuitarSynth -I/usr/include/x86_64-linux-gnu/qt5
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtGui
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/4.9
>>>> -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
>>>> -I/usr/include/x86_64-linux-gnu -I/usr/include ../synthbase.h -o
>>>> moc_synthbase.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o moc_synthbase.o
>>>> moc_synthbase.cpp
>>>> /usr/lib/x86_64-linux-gnu/qt5/bin/moc -DQT_NO_DEBUG -DQT_WIDGETS_LIB
>>>> -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64
>>>> -I/home/patrick/code/GuitarSynth -I/usr/include/x86_64-linux-gnu/qt5
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtGui
>>>> -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/4.9
>>>> -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include
>>>> -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
>>>> -I/usr/include/x86_64-linux-gnu -I/usr/include ../synthcontrol.h -o
>>>> moc_synthcontrol.cpp
>>>> g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG
>>>> -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
>>>> -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../../GuitarSynth
>>>> -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem
>>>> /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I. -o
moc_synthcontrol.o
>>>> moc_synthcontrol.cpp
>>>> g++ -m64 -Wl,-O1 -o GuitarSynth2 main.o mainwindow.o gausssynth.o
>>>> gsengine.o sinussynth.o squaresynth.o synthbase.o synthcontrol.o
>>>> moc_mainwindow.o moc_gsengine.o moc_synthbase.o moc_synthcontrol.o
>>>> -L/usr/X11R6/lib64 -lclam_qtmonitors -lclam_processing -lclam_audioio
>>>> -lclam_core -ljack -laubio -lQt5Widgets -lQt5Gui -lQt5Core -lGL
-lpthread
>
>> $ ./GuitarSynth2
>> Segmentation fault
>> $ jackd --version
>> jackd version 0.124.1 tmpdir /dev/shm protocol 25
>
>
>> --
>> Patrick Shirkey
>> Boost Hardware Ltd
>> _______________________________________________
>> Linux-audio-dev mailing list
>> Linux-audio-dev(a)lists.linuxaudio.org
>>
http://lists.linuxaudio.org/listinfo/linux-audio-dev
>
> _______________________________________________
> Linux-audio-dev mailing list
> Linux-audio-dev(a)lists.linuxaudio.org
>
http://lists.linuxaudio.org/listinfo/linux-audio-dev
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev(a)lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev(a)lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev