Matt Flax | 26 Mar 12:20 2015

netjack audio routing from smart OSs (IOS and Android)

Hi everyone,

I think it would be handy to have a transparent netjack audio device for IOS and Android.
The idea is that it would enable regular apps to stream audio to netjack servers rather then the Andoroid or IOS hardware.
What do you think ?

I have done some exploring for Android and also (just) asked Kim Jeong Yeon (the porter of Jack to Android) whether he knew anything - waiting for a response.

Here is what I have found for Android :
There is a MediaRouter class ...
http://grepcode.com/file/repo1.maven.org/maven2/org.robolectric/android-all/5.0.0_r2-robolectric-0/android/media/MediaRouter.java?av=h

This flag ROUTE_TYPE_LIVE_AUDIO is relevant for searching the code.

I am not sure how to use it or how to interface to it ?
It is possible we can do it directly from JAVA or the C++ NDK.

Does anyone know or even know anyone who knows ?

Similar for IOS ... anyone know or know anyone who knows ?

thanks
Matt

_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
Rui Nuno Capela | 25 Mar 18:37 2015

[ANN] QjackCtl 0.3.13, Qsynth 0.3.9, Qsampler 0.3.0 released!

The pre-LAC2015 [1] release frenzy continues... ;)

Now for the next batch...

* QjackCtl - A JACK Audio Connection Kit Qt GUI Interface [2] *

   QjackCtl 0.3.13 is out.

   QjackCtl is a simple Qt application to control the JACK [4] sound 
server, for the Linux Audio infrastructure.

website:
   http://qjackctl.sourceforge.net

downloads:
   http://sourceforge.net/projects/qjackctl/files

- source tarball:
   http://downloads.sourceforge.net/qjackctl/qjackctl-0.3.13.tar.gz

- source package:

http://downloads.sourceforge.net/qjackctl/qjackctl-0.3.13-22.rncbc.suse132.src.rpm

- binary packages:

http://downloads.sourceforge.net/qjackctl/qjackctl-0.3.13-22.rncbc.suse132.i586.rpm

http://downloads.sourceforge.net/qjackctl/qjackctl-0.3.13-22.rncbc.suse132.x86_84.rpm

change-log:
- Added application description as freedesktop.org's AppData [9].
- Setup dialog form is now modeless.
- Introducing brand new active patchbay reset/disconnect-all user 
preference option.
- Current highlighted client/port connections are now drawn with thicker 
connector lines.
- New user preference option on whether to show the nagging 'program 
will keep running in the system tray' message, on main window close.
- Connections lines now drawn with anti-aliasing; connections splitter 
handles width is now reduced.
- Drop missing or non-existent patchbay definition files from the most 
recent used list.

* Qsynth - A FluidSynth Qt GUI Interface [3] *

   Qsynth 0.3.9 is out.

   Qsynth is a FluidSynth [6] GUI front-end application written in C++ 
around the Qt4 toolkit using Qt Designer.

website:
   http://qsynth.sourceforge.net

downloads:
   http://sourceforge.net/projects/qsynth/files

- source tarball:
   http://downloads.sourceforge.net/qsynth/qsynth-0.3.9.tar.gz

- source package:

http://downloads.sourceforge.net/qsynth/qsynth-0.3.9-5.rncbc.suse132.src.rpm

- binary packages:

http://downloads.sourceforge.net/qsynth/qsynth-0.3.9-5.rncbc.suse132.i586.rpm

http://downloads.sourceforge.net/qsynth/qsynth-0.3.9-5.rncbc.suse132.x86_84.rpm

change-log:
- Added application description as freedesktop.org's AppData [9].
- New user preference option on whether to show the nagging 'program 
will keep running in the system tray' message, on main window close.
- Application close confirm warning is now raising the main window as 
visible and active for due top level display, especially applicable when 
minimized to the system tray.
- A man page has been added.
- Translations install directory change.
- Allow the build system to include an user specified LDFLAGS.
- Czech (cs) translation updated (by Pavel Fric, thanks).

