[pulseaudio-discuss] Sample format spec with Linear 16bit 16kHz

Georg Chini georg at chini.tk
Thu Feb 8 12:24:49 UTC 2018

On 08.02.2018 12:06, Shinnosuke Suzuki wrote:
> Hi
> I am developing a phone app using pulseaudio 6.0 with asynchronous API
> using Bluetooth Headset.

Can't you use a newer version? We are at 11.1 already and the
bluetooth code has changed significantly.

> I create a record stream with pa_stream_new() with this parameter.
>  static pa_sample_spec samplespec = {
>      .format = PA_SAMPLE_S16LE, /* Linear 16bit */
>      .rate = 16000, /* 16000Hz */
>      .channels = 1 /* mono */
>  }
> And I set a callback function by pa_stream_set_read_callback().
> After the stream created, I could get a voice data by 96byte per 10ms 
> in this callback.I checked a log with clock_gettime() in this callback.
> I think I get voice packet by 320Byte per 10ms.
> 16000Hz * 1 * 16bit = 256kbps = 32KBps
> This means that I can get 320Byte per 10ms.
> So I need to get 320Byte per 10ms.
> I set sample format above, but I got different voice packet from callback.
> I would like to get a voice with Linear 16bit 16kHz mono.
> Is there additional configuration to this codec?
> For confirmation, when I use a bluetooth headset, Is this correct the 
> pulseaudio convert codec from SBC to Linear as follows?
> My app <- Linear 16bit 16kHz <- Pulseaudio  <- SBC codec <- Bluetooth 
> Headset

When you record from the BT headset, the BT headset is set to HSP/HFP.
This means that recording and playback stream are at 8kHz, not 16kHz.
Pulseaudio only supports CVSD codec, not mSBC.

> And addition to that, After stream connected, CPU load for pulseaudio
> rose up 50%-60%.CPU load for MyAPP rose up 20%-30%.
> In order to reduce CPU load, I conigure as follows:
>  high-priority = no
>  realtime-scheduling = no
>  resample-method=trivial
resample-method=trivial might result in bad audio quality.

More information about the pulseaudio-discuss mailing list