ALSA:防止扬声器欠载的方法

2023-11-22

我正在非交错模式下播放单通道音频。当我将音频数据写入扬声器时,我遇到了问题:ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred

我是这样写的:

    printf("%d",snd_pcm_avail (spkhandle));  
    ret = snd_pcm_writen(spkhandle, pSpeakerBuf , framesIn18Millisec);
    if(ret < 0)
    {
        snd_pcm_recover(spkhandle, ret, 0);
    }

有哪些不同的方法/参数配置可以防止 ALSA 运行不足?

(我使用的是Linux 3.0,ARM)

编辑: 这是使用 snd_pcm_avail() API 进行的缓冲区测量

      snd_pcm_avail = 2304      << snd_pcm_writen call 1 success
      snd_pcm_avail = 2160      << snd_pcm_writen call 2 success
      snd_pcm_avail = 2016      << snd_pcm_writen call 3 success
      snd_pcm_writen error -32 Broken pipe  << snd_pcm_writen call 4 failure
      ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred  << And displays this message

以下是 Marko 请求的输出:

snd_output_t* out;
....
// Do alsa parameters init .... 
....
snd_output_stdio_attach(&out, stderr, 0);
snd_pcm_dump_sw_setup(spkhandle, out);

  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 144
  period_event : 0
  start_threshold  : 288
  stop_threshold   : 2304
  silence_threshold: 0
  silence_size : 0
  boundary     : 1207959552

我假设这段代码在一个紧密的循环中运行,并且旨在阻止snd_pcm_writen()。未给出采样率;我假设 48kHz,因为所有数字都很好地划分。

我认为这里的内容如下:

  • snd_pcm_write()不保证写入提供的所有帧(仅检查返回值是否有错误情况)。从记录来看snd_pcm_avail()它实际上正在消耗avail_min or 144每个上都有帧。这是 3 毫秒的音频。
  • 假设此时音频没有运行,两次写入后,缓冲区中的帧数等于start_threshold - at 288样品;音频输出开始
  • 打电话给printf()块,我似乎记得snd_pcm_avail()必须与音频输出硬件同步,并且也可能会阻塞。由于现在比播放提前了 6 毫秒,因此缓冲区完全有可能在第三次调用时耗尽snd_pcm_writen()

总之,你不应该打电话printf()此时,您可能需要补偿以下事实:snd_pcm_writen()没有消耗掉所有的帧pSpeakerBuf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ALSA:防止扬声器欠载的方法 的相关文章