* Qsampler - A LinuxSampler Qt GUI Interface [4] *

   Qsampler 0.3.0 is out.

   Qsampler is a LinuxSampler [7] GUI front-end application written in 
C++ around the Qt4 toolkit using Qt Designer.

website:
   http://qsampler.sourceforge.net

downloads:
   http://sourceforge.net/projects/qsampler/files

- source tarball:
   http://downloads.sourceforge.net/qsampler/qsampler-0.3.0.tar.gz

- source package:

http://downloads.sourceforge.net/qsampler/qsampler-0.3.0-13.rncbc.suse132.src.rpm

- binary packages:

http://downloads.sourceforge.net/qsampler/qsampler-0.3.0-13.rncbc.suse132.i586.rpm

http://downloads.sourceforge.net/qsampler/qsampler-0.3.0-13.rncbc.suse132.x86_84.rpm

change-log:
- Added application description as freedesktop.org's AppData [9].
- Added this "Don't ask/show this again" option to some if not most of 
the nagging warning/error message boxes.
- Mac OS X: Fixed default path of linuxsampler binary.
- When closing qsampler and showing the user the dialog whether to stop 
the LinuxSampler backend, set the default selection to "Yes".
- Master volume slider now getting proper layout when changing its main 
toolbar orientation.
- Messages standard output capture has been slightly improved as for 
non-blocking i/o, whenever available.
- Adjusted configure check for libgig to detect the new --includedir.
- A man page has beed added (making up Matt Flax's work on debian, thanks).
- Translations install directory change.
- Added support for SF2 instrument names/preset enumeration.
- Added instrument list popup on channel strip which shows up when the 
instrument name is clicked. Allows faster switching among instruments of 
the same file.
- Adjusted configure check for libgig to detect its new --libdir 
(impolitely forcing the user now to have at least libgig 3.3.0).

License:
   QjackCtl, Qsynth and Qsampler are free, open-source software, 
distributed under the terms of the GNU General Public License (GPL) 
version 2 [8] or later.

Weblog (upstream support):
   http://www.rncbc.org

See also:
   http://www.rncbc.org/drupal/node/877

References:

[1] LAC2015 <at> JGU-Mainz - Linux Audio Conference 2015
     The Open Source Music and Sound Conference
     April 9-12  <at>  Johannes Gutenberg University (JGU) Mainz, Germany
     http://lac.linuxaudio.org/2015/

[2] QmidiCtl - A JACK Audio Connection Kit Qt GUI Interface
     http://qmidictl.sourceforge.net

[3] Qsynth - A FluidSynth Qt GUI Interface
     http://qsynth.sourceforge.net

[4] Qsampler - A LinuxSampler Qt GUI Interface
     http://qsampler.sourceforge.net

[5] JACK Audio Connection Kit
     http://jackaudio.org

[6] FluidSynth - A SoundFont Synthesizer
     A real-time software synthesizer based on SoundFont 2 specifications
     http://www.fluidsynth.org

[7] LinuxSampler - The Linux Sampler Project
     A modular, streaming capable, realtime audio sampler
     http://www.linuxsampler.org

[8] GPL - GNU General Public License
     http://www.gnu.org/copyleft/gpl.html

[9] AppData Specification
     http://people.freedesktop.org/~hughsient/appdata/

Enjoy && have some fun!
--

-- 
rncbc aka. Rui Nuno Capela
lufuyang@sict.ac.cn | 18 Mar 03:01 2015
Picon

jackd: unknown driver 'alsa'


Hello,
I want to use jack with backend alsa,My linux os Advanced Linux Sound Architecture Driver Version is 1.0.24.when I try to run it with command "jackd -d alsa",it doesn't recognize the alsa drivers.

root <at> sip-desktop:~# jackd -d alsa 
jackd 0.124.1 
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others. 
jackd comes with ABSOLUTELY NO WARRANTY 
This is free software, and you are welcome to redistribute it 
under certain conditions; see the file COPYING for details 

no message buffer overruns 
jackd: unknown driver 'alsa'
root <at> sip-desktop:~#

My alsa driver works fine,but jack always can't recognize it. can anyone gives me some tips to deal with this problem?
lufuyang <at> sict.ac.cn
_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
Frank Neumann | 31 Jan 13:21 2015
Picon

Linux Audio Conference 2015 - Extension of Deadline


[Sorry for cross-posting, please distribute.]

The Linux Audio Conference submissions deadline has been extended for
another week! Please note the new deadline:

    Sunday, Feb 8th, 2015 (23:59 HAST)

So, if you were considering to submit a paper but couldn't make up your
mind yet, here is your chance to become active! Never forget that this
conference lives through the people participating in it.

February 8th is the new deadline for all submission types: papers,
music, installations, workshop proposals.

Check out the link below for more info:
http://lac.linuxaudio.org/2015/participation

Note that as usual we have created two different OpenConf instances: one
for the submission of regular papers, lightning talks and poster
sessions, and a second one for music, installations and workshop
proposals. For the latter, please also check the detailed instructions
at http://lac.linuxaudio.org/2015/download/lac2015-call-for-miw.pdf.

If you have any questions concerning your submission, please don't
hesitate to contact us at lac <at> linuxaudio.org, or through our #lac2015
IRC channel on freenode.net.

Please spread this information to anyone who might be interested.

We look forward to your submissions and hope to meet you in Mainz in
April!

Sincerely,
The LAC 2015 Organizing Team
Harry van Haaren | 29 Jan 14:49 2015
Picon

Re: Dispersing MIDI messages: one to multiple

JACK processing happens in "buffers" of "nframes" size. When you're
writing MIDI, you can specific at exactly what audio-frame this event
took place: that's the time parameter.

Dropouts are bad - regardless of how you want to use the software now,
design it to not drop out. Also, since audio and MIDI are
sample-accuratly in sync in JACK, if you drop audio frames, you're
also dropping MIDI data.

Did you fix the loop midi_event_get() code?
  for(i = 0;i<n;i++){
        res = jack_midi_event_get(&jev,in_port_buf,i);
You're not checking the number of events available - and attempting to
"get" one event for every frame. The code I posted previously has the
fix.

Cheers, -Harry

PS: When replying, keep the list in the CC; i made the mistake of a
direct reply on my first reply too - my bad :)

On Thu, Jan 29, 2015 at 1:19 PM, Marjan Mrak <marjan.mrak <at> gmail.com> wrote:
> Hey Harry, thanks for a quick answer.
>
> I think, dropout happens on "audio" level, not at MIDI. I recorded output to
> waw; during recording, sound on speakers "dropped" for a moment, but WAV
> contents was fine.
>
> Thanks for suggestion, however there is a flag in my code (  if(verb == 1)
> ), through which I can ommit printf-ing completely.
>
> Would you be so kind as to explain to me, what jack_nframes_t time parameter
> in jack_midi_event_write represents? Sequence? Can it be of same value for
> all calls?
>
> Bye,
> Marjan
>
> 2015-01-29 13:46 GMT+01:00 Harry van Haaren <harryhaaren <at> gmail.com>:
>>
>> Hey,
>>
>> I'm not sure why it would "hang", and I'm not sure quite what you mean
>> with that: are notes not passed through at all, or is it that certain
>> notes are skipped?
>>
>> I hope its the latter.. because there's a little bug hiding in the
>> MIDI get code from JACK. It attempts to read *one* event, for every
>> "nframe" that is available. The following code snippet is taken from
>> the JACK example-clients - midisine.c
>>
>> jack_midi_event_t in_event;
>> jack_nframes_t event_index = 0;
>> jack_nframes_t event_count = jack_midi_get_event_count(port_buf);
>>
>> if(event_count > 1)
>> {
>>    printf(" midisine: have %d events\n", event_count);
>>    for(i=0; i<event_count; i++)
>>    {
>>       jack_midi_event_get(&in_event, port_buf, i);
>>       printf(" event %d time is %d. 1st byte is 0x%x\n", i,
>> in_event.time, *(in_event.buffer));
>>    }
>> }
>>
>> I'm not sure if your code is "production ready" - printf locks a
>> mutex, a big no-no in RT code. Since MIDI handling and audio are in
>> the same real-time thread, its not wise to printf in production code.
>> It could cause xruns in JACK if the printf decides to lock and wait
>> too long.
>>
>> Hope the above helps the issue, cheers, -Harry
>>
>>
>>
>> On Thu, Jan 29, 2015 at 10:08 AM, Marjan Mrak <marjan.mrak <at> gmail.com>
>> wrote:
>> > Hello all,
>> >
>> > I have following question:
>> >
>> > I have developed JACK MIDI client, which grabs midi messages from MIDI
>> > keyboard on one port, and disperses it according to:
>> >
>> > * if message is controlled message (functional button was pressed on
>> > MIDI
>> > keyboard), it's changed to "volume control" and to certain channel and
>> > transmited
>> > * if message is "key up" or "key down", it's dispersed to channels from
>> > 1 to
>> > 4.
>> >
>> > It works, but if I am using it, totaly at random sound output "hangs"
>> > for
>> > like 10th of second.
>> >
>> > I suspect my code is the problem. I would just like someone to examine
>> > it -
>> > perhaps I am doiung something wrong here.
>> >
>> > Or is there a better way to "disperse" one MIDI message to several
>> > channels?
>> >
>> > I tried to find more detailed description of API than official docs
>> > (which
>> > is... basic, I'd say), but no luck.
>> >
>> > Thanks for any help or assistance in advanced!
>> >
>> > Following is my processing callback:
>> >
>> > static int process(jack_nframes_t nframes, void *arg)
>> > {
>> >     int res = 0;
>> >     int i;
>> >     int j;
>> >
>> >     //unsigned char* buffer;
>> >     unsigned char jbuffer[3];
>> >
>> >     void* port_buf = jack_port_get_buffer(output_port, nframes);
>> >
>> >     //get events
>> >     void* in_port_buf = jack_port_get_buffer(input_port, nframes);
>> >     jack_nframes_t n = jack_midi_get_event_count(in_port_buf);
>> >
>> >     jack_midi_clear_buffer(port_buf);
>> >
>> >     if(n==0)
>> >         return 0;
>> >
>> >     jack_midi_event_t jev;
>> >
>> >
>> >     if(verb == 1)
>> >         printf("%i: Data arrived!\n", cnt);
>> >
>> >     for(i = 0;i<n;i++){
>> >
>> >         res = jack_midi_event_get(&jev,in_port_buf,i);
>> >         if(res == 0){
>> >             if(verb == 1){
>> >                 printf("Got event, %i bytes!\n",(int) jev.size);
>> >                 for(j=0;j<jev.size;j++)
>> >                     printf("%i: %i\n",j,jev.buffer[j]);
>> >             }
>> >         } else{
>> >             if(verb == 1)
>> >                 printf("ERROR getting event!\n");
>> >             return 0;
>> >         }
>> >
>> >
>> >         //transmit data
>> >         cnt++;
>> >         //buffer = jack_midi_event_reserve(port_buf, i, 3);
>> >
>> >
>> >         //controll to MIDI channel 1!
>> >         if(jev.buffer[0] == 176 && jev.buffer[1] == 97){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL CH1 sent\n");
>> >             //first button: set mute register on channel 1
>> >             //buffer[0] = 176;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 176;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 96){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH2 sent\n");
>> >             //second button: set mute register on channel 2
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 177;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 66){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL CH3 sent\n");
>> >             //third button: set mute register on channel 3
>> >             //buffer[0] = 176;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 178;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 67){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH4 sent\n");
>> >             //fourth button: set mute register on channel 4
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 179;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 64){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH5 sent\n");
>> >             //fifth button: set mute register on channel 5
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 180;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 65){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH6 sent\n");
>> >             //sixth button: set mute register on channel 6
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 181;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 7){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH7 sent\n");
>> >             //seventh button: set mute register on channel 7
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 182;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >         else if(jev.buffer[0] == 176 && jev.buffer[1] == 10){
>> >             if(verb == 1)
>> >                 printf("MUTE CONTROL to CH8 sent\n");
>> >             //eighth button: set mute register on channel 8
>> >             //buffer[0] = 177;
>> >             //buffer[1] = 7;
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = 183;
>> >             jbuffer[1] = 7;
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >         }
>> >
>> >
>> >
>> >
>> >         else if((jev.buffer[0]& 0xF0) == 128 || (jev.buffer[0]& 0xF0) ==
>> > 144){
>> >             //note key, pass through
>> >             if(verb == 1)
>> >                 printf("SOUND PASSED-THROUGH\n");
>> >             //notes; let them pass
>> >             //buffer[0] = jev.buffer[0];
>> >             //buffer[1] = jev.buffer[1];
>> >             //buffer[2] = jev.buffer[2];
>> >             jbuffer[0] = jev.buffer[0];  //CH1
>> >             jbuffer[1] = jev.buffer[1];
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time , jbuffer,
>> > 3);
>> >             jbuffer[0] = jev.buffer[0] + 1; //CH2
>> >             jbuffer[1] = jev.buffer[1];
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time , jbuffer,
>> > 3);
>> >             jbuffer[0] = jev.buffer[0] + 2; //CH3
>> >             jbuffer[1] = jev.buffer[1];
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time , jbuffer,
>> > 3);
>> >             jbuffer[0] = jev.buffer[0] + 3; //CH4
>> >             jbuffer[1] = jev.buffer[1];
>> >             jbuffer[2] = jev.buffer[2];
>> >             res = jack_midi_event_write(port_buf, jev.time , jbuffer,
>> > 3);
>> >         }
>> >
>> >         //res = jack_midi_event_write(port_buf, i, jev.buffer, 3);
>> >         //res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
>> >
>> >
>> >     }
>> >
>> >     return 0;
>> >
>> > }
>> >
>> >
>> > _______________________________________________
>> > Jack-Devel mailing list
>> > Jack-Devel <at> lists.jackaudio.org
>> > http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
>> >
>>
>>
>>
>> --
>>
>> http://www.openavproductions.com
>
>

