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.

(Continue reading)

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.
(Continue reading)

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
Frank Neumann | 3 Jan 16:35 2015
Picon

Linux Audio Conference 2015 - Call for Participation


[Sorry for cross-posting, please distribute.]

Linux Audio Conference 2015 - Call for Participation

(Due to exceptional circumstances, this announcement comes a bit late,
so please note the early deadline of Feb 1st for submissions. We
apologize.)

We are happy to announce the next issue of the Linux Audio Conference
(LAC), April 9-12, 2015  <at>  JGU | Johannes Gutenberg University, in
Mainz, Germany.

   http://lac.linuxaudio.org/2015/

The Linux Audio Conference is an international conference that brings
together musicians, sound artists, software developers and researchers,
working with Linux as an open, stable, professional platform for audio
and media research and music production. LAC includes paper sessions,
workshops, and a diverse program of electronic music.

*Call for Papers, Workshops, Music and Installations*

We invite submissions of papers addressing all areas of audio processing
and media creation based on Linux and other open source software. Papers
can focus on technical, artistic and scientific issues and should target
developers or users. In our call for music, we are looking for works
that have been produced or composed entirely/mostly using Linux and
other open source music software.

The online submission of papers, workshops, music and installations is
now open at http://lac.linuxaudio.org/2015/participation

The deadline for all submissions is Feb 1st, 2015 (23:59 HAST).

You are invited to register for participation on our conference website.
There you will find up-to-date instructions, as well as important
information about dates, travel, lodging, and so on.

This year's conference is hosted by the Computer Music Research Group
(Bereich Musikinformatik) at the IKM (Institut für Kunstgeschichte und
Musikwissenschaft) of the Johannes Gutenberg University (JGU) at
Mainz. Being founded in 1991, our research group has been among the
first German academic institutions in this interdisciplinary field at
the intersection of music, mathematics, computer science and media
technology. In our media lab students are working almost exclusively
with Linux, and in our research we are also devoted to contributing to
the growing body of open source audio and computer music software.

   http://www.musikwissenschaft.uni-mainz.de/Musikinformatik/

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

Sincerely,
The LAC 2015 Organizing Team
Markus Seeber | 22 Dec 21:58 2014
Picon

jack2 example clients, headers, tools

Hi,
I noticed, that there are example clients for jack and jack2 in
different repositories. As I can read on the homepage, there were plans
to include the headers, example-clients and tools as sub modules also in
the jack2 repository?
Is anyone still following this track or was the idea discarded?
Michael | 16 Dec 05:05 2014
Picon

Using Jack2 (jackdmp) on Mac OS X: Version 0.9 or 1.9.10?

I want to use Jack2 on OSX.

But I have a problem. I can find compiled binaries for version 0.9, or the source tarball says that it is
1.9.10. Those versions do not match. According to the readme at https://github.com/jackaudio/jack2,
I'm supposed to get the ready to use binary from http://www.jackosx.com/, but it also only has binary
version 0.9.

So, help please? What do I want?

My goal: https://obsproject.com/forum/resources/advanced-audio-capture-mac-os-x.142/

---
Entertaining minecraft videos
http://YouTube.com/keybounce

Gmane