随机推荐

  • 将字符串转换为 Joda LocalTime 格式 (HH:mm:ss) 并删除毫秒

    DateTimeFormatter fmt DateTimeFormat forPattern HH mm ss LocalTime localTime fmt parseLocalTime 02 51 20 System out prin
  • 如何获得对右值的引用?

    我用过std move and std forward在C 中 我的问题是 标准库实际上是如何实现这些功能的 如果您可以获取左值的地址 并且右值完全不是左值 那么您如何实际实现这些引用 这些新设施是否允许 auto x 3 或类似的东西 你
  • 如何仅水平设置表格中的单元格间距

    我想设计下面写的表格的样式 table border 1 cellspacing 10 tr th Month th th Savings th tr tr td January td td 100 td tr table 问题是单元格间距
  • firebase-core 和 firebase-analytics 库有什么区别?

    谷歌最近发布了新版本的Firebase 所以我尝试迁移到 Firebase 分析 那么这些库有什么区别 com google firebase firebase analytics 9 0 0 and com google firebase
  • .Net Machinekey.Protect - 使用什么算法?

    我正在使用 Machinekey Protect 和 Machinekey Unprotect 来加密应用程序中的值 一个潜在客户正在执行安全审核 并询问了此方法使用的加密算法 我正在努力使用谷歌找到答案 任何有关可验证链接的帮助将不胜感激
  • 谷歌地图信息窗口位于右侧

    如何在左侧显示带有箭头的信息窗口 而不是在底部 屏幕截图示例在这里 已经有一段时间了 也许您确实对这个话题产生了兴趣 但我想说 无需使用任何第三方工具就可以 只需添加pixelOffset to the infowindow像这样 var
  • 同时按下多个按钮

    在我的 WP 7 1 应用程序中 我有一个包含多个按钮的页面 我注意到 当按下任一按钮时 无法按下其他按钮 我怎样才能克服这个问题 我需要能够允许用户同时按下多个按钮 不幸的是 您无法同时处理多个按钮点击 不过 有一种方法可以解决这个问题
  • 如何向 HTML5 Canvas 添加撤消功能?

    我有一个用 HTML5 和 Javascript 完成的草图应用程序 我想知道如何创建一个撤消按钮 这样您就可以撤消您最后绘制的内容 任何想法 您必须将所有修改存储在数据结构中 然后如果用户想要的话可 以删除最新的修改undo它 然后 您再
  • 带有基于文件的电子邮件后端服务器的 Django 测试框架

    我在Django框架中制定了测试用例 使用案例 我正在使用 API 通过向用户发送电子邮件来注册用户 当他们单击电子邮件中提供的链接时 他们的帐户就会被激活 在我的 settings py 中我使用 EMAIL FILE PATH djan
  • 将图标与 JCheckBox 一起使用

    我有一个 swing 应用程序 我想在其中使用带有图标的 JCheckbox 我构建的图标如下 JCheckBox unsubmit new JCheckBox Unsubmit applet undo 当我这样做时 标签和图标出现在我的
  • Rails 使所有路由默认格式为::json

    您可以将所有路由默认为json 我有以下 api 范围 但我想知道您是否可以对全局范围执行相同的操作 scope api defaults format json do get search query location gt search
  • Hive - LIKE 运算符

    我不知道如何处理这个问题 这是我的数据 Table1 Table2 BRAND PRODUCT SOLD Sony Sony ABCD 1233 Apple Sony adv 1233 Google Sony aaaa 1233 IBM A
  • 角度 2 贝宝

    我正在使用 Angular 2 和 Firebase 建立一个新的电子商务项目 我的问题是如何集成贝宝按钮 当客户点击它时 他们将被重定向到贝宝并付款 然后重定向回我的网站 目前 我设法让他们回来 要么按照这个 github 存储库中的指示
  • gnuplot 多条线,X 轴上有时间

    我已经查看了问题 但仍然无法正常工作 我的数据集是这样的 date cpu mem 23 00 39 21 9 2 1 23 00 44 21 8 2 1 23 00 49 21 8 2 1 23 00 54 21 8 2 1 23 00
  • 虚拟函数的Vtable如何工作

    我对虚拟表有一个小疑问 每当编译器遇到类中的虚拟函数时 它都会创建Vtable并将虚拟函数地址放在那里 对于其他继承的类 也会发生类似的情况 它是否在每个类中创建一个指向每个 Vtable 的新指针 如果不是 当创建派生类的新实例并将其分配
  • 我可以使用IdUDPClient发送M-SEARCH请求吗?

    我的网络中几乎没有 uPNP 设备 我正在尝试向网络发送 M SEARCH 请求 并希望收到一些响应 这就是我正在尝试的 var sIP sOut string iPort Word S TStringBuilder begin S TSt
  • 在 Bootstrap 中打开放大图像模式

    我如何open enlarge使用 jquery js 的模式中的图像和不是数据属性 每当用户将图像插入内容编辑器时 我都需要它可单击以使用 js 在模式中展开 因此我不能依赖用户输入他们不知道如何使用的数据属性 我试过 a href my
  • 解析 EDGAR 文件

    我想使用 python2 7 删除 EDGAR 文件中非文档文本的任何内容 可在线获取 txt 文件 这些文件的示例如下 Example EDGAR 从该文件的第 48 页开始提供其文档类型定义 DTD 我的程序的第一部分将 txt 文件从
  • R 中计算 R2(R 平方)的函数

    我有一个包含观察数据和建模数据的数据框 我想计算 R2 值 我期望有一个可以调用的函数 但找不到 我知道我可以自己编写并应用它 但我是否遗漏了一些明显的东西 我想要类似的东西 obs lt 1 5 mod lt c 0 8 2 4 2 3
  • ALSA:防止扬声器欠载的方法

    我正在非交错模式下播放单通道音频 当我将音频数据写入扬声器时 我遇到了问题 ALSA lib pcm c 7339 snd pcm recover underrun occurred 我是这样写的 printf d snd pcm avai