[PD] Pd + asterisk?

Chris lists at proquariat.de
Fri Dec 21 19:36:08 CET 2007


Russell Bryant wrote:
>
> Longer response ...
>
> In theory, any period size should work just fine.  I just happened to choose 160
> because I was thinking that it would be more efficient, since that was the
> period size of packets coming through Asterisk.  However, due to the way audio
> is passed between Asterisk and jack, it really shouldn't matter at all.  All of
> the raw audio goes through ringbuffers that have no concept of a period.  I will
> play around with different period sizes to see if I can cause a problem to occur.
>   
I heard some klicking noise when I tried with 160 frames
> Also, I have all intentions to support more than 8 kHz mode for jack.  :)  The
> trick is, with 8 kHz, app_jack doesn't have to resample anything.  With any
> other sample rate, it does.  I have code that attempts to handle resampling the
> audio in both directions using libresample.  However, it currently makes the
> audio sound absolutely terrible.  I'll get it fixed, though ...
>   
I tried it first with 48KHz and only got noise
>
> Would you mind sharing the Pd patch that you were using to test this out?
>
> The extreme echo is a good sign, I think.  I assume you mean you just heard your
> own voice coming back to you, with some delay.  Anything beyond that is probably
> acoustic echo with whatever phone you're using.  :)
>
> The reason that connecting Asterisk to itself works but not with anything else
> could have something to do with the way I did sample value normalization in
> Asterisk.  Asterisk uses a 16 bit integer representation per sample.  However, I
> had to convert it to float for jack.
>
> I wasn't sure of the right way to do it, so I simply scaled the values based on
> the maximum values of the type ...
>
> (f_buf is a buffer of floats, s_buf is a buffer of int16_t's)
>
> for (i = 0; i < f->samples; i++)
>      f_buf[i] = s_buf[i] * (FLT_MAX / SHRT_MAX);
>   

A really long delay, but that may was because of my setup... (ISDN <->
Asterisk <-> IAX over Wlan <-> Asterisk with Jack) ;)

Pd patch was a really simple [adc~ 1] for audio input from the first
jack-channel, a [osc~ 440] for testing and a [dac~ 1] for audio output
to the first jack-channel

When I connected the osc~ with the dac~ I heard nothing at my phone,
when I connected the adc~ from asterisk to a dac~ patched to alsa I
neither heard a thing from the phone.
> what I want to do eventually is be able to send a message that you could receive
> in a Pd patch that a new pair of jack ports has become available.  But, that's
> not as important to me right now as getting the audio flow working properly.
>
> I don't know about adding an argument that says connect to PID X.  However,
> there appears to be an option in the jack C API which allows you to specify a
> server name to connect to.  That may do what is needed to connect to jackd
> running as a different user.
>   
I don't know if you can patch two jack-channels together in pd, telling
app_jack to connect it's channel to a specific pd-channel would be
really easy, but having Pd handling it would be more flexible. Anyway,
sending something to pd, that there's a new caller definitely is a good
idea for various reasons.

--Chris




More information about the Pd-list mailing list