--

-- 

http://www.openavproductions.com
Marjan Mrak | 29 Jan 11:08 2015
Picon

Dispersing MIDI messages: one to multiple

Hello all,

I have following question:

I have developed JACK MIDI client, which grabs midi messages from MIDI keyboard on one port, and disperses it according to:

* if message is controlled message (functional button was pressed on MIDI keyboard), it's changed to "volume control" and to certain channel and transmited
* if message is "key up" or "key down", it's dispersed to channels from 1 to 4.

It works, but if I am using it, totaly at random sound output "hangs" for like 10th of second.

I suspect my code is the problem. I would just like someone to examine it - perhaps I am doiung something wrong here.

Or is there a better way to "disperse" one MIDI message to several channels?

I tried to find more detailed description of API than official docs (which is... basic, I'd say), but no luck.

Thanks for any help or assistance in advanced!

Following is my processing callback:

static int process(jack_nframes_t nframes, void *arg)
{
    int res = 0;
    int i;
    int j;
     
    //unsigned char* buffer;
    unsigned char jbuffer[3];
     
    void* port_buf = jack_port_get_buffer(output_port, nframes);
     
    //get events
    void* in_port_buf = jack_port_get_buffer(input_port, nframes); 
    jack_nframes_t n = jack_midi_get_event_count(in_port_buf);
     
    jack_midi_clear_buffer(port_buf);
 
    if(n==0)
        return 0;
     
    jack_midi_event_t jev;
     
     
    if(verb == 1)
        printf("%i: Data arrived!\n", cnt);
     
    for(i = 0;i<n;i++){
     
        res = jack_midi_event_get(&jev,in_port_buf,i);
        if(res == 0){
            if(verb == 1){
                printf("Got event, %i bytes!\n",(int) jev.size);
                for(j=0;j<jev.size;j++)
                    printf("%i: %i\n",j,jev.buffer[j]);
            }
        } else{
            if(verb == 1)
                printf("ERROR getting event!\n");
            return 0;
        }
         
         
        //transmit data
        cnt++;     
        //buffer = jack_midi_event_reserve(port_buf, i, 3);
 
             
        //controll to MIDI channel 1!
        if(jev.buffer[0] == 176 && jev.buffer[1] == 97){
            if(verb == 1)
                printf("MUTE CONTROL CH1 sent\n");
            //first button: set mute register on channel 1
            //buffer[0] = 176;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 176;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 96){
            if(verb == 1)
                printf("MUTE CONTROL to CH2 sent\n");
            //second button: set mute register on channel 2
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 177;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
 
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 66){
            if(verb == 1)
                printf("MUTE CONTROL CH3 sent\n");
            //third button: set mute register on channel 3
            //buffer[0] = 176;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 178;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 67){
            if(verb == 1)
                printf("MUTE CONTROL to CH4 sent\n");
            //fourth button: set mute register on channel 4
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 179;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 64){
            if(verb == 1)
                printf("MUTE CONTROL to CH5 sent\n");
            //fifth button: set mute register on channel 5
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 180;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 65){
            if(verb == 1)
                printf("MUTE CONTROL to CH6 sent\n");
            //sixth button: set mute register on channel 6
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 181;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 7){
            if(verb == 1)
                printf("MUTE CONTROL to CH7 sent\n");
            //seventh button: set mute register on channel 7
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 182;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
         
        else if(jev.buffer[0] == 176 && jev.buffer[1] == 10){
            if(verb == 1)
                printf("MUTE CONTROL to CH8 sent\n");
            //eighth button: set mute register on channel 8
            //buffer[0] = 177;
            //buffer[1] = 7;
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = 183;
            jbuffer[1] = 7;
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
        }
      

             
             
        else if((jev.buffer[0]& 0xF0) == 128 || (jev.buffer[0]& 0xF0) == 144){
            //note key, pass through
            if(verb == 1)
                printf("SOUND PASSED-THROUGH\n");
            //notes; let them pass
            //buffer[0] = jev.buffer[0];
            //buffer[1] = jev.buffer[1];
            //buffer[2] = jev.buffer[2];
            jbuffer[0] = jev.buffer[0];  //CH1
            jbuffer[1] = jev.buffer[1];
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time , jbuffer, 3);
            jbuffer[0] = jev.buffer[0] + 1; //CH2
            jbuffer[1] = jev.buffer[1];
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time , jbuffer, 3);
            jbuffer[0] = jev.buffer[0] + 2; //CH3
            jbuffer[1] = jev.buffer[1];
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time , jbuffer, 3);
            jbuffer[0] = jev.buffer[0] + 3; //CH4
            jbuffer[1] = jev.buffer[1];
            jbuffer[2] = jev.buffer[2];
            res = jack_midi_event_write(port_buf, jev.time , jbuffer, 3);
        }
         
        //res = jack_midi_event_write(port_buf, i, jev.buffer, 3);
        //res = jack_midi_event_write(port_buf, jev.time, jbuffer, 3);
         
         
    }
     
    return 0;
     
}

