自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

和大伙儿去乘凉

能力有限 甚是惭愧

  • 博客(31)
  • 收藏
  • 关注

原创 音量的对数表示与浮点数表示

从浮点数字来看数字增大了一倍,但不代表声音大小在感知上大了一倍,相比之下,分贝刻度更符合人耳对音量的感知。也就是说,增加音量:如果声音强度增加一倍,人耳感受到的响度并不会增加一倍,而是增加一个常数值(大约10dB)。在数字音频中,0dB代表最大音量,0dB意味着不对数据进行任何的变换处理,对应的浮点音量即为1.0。:直接使用线性刻度表示音量,例如在0.0(最小音量)到1.0(最大音量)的范围内。假设有一个音量调节器,音量范围从0.0到1.0,对应的分贝范围是从-∞到0dB。

2024-05-31 21:19:52 289

原创 音频pop音的数学与物理解释

pop音是由于音频信号突变导致的高频能量增加。在数学上,这可以通过傅里叶变换解释为时间域的突变对应于频域中的宽频高能量分布。在物理上,突变引起的瞬时高振幅导致高声压级变化,从而被人耳感知为pop音。通过平滑信号变化和避免突变,可以减少或消除pop音。引申:声波的振动突然增加,产生高能量的声波来源声波的能量与其振动的幅度和频率密切相关。具体来说,声波的能量可以通过声压、密度、速度和体积等物理量来计算。以下是更详细的解释和计算方法。声波的能量与声压、介质密度和声速有关。

2024-05-30 15:25:04 1132

原创 Android调试方法总结之加CallTrace

android调试方法

2022-09-19 16:15:48 1160 1

原创 Asoc codec bringup总结

Asoc codec bringup总结

2022-07-27 13:48:56 593

原创 解决Alsa underrun爆音问题的一种措施

alsa underrun pop音问题

2022-07-22 15:50:35 1494

原创 android使用Alsa Aloop录制系统内部声音

soc硬件上如果支持loopback功能,可以直接使用audiorecord或tinyalsa的接口以标准的形式去录音2.使用remote submix使用REMOTE_SUBMIX形式在录音的时候的时候...

2022-04-24 19:12:49 4251 1

原创 数字音频接口之TDM

TDM相比I2S 可以传输多ch音频数据,分为2种模式:dsp_a 和dsp_b调试的时候,soc端和codec端协议要匹配,可以使用特殊文件来确认,如有效数据都是0xaa的wav文件,这样通过示波器抓取FS、BCLK和Data的波形就可以判断出当前是什么模式,实测dsp_b的波形图如下:黄色为6ch的数字data信号,每个ch的数据为0xaaaa绿色的信号为FS,宽度为1个BCLK周期,这种同步方式叫做短帧同步 Short Fram Sync两个FS 之间为一个frame,中间是一

2021-06-23 16:01:56 9924

原创 usb audio hal层进行重采样——记录一次解决问题的思路历程

作为码农,一直都觉得无论什么bug,都是发现问题,分析问题,解决问题的过程,解决的问题的思路,都是想方设法获得更多信息加以猜想验证,方法论拓展起来也是一门学问,我说不上来太多总结的东西,倒是最近遇到的一个bug,觉得很具有分析问题的代表性,记录下来也算有意义。问题是客户使用一个第三方开发的语音识别apk,使用一款usb摄像头在我们平台无法唤醒,而在对比机器上可以唤醒,而另外一款同品牌不同型号的摄像头两个平台都可以唤醒。这个问题给到我,第一反应看看什么方式录音,录音线程从audioflinger到ha

2021-03-05 18:05:24 1045

原创 android framework层dump pcm数据的方法

dump pcm数据是音频工程师经常用的的debug手段,这里总结下在framework层dump数据的位置dump 数据的方法FILE *fp1 = fopen("/data/audio_spk.pcm", "a+");if (fp1) { int flen = fwrite((char *)buffer, 1, bytes, fp1); fclose(fp1); }1.AudioTrack的write函数应用层如果是直接write的形式...

