一种基于数组实现的用于实时读写PCM数据的方法技术

技术编号:23287620 阅读:63 留言:0更新日期:2020-02-08 17:48
本发明专利技术公开一种基于数组实现的用于实时读写PCM数据的方法,本方法基于环状数据结构,对音频采集设备回传的PCM数据进行循环写入,实现对PCM数据的实时存储,同时提供缓冲区数据提取的接口,用于PCM数据循环读出,从而实时获取缓冲区的PCM数据。本方法相对于基于链状数据结构实现的读取方法而言,可以减少程序运行时所需的时间与空间复杂度,减少程序开销,提高效率,可应用于轻量级实时音频流的数据缓冲存取。

An array based method for real-time reading and writing PCM data

【技术实现步骤摘要】
一种基于数组实现的用于实时读写PCM数据的方法
本专利技术涉及一种数组实现的用于实时读写PCM数据的方法,用于轻量级实时音频流的数据读写。
技术介绍
PCM(脉冲编码调制)就是把一个时间连续、取值连续的模拟信号变换成时间离散、取值离散的数字信号后在信道中传输。脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码的过程。一个模拟信号经过抽样量化后,得到已量化的脉冲幅度调制信号,它仅为有限个数值;编码,就是用一组二进制码组来表示每一个有固定电平的量化值,量化是在编码过程中同时完成的。现在对轻量级实时音频流的数据读写都是基于链状数据结构的,普通链状数据结构的出队操作会浪费大量的运算量,而且要求的时间、空间复杂度也较高。
技术实现思路
本专利技术要解决的技术问题是提供一种基于数组实现的用于实时读写PCM数据的方法,利用预先申请的连续内存空间(环状数据结构),对采集设备回传的PCM数据进行实时存储,同时提供缓冲区数据读取的接口,用于实时获取缓冲区的PCM数据。为了解决所述技术问题,本专利技术采用的技术方案是:一种基本文档来自技高网...

【技术保护点】
1.一种基于数组实现的用于实时读写PCM数据的方法,其特征在于:包括以下步骤:S01)、根据采集设备精度需要,预先申请一定量大小的连续内存空间作为PCM数据的缓冲区,将连续内存空间的逻辑结构表述为环状结构,然后通知采集设备进行数据采集并回传PCM数据;S02)、根据PCM数据包字节长度对缓冲区进行数据写入,写入过程中需进行缓冲剩余空间判断,如果剩余空间大小大于数据包长度,则直接将数据写入进缓冲区,返回成功,如果剩余空间长度小于数据包长度,返回失败,进行步骤S03;S03)、阻塞数据接收线程,等待T1时间后,重新将数据包进行步骤S02操作,如返回失败,则将当前数据包丢弃,结束线程阻塞,如返回成功...

【技术特征摘要】
1.一种基于数组实现的用于实时读写PCM数据的方法,其特征在于:包括以下步骤:S01)、根据采集设备精度需要,预先申请一定量大小的连续内存空间作为PCM数据的缓冲区,将连续内存空间的逻辑结构表述为环状结构,然后通知采集设备进行数据采集并回传PCM数据;S02)、根据PCM数据包字节长度对缓冲区进行数据写入,写入过程中需进行缓冲剩余空间判断,如果剩余空间大小大于数据包长度,则直接将数据写入进缓冲区,返回成功,如果剩余空间长度小于数据包长度,返回失败,进行步骤S03;S03)、阻塞数据接收线程,等待T1时间后,重新将数据包进行步骤S02操作,如返回失败,则将当前数据包丢弃,结束线程阻塞,如返回成功,则直接结束线程阻塞;S04)、缓冲区PCM数据实时读取,首先计算缓冲区已存放数据大小,然后与设计阈值进行对比,当缓冲区已存数据大小大于所设置阈值时,对缓冲区进行读操作,返回成功,当缓冲区数据大小小于所设置阈值时,返回失败,进行步骤S05;S05)、PCM数据读取线程进入阻塞,等待T2时间后,重新进行S04步骤,直至可以正常获取PCM数据。


2.根据权利要求1所述的基于数组实现的用于实时读写PCM数据的方法,其特征在于:缓冲区剩余空间判断的过程为:首先判定缓冲区已存储数据长度,设缓冲区总长度为TotalLen,写指针为WriteIndex;读指针为ReadIndex,当前缓冲区已存放数据长度为AvailableLen,则AvailableLen=(WriteIndex+TotalLen-ReadIndex)%TotalLen,%表示求余;则缓冲区剩余空间长度为缓冲区总长度减去缓冲区已存放数据长度的值。


3.根据权利要求1或2所述的基于数组实现的用于实时读写PCM数据的方法,其特征在于:针对环状数据结构,数据循环写入的过程为:设缓冲区总长度为TotalLen,写指针为WriteIndex,要存储的PCM数据包长度为DataLen;写阈值为WriteThreshold,已存储的数据长度为AvailableLen,如果剩余存储空间长度大于PCM数据包的长度,且数据缓冲区的总长度减去已存储的数据大于写阈值,且缓冲区的总长度大于写指针加PCM数据包的长度,PCM数据包直接拷贝存入数据缓冲区,写指针更新,WriteIndex=WriteIndex+DataLen,...

【专利技术属性】
技术研发人员:李和涛马敬锐祝清雷朱蕾刘建梁
申请(专利权)人:山东神戎电子股份有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1