如何在更改汇点或源列表时从pulseaudio获取事件?

时间:2017-01-30 16:05:01

标签: linux pulseaudio

他。

程序应不断检查来自蓝牙麦克风的传入声音。 可以随时连接/断开蓝牙设备。

如何从Pulseaudio获取事件列表更改的事件?

我试过用 pa_context_set_event_callback (pa_ctx, pa_context_event_cb, &mydata);

但是当BT耳机连接/断开时,没有人拨打pa_context_event_cb

pulseaudio的好习惯是什么?

1 个答案:

答案 0 :(得分:1)

确定。想出来了。

1)订阅上下文状态更改:     pa_context_set_state_callback(pa_ctx, pa_state_cb, &mydata);

2)在pa_state_cb中:

void pa_state_cb(pa_context * c,void * userdata){

    pa_context_state_t state;
    state = pa_context_get_state(c);
    switch  (state) {
            case PA_CONTEXT_READY: {
                     //set callback
                     pa_context_set_subscribe_callback(c, pa_context_subscribe_cb, &mydata);
                     //set events mask and enable event callback.
                     o = pa_context_subscribe(c, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE,
                     NULL, NULL);

                     if (o)
                     {
                       pa_operation_unref(o);
                     }

            }
                    break;
            case PA_CONTEXT_UNCONNECTED:
            case PA_CONTEXT_CONNECTING:
            case PA_CONTEXT_AUTHORIZING:
            case PA_CONTEXT_SETTING_NAME:
            case PA_CONTEXT_FAILED:
            case PA_CONTEXT_TERMINATED:
            default:
                    break;

}

3)然后在回调pa_subscription_event_type_t中处理掩码事件(pa_context_subscribe_cb)。