_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
Michael | 23 Jan 02:31 2015
Picon

Problems with Jackdmp / jack router and an external TV display

I'm having issues using Jack2/Jackdmp with an aggregate device that contains my internal speakers, the
speakers on an HDMI tv display, and my headset.

Using MIDI Audio Setup, i have everything set to 48,000.

The big problem:
1. Every time I start up Jack, I'm told that the audio settings are changed.
2. Every time the TV is turned on, Jack router complains, and jackdmp quits.
(2b: Diagnostic info: Turning off the TV does not move windows from the TV onto the main display. Turning it
on, however, causes several flashes and moves all the windows onto the main display.)
3. I never see anything other than 48,00 actually in use.

If I knew what things were being changed to, I could use that.
My USB headset (speaker + microphone) only does 48000.

---
Secondary problems:
1. Most applications work just fine. Even if I cannot control the routing of all applications, the default
is to use channels 1 and 2 -- which happens to be the internal speakers.
2. Unfortunately, there is no way to control that -- and this includes things like "It's 5:15" from the
system clock, or "Alert from TextEdit:" when an application puts up a panel.
3. Equally, some programs -- most notable browser plug-ins -- will NOT make any audio until explicitly
routed. And are silent if they started before jack and cannot be routed.
4. And finally, if I turn off the TV, then a lot of applications stop making any sounds, and the sound actually
"backs up" -- if I switch the system audio (using Audio MIDI setup) to the internal speakers, I will hear
messages from the last clock time announcement, as well as things backlogged from "say" commands.

