前言

最近在学习高通的音频驱动,在学习了高通音频 bring up 和 Audio overview 文档后,并在网上寻找到一篇比较重要的 blog进行学习后,将这部分学习笔记记录于此。

四个重要部分

高通音频框架大体分为以下四个部分:
音频前端(FE)
音频后端(BE)
DSP
音频设备(Audio Device)

(以下,音频前端使用 FE 代替;音频后端使用 BE 代替,音频设备使用 Device 代替)
其中,一个音频前端对应着一个 PCM 设备,一个音频后端对应着一个 DAI 口;DSP 处于音频前端和音频后端之间,起着连接 FE 和 BE 的作用;所有的 Device 都是挂在 DAI 上的。

1. PCM

PCM :(Pulse-code modulation)脉冲编码调制,是将模拟信号转化为数字信号的一种方法(个人理解:PCM 数据流即是通过PCM方法转换后的二进制数据流)。大致包含以下这几种:
deep-buffer (//音乐、视频等对时延要求不高的播放音)
low-latency (//按键音、触摸音、游戏背景音等低延时的放音)
mutil-channel
compress-offload (//mp3、flac、aac等格式的音源播放)
audio-record (//普通录音)
usb-audio
a2dp-audio
voice-call (//语音通话)

Auido PCM 解释( https://blog.csdn.net/shuyong1999/article/details/7165419 )

2. DAI

DAI : Direct audio input (音频总线接口)
SLIM_BUS
Aux_PCM
Primary_MI2S
Secondary_MI2S
Tertiary_MI2S
Quatermary_MI2S

3. Audio Device

headset
handset
speaker
earpiece
mic
bt
modem
FM

具体其定义如下:

/* Playback devices */
SND_DEVICE_MIN,
SND_DEVICE_OUT_BEGIN = SND_DEVICE_MIN,
SND_DEVICE_OUT_HANDSET = SND_DEVICE_OUT_BEGIN,
SND_DEVICE_OUT_SPEAKER,
SND_DEVICE_OUT_SPEAKER_EXTERNAL_1,
SND_DEVICE_OUT_SPEAKER_EXTERNAL_2,
SND_DEVICE_OUT_SPEAKER_REVERSE,
SND_DEVICE_OUT_SPEAKER_WSA,
SND_DEVICE_OUT_SPEAKER_VBAT,
SND_DEVICE_OUT_LINE,
SND_DEVICE_OUT_HEADPHONES,
SND_DEVICE_OUT_HEADPHONES_DSD,
SND_DEVICE_OUT_HEADPHONES_44_1,
SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES,
SND_DEVICE_OUT_SPEAKER_AND_LINE,
SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1,
SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2,
SND_DEVICE_OUT_VOICE_HANDSET,
SND_DEVICE_OUT_VOICE_SPEAKER,
SND_DEVICE_OUT_VOICE_SPEAKER_WSA,
SND_DEVICE_OUT_VOICE_SPEAKER_VBAT,
SND_DEVICE_OUT_VOICE_SPEAKER_2,
SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA,
SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT,
SND_DEVICE_OUT_VOICE_HEADPHONES,
SND_DEVICE_OUT_VOICE_LINE,
SND_DEVICE_OUT_HDMI,
SND_DEVICE_OUT_SPEAKER_AND_HDMI,
SND_DEVICE_OUT_DISPLAY_PORT,
SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT,
SND_DEVICE_OUT_BT_SCO,
SND_DEVICE_OUT_BT_SCO_WB,
SND_DEVICE_OUT_BT_A2DP,
SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP,
SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
SND_DEVICE_OUT_VOICE_TX,
SND_DEVICE_OUT_AFE_PROXY,
SND_DEVICE_OUT_USB_HEADSET,
SND_DEVICE_OUT_USB_HEADPHONES,
SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET,
SND_DEVICE_OUT_TRANSMISSION_FM,
SND_DEVICE_OUT_ANC_HEADSET,
SND_DEVICE_OUT_ANC_FB_HEADSET,
SND_DEVICE_OUT_VOICE_ANC_HEADSET,
SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET,
SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET,
SND_DEVICE_OUT_ANC_HANDSET,
SND_DEVICE_OUT_SPEAKER_PROTECTED,
SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED,
SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED,
SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT,
SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT,
SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT,
SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS,
SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS,
#ifdef RECORD_PLAY_CONCURRENCY
SND_DEVICE_OUT_VOIP_HANDSET,
SND_DEVICE_OUT_VOIP_SPEAKER,
SND_DEVICE_OUT_VOIP_HEADPHONES,
#endif
SND_DEVICE_OUT_END,/** Note: IN_BEGIN should be same as OUT_END because total number of devices* SND_DEVICES_MAX should not exceed MAX_RX + MAX_TX devices.*/
/* Capture devices */
SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END,
SND_DEVICE_IN_HANDSET_MIC  = SND_DEVICE_IN_BEGIN,
SND_DEVICE_IN_HANDSET_MIC_EXTERNAL,
SND_DEVICE_IN_HANDSET_MIC_AEC,
SND_DEVICE_IN_HANDSET_MIC_NS,
SND_DEVICE_IN_HANDSET_MIC_AEC_NS,
SND_DEVICE_IN_HANDSET_DMIC,
SND_DEVICE_IN_HANDSET_DMIC_AEC,
SND_DEVICE_IN_HANDSET_DMIC_NS,
SND_DEVICE_IN_HANDSET_DMIC_AEC_NS,
SND_DEVICE_IN_SPEAKER_MIC,
SND_DEVICE_IN_SPEAKER_MIC_AEC,
SND_DEVICE_IN_SPEAKER_MIC_NS,
SND_DEVICE_IN_SPEAKER_MIC_AEC_NS,
SND_DEVICE_IN_SPEAKER_DMIC,
SND_DEVICE_IN_SPEAKER_DMIC_AEC,
SND_DEVICE_IN_SPEAKER_DMIC_NS,
SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS,
SND_DEVICE_IN_HEADSET_MIC,
SND_DEVICE_IN_HEADSET_MIC_FLUENCE,
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
SND_DEVICE_IN_HDMI_MIC,
SND_DEVICE_IN_BT_SCO_MIC,
SND_DEVICE_IN_BT_SCO_MIC_NREC,
SND_DEVICE_IN_BT_SCO_MIC_WB,
SND_DEVICE_IN_BT_SCO_MIC_WB_NREC,
SND_DEVICE_IN_CAMCORDER_MIC,
SND_DEVICE_IN_VOICE_DMIC,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
SND_DEVICE_IN_VOICE_SPEAKER_QMIC,
SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
SND_DEVICE_IN_VOICE_REC_MIC,
SND_DEVICE_IN_VOICE_REC_MIC_NS,
SND_DEVICE_IN_VOICE_REC_DMIC_STEREO,
SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
SND_DEVICE_IN_VOICE_RX,
SND_DEVICE_IN_USB_HEADSET_MIC,
SND_DEVICE_IN_CAPTURE_FM,
SND_DEVICE_IN_AANC_HANDSET_MIC,
SND_DEVICE_IN_QUAD_MIC,
SND_DEVICE_IN_HANDSET_STEREO_DMIC,
SND_DEVICE_IN_SPEAKER_STEREO_DMIC,
SND_DEVICE_IN_CAPTURE_VI_FEEDBACK,
SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1,
SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE,
SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE,
SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE,
SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE,
SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE,
SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC,
SND_DEVICE_IN_HANDSET_QMIC,
SND_DEVICE_IN_SPEAKER_QMIC_AEC,
SND_DEVICE_IN_SPEAKER_QMIC_NS,
SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS,
SND_DEVICE_IN_THREE_MIC,
SND_DEVICE_IN_HANDSET_TMIC,
SND_DEVICE_IN_VOICE_REC_TMIC,
SND_DEVICE_IN_UNPROCESSED_MIC,
SND_DEVICE_IN_UNPROCESSED_STEREO_MIC,
SND_DEVICE_IN_UNPROCESSED_THREE_MIC,
SND_DEVICE_IN_UNPROCESSED_QUAD_MIC,
SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC,
4. 音频 DSP

音频 DSP,大致可以等同于 codec。在高通MSM8953/MSM8937 平台上,codec分为两部分,一部分是数字 codec,其在 MSM 上;另一部分是模拟 codec,其在 PMIC 上。

二、音频场景(usecase)

usecase在逻辑上对应着音频前端,其定义如下:

1.playback:

Offload playback

A large-sized buffer is sent to the aDSP and the APSS goes to sleep. The aDSP
decodes, applies postprocessing effects, and outputs the PCM data to the
physical sound device. Before the aDSP decoder input runs out of data, it
interrupts the APSS to wake up and send the next set of buffers.
 Supported formats – MP3, AC3, EAC3, AAC, 24bit PCM, 16-bit PCM, FLAC
 Sampling rates in kHz – 8, 11.025, 16, 22.05, 32, 44.1, 48, 64, 88.2, 96, 176.4, 192
 Flags to be set in AudioTrack – AUDIO_OUTPUT_FLAG_DIRECT
|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD
|AUDIO_OUTPUT_FLAG_NON_BLOCKING
 Supported channels – 1, 2, 2.1, 4, 5, 5.1, 6, 7.1

Deep buffer playback

PCM data is sent to the aDSP, postprocessed, and rendered to an output sound
device. Audio effects can also be applied in the ARM or aDSP.
 Use cases – Ringtone, audio/video playback, audio streaming, YouTube streaming, and
so on.
 Supported format – PCM
 Sampling rates in kHz – 44.1 and 48
 Flag to be set in AudioTrack – AUDIO_OUTPUT_FLAG_PRIMARY
 Supported channel – Stereo

Low latency

Playback mode is similar to deep buffer, it uses a smaller buffer size and
minimal or no postprocessing in the aDSP so that the PCM stream is rendered
to the output sound device
 Use cases – Touchtone, gaming audio, and so on.
 Supported format – PCM
 Sampling rates in kHz – 44.1 and 48
 Flag to be set in AudioTrack – AUDIO_OUTPUT_FLAG_FAST
 Supported channel – Stereo

Multichannel

Playback mode where the PCM output of the multichannel decoder is sent to
the aDSP, postprocessed, and rendered at the output device
 Examples – AAC 5.1 channel, Dolby AC3/eAC3 playback
 Supported format – PCM
 Sampling rates in kHz – 44.1 and 48
 Flag to be set in AudioTrack – AUDIO_OUTPUT_FLAG_DIRECT
 Channels supported – 6 (default); changes dynamically

Playback over A2DP and USB does not go through aDSP
FM playback

In FM playback, PCM data from the FM chip is routed to the output sound
device via the ADSP.
 When a headset is connected and an FM app is launched, the FM app sets the
device to AudioSystem.DEVICE_OUT_FM.
 fm.c in hardware/qcom/audio/hal/audio_extn implements the code to open and
starts two PCM hostless sessions.
 One session for PCM capture
 One session for PCM playback
 A hostless session is required to keep the AFE ports in the aDSP active when
the APSS is asleep.
 The audio HAL sends the routing command to enable loopback from internal FM
Tx port to the primary MI2S Rx port using the mixer control settings in the
mixer_paths.xml file.
 Example of mixer settings
path name=“play-fm”
ctl name=“Internal FM RX Volume” value=“1”
ctl name=“PRI_MI2S_RX Port Mixer INTERNAL_FM_TX” value=“1”
ctl name=“MI2S_DL_HL Switch” value=“1”
######2.Recording
Compress mode
Mode of recording where encoded packets are
received by the APSS directly from the ADSP; it is supported for AMR WB
format only

Nontunnel mode

Mode of recording where PCM data from the mic is
preprocessed in DSP and received by the APSS, which then encodes the
PCM to the required encoding format by using the DSP-based or
software-based encoder
 Examples include camcorder recording and in-call recording

Multichannel mode

Used for capturing more than 2 channels of the PCM
stream and encoding them into a multichannel codec format like AC3
 Examples include surround sound camcorder recording, 4 to 6 channel
upsampling for 5.1 channel encoding

FM recording

 PCM data from the FM chip is routed to the APSS via the aDSP for recording in
the intended format.
 Recording occurs as normal use case from the internal FM Tx port.
 Example of mixer settings
name="audio-record capture-fm
ctl name=“MultiMedia1 Mixer INTERNAL_FM_TX” value=“1”

/* Playback usecases */
USECASE_AUDIO_PLAYBACK_DEEP_BUFFER = 0,
USECASE_AUDIO_PLAYBACK_LOW_LATENCY,
USECASE_AUDIO_PLAYBACK_MULTI_CH,
USECASE_AUDIO_PLAYBACK_OFFLOAD,
USECASE_AUDIO_PLAYBACK_OFFLOAD2,
USECASE_AUDIO_PLAYBACK_OFFLOAD3,
USECASE_AUDIO_PLAYBACK_OFFLOAD4,
USECASE_AUDIO_PLAYBACK_OFFLOAD5,
USECASE_AUDIO_PLAYBACK_OFFLOAD6,
USECASE_AUDIO_PLAYBACK_OFFLOAD7,
USECASE_AUDIO_PLAYBACK_OFFLOAD8,
USECASE_AUDIO_PLAYBACK_OFFLOAD9,
USECASE_AUDIO_PLAYBACK_ULL,/* FM usecase */
USECASE_AUDIO_PLAYBACK_FM,/* HFP Use case*/
USECASE_AUDIO_HFP_SCO,
USECASE_AUDIO_HFP_SCO_WB,/* Capture usecases */
USECASE_AUDIO_RECORD,
USECASE_AUDIO_RECORD_COMPRESS,
USECASE_AUDIO_RECORD_COMPRESS2,
USECASE_AUDIO_RECORD_COMPRESS3,
USECASE_AUDIO_RECORD_COMPRESS4,
USECASE_AUDIO_RECORD_LOW_LATENCY,
USECASE_AUDIO_RECORD_FM_VIRTUAL,/* Voice usecase */
USECASE_VOICE_CALL,/* Voice extension usecases */
USECASE_VOICE2_CALL,
USECASE_VOLTE_CALL,
USECASE_QCHAT_CALL,
USECASE_VOWLAN_CALL,
USECASE_VOICEMMODE1_CALL,
USECASE_VOICEMMODE2_CALL,
USECASE_COMPRESS_VOIP_CALL,USECASE_INCALL_REC_UPLINK,
USECASE_INCALL_REC_DOWNLINK,
USECASE_INCALL_REC_UPLINK_AND_DOWNLINK,
USECASE_INCALL_REC_UPLINK_COMPRESS,
USECASE_INCALL_REC_DOWNLINK_COMPRESS,
USECASE_INCALL_REC_UPLINK_AND_DOWNLINK_COMPRESS,USECASE_INCALL_MUSIC_UPLINK,
USECASE_INCALL_MUSIC_UPLINK2,USECASE_AUDIO_SPKR_CALIB_RX,
USECASE_AUDIO_SPKR_CALIB_TX,USECASE_AUDIO_PLAYBACK_AFE_PROXY,
USECASE_AUDIO_RECORD_AFE_PROXY,USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE,    /* Playback usecases */
USECASE_AUDIO_PLAYBACK_DEEP_BUFFER = 0,
USECASE_AUDIO_PLAYBACK_LOW_LATENCY,
USECASE_AUDIO_PLAYBACK_MULTI_CH,
USECASE_AUDIO_PLAYBACK_OFFLOAD,
USECASE_AUDIO_PLAYBACK_OFFLOAD2,
USECASE_AUDIO_PLAYBACK_OFFLOAD3,
USECASE_AUDIO_PLAYBACK_OFFLOAD4,
USECASE_AUDIO_PLAYBACK_OFFLOAD5,
USECASE_AUDIO_PLAYBACK_OFFLOAD6,
USECASE_AUDIO_PLAYBACK_OFFLOAD7,
USECASE_AUDIO_PLAYBACK_OFFLOAD8,
USECASE_AUDIO_PLAYBACK_OFFLOAD9,
USECASE_AUDIO_PLAYBACK_ULL,/* FM usecase */
USECASE_AUDIO_PLAYBACK_FM,/* HFP Use case*/
USECASE_AUDIO_HFP_SCO,
USECASE_AUDIO_HFP_SCO_WB,/* Capture usecases */
USECASE_AUDIO_RECORD,
USECASE_AUDIO_RECORD_COMPRESS,
USECASE_AUDIO_RECORD_COMPRESS2,
USECASE_AUDIO_RECORD_COMPRESS3,
USECASE_AUDIO_RECORD_COMPRESS4,
USECASE_AUDIO_RECORD_LOW_LATENCY,
USECASE_AUDIO_RECORD_FM_VIRTUAL,/* Voice usecase */
USECASE_VOICE_CALL,/* Voice extension usecases */
USECASE_VOICE2_CALL,
USECASE_VOLTE_CALL,
USECASE_QCHAT_CALL,
USECASE_VOWLAN_CALL,
USECASE_VOICEMMODE1_CALL,
USECASE_VOICEMMODE2_CALL,
USECASE_COMPRESS_VOIP_CALL,USECASE_INCALL_REC_UPLINK,
USECASE_INCALL_REC_DOWNLINK,
USECASE_INCALL_REC_UPLINK_AND_DOWNLINK,
USECASE_INCALL_REC_UPLINK_COMPRESS,
USECASE_INCALL_REC_DOWNLINK_COMPRESS,
USECASE_INCALL_REC_UPLINK_AND_DOWNLINK_COMPRESS,USECASE_INCALL_MUSIC_UPLINK,
USECASE_INCALL_MUSIC_UPLINK2,USECASE_AUDIO_SPKR_CALIB_RX,
USECASE_AUDIO_SPKR_CALIB_TX,USECASE_AUDIO_PLAYBACK_AFE_PROXY,
USECASE_AUDIO_RECORD_AFE_PROXY,USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE

三、音频通路配置(音频控件配置)

简单的来说,就是将音频前端(FE)经过音频后端(BE),与音频设备(Audio Device)连接起来。
(FE <=> BE <==> Devices)
usecase 通过路由与音频设备相关联。其配置一般放在某个 xml 文件,以 MSM8953 为例,其放在 mixer_paths_qrd_sku3.xml 文件中。该文件中的配置,又称为音频控件配置。
音频控件配置。
在高通 bring up 音频的时候,一般不会先去修改 mixer-path.xml 文件,而是先使用以下几个工具,进行通路配置验证:

tinymix: 配置音频路由;
tinycap: 录音;
tinyplay: 播放

1. 外部 SPK 调试举例

比如在调试外部 SPK,切其音源为右声道(HPHR),可以使用 tinymix + tinyplay 进行音频通路验证:

tinymix "PRI_MI2S_RX Audio Mixer MultiMedia1" "1"
tinymix "MI2S_RX Channels" "One"
tinymix "RX2 MIX1 INP1" "RX1"
tinymix "RDAC2 MUX" "RX2"
tinymix "HPHR" "Switch"
tinymix "Ext Spk Switch" "On"
tinyplay /sdcard/test.wav

如何理解 tinymix “MI2S_RX Channels” “One”
MI2S RX 线路上通道的个数:One or Two

如何理解 tinymix “RX2 MIX1 INP1” “RX1”
表示 SPK 以内部的 Rx Mix2 作为 mixer 作为输入,在 mixer 端又以 mixer的 Rx1 作为输入

如何理解 tinymix “RDAC2 MUX” “RX2”
表示音源右声道的前端数据来自 DAC2 模数转换器,而 DAC2 的又以 RDAC2 的 Rx2 作为输入

如何理解 tinymix “HPHR” “Switch”
表示右声道是打开还是关闭,其值为 Switch or Zero

如何理解 tinymix “Ext Spk Switch” “On”
表示打开外部 SPK,一般的,外部SPK都带有 PA 使能引脚,需要特别的打开,其值有 On or Off

则整个外部 SPK 的音频链路可以简化为:

Rx Mix2 --> DAC2 --> HPHR --> SPK

上面对 SPK 的配置,整个路径如图所示:

2.单 Mic 调试举例(主麦)
tinymix "MultiMedia1 Mixer TERT_MI2S_TX" "1"
tinymix "MI2S_TX Channels" "One"
tinymix "ADC1 Volume" "6"
tinymix "DEC1 MUX" "ADC1"
tinymix "IIR1 INP1 MUX" "DEC1"
tinycap /data/input1.wav –C 1 –R 44100 –T 20

字段意思,同 SPK 的差不多,只是需要注意的是,MIC 和 SPK 的音频流方向是不同的,并且,不同的 Audio Device 是挂在不同的 DAI 口上,这就体现在了以下两条命令:

tinymix “PRI_MI2S_RX Audio Mixer MultiMedia1” “1” // SPK : BE DAI —> DSP —> FE PCM

tinymix “MultiMedia1 Mixer TERT_MI2S_TX” “1” // MIC: FE PCM —> DSP —> BE DAI

经网友提示,现将上面内容调整修改为:
tinymix “PRI_MI2S_RX Audio Mixer MultiMedia1” “1” // SPK : FE PCM —> DSP —> BE DAI
tinymix “MultiMedia1 Mixer TERT_MI2S_TX” “1” // MIC: BE DAI —> DSP —> FE PCM

整个单 MIC的路径如图所示:

在确定通路没有问题的情况下,再将 tinymix 的参数导入到 mixer-path.xml 对应的音频控件中。并将该 mixer-path.xml push 到 /etc/ 目录下替换原来的文件,然后重启设备,通过系统 apk 进行测试。

引用参考

1. 高通文档

相关的 overview & bring up & audio debug 文档,此处不方便透漏文档编号和名字

2. csdn blog 引用

本篇笔记,在下面这篇博客内容上进行了修改和扩充。

Qualcomm Audio HAL 音频通路设置

感谢原作者的分享!

Qualcomm 音频学习一相关推荐

  1. Qualcomm 音频学习(Bring up)

    原址 Qualcomm Audio HAL 音频通路设置 前言 最近在学习高通的音频驱动,在学习了高通音频 bring up 和 Audio overview 文档后,并在网上寻找到一篇比较重要的 b ...

  2. Java中AudioFileStream_iOS音频学习一之AudioFileStream

    音乐一直是我的爱好,作为一名开发,同时我也想知道这些音乐是怎么播放的,音效是如何改变的,如何升降调,一个音乐播放器是怎么实现的.从而开启我的音频学习之路 基本知识 人耳所能听到的声音,最低的频率是从2 ...

  3. 视音频学习基础篇(一)----YUV采样格式和存储格式

    先给自己打个广告,本人的微信公众号:嵌入式Linux江湖,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题. 本系列主要介绍视频中的 ...

  4. Android音频学习之MediaExtractor,提取音频视频轨道数据(从视频中分离音频视频数据)

    一个音视频文件是由音频和视频组成的,我们可以通过MediaExtractor.MediaMuxer把音频或视频给单独抽取出来,抽取出来的音频和视频能单独播放: 1 MediaExtractor 说明 ...

  5. 【HoloLens2】添加空间音频学习笔记

    向HoloLens的Unity项目添加空间音频 本教程内容: 如何在Unity中的HoloLens 2上使用与头部相关的传递函数(HRTF)卸载 使用HRTF卸载时如何启用混响 在微软Spatiali ...

  6. 音频学习之-g711

    什么是g711 g711是一种由国际电信联盟制定的一套语音压缩标准,主要用于电话语音通信,而人声最大频率一般在3.4kHz,所以只要以8k的采样频率对人声进行采样,就可以保证完全还原原始声音. g71 ...

  7. 【Audio driver】mixer_paths.xml文件分析

    前言 参考文件: Qualcomm 音频学习一 Qualcomm Audio HAL 音频通路设置 这两个参考文档逻辑特别清晰,我的这篇文章就是仿照他们的分析整理目前使用的mixer_paths.xm ...

  8. 【audio】坚果Pro配置双扬声器

    文章目录 1 前言 2 查看mixer_path配置 3 常见的codec连接 4 查看当前平台(msm8953作为参考) 4.1 speaker 4.2 handset 4.3 rx分离左右声道 5 ...

  9. 吴恩达 NIPS 2016:利用深度学习开发人工智能应用的基本要点(含唯一的中文版PPT)...

    雷锋网按:为了方便读者学习和收藏,雷锋网(公众号:雷锋网)特地把吴恩达教授在NIPS 2016大会中的PPT做为中文版,由三川和亚峰联合编译并制作. 今日,在第 30 届神经信息处理系统大会(NIPS ...

最新文章

  1. centos6.8服务器配置之SVN配置
  2. SSH免密登录(内含批量配置脚本)
  3. php实现qq相册功能,使用javascript如何实现QQ空间相册展示
  4. Unity InvalidOperationException: out of sync错误
  5. toolkit,phonetextbox中实现用户按回车键会换行
  6. POJ2570 二进制,位运算,Floyd
  7. C++ multimap 的插入,遍历,删除
  8. http协议网络编程
  9. 优秀的代码原来是这样分层的
  10. Shell——运行Shell脚本
  11. 转载--上下标等特殊符号的输入方法
  12. python 原理 pdf_《深入浅出深度学习:原理剖析与Python实践》.pdf
  13. maven私服搭建:docker安装Sonatype Nexus以及寻找admin用户对应的随机初始密码
  14. arcmap中图斑面积代表_arcmap计算面积_ArcMap怎么重计算图斑面积?arcmap使用手册_arcmap计算面积...
  15. Arcgis使用教程(十)ARCGIS地图制图之统一修改地图符号样式的边框
  16. 有源码如何搭建网站(从零开始搭建教程)
  17. java web运行网址_猫哥带你去战斗——Java Web开发——网页篇[0]——第一个网页,第一次访问...
  18. 计算机网络cpu规格,国产CPU路漫漫 历数龙芯各型号技术指标
  19. pads生成bom表
  20. Java使用微软Exchange邮箱发送与接收邮件

热门文章

  1. 如何将SQL查询出的两列合并成一列显示,并用逗号隔开
  2. 【Python游戏】用Python基于centernet在win10平台开发,射击游戏 | 附带源码
  3. 沈航计算机学院杨华,BCD码的加法.doc
  4. Oracle数据库备份与恢复命令
  5. Jenkins 更新网站静态文件
  6. kindle 使用指南
  7. 系统集成十大项目管理(1)
  8. 微信公众号数据2019_2019年9月原创公众号排行榜数据报告出炉
  9. 发布订阅模式,在工作中它的能量超乎你的想象
  10. tpc ds mysql_TPC-DS 数据仓库查询性能测试