我正在写一首"播放声音"使用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控件创建了另一个线程,我可以在该线程中睡觉而不会打扰播放。