在 ALSA 数据传输中,最容易出现的错误是 underrun 和 overrun。

pcm 播放的时候,接口 snd_pcm_writei 返回 -EPIPE,为 underrun(不足)
录制音频的时候, 接口 snd_pcm_readi 返回 -EPIPE, 为 overrun(超载)

使用 ALSA 架构的驱动程,在实际开发使用过程中,比较常见的错误有 -EPIPE,为什么会出现呢?肯定是系统内部不和谐了!

在 Playback 时出现 EPIPE 错误是因为 ALSA 驱动 buffer 没有数据可以丢给 codec 所致,通俗一点就是上层给下面喂数据的速度慢了,下面饿晕了,所以抱怨你上层慢啊,给你一个 -EPIPE 错误,让你自己去找原因。

在 Capture 时出现 EPIPE 也是有原因的,ALSA 的驱动也有一块专门用来存储录音数据的 buffer,上层从该 buffer 搬运数据再存储起来就能得到我们需要的录音文件。一旦驱动的 buffer 满了,就会出现 EPIPE 的错误,因为上层读录音 buffer 数据的速度慢了,这就不能抱怨下层不给面子了。
通过分析出现原因后,我们得找找对策,说起来容易,做的可能因为系统的原因并不是想的那么容易。在播放的时候,如果会出现这种 -EPIPE 的错误,请调整下发数据的数据,加快一点点!录音的时候出现这种错误,请读得更快一点!可以提高任务的优先级来处理,也可以把驱动 buffer 扩大一下,给系统更多一些缓冲时间!

在录音时由于录音数据过快会产生overrun现象;在放音时由于用户层的音频数据到 DDR 中的速度比控制器到 codec 放出的速度慢,于是出现underrun 现象。

建议检查:

DMA 没有及时的从 DDR 中将数据搬到 FIFO
DDR 中申请的 buffer 不够大
DDR 中的 buffer 没有数据

ALSA 音频数据传输 underrun 和 overrun相关推荐

  1. 解决Android5.1系统下音频Xrun(underrun或overrun)问题

    基于RK3288解决Android5.1系统下音频Xrun(underrun或overrun)问题 2018年11月23日 16:35:06 21cnhui 阅读数:38 标签: Android  a ...

  2. 音频出现Xrun(underrun或overrun)的原因与解决办法

    音频出现Xrun(underrun或overrun)的原因与解决办法 2016年11月09日 16:14:44 Qidi_Huang 阅读数:4614 标签: xrununderrunoverrun原 ...

  3. linux下lamealsa进行音频流操作(三)alsa音频编程教程

    1. ALSA音频编程介绍   ALSA 代表高级 Linux 声音架构.它由一组内核驱动程序.一个应用程序编程接口 (API) 库和用于在 Linux 下支持声音的实用程序组成.在本文中,我简要概述 ...

  4. Linux ALSA 音频系统:物理链路篇

    原址 1. Overview 硬件平台及软件版本: Kernel - 3.4.5 SoC - Samsung exynos CODEC - WM8994 Machine - goni_wm8994 U ...

  5. Linux ALSA音频驱动一:音频系统概述

    音频系统概述 音频系统通过数据+控制总线与CODEC连接,控制通路用I2C,数据通常为I2S,框图如图1所示. I2C:寄存器读写,用于配置CODEC控制通路. I2S:音频数据传输,通常与platf ...

  6. Linux ALSA音频框架分析五:HDA Driver分析

    Linux ALSA音频框架分析五:HDA Driver分析 一 概述 HDA(High Definition Audio)是intel设计的用来取代AC97的音频标准,硬件架构上由hda dodec ...

  7. Linux ALSA音频系统:platform,machine,codec

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_41965270/arti ...

  8. 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得

    **************************************************************************************************** ...

  9. linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系

    转:https://blog.csdn.net/lugandong/article/details/72468831 一. 拿512fs说话: 看图知道采样的位深是32bit(位),左右声道各占了8* ...

最新文章

  1. Python编程基础:第八节 判断语句If Statements
  2. [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解...
  3. 关于oracle监听程序的相关问题及解决方法
  4. zabbix监控ntpd服务
  5. C#规范整理·资源管理和序列化
  6. 6.Strings and Dictionaries
  7. 修复Mysql主从不同步shell
  8. php处理XML数据
  9. (转)JavaScript导出Word后对Word分页的处理
  10. Python学习---Python的框架基础学习
  11. python socket清空接受区_用 Python 开发一个 「聊天室」
  12. 【常用模块】OLED显示模块(原理讲解、STM32实例操作)
  13. 什么是 Hook 技术
  14. 中文讲解 机器学习 Machine Learning in Business 第二版,约翰.赫尔(John C. Hull ),Chenghsi Hsieh老师
  15. vs2017优雅配色
  16. 计算机网络谢希仁第七版课后习题答案(第九章)
  17. 从0开始构建一个k8s集群
  18. 追风筝的人 第九章
  19. 【空间描述与位姿变换】(台大林沛群课程学习笔记)持续更新~
  20. iOS 获取手机外网IP地址的成功与失败

热门文章

  1. 好像还挺好玩的GAN重制版2——Keras搭建SRGAN平台进行图片超分辨率提升
  2. 7.类型转换、消息处理与国际化
  3. 【人生苦短,我学 Python】基础篇——初步认识(Day1)
  4. Android系统的HAL层分析 -- Sensors
  5. 【微话】究竟什么是大数据?
  6. 高效率同步4开关Buck-Boost DC/DC控制器TMI5700
  7. STM32获取唯一身份标识unique ID
  8. 均值与期望:傻傻分不清?
  9. 河北省中考计算机操作试题2019,2019年河北省中考试卷、答案、解析
  10. 如何用python爬取图片数据_“python爬取微博图片教程“用Python爬虫爬取的图片怎么知道图片有没有水印...