<div dir="ltr">Hi,<div>I can't understand how to implement my encoder/decoder with the jitter buffer. I hope someone can help me:</div><div>I have 2 threads. </div><div>Because I don't have yet the full environment (with the devices etc..),</div><div>- I'm reading from thread1, </div><div>- sending to the main thread, </div><div>- write to a jitter buff, </div><div>- from th2 : read from the jitter and play the data.</div><div>(Tomorrow, this is a device which will send the main thread the speex data via RF - that's why I need to handle a jitter).</div><div><br></div><div>thread 1:</div><div>1) read 640 bytes from pcm (=40ms) (my settings are 8khz/16bits le)</div><div>2) encode to 40 bytes of speex</div><div>3) send to main thread 40 bytes of speex</div><div><br></div><div>main thread:</div><div>1) speex_jitter_put(20 first bytes of speex, counter * 640) // timestamp = 0, 640, 1280, etc..</div><div>2) speex_jitter_put(20 last bytes of speex, 320 + counter * 640) // timestamp = 320, 960, 1600, etc..</div><div><br></div><div>thread 2:</div><div>1) speex_jitter_get(buffer, NULL)</div><div>2) 

speex_jitter_get(buffer + 320, timestamp=320)

</div><div>3) pcm_write(buffer, 640)</div><div><br></div><div>Actually I can't hear anything. I tried many things without success. It's the most "stable" flow I found without seeing many warnings from the api (underrun, negative buffer, etc..)</div><div>- in the main thread, I think speex_jitter_put always puts 20 ms, right ? (I initialized the buffer with an audio sampling rate of 8khz)</div><div>- in the main thread, I don't know if it's ok to put directly 40ms of speex or if I need to put 2 * 20ms with a different timestamp for the 2nd</div><div>- I don't know too well what the timestamp parameter is : is it a timestamp in ms ? I use now, after searching on the net, "pcm units" (320 = 20 ms/ 640 = 40ms) </div><div>- in thread 2, I can't pcm_write 320 only else I see many "underrun" errors. I thought, at the beginning, to simply read from the jitter and play (320) and to do this 2 times.</div><div><br></div><div>Any help will be appreciated.</div><div><br></div><div>Thanks.</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 18 Jan 2021 at 21:30, nomprenom <<a href="mailto:nomprenom@gmail.com">nomprenom@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thank you Tristan for your answer.<div><br><div>For now I took jitter.c and .h from dsp and added them to the makefile of speex.</div><div>I also added speex_jitter_buffer.c and h from the sample into the lib.<br></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 18 Jan 2021 at 20:30, Tristan Matthews <<a href="mailto:tmatth@videolan.org" target="_blank">tmatth@videolan.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
On Mon, Jan 18, 2021 at 12:29 PM nomprenom <<a href="mailto:nomprenom@gmail.com" target="_blank">nomprenom@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
> I'd like to use the speex encode/decoder library with the speex jitter buffer.<br>
> I took, first, the project "speex" from <a href="https://gitlab.xiph.org/xiph/speex" rel="noreferrer" target="_blank">https://gitlab.xiph.org/xiph/speex</a><br>
> There is a nice sample in the directory speex_client/ which is using speex_jitter_buffer.h which itself is using <speex/speex_jitter.h><br>
> I couldn't find this include file in the project.<br>
><br>
> I checked in the project speexDSP and found it.<br>
> I thought, maybe, speexDsp is the new "speex" because it's deprecated.<br>
><br>
> The problem is, now, with speexDsp I can't find the "speex.h" header and can't find either the speex_decode_init(), speex_decoder_ctl() APIs.<br>
> It's only in the sampledec.c in the doc/ directory of speexdsp<br>
><br>
> How can I use the speex decoder/encoder with the speex_jitter api together ?<br>
<br>
The Speex project has been split in 2, speex "the codec" (where you'll<br>
find the decode_init and decoder_ctl API) and speexdsp "the DSP<br>
library" where you'll find the jitter buffer API. The motivation was<br>
that users want to be able to use purely the codec without the DSP<br>
stuff and vice-versa.<br>
<br>
N.B. The most active/used project in speexdsp is the resampler, you<br>
may find jitterbuffer implementations elsewhere that are a better fit<br>
for your project.<br>
<br>
See:<br>
<a href="https://gitlab.xiph.org/xiph/speex" rel="noreferrer" target="_blank">https://gitlab.xiph.org/xiph/speex</a><br>
<a href="https://gitlab.xiph.org/xiph/speexdsp" rel="noreferrer" target="_blank">https://gitlab.xiph.org/xiph/speexdsp</a><br>
<br>
Best,<br>
Tristan<br>
</blockquote></div>
</blockquote></div>