涉及平台:rk3399、ok4418

系统音频设备信息

rk3399_all:/ $ ls /dev/snd/
controlC0 controlC2 pcmC0D0p pcmC1D0p timer
controlC1 pcmC0D0c  pcmC1D0c pcmC2D0prk3399_all:/ $ ls /sys/class/sound/
card0 card2     controlC1 pcmC0D0c pcmC1D0c pcmC2D0p
card1 controlC0 controlC2 pcmC0D0p pcmC1D0p timerrk3399_all:/ $ cat /sys/class/sound/card0/id
RKPCMCARD
rk3399_all:/ $ cat /sys/class/sound/card0/number
0
rk3399_all:/ $ cat /sys/class/sound/card0/controlC0/dev
116:2rk3399_all:/ $ cat /sys/class/sound/card1/id
RKWM8960
rk3399_all:/ $ cat /sys/class/sound/card1/number
1
rk3399_all:/ $ cat /sys/class/sound/card1/controlC1/dev
116:5rk3399_all:/ $ cat /sys/class/sound/card2/id
rockchiphdmi
rk3399_all:/ $ cat /sys/class/sound/card2/number
2
rk3399_all:/ $ cat /sys/class/sound/card2/controlC2/dev
116:8

内核音频设备加载信息

RK3399:
[    5.280018] ALSA device list:
[    5.280228]   #0: RK-PCM-CARD
[    5.280428]   #1: RKWM8960
[    5.280671]   #2: rockchip,hdmiok4418:
[    2.477000] ALSA device list:
[    2.480000]   #0: I2S-WM8960
[    2.483000]   #1: SPDIF-Transciever

虚拟声卡

RK3399 设备树定义的虚拟声卡

        rockchip_pcm_codec: rockchip-pcm-codec {compatible = "rockchip-pcm-codec";};rockchip-pcm-card {compatible = "rockchip-pcm-card";status = "okay";dais {dai0 {audio-codec = <&rockchip_pcm_codec>;audio-controller = <&i2s1>;format = "i2s";};};};

驱动文件

kernel/sound/soc/codecs/rk_pcm_codec.cstruct snd_soc_dai_driver pcm_card_dai = {.name = "rockchip-pcm-card-hifi",.playback = {.stream_name = "HiFi Playback",.channels_min = 2,.channels_max = 2,.rates = (SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_16000 |SNDRV_PCM_RATE_32000 |SNDRV_PCM_RATE_44100 |SNDRV_PCM_RATE_48000 |SNDRV_PCM_RATE_96000 |SNDRV_PCM_RATE_192000),.formats = FORMATS,},.capture = {.stream_name = "HiFi Capture",.channels_min = 2,.channels_max = 2,.rates = (SNDRV_PCM_RATE_8000|SNDRV_PCM_RATE_16000|SNDRV_PCM_RATE_32000 |SNDRV_PCM_RATE_44100 |SNDRV_PCM_RATE_48000 |SNDRV_PCM_RATE_96000 |SNDRV_PCM_RATE_192000),.formats = FORMATS,},};

xx18 板级文件定义的虚拟网卡

#if defined(CONFIG_SND_CODEC_NULL)
static struct platform_device snd_null = {.name = "snd-null",.id = -1,
};struct nxp_snd_dai_plat_data snd_null_dai_data = {.i2s_ch = 0,.sample_rate = 48000,.pcm_format = SNDRV_PCM_FMTBIT_S16_LE,
};static struct platform_device snd_null_dai = {.name = "snd-null-card",.id = -1,.dev = {.platform_data = &snd_null_dai_data,}
};//-------------------------------------
static struct platform_device snd_null_1 = {.name = "snd-null",.id = 1,
};struct nxp_snd_dai_plat_data snd_null_dai_data_1 = {.i2s_ch = 1,.sample_rate = 48000,.pcm_format = SNDRV_PCM_FMTBIT_S16_LE,
};static struct platform_device snd_null_dai_1 = {.name = "snd-null-card",.id = 1,.dev = {.platform_data = &snd_null_dai_data_1 ,}
};//-------------------------------------
static struct platform_device snd_null_2 = {.name = "snd-null",.id = 2,
};struct nxp_snd_dai_plat_data snd_null_dai_data_2 = {.i2s_ch = 2,.sample_rate = 48000,.pcm_format = SNDRV_PCM_FMTBIT_S16_LE,
};static struct platform_device snd_null_dai_2 = {.name = "snd-null-card",.id = 2,.dev = {.platform_data = &snd_null_dai_data_2 ,}
};
#endif

