Audio知识总结(Android)

news/2024/11/28 1:38:31/
  • 人的耳朵能够听到的范围,是20Hz到20000Hz.就是指物体每秒中振动20-20000次。
  • PCM16LE双声道数据中左声道和右声道的采样值是间隔存储的。每个采样值占用2Byte空间。

  • 采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。

  • 对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH),而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。

  • 音频中的大小端:

  • 采样精度(Bit Depth) 比如底下图中的16bits,8位代表2的8次方–256,16 位则代表2的16次方–64K。简单来理解就是每次采样时候,某个点的值的取值范围。就好像钢琴上的半音比我的破葫芦丝上的声音精度要好一个道理。显卡上说的位宽也是一样的,每一位能表示的颜色范围。

  • 音频混音的原理: 量化的语音信号的叠加等价于空气中声波的叠加。

  • 音频音量的调节,雷大牛的博客里直接除以2,音量衰减一半。

  • 时域采样定理,H.奈奎斯特。

  • 一个frame就是1个采样点的字节数*声道。为啥搞个frame出来?因为对于多声道的话,用1个采样点的字节数表示不全,因为播放的时候肯定是多个声道的数据都要播出来才行。所以为了方便,就说1秒钟有多少个frame,这样就能抛开声道数,把意思表示全了。

  • 采样率,比如192KHZ 就是说1s在1s的模拟信号上(比如正弦波)取192K个点。每个点即每个采样,就是一帧(frame)。

  • 如图
    这里写图片描述
    则每秒的数据量为192000×16×2(双声道) = 6144000 (bit/s)= 6144K Kbps(即图中的Bit rate,中文即比特率)
    换算成字节为6144000 / 8 = 768000 (byte/s)
    而文件大小为:210.0 MB (210,036,298 bytes)
    那么声音长度 = 210,036,298/768000 ≈ 273.48s 约等于 4m 33.48s
    和图中文件信息对应一致(这个地方计算没去除wav 42字节的文件头大小,妈蛋,也有说44的)。

附张图,马上就理解了
这里写图片描述

13.香农采样定理,又称奈奎斯特采样定理,是信息论,特别是通讯与信号处理学科中的一个重要基本结论。1924年奈奎斯特(Nyquist)就推导出在理想低通信道的最高大码元传输速率的公式:理想低通信道的最高大码元传输速率=2W*log2N (其中W是理想低通信道的带宽,N是电平强度).
为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。  f s≥2f max.

14.立体声:声音有方位感,空间感。

15.Gains.cpp里头计算音量的那个应该根据的是韦伯定律(林学森的书里说的)。

16.

struct audio_patch {audio_patch_handle_t id; /* patch unique ID */unsigned int num_sources; /* number of sources in following array */struct audio_port_config sources[AUDIO_PATCH_PORTS_MAX];unsigned int num_sinks; /* number of sinks in following array */struct audio_port_config sinks[AUDIO_PATCH_PORTS_MAX];
};

source和sink相对,一个出一个入。
整个audio_patch结构体,看上去包含多个source和多个sink.但是尴尬的是在AudioPolicyManager中的createAudioPatch中:

// only one source per audio patch supported for nowif (patch->num_sources > 1) {return INVALID_OPERATION;}

目前,7.0为止,还只支持一个source。但是它没说sink哦!也就是说,不支持多对多,但是支持一对一和一对多。


http://www.ppmy.cn/news/494757.html

相关文章

Android 5.1 Audio HAL分析

初始化工程 1) AudioPlicyService被第一次实例化后,将会调用onFirstRef,其中实例化了两个全局变量,一个是mAudioPolicyClient,一个是mAudioPolicyManager。 2) mAudioPolicyClient是AudioPolicyClient类型的,具体实…

深入理解audio 系统

本章主要内容 详细分析AudioTrack。 详细分析AudioFlinger。 详细分析AudioPolicyService。本章涉及的源代码文件名及位置下面是本章分析的源码文件名及其位置。 AudioTrack.javaframework/base/media/java/com/android/media/AudioTrack.java android_media_track.cppframewor…

html audio加载卡顿,audio 设置了currentTime后为什么会卡顿?

代码如下: methods:{ editprogress(value){ this.demoSlidervalue; this.$store.commit(editProgress,this.demoSlider) } } editProgress(state,progressValue){ const playerBardocument.getElementById("playerBar"); let currentTimeplayerBar.durati…

linux pulseaudio卸载,解决Ubuntu 9.04 下 PulseAudio声音故障

升级系统到Ubuntu 9.04之后,发现系统没声音了,pulseaudio和alsa都不可用,只有oss还能用。 参考了Ubuntu 8.04/8.10 系统无声、音频独占的解决方法解决了这个问题,只是按照文中给出的办法是把pulseaudio干掉,之用alsa,貌似照做一遍之后pulseaudio和alsa都恢复了正常。 做法…

Android audio介绍

转自 https://www.cnblogs.com/hzl6255/p/12173595.html 阅读目录 1. 架构2. Audio HAL3. Native Audio4. Java Audio 开始这篇文章之前&#xff0c;需要先了解<Linux音频编程> 回到顶部 1. 架构 在Android中&#xff0c;audio以分层的方式实现&#xff0c;从上到下…

USB audio调试

androidstudio打印的信息有如下&#xff1a; 07-12 08:27:17.660 2284-2284/? I/AudioFlinger: loadHwModule() Loaded a2dp audio interface from A2DP Audio HW HAL (audio) handle 7 07-12 08:27:17.660 2284-2284/? I/AudioFlinger: loadHwModule() Loaded usb audio int…

Audio Unit

Audio Unit 推荐先阅读Audio Unit Hosting Guide for iOS&#xff0c;部分翻译的文章可参考Audio Unit 基础 Audio Unit在框架中位置 Audio Unit提供了音频快速的模块化处理&#xff0c;在以下的场景中更适合使用AudioUnit&#xff0c;而不是更高层次的音频框架&#xff1a…

Android Qcom Audio入门学习

总结&#xff1a; Android Audio不简单呀&#xff0c;一个人摸索入门不容易的&#xff0c;研究了一段时间&#xff0c;感觉还不是很懂&#xff0c;但以下的知识对入门还是有帮助的。 Audio架构中的名词 FE(Front End) 提供pcm的设备信息&#xff0c;将数据从用户空间传输到音…