4 seems to be all applications except those explicitly routed to the internal speakers.

---
Entertaining minecraft videos
http://YouTube.com/keybounce
Tim E. Real | 22 Jan 05:36 2015

[PATCH] Jack-1: jack_port_by_name

Hi.

https://dl.dropboxusercontent.com/u/53315356/jack1_port_by_name_fix.diff

This JACK-1 patch fixes a problem in jack_port_by_name()
 and jack_port_by_name_int():

jack_port_by_name_int() did not first search client->ports.

Thus, a pointer returned by jack_port_register() often will not
 be the same as the one returned by jack_port_by_name().

Also, I took the liberty of allowing a forced installation,
 with a special configure flag. There is PLENTY of warning.

I didn't touch version numbers or anything else.

Thanks.
Tim. 
The MusE Project.
Dominic Sacré | 16 Jan 15:18 2015
Picon
Picon

[jackaudio/jack1] 3befc4: fix segfault caused by incorrect jack_error() form...

  Branch: refs/heads/master
  Home:   https://github.com/jackaudio/jack1
  Commit: 3befc4ff610d3cfb61947118710d1fd862520b2c
      https://github.com/jackaudio/jack1/commit/3befc4ff610d3cfb61947118710d1fd862520b2c
  Author: Dominic Sacré <dominic.sacre <at> gmx.de>
  Date:   2015-01-16 (Fri, 16 Jan 2015)

  Changed paths:
    M jackd/engine.c

  Log Message:
  -----------
  fix segfault caused by incorrect jack_error() format string