驱动程序

linux/kernel/kernel-3.4.39/sound/soc/nexell/nxp-null.cstatic struct platform_driver snd_null_driver = {.probe          = snd_null_probe,.remove         = snd_null_remove,.driver         = {.name   = "snd-null",.owner  = THIS_MODULE,},
};module_platform_driver(snd_null_driver);static struct platform_driver snd_card_driver = {.driver         = {.name   = "snd-null-card",.owner  = THIS_MODULE,.pm     = &snd_soc_pm_ops,      /* for suspend */},.probe          = snd_card_probe,.remove         = snd_card_remove,
};
module_platform_driver(snd_card_driver);

Android下虚拟声卡的应用

当外接的音频codec缺失的情况下,Android系统有部分功能会因声卡的缺失而异常:
1、摄像头不能录像

I/MediaCodec(  132): MediaCodec will operate in async mode
E/audio_hw_primary(  132): get_input_buffer_size not opened input device, set default pcm config !!!
E/audio_hw_primary(  132): pcm_config_setup pcmC0D0c device does not exist.
E/AudioSystem(  132): AudioSystem::getInputBufferSize failed sampleRate 44100 format 0x1 channelMask 10
E/AudioRecord(  132): AudioSystem could not query the input buffer size for sampleRate 44100, format 0x1, channelMask 0x10; status -22
E/StagefrightRecorder(  132): audio source is not initialized
D/MPEG4Writer(  132): Video track stopping
E/MPEG4Writer(  132): Stop() called but track is not started
D/NX_OMXENC(  132): Sequrnce buffer Size = 21
E/MediaRecorder( 1337): start failed: -2147483648
E/CAM_VideoModule( 1337): Could not start media recorder.
E/CAM_VideoModule( 1337): java.lang.RuntimeException: start failed.
E/CAM_VideoModule( 1337):       at android.media.MediaRecorder.start(Native Method)
E/CAM_VideoModule( 1337):       at com.android.camera.VideoModule$11.onStorageUpdateDone(VideoModule.java:1376)
E/CAM_VideoModule( 1337):       at com.android.camera.CameraActivity$19.onPostExecute(CameraActivity.java:2089)
E/CAM_VideoModule( 1337):       at com.android.camera.CameraActivity$19.onPostExecute(CameraActivity.java:2074)
E/CAM_VideoModule( 1337):       at android.os.AsyncTask.finish(AsyncTask.java:636)
E/CAM_VideoModule( 1337):       at android.os.AsyncTask.access$500(AsyncTask.java:177)
E/CAM_VideoModule( 1337):       at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
E/CAM_VideoModule( 1337):       at android.os.Handler.dispatchMessage(Handler.java:102)
E/CAM_VideoModule( 1337):       at android.os.Looper.loop(Looper.java:135)
E/CAM_VideoModule( 1337):       at android.app.ActivityThread.main(ActivityThread.java:5254)
E/CAM_VideoModule( 1337):       at java.lang.reflect.Method.invoke(Native Method)
E/CAM_VideoModule( 1337):       at java.lang.reflect.Method.invoke(Method.java:372)
E/CAM_VideoModule( 1337):       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
E/CAM_VideoModule( 1337):       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
I/CAM_VideoModule( 1337): Releasing media recorder.

2、播放视频卡顿

这个时候注册虚拟声卡就可以解决这种问题。

TBC