2021-03-04 17:42:20 2211 1

原创 audio_policy_configuration.xml解读与配置

audio_policy_configuration.xmlxml中 的<modules>对应每一个audio hal 的so,module中列出的mixPorts,devicePorts和routes解析之后完整的描述了音频的路由规则,module name。支持“primary”(用于车载使用场景)、“A2DP”、“remote_submix”和“USB”。模块名称和相应音频驱动程序应编译到audio.primary.$(variant).so中。 devicePorts。包...

2021-01-20 20:11:35 5553 1

原创 Android原生音量设置和计算

Android原生的音量调整都是调整软件音量,也就是对于解码后的pcm数据乘以一定的系数,范围0~1.0,常见的概念有:Track volume: 单个AudioTrack的音量,使用时只影响该AudioTrack的音量,不会对其他AudioTrack造成影响,播完之后也就结束。接口为:status_t AudioTrack::setVolume(float left, float right);stream volume:设置某一stream的音量,这是系统中最常见的音量设置方式,通常都是设置..

2020-12-17 16:40:19 2658

原创 音频基础知识之声音的本质

在自然界中声音的本质是振动,是一种能量波,有频率有振幅,频率高低就是音调,振幅大小就是音量;数字音频系统中,需要将声波波形信号通过ADC转换成计算机支持的二进制,进而保存成音频文件,这一过程叫做音频采样,采样是把连续的时间信号,变成离散的数字信号。采样率是指每秒钟采集多少个样本。采样率是对频率采样,采样精度是对幅度采样,也称量化,采样率越高,越能还原原始的连续信号,量化精度是指可以将模拟信号分成多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。当精度越低,数字音频在纵轴上将会压缩,很多原本能

2020-11-27 17:28:32 1453

原创 AudioTrack与AudioFlinger的sharebuffer

AudioTrack作为音频数据的生产者,AudioFlinger是消费者,会有一块共享内存用于传输pcm数据,这块共享内存在AudioTrack创建时候就开辟好,主要就是在AudioTrack的set方法,该方法中调用了createTrack_l创建IAudioTrack,createTrack_l的作用主要就是创建出一块share buffer,供AudioTrack写入和AudioFlinger读取。同时还会根据是否在参数中传入callback函数来决定是否创建AudioTrackThr...

2020-11-27 16:34:07 853

原创 修改android系统默认采样率

通常使用android系统播放都会是一个固定的采样率输出,如果源是什么采样率,AudioFlinger都会将其重采样成同一个采样率的数据输出,一般平台都默认是44.1K或者48K,如果要修改成为其他采样率也比较简单,但需要注意几个地方。在android P平台上实验,只要改下/vendor/etc/audio_policy_configuration.xml中声明的primary output的采样率即可,比如原本默认是48k,现在修改为192k:当前改了这里只是audioflimger将会以1

2020-07-24 19:28:57 7679

原创 ALSA driver--pcm_read和pcm_write的阻塞问题

一张图先看下pcm_write的调用流程做的工作一是将数据送到dma 中,另外就是更新alsa的缓冲区指针在snd_pcm_lib_write1接口中看到这样一个函数wait_for_availwait_for_avail函数将会将当前写或读数据的任务通过add_wait_queue加入一个队列中,等待被唤醒,如果有没有收到唤醒,schedule_timeout将会挂起直到设置...

2020-03-26 15:36:44 9069 2

原创 AudioServer的TimeCheck机制

android audioserver里面用于binder调用超时检测有个TimeCheck机制,对于audioserver binder调用不能超过5s,如果超过5s就会产生一个abort的log实现路径在frameworks\av\media\libmedia\TimeCheck.cpp代码量很少,但设计很巧妙TimeCheck头文件定义如下class TimeCheck ...

2019-11-13 20:03:02 5575