_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
Robin Gareus | 14 Jan 17:45 2015

[jackaudio/jack1] e586d0: support [unescaped] double-quotes in jackdrc

  Branch: refs/heads/master
  Home:   https://github.com/jackaudio/jack1
  Commit: e586d0df139def91f7f55ca580b22ad29ca75e6c
      https://github.com/jackaudio/jack1/commit/e586d0df139def91f7f55ca580b22ad29ca75e6c
  Author: Robin Gareus <robin <at> gareus.org>
  Date:   2015-01-14 (Wed, 14 Jan 2015)

  Changed paths:
    M libjack/client.c

  Log Message:
  -----------
  support [unescaped] double-quotes in jackdrc

allow autostart of jackd on OSX where device-names can
contain spaces.

_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org
Jacob Dawid | 8 Jan 00:21 2015

QJack - C++/Qt for JACK

Hello,


I just wanting to let you guys know. Some of you have already heard it of it on IRC: Based on some code I wrote once to scratch a personal itch, I have put up a cleaned up version of my C++/Qt wrapper for JACK in github:

https://github.com/cybercatalyst/QJack

I am open to comments of every kind.

Greetings and happy hacking
Jacob
_______________________________________________
Jack-Devel mailing list
Jack-Devel <at> lists.jackaudio.org
http://lists.jackaudio.org/listinfo.cgi/jack-devel-jackaudio.org

Gmane