音频设备(1)——Android音频设备相关推荐

  1. 【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )

    文章目录 I . AAudio 音频流创建流程 II . AAudio 音频流构建器 设置音频设备 ID AAudioStreamBuilder_setDeviceId III . AAudio 音频 ...

  2. linux音频设备接口,linux音频设备驱动读书笔记

    在linux系统中,先后出现了音频设备的两种框架:OSS和ALSA. 针对不同的数字音频子系统,出现了几种微处理器或DSP与音频器件间用于数字转换的接口. 音频设备的硬件接口 (1)PCM接口. (2 ...

  3. 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )

    文章目录 一.获得最佳延迟 二.Oboe 音频流 三.Oboe 音频设备 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指 ...

  4. 【Android 高性能音频】AAudio 音频库 简介 ( AAudio 音频库简介 | 音频流 | 音频设备 | 共享模式 | 数据模式 )

    文章目录 I . AAudio 音频库 简介 II . AAudio 音频流 三要素 ( 设备 | 共享模式 | 数据格式 ) III . AAudio 音频设备 IV . AAudio 音频设备获取 ...

  5. Android接入USB音频设备,系统一直发送广播

    Android接入USB音频设备,系统一直发送广播 今天发现有一款USB音频设备接入Android后,系统一直发送广播,导致出现了一些异常情况,下面是预想中的一种方案,在此记录一下. 当USB音频设备 ...

  6. 《Linux驱动:使用音频设备驱动框架-OSS构建音频设备驱动》

    文章目录 一,前言 二,框架 三,OSS实现 3.1 OSS初始化 3.2 向OSS注册音频设备 3.3 OSS管理音频设备 四,音频基本概念 4.1 采样频率 4.2 采样精度 4.3 左声道/右声 ...

  7. Win10下音频设备无法播放音乐问题定位

    最近一直在调试音频设备,由于音频设备需要在不同的采样率下面转换,所以会经常导致我的win10无法播放和录音. 刚开始在网上搜了相关的知识,但是一直没找到有效的解决方案.后来,无奈之下,使用了微软的声音 ...

  8. iphone7p计算机不见了,iphone找不要音频设备,苹果7p找不到音频设备-

    电脑能不能出声音主要是靠音频设备,通过音频设备调节音量或做其他的设置,在平常听音乐.看电影视频的时候才会更加方便. 音频设备图标一般是在电脑右下角的位置,但有些人发现自己电脑右下角并没有音频设备图标, ...

  9. 使用Android高性能音频--OpenSL ES和AAudio

    AAudio的概念介绍: AAudio 是作为 OpenSL ES 库的轻量级原生 Android 替代项而开发. 与 OpenSL ES 相比,AAudio API 不仅较小,而且容易使用. AAu ...

最新文章

  1. Php传图缩图,使用以下用于上传图像的PHP代码上传时缩小图像大小
  2. 矩形脉冲信号的频域分析_矩形周期脉冲信号MATLAB实现
  3. opencv 检测 键盘_ubuntu+vscode 测试运行opencv
  4. 10月Web服务器调查:Apache下降 Ngnix攀升
  5. 猎豹浏览器截图在哪 猎豹浏览器如何截图
  6. pytorch中unsqueeze()和squeeze()函数
  7. python的os,commands,subprocess启动进程调用的几种方法
  8. bq24075 锂电池 充电电路分析
  9. Visio图标模板库
  10. 硬盘保护系统破解器下载、crdisk硬盘保护克星下载
  11. 科幻电影中的人工智能——中科院计算所王元卓
  12. PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection(group的是关键点周围的体素,而不是周围的点)
  13. 网络舆情风险评估工作有效做好的实施方案
  14. canvas 线条渐变追逐_canvas之渐变
  15. 2※、封装流(包装流派)、缓冲流【字节缓冲流、字符缓冲流】-->【字节缓冲流、字符缓冲流】 、字符集、转换流以及打印流
  16. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]
  17. 微信好友列表服务器,微信小游戏如何实现邀请好友列表
  18. 漫画:什么是 “牛奶咖啡” 问题?
  19. 服务器阵列信息恢复,DELL RAID阵列的创建恢复回原有的用户数据
  20. SCI:SCI论文写作技巧的详细攻略

热门文章

  1. 雷蛇毒蝰迷你版无法连接雷云3解决方法
  2. IDEA 2021.1 的 Win 和 Mac 快捷键大全!!
  3. JAVA计算平年和闰年
  4. JS高级-分享一个别踩白块的小游戏(源码)
  5. linux无盘win7系统下载,顺网雲无盘客户机镜像下载链接
  6. 微信小程序——绑定点击事件
  7. ubuntu重新获取IP地址
  8. Ransom Note
  9. 曲线坐标轴范围及刻度的自适应算法综述
  10. 不小心清空了回收站怎么恢复文件 回收站清空的文件怎么恢复