原创 多个codec使用同一份驱动

一般来说,消费电子产品比如智能电视和音箱只有立体声两个喇叭,硬件上只需要一个codec芯片即能满足要求,有时需要做多声道,这时候可能就用到多个codec芯片了,如果是不同的codec芯片,则分别编写对应的驱动即可,如果用的都是同一款芯片,那么就只需要一份驱动即可,方法也简单。在dts设备数里i2c的的模块添加板子对应的codec,当然i2c地址肯定也是不同的。比如添加3个ti的tas5805 ...

2019-11-05 19:35:21 1037 1

原创 pcm音量处理

基本的操作,作为一个整理第一种线性音量处理,处理16bit与32bit的情况static inline int16_t clamp16(int32_t sample){ if ((sample >> 15) ^ (sample >> 31)) { sample = 0x7FFF ^ (sample >> 31); }...

2019-10-29 13:28:18 1169

原创 音频淡入淡出效果——解决音频突变的爆音问题

使用软件调节音量时如果音量之间的步进太大,声音突变,就能听到明显的爆音,尤其以单音音频更为明显,类似的问题还在声音起播、暂停、结束、快进快退时经常会出现,这个时候一般需要对音频进行渐入渐出的效果处理。先来看一个典型的爆音音频示例,播放一个1k hz的正玄波,并调节音量,可以看到波形幅度增大由于幅度跳变太大,过渡不连续,造成爆音,从频谱图来看这条竖直的亮线处,就是产生爆音的位置为...

2019-10-12 16:03:01 7430 1

原创 修改ALSA支持的最大pcm device个数——一次usb声卡不识别问题

在android或linux电子设备设备中,通常都有一个主声卡,通过cat/proc/asound/cards可以查看当前设备的声卡情况以我的平台为例:可以看到我的平台只有一个主声卡命令cat /proc/asound/pcm 可以看到声卡下面所有的pcm devices,显示了平台所有的playback和capture能力而当有外置声卡如插上一个usb声卡的时候,就能多...

2019-09-19 17:33:07 1379

原创 EQ均衡器中的G 、Q、FC与截止频率知识

最近在一个项目中,与客户的声学工程师关于EQ频响测试有过疑问,也顺便复习了一下关于EQ调试过程中一些参数的意义。起因如下,一般在TV产品中,声学会调试两组PEQ参数应对不同的场景,桌面模式和壁挂模式,顾名思义,根本电视摆放位置的不同利用EQ对喇叭做相应的补偿,客户在调了两组参数之后使用AP实测,觉得我们的EQ有问题G = [ 0, 0, 0, 0...

2019-09-06 19:06:00 9450

原创 关于AudioEffect使用过程中的构造以及处理流程遇到的几个问题

最近遇到几个与AudioEffect相关的问题,在此记录下作为一个记忆总结android系统中如果想使用自己开发或者第三方的音效算法,有一种比较简单的办法就是放到hal层的out_write接口中,这样做优点是简单,方便快速集成。还有标准的做法就是做成android标准的音效接口,上层应用就可以像使用android自带的音效一样来调用自己所添加的自定义音效。如何实现自定义的音效库以及Aud...

2019-08-28 16:51:11 3506 1

原创 使用MediaReocord录音时遇到的问题

Android系统提供的录音接口有两种,MediaRecord和AudioRecord,AudioRecord录制的是未经过压缩的pcm格式音频数据,MediaRecord则可以设置编码器,录音压缩后的音频数据,同时录制出来的文件可以直接经过mediaplayer播放,当然MediaRecord接口底层也是使用AudioRecord的接口通过audioflinger从底层拿到数据。举例来看看两...

2019-04-09 16:10:29 626

原创 Linux asoc codec驱动调试小结

本篇记录下自己在调试codec驱动时的经验及注意事项,这里主要是放音playback调试需要什么:标准的linux codec驱动,如何编写驱动以后有时间再写一篇吧原理图,需要查看对应的引脚,I2S的clck和data脚以及是否有reset pin脚和pdn引脚等步骤:1.编写好驱动,更改相关目录makfile和kconfig确认驱动可以编译通过并能编译进内核之中。2.根据...

2018-11-16 19:19:31 2359 2

原创 Linux Kernel4.9新增的alsa kcontol宏SND_SOC_BYTES_EXT

kcontol为何?写过alsa codec驱动的人都很熟悉了。droidphone前辈的这篇文章也非常详细:https://blog.csdn.net/droidphone/article/details/12793293通俗一点讲,kcontol控件提供了很方便的在线调试手段,比如linux下使用amixer,android下使用timymix,也方便我们封装接口供上层使用,比较静...

2018-11-02 15:42:42 1024

原创 TV音频电性能测试基本术语

频响曲线不同频率的信号输入到一个系统,有不同的响应(例如输出电压大小),叫做该系统的频响;以“频率”为横坐标,系统“响应”为纵坐标画2维坐标图,并把不同频率点响应的高度(点)用连线连上,由于响应不可能一样大小,所以连线不会平直,而是曲线,这就是频响曲线。它表征一个系统对不同输入频率响应的大小特征。电声学的频响一般是输入20hz~20Khz信号,幅度响应曲线平直,满足上下波动正负3db,比较严格...

2018-11-01 15:56:17 1311

原创 利用重采样处理设置audio delay的噪音问题

      现代智能电视中都有多种音频输出方式,除了喇叭之外,还有Spdif out、HDMI ARC输出。一般来说,设计时都是排他型输出,比如选择spdif out输出时喇叭会自动静音或者直接不送音频数据了。当然也有例外,有的设计是会同时输出,这样由于链路的差距,两种输出通路间会有一个延迟,延迟超过一定时间(有数据说是20ms),人耳就能明显感受到差距。为了解决这个问题,有的产品在设计时会有UI...

2018-11-01 15:12:50 2616 3

原创 噪声门小信号误判问题

什么是噪声门?下面一段是摘自网络上的解释:Noise GateNoise Gate 常用于在音频信号处于低电平时,压制能听到而又不想要的噪声。您可以使用它来移除背景噪音、其他信号来源的交扰以及低电平的杂音,同时还有其他用途。Noise Gate 的工作原理是让门限值音量以上的信号不受阻碍地通过,同时减少低于门限值音量的信号。这可有效移除信号的较低音量声部,同时让所需的音频声部通过。...

2018-10-30 14:14:08 753

原创 android audiorecord插上耳机录音由dmic切换到耳机录音

       板子上带有一个dmic,和一个adc,不插耳机时audiorecord默认将打开dmic录音,插上耳机时自动切换到耳机录音。       这个场景是手机上太常见了,由于是tv和盒子的芯片,默认没有对这种场景的支持,按照android的音频架构不知道是否手机方案的实现对耳机和dmic(或其他方式板载麦克风)这两种设备都有完整的hal切换,这样切换流程就类似于从usb耳机切到蓝牙耳机...

2018-10-25 11:29:11 2747 1

原创 Android新增一个音频类型及双音频输出的实现

android定义了很多种音频类型,完整定义在native层如下,system\core\include\system\audio.h文件中:/* Audio stream types */typedef enum { /* These values must kept in sync with * frameworks/base/media/java/android/

2016-01-18 18:08:44 16044 9

原创 android拔掉耳机后音乐自动暂停

android系统在播放音乐的时候拔掉耳机通常音乐会自动暂停播放。遇到这样的需求,客户使用的是一个usb audio设备,希望拔掉后音乐不会自动暂停,而是继续播放,声音从speaker出来。以5.1的code为例,usb audio设备(usb 耳机等)拔出时\frameworks\base\services\usb\java\com\android\server\usbAudioService.

2016-01-13 17:46:28 6939

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除