CN109461451A - 一种基于opus的语音传输方法和设备及系统 - Google Patents
一种基于opus的语音传输方法和设备及系统 Download PDFInfo
- Publication number
- CN109461451A CN109461451A CN201811410183.9A CN201811410183A CN109461451A CN 109461451 A CN109461451 A CN 109461451A CN 201811410183 A CN201811410183 A CN 201811410183A CN 109461451 A CN109461451 A CN 109461451A
- Authority
- CN
- China
- Prior art keywords
- data
- opus
- audio data
- dma
- receiving end
- 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.)
- Granted
Links
- 230000005540 biological transmission Effects 0.000 title claims abstract description 77
- 238000000034 method Methods 0.000 title claims abstract description 54
- 125000004122 cyclic group Chemical group 0.000 claims description 30
- 230000007246 mechanism Effects 0.000 claims description 25
- 230000008569 process Effects 0.000 claims description 23
- 239000000284 extract Substances 0.000 claims description 17
- 238000005538 encapsulation Methods 0.000 claims description 7
- 230000008859 change Effects 0.000 abstract description 11
- 241001269238 Data Species 0.000 abstract description 5
- 230000006835 compression Effects 0.000 description 9
- 238000007906 compression Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000004060 metabolic process Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012216 screening Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/70—Reducing energy consumption in communication networks in wireless communication networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Acoustics & Sound (AREA)
- Multimedia (AREA)
- Telephonic Communication Services (AREA)
- Mobile Radio Communication Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Reverberation, Karaoke And Other Acoustics (AREA)
Abstract
本发明实施例提出了一种基于OPUS的语音传输方法和设备及系统,本发明提出的方案通过DMA接收标记以及数据提取之后变更切换标记,实现对音频数据的精准定位提取,避免遗漏,且后续进一步通过预先判断发送数据缓冲区是否有空间,以及是否需要编码,以此避免缓冲区溢出,且对是否需要编码进行判断,避免对所有音频数据都进行编码,减少待编码的数据量,降低CPU的使用率,且通过OPUS算法进行压缩编码,降低了数据传输量,以此对于一般处理能力不强的嵌入式设备也可以应用,且还解决了缓冲区溢出的技术问题,能更好的进行语音的数据传输,尽可能避免语音数据的传输出现问题。
Description
技术领域
本发明涉及数据传输领域,特别涉及一种基于OPUS的语音传输方法和设备及系统。
背景技术
目前市面上的蓝牙音箱或耳机,都是采用经典蓝牙技术来做的,并且方案成熟,应用极广,它从硬件层面就实现了无线传输对接和音频编解码两个重要的核心技术,传输稳定可靠;所以用经典蓝牙来听音乐是首选。但是在人声识别和翻译领域,对音质要求不高的情况下,也可以采用BLE通信技术来做音频传输,用BLE的好处是更灵活,拓展性强,因为每台手机可以连接多个BLE设备同时工作,而且还不影响经典蓝牙音箱的连接,而如果只是经典蓝牙在播放音频就只能同时工作一个设备,在双人进行对话翻译的时候就非常不方便。
用BLE来做音频人声传输的问题主要是无线通信的带宽要够,能够支持到大量音频数据的传输,而这个问题是由两个因素决定的,一个是传输速率尽可能的快,这个要通过提高数据吞吐率来解决,另一个是数据量要尽可能的少,这个要通过数据的压缩编码来解决,所以只要传输率高于声音播放速率就可以实现BLE在音频传输的应用。
目前已有的压缩编解码算法都比较复杂,且在数据传输时容易出现缓冲区溢出的现象,一则需要消耗的CPU资源较大,要求处理能力高,目前无法用于在嵌入式设备上,且导致数据传输容易出现问题。
发明内容
有鉴于此,本发明提出了一种基于OPUS的语音传输方法和设备及系统。能有效降低CPU使用率,对于一般处理能力不强的嵌入式设备也可以应用,且还解决了缓冲区溢出的技术问题,能更好的进行语音的数据传输,尽可能避免语音数据的传输出现问题。
具体的,本发明提出了以下具体的实施例:
本发明实施例提出了一种基于OPUS的语音传输方法,应用于包括发送端与接收端的系统中,该方法包括:
发送端通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
所述发送端执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
所述发送端判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
所述发送端通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
在一个具体的实施例中,若查询结果为所述DMA接收标记的标记不是已接收,则执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
在一个具体的实施例中,若预设的发送数据缓冲区没有空间写入所述音频数据,则提示发送缓冲区数据已满,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
在一个具体的实施例中,若判断所述音频数据不需要编码,则忽略所述音频数据,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
在一个具体的实施例中,所述“发送端通过预设的网络接口将所述数据包发送给接收端”,包括:
发送端判断发送数据缓冲区是否存在音频数据;
若判断结果为是,则读取一帧所述数据缓冲区中的音频数据进行格式封装,并加入预设的包头序号,以生成数据包;
通过预设的网络接口执行将所述数据包发送给接收端的操作。
在一个具体的实施例中,若发送端判断发送数据缓冲区不存在音频数据,则执行循环查询任务。
在一个具体的实施例中,在通过预设的网络接口将所述数据包发送给接收端,之后还包括:
所述发送端接收所述接收端的反馈信息;
若所述反馈信息为接收成功,则执行循环查询任务;
若所述反馈信息为接收不成功,则查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则执行“从所述DMA缓冲区提取音频数据,并所述DMA接收标记变更为未接收”的流程;
若查询结果为否,则执行“通过预设的网络接口执行将所述数据包发送给接收端的操作”的流程。
在一个具体的实施例中,所述网络接口为:BLE接口、WIFI接口、2G接口、3G接口、4G接口、5G接口中的一种或多种。
在一个具体的实施例中,所述OPUS算法的编码解码方式包括voice方式与music方式;
当所述发送端的处理能力弱于所述接收端的处理能力时,所述发送端通过所述music方式来进行编码;所述接收端通过所述music方式来进行解码;
当所述发送端的处理能力强于所述接收端的处理能力时,所述发送端通过所述voice方式来进行编码;所述接收端通过所述voice方式来进行解码。
本发明实施例还提出了一种基于OPUS的语音传输系统,应用于包括发送端与接收端的系统中,其中,
所述发送端,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码;
所述接收端,用于获取发送端所发送的数据包;通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据;控制播放所述音频数据。
在一个具体的实施例中,所述“接收端获取发送端所发送的数据包”,包括:
接收端通过预设的连接发送端的网络接口进行接收操作,以在接收中断后获取数据包;
对所述数据包进行解析,以判断所述数据包是否合法;
若判断结果为是,则判断预设的接收数据缓冲区是否有空间写入所述数据包;
若判断结果为是,则将所述数据包写入所述接收数据缓冲区。
在一个具体的实施例中,若判断所述数据包不合法,则丢弃所述数据包。
在一个具体的实施例中,若判断预设的接收数据缓冲区没有空间写入所述数据包,则提示所述接收数据缓冲区中的数据已满。
在一个具体的实施例中,所述“接收端通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据”,包括:
执行循环查询任务;
查询所述接收数据缓冲区是否存在要填入I2S接口播放的数据长度的数据包;
若查询结果为是,则判断是否需要给I2S接口填充播放数据;
若判断结果为是,则提取符合所述数据长度的数据包,并调用OPUS算法对所述数据包进行解码,以获取音频数据。
在一个具体的实施例中,若查询结果为所述接收数据缓冲区不存在要填入I2S接口播放的数据长度的数据包,则执行循环查询任务;
在一个具体的实施例中,若判断不需要给I2S接口填充播放数据,则执行循环查询任务。
在一个具体的实施例中,所述“接收端控制播放所述音频数据”,包括:
所述接收端将所述音频数据填充到I2S接口中进行播放。
在一个具体的实施例中,在接收端将所述音频数据填充到I2S接口中进行播放,之后还包括:执行循环查询任务。
本发明实施例还提出了一种发送端,应用于包括发送端与接收端的系统中,该发送端包括:
获取模块,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
编码模块,用于执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
发送模块,用于通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
以此,本发明实施例提出了一种基于OPUS的语音传输方法和设备及系统,其中该方法应用于包括发送端与接收端的系统中,该方法包括:发送端通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;所述发送端执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;所述发送端判断预设的发送数据缓冲区是否有空间写入所述音频数据;若判断结果为是,则判断所述音频数据是否需要编码;若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;所述发送端通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。通过DMA接收标记以及数据提取之后变更切换标记,实现对音频数据的精准定位提取,避免遗漏,且后续进一步通过预先判断发送数据缓冲区是否有空间,以及是否需要编码,以此避免缓冲区溢出,且对是否需要编码进行判断,避免对所有音频数据都进行编码,减少待编码的数据量,降低CPU的使用率,且通过OPUS算法进行压缩编码,降低了数据传输量,以此对于一般处理能力不强的嵌入式设备也可以应用,且还解决了缓冲区溢出的技术问题,能更好的进行语音的数据传输,尽可能避免语音数据的传输出现问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提出的一种基于OPUS的语音传输方法的流程示意图;
图2为本发明实施例提出的一种基于OPUS的语音传输方法中音频数据编码以及发送的流程示意图;
图3为本发明实施例提出的一种基于OPUS的语音传输方法中音频数据上下行的流程示意图;
图4为本发明实施例提出的一种发送端的结构示意图;
图5为本发明实施例提出的一种基于OPUS的语音传输系统的示意图;
图6为本发明实施例提出的一种基于OPUS的语音传输系统中接收端获取数据包的流程示意图;
图7为本发明实施例提出的一种基于OPUS的语音传输系统中接收端解码数据包并进行播放的流程示意图。
具体实施方式
在下文中,将更全面地描述本公开的各种实施例。本公开可具有各种实施例,并且可在其中做出调整和改变。然而,应理解:不存在将本公开的各种实施例限于在此公开的特定实施例的意图,而是应将本公开理解为涵盖落入本公开的各种实施例的精神和范围内的所有调整、等同物和/或可选方案。
在本公开的各种实施例中使用的术语仅用于描述特定实施例的目的并且并非意在限制本公开的各种实施例。如在此所使用,单数形式意在也包括复数形式,除非上下文清楚地另有指示。除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本公开的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本公开的各种实施例中被清楚地限定。
实施例1
本发明实施例1公开了一种基于OPUS的语音传输方法,应用于包括发送端与接收端的系统中,如图1所示,该方法包括以下步骤:
步骤101、发送端通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
具体的,使用I2S接口的DMA机制可以有效降低CPU负荷,提升工作效率,且DMA机制中有中断机制可以保证数据能被CPU(Central Processing Unit,中央处理器)及时接收;且通过设置合适的DMA(Direct Memory Access,直接内存存取)数据接收量,可以以一定的周期间隔来进行数据处理。
通过DMA接收标记可以对音频数据的精准定位,避免遗漏。
步骤102、所述发送端执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
所述发送端判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
具体的,从DMA缓冲区取出音频数据并放置在专属的发送数据缓冲区,可以实现对发送环节的单独控制。
具体的OPUS算法是一个有损声音编码的格式,用于网络上的实时声音传输,标准格式为RFC 6716。
如图2所示,通过DMA接收标记以及数据提取之后变更切换标记,实现对音频数据的精准定位提取,避免遗漏。
而在实际应用中,例如选择1:16的压缩比来进行压缩编码。
具体的,以此为例来进行说明,以16khz的采样率16bit分辨率的数据来说,原来需要32kbyte的传输数据,现在只需要2kbyte就够了,对应的空中速率为16kbps,极大的压缩了数据量。以此就算是ble4.0的设备仍然能够工作,且音质仍可以满足大部分的应用场合,这样就直接解决了无线传输数据量大的问题,可以适用于大部分的BLE无线音频传输。
仍以信号采样率16khz为例,例如通过以下命令配置限制码率:
#define CONFIG_OPUS_BITRATE_LIMIT 16000
以此可以实现1:16的压缩比输出。
且后续进一步通过预先判断发送数据缓冲区是否有空间,以及是否需要编码,以此避免缓冲区溢出,且对是否需要编码进行判断,避免对所有音频数据都进行编码,减少待编码的数据量,降低CPU的使用率,且通过OPUS算法进行压缩编码,降低了数据传输量,以此对于一般处理能力不强的嵌入式设备也可以应用,且还解决了缓冲区溢出的技术问题,能更好的进行语音的数据传输,尽可能避免语音数据的传输出现问题。
步骤103、所述发送端通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
具体的,预设的网络接口可以为无线网络接口,进一步的,则可以为BLE(Bluetooth Low Energy,蓝牙低功耗)接口、WIFI(WIreless-Fidelity,无线保真)接口、2G接口、3G接口、4G接口、5G接口中的一种或多种。
如图2所示,可以调用BLE接口来进行数据包的发送操作。
进一步的,如图2所示,若查询结果为所述DMA接收标记的标记不是已接收,则执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
具体的,若查询结果为所述DMA接收标记的标记不是已接收,则执行“查询发送数据缓冲区是否存在音频数据”的操作。
如图2所示,若预设的发送数据缓冲区没有空间写入所述音频数据,则提示发送缓冲区数据已满,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程中的第一个流程,也即“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
具体的,与上述类似,如图2所示,当预设的发送数据缓冲区没有空间写入所述音频数据,则提示发送缓冲区数据已满,执行“查询发送数据缓冲区是否存在音频数据”的操作。
如图2所示,若判断所述音频数据不需要编码,则忽略所述音频数据,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
具体的是否需要编码可以基于用户定义的需要编码的音频数据来进行判断,也即不满足符合编码条件的,都不需要编码;具体的例如可以根据数据的类型,数据的长度,数据的大小,数据的标识等来进行判断。
与上述类型,如图2所示,若判断所述音频数据不需要编码,则忽略所述音频数据,且执行“查询发送数据缓冲区是否存在音频数据”的操作。
而具体的步骤103中具体的“发送端通过预设的网络接口将所述数据包发送给接收端”,包括:
发送端判断发送数据缓冲区是否存在音频数据;
若判断结果为是,则读取一帧所述数据缓冲区中的音频数据进行格式封装,并加入预设的包头序号,以生成数据包;
通过预设的网络接口执行将所述数据包发送给接收端的操作。
具体的,如图2所示,整个发送过程包括多个步骤,首先判断发送数据缓冲区是否存在音频数据,若判断结果为式,则读取一帧所述数据缓冲区中的音频数据;并对读取出的音频数据进行格式封装,且加入预设的包头序号后生成数据包。
具体的格式封装可以基于目前已有的格式进行封装,包头序号可以基于时间来生成,也可以基于顺序来生成,抑或是其他的用户自定义的标识来生成。
具体的,如图2所示,若发送端判断发送数据缓冲区不存在音频数据,则执行循环查询任务。
以此,实现任务的循环执行,可以提升发送的效率。
进一步的,如图2所示,在通过预设的网络接口将所述数据包发送给接收端,之后还包括:
所述发送端接收所述接收端的反馈信息;
若所述反馈信息为接收成功,则执行循环查询任务;
若所述反馈信息为接收不成功,则查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则执行“从所述DMA缓冲区提取音频数据,并所述DMA接收标记变更为未接收”的流程;
若查询结果为否,则执行“通过预设的网络接口执行将所述数据包发送给接收端的操作”的流程。
具体的,如图2所示,在发送之后接收反馈信息,用以判断该发送的音频数据是否被接收端成功接收,而确定已成功接收,则执行循环查询任务,以此实现流程任务的循环执行。
而若是确定未被成功接收,则查询所述DMA接收标记是否标记为已接收,如图2中,则是判断DMA接收标记是否为1,在此1表示为已接收,而0则表示未接收,具体的数字与含义之间可以用户自定义,并不限于此对应关系。
若是确定DMA接收标记被标记为已接收,则执行“从所述DMA缓冲区提取音频数据,并所述DMA接收标记变更为未接收”的流程;
具体的,执行“从所述DMA缓冲区提取音频数据,并所述DMA接收标记变更为未接收”的流程中,可以与上述同样流程的最终的步骤不同的是,可以直接执行“通过预设的网络接口执行将所述数据包发送给接收端“的操作,因为其他的步骤,例如“发送端判断发送数据缓冲区是否存在音频数据;若判断结果为是,则读取一帧所述数据缓冲区中的音频数据进行格式封装,并加入预设的包头序号,以生成数据包”步骤已经被执行过一次。具体的,如图2中所示的实施例,则为调用BLE蓝牙数据发送接口进行数据包的发送操作。
具体的,如图2所示的循环机制流程,可以一则提升发送效率,且可以同时保接收数据不会丢失,且保证了数据能被及时处理。
在一个具体的实施例中,所述OPUS算法的编码解码方式包括voice方式与music方式;
当所述发送端的处理能力弱于所述接收端的处理能力时,所述发送端通过所述music方式来进行编码;所述接收端通过所述music方式来进行解码;
当所述发送端的处理能力强于所述接收端的处理能力时,所述发送端通过所述voice方式来进行编码;所述接收端通过所述voice方式来进行解码。
具体的,如图3所示,为嵌入式设备工作流程,在音频数据被发给手机的时候,嵌入式端MCU负责编码,手机或BLE主机接收后解码;而接收数据的时候,是手机编码后把数据发给嵌入式MCU解码,然后播放出来。
而在具体的应用过程中,OPUS算法在编码信号类型时有两种选择:voice和music,分别对应人声语音和音乐。
目前一般已有的用法就是选择其中一种来工作,如语音编解码选择voice,音乐编解码选择music,即主从机的编解码方式要一致。
但是本申请的发明人发现这两种编码所消耗的CPU资源是不一样的,例如voice编码20ms语音数据,在0复杂度的条件下,运算时间是music的编码的4倍左右;但是解码却不同,voice解码20ms语音数据,运算时间是music的编码的1/2左右;如此,若是在语音编解码的应用时选择voice,但由于voice对性能要求很高,普通的CPU根本跑不动,就算能跑动,对于运算延时也达不到发送语音数据实时性的需求。
考虑到这点,本方案中采用了不对称编解码方式来工作,嵌入式端MCU编码采用music方式,手机端通过music解码,然后手机端编码采用voice方式,嵌入式解码采用voice进行,如此对嵌入式端CPU来说负荷大大减少,可以跑得动,且由于本方案针对的是语音人声的应用,voice解码后的音质会比music方式更好。
具体的,例如编码的初始化配置可以如下,music下的低延时模式
opus_encoder_init(m_opus_state,CONFIG_AUDIO_SAMPLING_FREQUENCY,1,OPUS_APPLICATION_RESTRICTED_LOWDELAY);
OPUS_APPLICATION_RESTRICTED_LOWDELAY=2051代表music编码模式的低时延方法,让CPU的负荷最小。
opus_encoder_ctl(m_opus_state,OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE);
选择信号源类型为人声,提升对语音部分的音质优化;
至于,与之对应的解码,其初始化配置可以如下,采用voice方式解码。
opus_decoder_init_silk(m_opus_decoder_state_silk,
CONFIG_AUDIO_SAMPLING_FREQUENCY,1);
实施例2
本发明实施例2还公开了一种发送端,应用于包括发送端与接收端的系统中,如图4所示,该发送端包括:
获取模块201,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
编码模块202,用于执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
发送模块203,用于通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
具体的,本发明实施例2还公开有其他相应特征,具体其他相应特征请参见实施例1中的记载,出于简要的目的,在此不再进行赘叙。
实施例3
为了对本申请进行进一步的说明,本发明实施例3还公开了一种基于OPUS的语音传输系统,如图5所示,应用于包括接收端2与实施例1中所述的发送端1所组成的系统,其中,
所述发送端1,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码;
所述接收端2,用于获取发送端所发送的数据包;通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据;控制播放所述音频数据。
在一个具体的实施例中,所述“接收端获取发送端所发送的数据包”,包括:
接收端通过预设的连接发送端的网络接口进行接收操作,以在接收中断后获取数据包;
对所述数据包进行解析,以判断所述数据包是否合法;
若判断结果为是,则判断预设的接收数据缓冲区是否有空间写入所述数据包;
若判断结果为是,则将所述数据包写入所述接收数据缓冲区。
具体的,如图6所示,以BLE接口为例,当BLE接收中断后,获取数据包,并对该数据包进行解析,判断该数据包是否合法,具体的是否合法的判断例如可以从数据包的包头序号,和/或封装的格式,以及数据包的其他特征是否为与发送端事先约定以及设置的来进行判断;而当数据包是合法的,则进一步判断设的接收数据缓冲区是否有空间写入所述数据包,以防止数据溢出,而当接收数据缓冲区有空间写入该数据包时,则将数据包写入该接收数据缓冲区。
在一个具体的实施例中,如图6所示,若判断所述数据包不合法,则丢弃所述数据包。
若数据包被判断为不合法,则可以丢弃该数据包。
此外,如图6所示,若判断预设的接收数据缓冲区没有空间写入所述数据包,则提示所述接收数据缓冲区中的数据已满。
在一个具体的实施例中,如图7所示,所述“接收端通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据”,包括:
执行循环查询任务;
查询所述接收数据缓冲区是否存在要填入I2S接口播放的数据长度的数据包;
若查询结果为是,则判断是否需要给I2S接口填充播放数据;
若判断结果为是,则提取符合所述数据长度的数据包,并调用OPUS算法对所述数据包进行解码,以获取音频数据。
具体的,先通过对接收数据缓冲区的数据包是否满足需要填入I2S接口播放的数据长度,以此对数据缓冲区中的数据进行筛选,筛选出需要播放的数据;
当数据筛选完成后,则判断是否需要给I2S接口填充播放数据,当判断结果为是时,则提取符合所述数据长度的数据包,并调用OPUS算法对所述数据包进行解码,以获取音频数据,以此准备进行音频数据的播放。
在一个具体的实施例中,如图7所示,若查询结果为所述接收数据缓冲区不存在要填入I2S接口播放的数据长度的数据包,则执行循环查询任务;以此循环查询直到查到有满足该数据长度的数据包。
在一个具体的实施例中,如图7所示,若判断不需要给I2S接口填充播放数据,则执行循环查询任务。
在一个具体的实施例中,如图7所示,所述“接收端控制播放所述音频数据”,包括:
所述接收端将所述音频数据填充到I2S接口中进行播放。
在一个具体的实施例中,为例保证音频播放的连续性,在接收端将所述音频数据填充到I2S接口中进行播放,之后还包括:执行循环查询任务。
至于整个系统中关于发送端的其他具体描述,请参见实施例1中的记载,在此不再进行赘叙。
以此,本发明实施例提出了一种基于OPUS的语音传输方法和设备及系统,其中该方法应用于包括发送端与接收端的系统中,该方法包括:发送端通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;所述发送端执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;所述发送端判断预设的发送数据缓冲区是否有空间写入所述音频数据;若判断结果为是,则判断所述音频数据是否需要编码;若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;所述发送端通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。通过DMA接收标记以及数据提取之后变更切换标记,实现对音频数据的精准定位提取,避免遗漏,且后续进一步通过预先判断发送数据缓冲区是否有空间,以及是否需要编码,以此避免缓冲区溢出,且对是否需要编码进行判断,避免对所有音频数据都进行编码,减少待编码的数据量,降低CPU的使用率,且通过OPUS算法进行压缩编码,降低了数据传输量,以此对于一般处理能力不强的嵌入式设备也可以应用,且还解决了缓冲区溢出的技术问题,能更好的进行语音的数据传输,尽可能避免语音数据的传输出现问题。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
Claims (19)
1.一种基于OPUS的语音传输方法,其特征在于,应用于包括发送端与接收端的系统中,该方法包括:
发送端通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
所述发送端执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
所述发送端判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
所述发送端通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
2.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,若查询结果为所述DMA接收标记的标记不是已接收,则执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
3.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,若预设的发送数据缓冲区没有空间写入所述音频数据,则提示发送缓冲区数据已满,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
4.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,若判断所述音频数据不需要编码,则忽略所述音频数据,并执行“通过预设的网络接口将压缩编码后的音频数据发送给接收端”的流程。
5.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,所述“发送端通过预设的网络接口将所述数据包发送给接收端”,包括:
发送端判断发送数据缓冲区是否存在音频数据;
若判断结果为是,则读取一帧所述数据缓冲区中的音频数据进行格式封装,并加入预设的包头序号,以生成数据包;
通过预设的网络接口执行将所述数据包发送给接收端的操作。
6.如权利要求5所述的一种基于OPUS的语音传输方法,其特征在于,若发送端判断发送数据缓冲区不存在音频数据,则执行循环查询任务。
7.如权利要求5所述的一种基于OPUS的语音传输方法,其特征在于,在通过预设的网络接口将所述数据包发送给接收端,之后还包括:
所述发送端接收所述接收端的反馈信息;
若所述反馈信息为接收成功,则执行循环查询任务;
若所述反馈信息为接收不成功,则查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则执行“从所述DMA缓冲区提取音频数据,并所述DMA接收标记变更为未接收”的流程;
若查询结果为否,则执行所述“通过预设的网络接口执行将所述数据包发送给接收端的操作”的流程。
8.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,所述网络接口为:BLE接口、WIFI接口、2G接口、3G接口、4G接口、5G接口中的一种或多种。
9.如权利要求1所述的一种基于OPUS的语音传输方法,其特征在于,所述OPUS算法的编码解码方式包括voice方式与music方式;
当所述发送端的处理能力弱于所述接收端的处理能力时,所述发送端通过所述music方式来进行编码;所述接收端通过所述music方式来进行解码;
当所述发送端的处理能力强于所述接收端的处理能力时,所述发送端通过所述voice方式来进行编码;所述接收端通过所述voice方式来进行解码。
10.一种基于OPUS的语音传输系统,其特征在于,应用于包括接收端与权利要求1-9中任意一项所述的发送端的系统中,其中,
所述发送端,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码;
所述接收端,用于获取发送端所发送的数据包;通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据;控制播放所述音频数据。
11.如权利要求10所述的一种基于OPUS的语音传输系统,其特征在于,所述“接收端获取发送端所发送的数据包”,包括:
接收端通过预设的连接发送端的网络接口进行接收操作,以在接收中断后获取数据包;
对所述数据包进行解析,以判断所述数据包是否合法;
若判断结果为是,则判断预设的接收数据缓冲区是否有空间写入所述数据包;
若判断结果为是,则将所述数据包写入所述接收数据缓冲区。
12.如权利要求11所述的一种基于OPUS的语音传输系统,其特征在于,若判断所述数据包不合法,则丢弃所述数据包。
13.如权利要求11所述的一种基于OPUS的语音传输方法,其特征在于,若判断预设的接收数据缓冲区没有空间写入所述数据包,则提示所述接收数据缓冲区中的数据已满。
14.如权利要求10所述的一种基于OPUS的语音传输系统,其特征在于,所述“接收端通过OPUS算法对所述数据包进行解码,以获取数据包中的音频数据”,包括:
执行循环查询任务;
查询所述接收数据缓冲区是否存在要填入I2S接口播放的数据长度的数据包;
若查询结果为是,则判断是否需要给I2S接口填充播放数据;
若判断结果为是,则提取符合所述数据长度的数据包,并调用OPUS算法对所述数据包进行解码,以获取音频数据。
15.如权利要求14所述的一种基于OPUS的语音传输系统,其特征在于,若查询结果为所述接收数据缓冲区不存在要填入I2S接口播放的数据长度的数据包,则执行循环查询任务。
16.如权利要求14所述的一种基于OPUS的语音传输系统,其特征在于,若判断不需要给I2S接口填充播放数据,则执行循环查询任务。
17.如权利要求14所述的一种基于OPUS的语音传输系统,其特征在于,所述“接收端控制播放所述音频数据”,包括:
所述接收端将所述音频数据填充到I2S接口中进行播放。
18.如权利要求17所述的一种基于OPUS的语音传输系统,其特征在于,在接收端将所述音频数据填充到I2S接口中进行播放,之后还包括:执行循环查询任务。
19.一种发送端,其特征在于,应用于包括发送端与接收端的系统中,该发送端包括:
获取模块,用于通过I2S接口的DMA机制接收音频数据,将所接收的音频数据存储在DMA缓冲区,并在触发DMA机制中断成后将DMA接收标注标记为已接收;
编码模块,用于执行循环查询任务,以查询所述DMA接收标记是否标记为已接收;
若查询结果为是,则从所述DMA缓冲区提取音频数据,并将所述DMA接收标记变更为未接收;
判断预设的发送数据缓冲区是否有空间写入所述音频数据;
若判断结果为是,则判断所述音频数据是否需要编码;
若判断结果为是,则调用OPUS算法的压缩编码函数对所述音频数据进行压缩编码,生成数据包;
发送模块,用于通过预设的网络接口将所述数据包发送给接收端,以使所述接收端基于所述OPUS算法对所接收的数据包进行解码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811410183.9A CN109461451B (zh) | 2018-11-23 | 2018-11-23 | 一种基于opus的语音传输方法和设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811410183.9A CN109461451B (zh) | 2018-11-23 | 2018-11-23 | 一种基于opus的语音传输方法和设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109461451A true CN109461451A (zh) | 2019-03-12 |
CN109461451B CN109461451B (zh) | 2022-06-03 |
Family
ID=65611496
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811410183.9A Active CN109461451B (zh) | 2018-11-23 | 2018-11-23 | 一种基于opus的语音传输方法和设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109461451B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109785841A (zh) * | 2019-03-19 | 2019-05-21 | 厦门市思芯微科技有限公司 | 一种蓝牙智能设备语音交互系统及方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567253A (zh) * | 2010-12-13 | 2012-07-11 | 深圳市硅格半导体有限公司 | 基于dma的spi数据传输方法及装置 |
CN103581181A (zh) * | 2013-10-28 | 2014-02-12 | 清华大学 | 数据包捕获、处理和发送方法及系统 |
WO2016210104A1 (en) * | 2015-06-26 | 2016-12-29 | Ibasis, Inc | Codec selection optimization |
CN107193769A (zh) * | 2017-05-23 | 2017-09-22 | 北京正唐科技有限责任公司 | 一种基于asi接口的数据收发系统 |
CN108347716A (zh) * | 2018-01-15 | 2018-07-31 | 恒玄科技(上海)有限公司 | 一种蓝牙通信系统及通信方法 |
CN108696339A (zh) * | 2018-04-13 | 2018-10-23 | 恒玄科技(上海)有限公司 | 带信道编码的无线蓝牙对耳语音通信系统及通信方法 |
-
2018
- 2018-11-23 CN CN201811410183.9A patent/CN109461451B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567253A (zh) * | 2010-12-13 | 2012-07-11 | 深圳市硅格半导体有限公司 | 基于dma的spi数据传输方法及装置 |
CN103581181A (zh) * | 2013-10-28 | 2014-02-12 | 清华大学 | 数据包捕获、处理和发送方法及系统 |
WO2016210104A1 (en) * | 2015-06-26 | 2016-12-29 | Ibasis, Inc | Codec selection optimization |
CN107193769A (zh) * | 2017-05-23 | 2017-09-22 | 北京正唐科技有限责任公司 | 一种基于asi接口的数据收发系统 |
CN108347716A (zh) * | 2018-01-15 | 2018-07-31 | 恒玄科技(上海)有限公司 | 一种蓝牙通信系统及通信方法 |
CN108696339A (zh) * | 2018-04-13 | 2018-10-23 | 恒玄科技(上海)有限公司 | 带信道编码的无线蓝牙对耳语音通信系统及通信方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109785841A (zh) * | 2019-03-19 | 2019-05-21 | 厦门市思芯微科技有限公司 | 一种蓝牙智能设备语音交互系统及方法 |
CN109785841B (zh) * | 2019-03-19 | 2023-05-12 | 厦门市思芯微科技有限公司 | 一种蓝牙智能设备语音交互系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109461451B (zh) | 2022-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108847248B (zh) | 蓝牙设备音频处理方法、系统、可读存储介质和蓝牙设备 | |
CN1973515B (zh) | 在无线通信系统中传输信息的方法及数据编码方法 | |
US10885921B2 (en) | Multi-stream audio coding | |
CN106537831B (zh) | 基于冗余的包发射错误恢复的系统和方法 | |
EP1271830B1 (en) | Negotiated dynamic error correction for streamed media | |
CN104917671B (zh) | 基于移动终端的音频处理方法和装置 | |
US7142525B2 (en) | Data transmission system | |
UA128634C2 (uk) | Способи і пристрої для формування або декодування бітового потоку, який містить імерсивні аудіосигнали | |
CN101636990B (zh) | 在通信系统中传输数据的方法 | |
KR101476138B1 (ko) | 코덱의 구성 설정 방법 및 이를 적용한 코덱 | |
US20080228472A1 (en) | Audio Data Packet Format and Decoding Method thereof and Method for Correcting Mobile Communication Terminal Codec Setup Error and Mobile Communication Terminal Performance Same | |
MXPA04007668A (es) | Comunicacion de voz de inter-sistemas de tandem libre. | |
JP2000244923A (ja) | 異機種間通信ネットワーク上でデジタル圧縮されたビジュアルデータを制御し互換性のある配信をする方法及び装置 | |
CN109785841A (zh) | 一种蓝牙智能设备语音交互系统及方法 | |
JPH11331305A (ja) | 送信装置および送信方法、受信装置および受信方法、並びに提供媒体 | |
CN105407225A (zh) | 一种数据传输方法及蓝牙设备 | |
CN108738007B (zh) | 一种音频传输方法、设备及系统 | |
CN109461451A (zh) | 一种基于opus的语音传输方法和设备及系统 | |
KR101904422B1 (ko) | 코덱의 구성 설정 방법 및 이를 적용한 코덱 | |
US20140257800A1 (en) | Error concealment for speech decoder | |
KR100723679B1 (ko) | 착신 대기음 구간에서 cdma 이동통신망의 음성슬롯데이터 구조를 이용해 he aac 비트스트림을 전송하는방법 | |
JP2001308919A (ja) | 通信装置 | |
US20050182623A1 (en) | Efficient transmission of communication traffic | |
WO2024074284A1 (en) | Method, apparatus, and medium for efficient encoding and decoding of audio bitstreams | |
WO2024074285A1 (en) | Method, apparatus, and medium for encoding and decoding of audio bitstreams with flexible block-based syntax |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |