CN106325804B - 音频处理方法及系统 - Google Patents
音频处理方法及系统 Download PDFInfo
- Publication number
- CN106325804B CN106325804B CN201510390087.2A CN201510390087A CN106325804B CN 106325804 B CN106325804 B CN 106325804B CN 201510390087 A CN201510390087 A CN 201510390087A CN 106325804 B CN106325804 B CN 106325804B
- Authority
- CN
- China
- Prior art keywords
- audio mixing
- buffer
- audio
- sound card
- virtual sound
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 12
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000008569 process Effects 0.000 claims abstract description 43
- 238000003860 storage Methods 0.000 claims abstract description 17
- 230000003139 buffering effect Effects 0.000 claims abstract description 11
- 230000006870 function Effects 0.000 claims description 60
- 238000010009 beating Methods 0.000 claims 1
- 239000000523 sample Substances 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000005236 sound signal Effects 0.000 description 2
- 241000209140 Triticum Species 0.000 description 1
- 235000021307 Triticum Nutrition 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 235000015170 shellfish Nutrition 0.000 description 1
- 230000001550 time effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computational Linguistics (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- Acoustics & Sound (AREA)
- Multimedia (AREA)
- Circuit For Audible Band Transducer (AREA)
- Reverberation, Karaoke And Other Acoustics (AREA)
Abstract
本发明公开一种音频处理方法和系统;方法包括:为DMA缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;声明处理混音的软中断的名称以及对应的处理函数;在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区。采用本发明,能够减少Android设备的耳返时间。
Description
技术领域
本发明涉及嵌入式平台领域的音频技术,尤其涉及一种音频处理方法及系统。
背景技术
伴随着顶部(OTT,Over The Top)机顶盒业务的兴起,在机顶盒上安装K歌软件来实现在家庭里面里面实现卡拉OK的需求倍增。而目前基于Android的设备上,耳返(声音从麦克风输入的时间到从电视里面输出的延时)的时间都在120毫秒(ms)以上,相对于IOS系统的40ms的耳返来说,较大耳返时间影响了用户使用体验。
对于有效减小基于Android设备的耳返时间,相关技术尚无有效解决方案。
发明内容
本发明实施例提供一种音频处理方法及系统,能够减少Android设备的耳返时间。
本发明实施例的技术方案是这样实现的:
本发明实施例提供一种音频处理方法,所述方法包括:
为直接内存读取(DMA)缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;
声明处理混音的软中断的名称以及对应的处理函数;
在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区。
优选地,所述方法还包括:
将所述混音播放缓冲区的地址赋值给DMA功能指针的源地址;
所述混音播放缓冲区的地址用于支持所述DMA功能从所述混音播放缓冲区的地址数据到虚拟声卡的先入先出(FIFO)队列。
优选地,所述方法还包括:
在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
优选地,在内存空间分配混音播放缓冲区和混音录制缓冲区之前,所述方法还包括:
注册虚拟声卡驱动和虚拟声卡;
注册平台设备和平台设备驱动;
注册编解码器(Codec)设备、Codec驱动和Codec数字音频接口(DAI)。
优选地,所述方法还包括:
为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
本发明实施例提供一种音频处理系统,所述系统包括:
缓冲区单元,用于为DMA缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;
软中断声明单元,声明处理混音的软中断的名称以及对应的处理函数;
软中断处理单元,用于在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区。
优选地,所述系统还包括:
混音播放处理单元,用于将所述混音播放缓冲区的地址赋值给DMA功能指针的源地址;
所述混音播放缓冲区的地址用于支持所述DMA功能从所述混音播放缓冲区的地址数据到虚拟声卡的FIFO队列。
优选地,所述系统还包括:
混音录制处理单元,用于在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
优选地,所述系统还包括:
注册单元,用于在所述缓冲区单元内存空间分配混音播放缓冲区和混音录制缓冲区之前,执行以下操作;注册虚拟声卡驱动和虚拟声卡;注册平台设备和平台设备驱动;注册编解码器设备、Codec驱动和Codec DAI。
优选地,所述缓冲区单元还用于为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
所述缓冲区单元还用于为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
本发明实施例中,通过混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,例如当在ARM处理器上运行Android操作系统时,实现了在Linux内核层面的混音处理(代替了相关技术在应用层实现的混音处理),将混音处理结果提供给应用层,无需应用层自行进行混音处理,较相关技术的应用层自行进行混音处理大大缩短了耳返延时。
附图说明
图1为本发明实施例中音频处理方法的实现流程示意图;
图2为本发明实施例中基于ASoC的音频处理方法的流程图;
图3为本发明实施例中soc_probe函数的调用流程图;
图4为本发明实施例中soc_probe_dai_link()函数流程图;
图5为本发明实施例中snd_soc_instantiate_card函数调用流程图;
图6为本发明实施例中虚拟声卡挂载在snd_card下的示意图;
图7为本发明实施例中tasklet混音流程图;
图8为本发明实施例中音频处理系统的功能结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
Android设备的音频系统拥有一个比较标准和健全的架构处理音频,架构包括:应用层、Java framework服务Audio Mananger、本地服务Audio Flinger、抽象层Alsa HAL、本地库、用外部(external)的Alsa-lib支持库、底层的编码(Codec)驱动;
因为音频数据在上述架构中经过了太多的处理而导致最终得到的音频延时增加,这样复杂的系统架构是不能满足实时性要求很高的场景的使用需求,例如网络K歌,需要将混音后的数据发送给网络上的其他点播用户,较大的延迟影响了用户使用体验。
本发明实施例记载的技术方案基于高级Linux音频架构(ALSA,Advanced LinuxSound Architecture)的Android系统,Android系统基于高级精简指令集机器(ARM,Advanced RISC Machine)处理器,在Linux内核的设备链表中添加设置虚拟声卡,使用虚拟声卡直接截取音频数据(例如用户通过麦克风输入的音频数据)和背景音频数据(歌曲播放的背景音)来进行混音处理,应用层可以直接获取混音数据,无需由应用层自身进行混音处理,减少了耳返时间;
为实现上述目的,本发明实施例中,针对已有的Linux内核下不能进行混音的不足,在Linux系统的设备链表上添加虚拟声卡设备(简称虚拟声卡),将虚拟声卡的资源注册进Linux内核,由Linux内核统一管理;
本发明实施例基于ALSA架构的片上系统(SOC)也即ASoC在Linux内核层面中进行音频处理,ASoC设置有虚拟声卡、Platform、虚拟声卡Codec和虚拟声卡Codec驱动,由虚拟声卡实现在Linux内核层面(代替应用层)对音频数据进行处理,ASoC添加设置有正常播放缓冲区、正常录制缓冲区、混音播放缓冲区和混音录制缓冲区,用于在不同的应用场景存储音频数据,在录制数据和播放数据到达时通过软中断的方式将两路数据进行混音处理,应用层可以直接读取混音数据。
在Linux的驱动管理和注册机制下开发虚拟声卡的驱动,包括:定义虚拟声卡对应的平台设备(platform_device)结构体、注册虚拟声卡对应的platform_device结构体、定义虚拟声卡对应的平台驱动(platform_driver)结构体、以及注册虚拟声卡的platform_driver结构体;添加虚拟声卡、Platform、虚拟声卡Codec和虚拟声卡Codec驱动的处理遵循Linux的驱动管理和注册机制;
以下对添加虚拟声卡、Platform、虚拟声卡Codec和虚拟声卡Codec驱动的处理进行说明,对于未尽的细节,请参见Linux的驱动管理和注册机制的相关规范文档。
Android系统中的音频处理结构包括总线也即虚拟总线或平台(platform)总线、平台设备(platform_device)和平台驱动(platform_driver);虚拟总线将平台设备和平台驱动绑定:在注册一个平台驱动的时候,虚拟总线寻找与平台驱动匹配的平台设备。
虚拟声卡的资源注册与混音软中断(Tasklet)的处理,如果要想一个虚拟声卡正常工作,需要完成三个步骤:1、虚拟声卡驱动和虚拟声卡的注册;2、平台设备和平台设备驱动的注册,平台设备主要实现dma功能,平台设备驱动的名称和要平台设备的名称一致:3、编解码器(Codec)设备(简称Codec)、Codec驱动和Codec数字音频接口(DAI,DigitalAaudio Interface)的注册;下面分别进行说明:
1.虚拟声卡驱动和虚拟声卡设备(简称虚拟声卡)的注册,虚拟声卡驱动的名称必须和平台设备的名称一致:
1)定义虚拟声卡驱动,相关代码如下:
2)注册虚拟声卡驱动,相关代码如下:
3)定义虚拟声卡,包括虚拟声卡在内存中所占用的物理地址的开始和结束地址、以及相关标志位。
虚拟声卡的资源信息用platform_device结构体描述,platform_device结构体包含虚拟声卡的名称(name)、标识(ID),与定义的虚拟声卡的编解码器(Codec)的资源以及虚拟声卡的Codec的资源所占用的字节数目。
相关代码如下:
4)注册虚拟声卡的资源(zx_devices为包含了系统中所有定义的设备的数组),相关代码如下:
platform_add_devices(zx_devices,ARRAY_SIZE(zx_devices))
5)注册虚拟声卡,相关代码如下:
2、平台设备和平台驱动的注册,平台设备实现直接内存存取(DMA,Direct MemoryAsset)功能,平台驱动的名称和平台设备的名称一致,均为zx-audio-platform:
1)平台驱动的定义,相关代码如下:
2)平台驱动的注册,相关代码如下:
3)平台设备的定义,相关代码如下:
4)平台设备的注册(zx_devices为包含了系统中所有定义的设备的数组):platform_add_devices(zx_devices,ARRAY_SIZE(zx_devices));
3、Codec、Codec驱动和Codec DAI的注册。
1)Codec驱动的定义,相关代码如下:
2)虚拟Codec驱动的注册,相关代码如下:
3)虚拟Codec设备的定义,相关代码如下:
4)虚拟Codec设备的注册(zx_devices为包含了系统中所有定义的设备的数组),相关代码如下:
platform_add_devices(zx_devices,ARRAY_SIZE(zx_devices));
5)Codec DAI的定义,相关代码如下:
6)Codec DAI的注册,相关代码如下:
除了根据上述步骤在ASoC中添加虚拟声卡、Platform、虚拟声卡Codec和虚拟声卡Codec驱动,还需要ASoC中定义记录缓冲区的结构体以及处理混音的软中断(tasklet)处理函数;其中,缓冲区包含正常播放缓冲区、正常录制缓冲区、混音播放缓冲区和混音录制缓冲区,用于不同的应用场景存储音频数据;软中断(tasklet)处理函数用于处理用户通过麦克风输入的音频数据和背景音频进行的混音。
如图1所示,基于上述ASoC的Android终端设备如机顶盒,音频处理方法包括以下步骤:
步骤101,为直接内存读取(DMA)缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区。
步骤102,声明处理混音的软中断的名称以及对应的处理函数。
步骤103,在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在混音播放缓冲区。
当需要混音播放时,将所述混音播放缓冲区的地址赋值DMA功能指针的源地址;所述DMA功能基于所述混音播放缓冲区的地址,从所述混音播放缓冲区的地址数据到虚拟声卡的先入先出(FIFO)队列。
当需要混音录制时,在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
此外,在执行上述操作之前,还需要在设置虚拟声卡,注册虚拟声卡驱动和虚拟声卡;注册平台设备和平台设备驱动;注册编解码器(Codec)设备、Codec驱动和Codec数字音频接口(DAI);注册平台设备和平台设备驱动用于实现DMA功能。
对于正常播放(也即非混音播放)之外的场景,当需要正常播放时,为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
当应用层需要获取麦克风输入的原始音频数据时,为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
下面就基于上述ASoC的Android终端设备如机顶盒实施图2所示的音频处理方法进行说明,包括以下步骤:
步骤201,平台总线匹配名称为虚拟声卡的device和driver。
后续步骤202同时会触发soc_probe函数的调用,soc_probe是整个ASoC驱动初始化的入口。
按照Linux的设备模型,有platform_device,就一定会有platform_driver,ASoC的platform_driver中的name字段为soc-audio,正好与在步骤1中定义的platform_device中的名称相同,按照Linux的设备模型,platform总线会匹配这两个名称相同的device和driver,同时会触发soc_probe的调用,它正是整个ASoC驱动初始化的入口。
步骤202:调用soc_probe函数。
如图3所示,soc_probe函数的调用包括如下步骤:
步骤301,在soc_probe函数中调用snd_soc_register_card为snd_soc_pcm_runtime数组申请内存,每一个dai_link对应snd_soc_pcm_runtime数组的一个单元。
步骤302,把snd_soc_card中的dai_link配置复制到相应的snd_soc_pcm_runtime中。
步骤303,调用snd_soc_instantiate_card函数。
soc_probe函数对应的代码如下所示:
步骤203:snd_soc_instantiate_card函数调用流程,snd_soc_instantiate_card函数遍历每一对dai_link,进行Codec、Platform和DAI的绑定,snd_soc_instantiate_card函数调用soc_probe_dai_link函数,soc_probe_dai_link函数的调用流程如图4所示,在soc_probe_dai_link函数中,调用了Codec、DAI和platform驱动的probe函数外,在最后还调用了soc_new_pcm()函数用于创建虚拟声卡。
snd_soc_instantiate_card函数调用流程如图5所示,包括以下步骤:
步骤401,利用card->instantiated来判断虚拟声卡是否已经实例化,如果已经实例化则直接返回。
步骤402,遍历每一对dai_link,进行codec、platform和DAI的绑定
步骤403,初始化Codec的寄存器缓存。
步骤404,创建虚拟声卡。
虚拟声卡挂载在snd_card下的示意图如图6所示。
步骤405,依次调用各个子结构的probe函数。
步骤406,执行soc_probe_dai_link()函数。
步骤407,初始化和设置。
步骤408,调用标准ALSA驱动的声卡注册函数对虚拟声卡进行注册。
步骤204:通过处理混音的软中断(tasklet),处理用户通过麦克风输入的音频数据和背景音乐的音频数据进行混音。
如图7所示,步骤204通过以下步骤实现:
步骤501,定义一个记录缓冲区的结构体,包含正常播放缓冲区、正常录制缓冲区、混音播放缓冲区和混音录制缓冲区,用于不同的应用场景存储音频数据,代码如下:
定义记录缓冲区的指针:
在为DMA缓冲区分配内核空间的函数中,分别将这4个指针赋值。
步骤502,声明处理混音的tasklet的名称以及对应的处理函数,即DECLARE_TASKLET(zx_i2s_spdif_mix_tasklet,zx_snd_soc_mix_taskelet,0)。
步骤503,tasklet在DMA的中断回调函数中初始化(只需要初始化一次),并调用tasklet_schedule来调度tasklet。
步骤504,在混音的tasklet中获取混音播放缓冲区地址和混音录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在混音播放缓冲区。
步骤505a,实现混音播放时,将混音播放缓冲区的地址赋值给DMA指针的源地址,让DMA从这个地址搬运数据到虚拟声卡的先入先出(FIFO)队列中,从而实现混音播放。
步骤506b,实现混音录制时,在DMA中断回调函数中,将混音播放缓冲区的数据拷贝到混音录制缓冲区中,应用层可以通过打开虚拟声卡读取混音后的音频数据。
这样可以在每次录制数据和播放数据到达之后,将两路音频数据进行混音;tasklet机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转换成软中断完成。
为了最大程度的避免中断处理时间过长(中断里面如果进行混音操作会导致中断处理时间过长)而导致中断丢失,把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回。
在tasklet处理中,将记录正常播放缓冲区、正常录制缓冲区和混音播放缓冲区的地址作为参数,通过如下混音算法进行混音处理:
使用A和B表示两路音频信号,使用Y表示混音后的音频信号。
对于n比特的音频样本信号,如果A和B都为负,则
Y=A+B-(A*B/(-(2pow(n-1)-1)))
否则:
Y=A+B-(A*B/(2pow(n-1))。
C语言表示:
在DMA中断回调处理函数中,第一次会注册混音的tasklet处理函数tasklet_init(&zx_i2s_spdif_mix_tasklet,zx_snd_soc_mix_taskelet,(unsigned long)arg),并调用tasklet_schedule(&zx_i2s_spdif_mix_tasklet);
在DMA中断回调处理函数中,首先分别将录音数据和放音数据的流指针赋值给全局变量pcm_substream,然后再通过这个全局变量将该这2路音频数据流指针传递到混音处理的tasklet中,最后在混音处理的tasklet中将这2个指针分别作用于上述的混音算法,经过该算法处理后,得到了混音后的数据(该数据存储在混音播放指针指向的缓冲区)。如果配置DMA搬运的数据为1KB,那么每次混音的时候,录音数据和播放数据的大小都为1KB,混音输出的数据依然为1KB。
由于混音后的数据要分两路处理,播放混音数据和通过虚拟声卡获取音频数据,因此在DMA中断处理函数中,需要将播放时候DMA的物理地址指针,替换成混音处理后的混音数据播放的DMA物理地址指针,这样替换后,原来播放的声音数据就被替换成了混音处理后的数据,同时将混音播放缓冲区的数据拷贝到混音录制缓冲区指针所指向的缓冲区,同时调用snd_pcm_period_elapsed来通知Linux内核,当前的数据已经处理完毕。
当应用层层需要获取用户麦克风输入的原始音频数据,可以通过打开dev/snd/pcmC0D0c这个设备来读取数据,当应用层想播放声音的时候,可以通过打开dev/snd/pcmC1D0p这个设备来写入数据。当应用层想要直接播放混音数据的时候,可以通过打开dev/snd/pcmC2D0p这个设备来写入数据来实现将设备dev/snd/pcmC0D0c和设备dev/snd/pcmC1D0p声音混合的功能。当应用层想要通过网络传输混音后的数据时候,可以通过打开dev/snd/pcmC2D0c这个设备来读取混音后的数据,发给网络其他节点。
由于配置DMA的时候需要配置物理地址,而在处理混音的函数中需要传出的函数指针指向的是混音播放缓冲区,也即指针记录的是虚拟地址,因此需要在分配记录混音处理的缓冲区的时候,调用dma_alloc_coherent分别记录混音处理的缓冲区的虚拟地址和物理地址,混音处理的缓冲区的虚拟地址和物理地址是一一对应关系,这样向混音处理的缓冲区的虚拟地址写数据的时候,就可以通过将混音处理的缓冲区的物理地址传递给DMA来进行搬运处理。
本发明实施例的所涉及的虚拟声卡资源注册,主要是做如下工作:
定义了两组resource,它描述了一个虚拟声卡的资源,第1组描述了这个虚拟声卡所占用的总线地址范围,IORESOURCE_MEM表示第1组描述的是内存类型的资源信息,第2组描述了这个混音设备的中断号,IORESOURCE_IRQ表示第2组描述的是中断资源信息,虚拟声卡驱动会根据flags来获取相应的资源信息。
基于resource信息可以定义platform_device,定义platform_device结构体后可以调用函数platform_add_devices向Linux系统中添加虚拟声卡,之后可以调用platform_device_register()进行对虚拟声卡进行注册,对于虚拟声卡Codec设备来说,只需要定义名称和ID标识符就可以。
调用platform_add_devices添加了虚拟声卡以及虚拟声卡Codec设备成功之后,虚拟声卡以及虚拟声卡Codec就会添加到Linux系统的设备链表中。
Linux内核中的soc_new_pcm函数会调用为虚拟声卡申请内存空间的函数,这个地址空间用来记录混音处理后的数据,在DMA的中断回调函数中,将混音处理过的内存缓冲区对应的物理地址配置给DMA,用来进行混音播放,而混音处理基于tasklet完成,tasklet每次读取DMA搬运来的麦克风数据和应用层下发的背景音乐进行混音处理,处理录制和播放的数据大小目前是每次处理1K的数据,混音后的数据也是1K。
当完成上述步骤时,用户可以通过读写/dev/snd/pcmC2D0p进行混音播放,可以通过dev/snd/pcmC2D0c进行进行混音录制。
经实际测试,基于本发明实施例的技术方案混音播放的耳返时间较减少至60ms,可以满足产品的需求。
本发明实施例还记载一种计算机存储介质,所述计算机存储介质中存储有可执行指令,所述可执行指令用于执行图1或图2所示的音频处理方法。
本发明实施例记载一种基于Linux的音频处理系统也即ASoC,用于在Linux内核层面进行混音处理,如图8所示,所述系统包括:
缓冲区单元100,用于为直接内存读取DMA缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;
软中断声明单元200,声明处理混音的软中断的名称以及对应的处理函数;
软中断处理单元300,用于在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区。
作为一个示例,所述系统还包括:
混音播放处理单元400,与软中断处理单元300连接,用于将所述混音播放缓冲区的地址赋值给DMA功能指针的源地址;
所述混音播放缓冲区的地址用于支持所述DMA功能从所述混音播放缓冲区的地址数据到虚拟声卡的先入先出FIFO队列。
作为一个示例,所述系统还包括:
混音录制处理单元500,与软中断处理单元300连接,用于在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
作为一个示例,所述系统还包括:
注册单元600,与缓冲区单元100连接,用于在所述缓冲区单元100内存空间分配混音播放缓冲区和混音录制缓冲区之前,执行以下操作;注册虚拟声卡驱动和虚拟声卡;注册平台设备和平台设备驱动;注册编解码器Codec设备、Codec驱动和Codec数字音频接口DAI。
作为一个示例,所述缓冲区单元100还用于为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
所述缓冲区单元100还用于为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
上述各单元均为虚拟的功能单元,实际应用中可以由承载ASoC的设置如机顶盒中的处理器(如ARM处理器)或专用集成电路(ASIC)实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、随机存取存储器(RAM,Random Access Memory)、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、RAM、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种音频处理方法,其特征在于,所述方法包括:
为直接内存读取DMA缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;
声明处理混音的软中断的名称以及对应的处理函数;
在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区;
将所述混音播放缓冲区的地址赋值给DMA功能指针的源地址;
所述混音播放缓冲区的地址用于支持所述DMA功能从所述混音播放缓冲区的地址数据到虚拟声卡的先入先出FIFO队列。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
3.如权利要求1所述的方法,其特征在于,在内存空间分配混音播放缓冲区和混音录制缓冲区之前,所述方法还包括:
注册虚拟声卡驱动和虚拟声卡;
注册平台设备和平台设备驱动;
注册编解码器Codec设备、Codec驱动和Codec数字音频接口DAI。
4.如权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
5.一种音频处理系统,其特征在于,所述系统包括:
缓冲区单元,用于为直接内存读取DMA缓冲区分配内存空间,所述DMA缓冲区包括混音播放缓冲区和混音录制缓冲区;
软中断声明单元,声明处理混音的软中断的名称以及对应的处理函数;
软中断处理单元,用于在混音的软中断中获取播放缓冲区地址和录制缓冲区地址,调用混音处理函数进行混音处理,将处理混音后的数据保存在所述混音播放缓冲区;
混音播放处理单元,用于将所述混音播放缓冲区的地址赋值给DMA功能指针的源地址;
所述混音播放缓冲区的地址用于支持所述DMA功能从所述混音播放缓冲区的地址数据到虚拟声卡的先入先出FIFO队列。
6.如权利要求5所述的系统,其特征在于,所述系统还包括:
混音录制处理单元,用于在DMA功能的中断回调函数中,将所述混音播放缓冲区的数据拷贝到所述混音录制缓冲区中,所述混音录制缓冲区用于支持应用层通过打开虚拟声卡读取混音后的音频数据。
7.如权利要求5所述的系统,其特征在于,所述系统还包括:
注册单元,用于在所述缓冲区单元内存空间分配混音播放缓冲区和混音录制缓冲区之前,执行以下操作;注册虚拟声卡驱动和虚拟声卡;注册平台设备和平台设备驱动;注册编解码器Codec设备、Codec驱动和Codec数字音频接口DAI。
8.如权利要求5至7任一项所述的系统,其特征在于,
所述缓冲区单元还用于为所述DMA缓冲区分配内存空间正常播放缓冲区,所述正常播放缓冲区用于支持应用层通过打开虚拟声卡写入需要播放的音频数据;
所述缓冲区单元还用于为所述DMA缓冲区分配正常录制缓冲区,所述正常录制缓冲区用于支持应用层通过打开所述虚拟声卡读取麦克风输入的原始音频数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510390087.2A CN106325804B (zh) | 2015-07-03 | 2015-07-03 | 音频处理方法及系统 |
PCT/CN2016/076802 WO2017005010A1 (zh) | 2015-07-03 | 2016-03-18 | 音频处理方法及设备、计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510390087.2A CN106325804B (zh) | 2015-07-03 | 2015-07-03 | 音频处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106325804A CN106325804A (zh) | 2017-01-11 |
CN106325804B true CN106325804B (zh) | 2019-05-31 |
Family
ID=57684848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510390087.2A Active CN106325804B (zh) | 2015-07-03 | 2015-07-03 | 音频处理方法及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106325804B (zh) |
WO (1) | WO2017005010A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107483731A (zh) * | 2017-08-18 | 2017-12-15 | 广东欧珀移动通信有限公司 | 音频播放音量的控制方法、装置及存储介质和移动终端 |
CN109600691A (zh) * | 2017-09-30 | 2019-04-09 | 深圳市魅鸟科技有限公司 | 一种车载智能WiFi麦克风及其音频延时处理方法 |
CN107992282B (zh) * | 2017-11-29 | 2020-11-03 | 珠海市魅族科技有限公司 | 音频数据处理方法及装置、计算机装置及可读存储装置 |
CN110096250B (zh) * | 2018-01-31 | 2020-05-29 | 北京金山云网络技术有限公司 | 一种音频数据处理方法、装置、电子设备及存储介质 |
CN109462796A (zh) * | 2018-10-25 | 2019-03-12 | 歌尔股份有限公司 | 一种音频处理系统及音频设备 |
CN109348297B (zh) * | 2018-11-28 | 2021-03-23 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种数据获取方法及装置 |
CN110007975B (zh) * | 2019-04-02 | 2021-11-12 | 思必驰科技股份有限公司 | 声卡自适应加载方法及系统 |
CN111586529A (zh) * | 2020-05-08 | 2020-08-25 | 北京三体云联科技有限公司 | 音频数据处理方法、装置、终端和计算机可读存储介质 |
CN111654743B (zh) * | 2020-05-27 | 2022-04-22 | 海信视像科技股份有限公司 | 音频播放方法及显示设备 |
CN112615853B (zh) * | 2020-12-16 | 2023-01-10 | 瑞芯微电子股份有限公司 | 一种Android设备音频数据接入方法 |
CN113038238B (zh) * | 2021-03-22 | 2023-07-07 | 格兰菲智能科技有限公司 | 传输流数据码录制系统及传输流数据码录制方法 |
CN112988249B (zh) * | 2021-03-23 | 2024-05-28 | 上海摩勤智能技术有限公司 | 创建声卡的方法、装置、电子设备及存储介质 |
CN113409808B (zh) * | 2021-06-18 | 2024-05-03 | 上海盈方微电子有限公司 | 一种回声消除时延估算方法及回声消除方法 |
CN113282271A (zh) * | 2021-07-22 | 2021-08-20 | 北京麟卓信息科技有限公司 | 一种Linux平台上安卓应用的音频处理方法及装置 |
CN113965844B (zh) * | 2021-12-22 | 2022-04-15 | 深圳市维海德技术股份有限公司 | 低延时音频传输方法、装置、驱动设备及可读存储介质 |
CN115312072B (zh) * | 2022-08-04 | 2024-10-01 | 世邦通信股份有限公司 | 音频路由管理方法、系统及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101140527A (zh) * | 2006-09-05 | 2008-03-12 | 中兴通讯股份有限公司 | 一种音频驱动程序声音管理方法 |
CN101661748A (zh) * | 2009-09-15 | 2010-03-03 | 福州瑞芯微电子有限公司 | 一种音频设备中实现混音的方法 |
CN103578512A (zh) * | 2013-10-18 | 2014-02-12 | 三星电子(中国)研发中心 | 录音快速回放的方法及其装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7188196B2 (en) * | 2001-05-18 | 2007-03-06 | Cirrus Logic, Inc. | Method and apparatus for playing analog audio to multiple codec outputs |
KR20120108570A (ko) * | 2011-03-24 | 2012-10-05 | 삼성전자주식회사 | 오디오 장치, 및 그 동작 방법 |
US9236064B2 (en) * | 2012-02-15 | 2016-01-12 | Microsoft Technology Licensing, Llc | Sample rate converter with automatic anti-aliasing filter |
CN104637488B (zh) * | 2013-11-07 | 2018-12-25 | 华为终端(东莞)有限公司 | 声音处理的方法和终端设备 |
-
2015
- 2015-07-03 CN CN201510390087.2A patent/CN106325804B/zh active Active
-
2016
- 2016-03-18 WO PCT/CN2016/076802 patent/WO2017005010A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101140527A (zh) * | 2006-09-05 | 2008-03-12 | 中兴通讯股份有限公司 | 一种音频驱动程序声音管理方法 |
CN101661748A (zh) * | 2009-09-15 | 2010-03-03 | 福州瑞芯微电子有限公司 | 一种音频设备中实现混音的方法 |
CN103578512A (zh) * | 2013-10-18 | 2014-02-12 | 三星电子(中国)研发中心 | 录音快速回放的方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106325804A (zh) | 2017-01-11 |
WO2017005010A1 (zh) | 2017-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106325804B (zh) | 音频处理方法及系统 | |
US8561063B2 (en) | Platform independent replication using virtual machines | |
US10394516B2 (en) | Mobile terminal and method for controlling sound output | |
US6665409B1 (en) | Methods for surround sound simulation and circuits and systems using the same | |
KR20130112799A (ko) | 다수의 액츄에이터를 사용하는 사운드-햅틱 효과 변환 시스템 | |
JPH09503070A (ja) | オブジェクト指向midiシステム | |
JPH09502821A (ja) | オブジェクト指向オーディオ・システム | |
CN108564966A (zh) | 语音测试的方法及其设备、具有存储功能的装置 | |
Rutten | Local popular music on the national and international markets | |
JPH10511801A (ja) | 種々の異なる資源レベルを持つハードウェアプラットフォーム上でマルチメディア・アプリケーションを実行可能とする方法、そのようなアプリケーションを含む物理的記録、及びそのようなアプリケーションを実行する装置 | |
US9460203B2 (en) | Sound processing apparatus | |
CN116095397A (zh) | 直播方法、装置、电子设备、以及存储介质 | |
JP2016005268A (ja) | 情報伝送システム、情報伝送方法、及びプログラム | |
CN105654932B (zh) | 实现卡拉ok应用的系统和方法 | |
CN112053699B (zh) | 一种游戏卡牌变声的处理方法及装置 | |
CN118038878A (zh) | 用于多应用传输声音的方法和装置、电子设备和存储介质 | |
KR101120968B1 (ko) | 악기 디지털 인터페이스 하드웨어 명령 세트 | |
TW200903447A (en) | Efficient identification of sets of audio parameters | |
WO2022143530A1 (zh) | 音频处理方法、装置、计算机设备及存储介质 | |
CN109243472A (zh) | 一种音频处理方法及音频处理系统 | |
CN105430486B (zh) | 音频或视频播放的方法和装置 | |
CN114501296A (zh) | 一种音频处理方法及车载多媒体设备 | |
JP7408956B2 (ja) | ライブラリプログラム、リンクプログラム、及び、音処理装置 | |
CN110493456B (zh) | 一种动画播放方法、装置、终端设备及服务器 | |
US7470848B2 (en) | Structure and method for playing MIDI messages and multi-media apparatus using the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |