如何在Linux中使用ALSA获得瞬时音量或播放时间

时间:2017-08-22 07:11:53

标签: linux libalsa

我正在写一首"播放声音"使用ALSA在Reapberry Pi上进行程序。

我每1280个样本调用snd_pcm_writei。

我希望添加一个小型LED,让它在声音响亮时变亮,在声音更安静时变暗。"

我的飞机是,如果每隔短时间内有一次回叫(例如:100ms),我可以在回调中获得瞬时音量,我可以控制其中的LED。

在android中,有AudioTrack.setPositionNotificationPeriod。 但是,我不知道如何在Linux下使用ALSA进行此操作。

有人可以给我一些建议吗?

播放功能如下所示:

// nLeftFrameSize: Total sample number.
// hDevice: Play device handle (initialized beforehand).
// lpbyBuffer: Sample buffer.

while(nLeftFrameSize > 0){
    nRes = (int)snd_pcm_writei(( snd_pcm_t*)hDevice, lpbyBuffer, 1280);
    nLeftFrameSize -= 1280;
}

我已尝试在snd_pcm_writei()之前的while循环中计算RMS,设置LED亮度和睡眠,以确保在播放这1280个样本时LED可以亮起。但这导致声音不连续。

所以我为LED控件创建了另一个线程,我可以在该线程中睡觉而不会打扰播放。

0 个答案:

没有答案