【问题标题】:Using ALSA's function snd_pcm_writei can I free the sample buffer right away?使用 ALSA 的函数 snd_pcm_writei 我可以立即释放样本缓冲区吗?
【发布时间】:2010-11-21 20:43:03
【问题描述】:

使用 ALSA 播放音频,调用 snd__pcm__writei 后,是否可以立即释放声音采样缓冲区,还是需要等到声音播放完毕才能释放采样缓冲区?

例如:

unsigned short *buffer;

buffer = malloc(size of sample to play);
...load data into buffer...
snd_pcm_writei (playback_handle, buffer, size of sample)
free(buffer)

【问题讨论】:

    标签: c++ c linux alsa


    【解决方案1】:

    找出最简单的方法是从缓冲区的末尾开始向后写入,看看是否影响音频播放。如果你这样做了,那么你肯定不能释放缓冲区。如果没有区别,那么您可以安全地释放缓冲区,因为声卡没有从该特定内存块读取。

    【讨论】:

    • -1 这种回答问题的方法(反复试验)是错误的。它可能恰好适用于您的设置,但在不同版本的 ALSA 库上失败,或者可能适用于软混音但不能直接访问硬件,反之亦然。回答这个问题需要阅读规范/文档,或者如果开发人员没有将其清楚地写入文档中,他们的意图是什么。
    • @R..:虽然我明白你的意思,但为自己解决这样的事情是了解开发的最重要的事情之一,IMO。它教你很多关于如何分析和解决问题的知识。不过,显然,向开发人员发送电子邮件并询问是最理想的做法。
    • 我想我们只是不同意。我认为这是开发中的一种常见做法,这不是要学习的重要内容,而是不要养成习惯的重要内容。这种反复试验的编程是代码腐烂的无穷无尽的来源 - 代码在最初编写在其编写的确切 OS/OS 版本上时工作,随后在有人升级或尝试运行它时中断不同的操作系统。
    猜你喜欢
    • 2012-12-02
    • 2023-03-20
    • 2014-10-31
    • 2011-01-11
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多