CN117275497A - 基于WebRTC的音频降噪增效方法、设备及存储介质 - Google Patents
基于WebRTC的音频降噪增效方法、设备及存储介质 Download PDFInfo
- Publication number
- CN117275497A CN117275497A CN202311086416.5A CN202311086416A CN117275497A CN 117275497 A CN117275497 A CN 117275497A CN 202311086416 A CN202311086416 A CN 202311086416A CN 117275497 A CN117275497 A CN 117275497A
- Authority
- CN
- China
- Prior art keywords
- audio data
- noise reduction
- pcm format
- format audio
- library
- 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.)
- Pending
Links
- 230000009467 reduction Effects 0.000 title claims abstract description 61
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000007781 pre-processing Methods 0.000 claims abstract description 18
- 238000011161 development Methods 0.000 claims abstract description 9
- 238000010276 construction Methods 0.000 claims abstract description 7
- 230000006870 function Effects 0.000 claims description 35
- 238000012545 processing Methods 0.000 claims description 27
- 238000005070 sampling Methods 0.000 claims description 15
- 230000001629 suppression Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims 1
- 238000004891 communication Methods 0.000 abstract description 4
- 230000000694 effects Effects 0.000 abstract description 3
- 239000000872 buffer Substances 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000004065 semiconductor 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
- G10L19/04—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 using predictive techniques
- G10L19/16—Vocoder architecture
- G10L19/173—Transcoding, i.e. converting between two coded representations avoiding cascaded coding-decoding
-
- 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
- G10L25/00—Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00
- G10L25/27—Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00 characterised by the analysis technique
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1101—Session protocols
- H04L65/1108—Web based protocols, e.g. webRTC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/75—Media network packet handling
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Human Computer Interaction (AREA)
- Health & Medical Sciences (AREA)
- Acoustics & Sound (AREA)
- Computational Linguistics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明涉及通信技术领域,公开了一种基于WebRTC的音频降噪增效方法、设备及存储介质。该方法包括:获取AudioRecord中的PCM格式音频数据;获取WebRTC所需的降噪和增声模块库;配置NDK版本开发工具和CMake版本跨平台自动化建构工具,将降噪和增声模块库导入预置的Android cpp模块中;根据所述Android cpp模块,对所述PCM格式音频数据进行预处理;调用预置Lame库建立编码MP3的JNI接口函数;使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据。在本发明实施例中,可以基本去除噪音,提高声音增效效果。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种基于WebRTC的音频降噪增效方法、设备及存储介质。
背景技术
WebRTC是一项实时通讯协议技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。
随着智能设备的流行,在线会议、视频聊天、远程支持等等技术在实际使用中,由于网络质量、硬件设备等因素的影响,WebRTC可能会出现一些音频质量上的问题,其中最常见的问题之一就是噪音。在实时通信中,噪音会使得语音信号变得不清晰,影响用户的体验,因此,需提出一种基于WebRTC的音频降噪增效方法来解决WebRTC中的噪音问题。
发明内容
本发明的主要目的在于解决WebRTC中的噪音的技术问题。
本发明第一方面提供了一种基于WebRTC的音频降噪增效方法,所述音频降噪增效方法包括:
获取AudioRecord中的PCM格式音频数据;
获取WebRTC所需的降噪和增声模块库;
配置NDK版本开发工具和CMake版本跨平台自动化建构工具,将所述降噪和增声模块库导入预置的Android cpp模块中;
根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据;
调用预置Lame库建立编码MP3的JNI接口函数;
使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据。
可选的,在本发明第一方面的第一种实现方式中,所述获取AudioRecord得到的PCM格式音频数据包括:
获取当前AudioRecord的录音状态,其中,所述录音状态包括录音中状态;
若为录音中状态,则创建数据流,基于所述数据流,读取所述AudioRecord录制的PCM格式音频数据。
可选的,在本发明第一方面的第二种实现方式中,所述配置NDK版本开发工具和CMake版本跨平台自动化建构工具包括:
创建WRtcAudio共享库,建立降噪JNI接口函数;
通过所述降噪JNI接口函数,调用WRtcAudio共享库,所述WRtcAudio共享库用于噪声抑制和自动增益控制处理PCM格式音频数据;
利用预置AS编辑器生成cpp代码,得到JNI参数配置;
将所述JNI参数配置写入cpp代码中,用于初始化WebRTC自动增益控制库。
可选的,在本发明第一方面的第三种实现方式中,将所述降噪和增声模块库导入预置的Android cpp模块中包括:
将预置CMake配置文件中的CMakeLists.txt配置导入WRtcAudio共享库。
可选的,在本发明第一方面的第四种实现方式中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据包括:
初始化噪声抑制器,设置限制音量范围;
根据所述限制音量范围,对PCM格式音频数据进行噪声抑制处理,得到处理过的PCM格式音频数据;
释放噪声抑制器资源。
可选的,在本发明第一方面的第五种实现方式中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
初始化自动增益控制器,读取最小音量限制、最大音量限制、所述最小音量限制对应的第一采样率、所述最大音量限制对应的第二采样率;
根据所述最小音量限制、所述最大音量限制、所述第一采样率、所述第二采样率,对PCM格式音频数据进行自动增益控制处理,得到处理过的PCM格式音频数据;
释放自动增益控制器资源。
可选的,在本发明第一方面的第六种实现方式中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据。
可选的,在本发明第一方面的第七种实现方式中,所述通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据还包括:
计算出短整型类型数组的存储空间值;
根据所述存储空间值,对PCM格式音频数据进行降噪增声处理,得到处理过的PCM格式音频数据。
本发明第二方面提供了一种音频降噪增效设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述音频降噪增效设备执行上述的音频降噪增效方法。
本发明的第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的音频降噪增效方法。
在本发明实施例中,通过对PCM格式音频数据进行预处理,调用预置Lame库建立编码MP3的JNI接口函数;使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据,通过本方法可实现录音一秒1kb的存储,一个小时只有3M多,占用内存小,噪音基本去除,声音增效的效果也非常明显,提高音频质量和用户体验感。
附图说明
图1为本发明实施例中音频降噪增效方法的第一个实施例示意图;
图2为本发明实施例中音频降噪增效方法的第二个实施例示意图;
图3为本发明实施例中音频降噪增效设备的一个实施例示意图。
具体实施方式
本发明实施例提供了一种基于WebRTC的音频降噪增效方法、设备及存储介质。
下面将参照附图更详细地描述本发明公开的实施例。虽然附图中显示了本发明公开的某些实施例,然而应当理解的是,本发明公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本发明公开的附图及实施例仅用于示例性作用,并非用于限制本发明公开的保护范围。
在本发明公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中音频降噪增效方法的一个实施例包括:
101、获取AudioRecord中的PCM格式音频数据;
102、获取WebRTC所需的降噪和增声模块库;
在本实施例中,降噪和增声模块库包括:android_log_print.h、analog_agc.c、analog_agc.h、config.h、copy_set_operations.c、cpu_features_wrapper.h、defines.h、digital_agc.c、digital_agc.h、division_operations.c、dot_product_with_scale.c、downsample_fast.c、fft4g.c、ft4g.h、gain_control.h、noise_suppression.c、noise_suppression.h、ns_core.c、ns_core.h、real ft.h、resample by_2.c、signal_processing_library.h、spl_inl.h、spl_inl_armv7.h、spl_inl_mips.h、spl_sqrt.c、splitting_filter.c、typedefs.h、web_rtc.cpp、windows_private.h。
103、配置NDK版本开发工具和CMake版本跨平台自动化建构工具,将所述降噪和增声模块库导入预置的Android cpp模块中;
在本实施例中,CMake是一个开源的跨平台自动化建构工具,它使用CMakeLists.txt来描述构建过程,可以产生标准的构建文件。Android平台上使用CMak进行动态库(C和C++代码)的编译和使用;NDK(native development kt)是一种基于原生程序接口的软件开发工具,通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包,Android中的NDK提供了一系列的工具,帮助开发者快速开发C或C++的动态库,并能自动将so和java应用一起打包成apk。NDK常使用于:对某些代码进行保护(由于Java代码容易被反编译,而C/C++不容易),为了便于平台的移植,在程序中常常需要调用一些第三方的C/C++库,为了提升某些情况下代码的性能、提高利用某些现存的代码库文件。
104、根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据;
105、调用预置Lame库建立编码MP3的JNI接口函数;
106、使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据。
经过以上步骤可获取实时聊天消息,将所述实时聊天消息上传至后台。
在本实施例中,所述获取AudioRecord得到的PCM格式音频数据包括:
获取当前AudioRecord的录音状态,其中,所述录音状态包括录音中状态;
若为录音中状态,则创建数据流,基于所述数据流,读取所述AudioRecord录制的PCM格式音频数据。
如图2所示,在本实施例中,所述配置NDK版本开发工具和CMake版本跨平台自动化建构工具包括:
10311、创建WRtcAudio共享库,建立降噪JNI接口函数;
其中,10311、创建WRtcAudio共享库,创建方式可以执行以下代码:
include_directories(${PROJECT_SOURCE_DIR}/include)
#设完一个日录
aux_source_directory(src/nain/epp/lanenp3 SRC_LIST)
add_detinitions(-DFIXED_POINT-DUSE_KISS_FFT-DHAVE_CONFIG_H)
add_library(#Sets the name of the library.
WRtcAudio
#Sets the library as a shared library.
SHARED
#Provides a relative path to your source file(s).
#Assoclated headers in the sane locatlon as their source
#file are autonatically included.
src/main/cpp/web_rtc.cpp
src/main/cpp/noise_suppression.c
src/main/cpp/fft4g.c
src/main/cpp/ns core.c
src/main/cpp/analog_age.c
src/main/cpp/d1g1tal_agc.c
src/main/cpp/division_operations.c
src/main/cpp/copy_set_operat1ons.c
srcjmain/cpp/dot_product_with_scale.c
src/main/cpp/downsample_fast.c
src/main/cpp/resample by_2.C
srcjmain/cpp/spl_sqrt.c
src/main/cpp/splitting_filter.c
这段代码是用于构建一个名为“WRtcAudio”的共享库。首先,通过include_directories指定了一个目录${PROJECT_SOURCE_DIR}/include,该目录将被包含在编译过程中以供使用。
然后,使用aux_source_directory命令将src/main/cpp/lamemp3目录下的源文件添加到了变量SRC_LIST中。
接下来使用add_definitions命令定义了一些预处理宏,包括-DFIXED_POINT、-DUSE_KISS_FFT和-DHAVE_CONFIG_H。
最后,使用add_library命令创建了名为WRtcAudio的共享库,并将之前收集到的源文件列表作为参数传递给该命令,这些源文件包括了web_rtc.cpp、noise_suppression.c、fft4g.c、ns_core.c、analog_agc.c、digital_agc.c、division_operations.c、copy_set_operations.c、dot_product_with_scale.c、downsample_fast.c、resample_by_2.c、spl_sqrt.c和splitting_filter.c。
综上所述,该代码定义了一个名为WRtcAudio的共享库,其中包含了一系列源文件,并且设置了一些预处理宏。
10312、通过所述降噪JNI接口函数,调用WRtcAudio共享库,所述WRtcAudio共享库用于噪声抑制和自动增益控制处理PCM格式音频数据;
10313、利用预置AS编辑器生成cpp代码,得到JNI参数配置;
在本实施例中,声明了一个JNI接口:
JNIEXPORT void JNICALL
Java_com_kids_ext_recording_webrtc_WebRtcUtils_webRtcAgcProcess(JNIEnv*env,jclass WebRtcUtils type,jshortArray srcData_,
jshortArray desData.jint srcLen){
这段代码是一个JNI(Java Native Interface)方法的声明,它用于在Java和C/C++之间进行交互。具体来说,它声明了一个名为webRtcAgcProcess的JNI方法。
JNIEXPORT表示为JNI的入口点。
Void表示JNI的返回类型是空。
JNICALL指定了JNI调用约定。
JNIEnv*env是指向JNI环境的指针,它提供了一组JNI函数用于操作Java对象。
jclass WebRtcUtls type是指向Java类的指针,用于表示从Java端调用的类。
jshortArray srcData和jshortArray desData_分别是Java端传递给JNI方法的两个short数组参数。
jint srcLen表示srcData数组的长度。
10314、将所述JNI参数配置写入cpp代码中,用于初始化WebRTC自动增益控制库。
在本实施例中,将所述JNI参数配置写入cpp代码中可以执行以下代码:
这段代码是一个JNI(Java Native Interface)函数,用于在Java和本地(C/C++)代码之间进行通信。函数的目的是初始化WebRtcAgc(WebRTC自动增益控制)库。
具体语义如下:
函数声明:JNIEXPORT void JNICALL WebRtcUtils.webRtcAgcInit(JNIEnv*env,jclass WebRtcUtils type,jlong minVolume,jlong maxVolume,jlong freq)
创建AGC实例:int agc=WebRtcAgc_Create(agcInst:&agcHandle);如果创建成功,则agc的值为0。
设置AGC模式:int16_t agcMode=kAgcModeFixedDigital;
初始化AGC:int agcInit=WebRtcAgc_Init(agcInst:agcHandle,minLevel:(int32_t)minVolume,maxLevel:(int32_t)maxVolume,agcMode:(uint32_t)freq);如果初始化成功,则agcInit的值为0。
配置AGC参数:创建一个agcConfig结构体,并设置其compressionGain dB、limiterEnable和targetLevelDbfs等参数。
设置AGC配置:int initConfig=WebRtcAgc_set_config(agcInst:agcHandle,config:agcConfig);如果设置配置成功,则initConfig的值为-1。
如果设置AGC参数失败,则输出错误信息:"WebRtcAgc_set_config error"。
如果初始化AGC失败,则输出错误信息:"WebRtcAgc_Init error"。
如果创建AGC实例失败,则输出错误信息:"WebRtcAgc_Create error"。
在本实施例中,所述将所述降噪和增声模块库导入预置的Android cpp模块中包括:
1032、将预置CMake配置文件中的CMakeLists.txt配置导入WRtcAudio共享库。
在本实施例中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
103121、初始化噪声抑制器,设置限制音量范围;
103122、根据所述限制音量范围,对PCM格式音频数据进行噪声抑制处理,得到处理过的PCM格式音频数据;
103123、释放噪声抑制器资源。
在本实施例中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
103124、初始化自动增益控制器,读取最小音量限制、最大音量限制、所述最小音量限制对应的第一采样率、所述最大音量限制对应的第二采样率;
103125、根据所述最小音量限制、所述最大音量限制、所述第一采样率、所述第二采样率,对PCM格式音频数据进行自动增益控制处理,得到处理过的PCM格式音频数据;
103126、释放自动增益控制器资源。
在1032中,将预置CMake配置文件中的CMakeLists.txt配置导入WRtcAudio共享库可以执行以下代码:
这段代码是一个Java类WebRtcUtils,其中定义了一些静态方法,这些方法用于与名为WRtcAudio的共享库进行交互。
首先,在静态代码块中使用System.loadLibrary方法加载了名为WRtcAudio的共享库。
接下来,定义了以下几个本地方法:
webRtcNsInit:初始化噪声抑制器,接受一个频率参数。
webRtcNsProcess:对音频数据进行噪声抑制处理,接受采样率、长度和输入音频数据作为参数,并返回处理后的音频数据。
webRtcNsProcess32k:对32kHz采样率的音频数据进行噪声抑制处理,接受长度和输入音频数据作为参数,并返回处理后的音频数据。
webRtcNsFree:释放噪声抑制器资源。
然后,定义了以下几个本地方法:
webRtcAgcInit:初始化自动增益控制器,接受最小音量、最大音量和频率作为参数。
webRtcAgcProcess:对音频数据进行自动增益控制处理,接受输入音频数据、输出音频数据和输入音频数据长度作为参数。
webRtcAgcProcess32k:对32kHz采样率的音频数据进行自动增益控制处理,接受输入音频数据、输出音频数据和输入音频数据长度作为参数。
webRtcAgcFree:释放自动增益控制器资源。
最后,定义了一个静态方法close,但没有提供具体的实现。
综上所述,该代码段的语义是定义了一个Java类WebRtcUtils,其中包含了与名为WRtcAudio的共享库进行交互的静态方法。这些方法用于噪声抑制和自动增益控制处理音频数据。
在本实施例中,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
1041、通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据。
在本实施例中,所述通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据还包括:
10411、计算出短整型类型数组的存储空间值;
10412、根据所述存储空间值,对PCM格式音频数据进行降噪增声处理,得到处理过的PCM格式音频数据。
在本实施例中,PCM格式音频数据进行预处理可以执行以下代码:
这段代码是一个Kotlin函数codingByte,用于对音频字节数据进行编码、降噪和转换为MP3格式。
首先,通过日志输出打印了PCM长度+Length的信息。
然后,根据输入的字节数组计算出新的ShortArray的存储空间值。如果字节数组的存储空间值为奇数,则新的ShortArray大小需要加1。
接下来,使用ByteBuffer将字节数组包装成Little Endian序列,并转换为ShortBuffer,然后将其中的数据传递到shortData数组中。
调用名为WebRtcUtils的静态类的webRtcNsProcess方法,对shortData数组进行降噪处理,返回处理后的nsProcessData数组。通过日志输出打印降噪后的数组大小。
继续调用WebRtcUtils的webRtcAgcProcess方法,对nsProcessData数组进行增声处理,将结果存放在processData数组中。通过日志输出打印增声后的数组大小。
创建一个大小为3200的ByteArray作为mp3buffer。
使用WebRtcutils的encode方法,将processData数组中的音频数据进行编码,并将结果存放在mp3buffer中。同时,记录编码后的大小,并通过日志输出打印转换为MP3后的大小。
最后,返回一个ChangeBuffer对象,该对象包含了mp3buffer和encoded size两个参数。
综上所述,该代码段的语义是一个Kotlin函数,用于对音频字节数据进行编码、降噪和转换为MP3格式。它首先计算出新的ShortArray的大小,然后对PCM音频数据进行降噪和增声处理,最后将处理后的数据编码为MP3格式并返回。
此外,还执行以下代码:
/>
这段代码是一个JNI函数,用于将音频数据进行编码为MP3格式。
首先,使用extern"c"声明了一个C语言的函数。
然后,定义了一个名为Java_com_kids_ext_recording_webrtc_WebRtcutils_encode的函数,该函数是JNI与Java类WebRtcutils中encode方法的映射。
在函数参数中,JNIEnv*env代表JNI环境,jclass WebRtcUtils clazz代表Java类对象,jshortArray buffer_l_和jshortArray buffer_r_分别代表输入的左右音频通道的short数组,jint samples代表样本数量,jbyteArray mp3buf_代表输出的MP3数据的byte数组。
接下来,通过env->GetShortArrayElements方法获取到buffer_l_和buffer_r_数组的指针,并将其赋值给buffer_l和buffer_r指针变量。
然后,通过env→GetByteArrayElements方法获取到mp3buf_数组的指针,并将其赋值给mp3buf指针变量。
使用env→GetArrayLength方法获取到mp3buf_数组的长度,并将其赋值给mp3buf_size变量。
调用了名为lame_encode_buffer的函数,传入了上述获取到的参数,对音频数据进行MP3编码,并将结果存放在mp3buf中。
最后,使用env→ReleaseShortArrayElements和env→ReleaseByteArrayElements方法释放之前获取到的数组指针。
返回编码结果。
综上所述,该代码段的语义是一个JNI函数,用于将输入的左右音频通道的short数组进行MP3编码,并将结果存放在输出的byte数组中。它使用了LAME库的lame_encode_buffer函数来实现编码操作。
本发明实施例中,通过对PCM格式音频数据进行预处理,调用预置Lame库建立编码MP3的JNI接口函数;使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据,通过本方法可实现录音一秒1kb的存储,一个小时只有3M多,持续录制一个小时无闪退和内存泄漏问题,占用内存小,噪音基本去除,声音增效的效果也非常明显,提高音频质量和用户体验感。
图3是本发明实施例提供的一种音频降噪增效设备的结构示意图,该音频降噪增效设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对音频降噪增效设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在音频降噪增效设备500上执行存储介质530中的一系列指令操作。
基于音频降噪增效设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve,Mac OS X,Unix,Linux,Free BSD等等。本领域技术人员可以理解,图3示出的音频降噪增效设备结构并不构成对基于音频降噪增效设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述音频降噪增效方法的步骤。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
Claims (10)
1.一种基于WebRTC的音频降噪增效方法,其特征在于,所述音频降噪增效方法包括:
获取AudioRecord中的PCM格式音频数据;
获取WebRTC所需的降噪和增声模块库;
配置NDK版本开发工具和CMake版本跨平台自动化建构工具,将所述降噪和增声模块库导入预置的Android cpp模块中;
根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据;
调用预置Lame库建立编码MP3的JNI接口函数;
使用所述编码MP3的JNI接口函数,对所述处理过的PCM格式音频数据进行转换处理,生成MP3格式音频数据。
2.根据权利要求1所述的音频降噪增效方法,其特征在于,所述获取AudioRecord得到的PCM格式音频数据包括:
获取当前AudioRecord的录音状态,其中,所述录音状态包括录音中状态;
若为录音中状态,则创建数据流,基于所述数据流,读取所述AudioRecord录制的PCM格式音频数据。
3.根据权利要求1所述的音频降噪增效方法,其特征在于,所述配置NDK版本开发工具和CMake版本跨平台自动化建构工具包括:
创建WRtcAudio共享库,建立降噪JNI接口函数;
通过所述降噪JNI接口函数,调用WRtcAudio共享库,所述WRtcAudio共享库用于噪声抑制和自动增益控制处理PCM格式音频数据;
利用预置AS编辑器生成cpp代码,得到JNI参数配置;
将所述JNI参数配置写入cpp代码中,用于初始化WebRTC自动增益控制库。
4.根据权利要求3所述的音频降噪增效方法,其特征在于,所述将所述降噪和增声模块库导入预置的Android cpp模块中包括:
将预置CMake配置文件中的CMakeLists.txt配置导入WRtcAudio共享库。
5.根据权利要求3所述的音频降噪增效方法,其特征在于,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据包括:
初始化噪声抑制器,设置限制音量范围;
根据所述限制音量范围,对PCM格式音频数据进行噪声抑制处理,得到处理过的PCM格式音频数据;
释放噪声抑制器资源。
6.根据权利要求5所述的音频降噪增效方法,其特征在于,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
初始化自动增益控制器,读取最小音量限制、最大音量限制、所述最小音量限制对应的第一采样率、所述最大音量限制对应的第二采样率;
根据所述最小音量限制、所述最大音量限制、所述第一采样率、所述第二采样率,对PCM格式音频数据进行自动增益控制处理,得到处理过的PCM格式音频数据;
释放自动增益控制器资源。
7.根据权利要求1所述的音频降噪增效方法,其特征在于,所述根据所述Android cpp模块,对所述PCM格式音频数据进行预处理,得到处理过的PCM格式音频数据还包括:
通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据。
8.根据权利要求7所述的音频降噪增效方法,其特征在于,所述通过Kotlin函数,对PCM格式音频数据进行编码降噪处理,得到处理过的PCM格式音频数据还包括:
计算出短整型类型数组的存储空间值;
根据所述存储空间值,对PCM格式音频数据进行降噪增声处理,得到处理过的PCM格式音频数据。
9.一种音频降噪增效设备,其特征在于,所述音频降噪增效设备包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述音频降噪增效设备执行如权利要求1-8中任一项所述的音频降噪增效方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8中任一项所述的音频降噪增效方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311086416.5A CN117275497A (zh) | 2023-08-25 | 2023-08-25 | 基于WebRTC的音频降噪增效方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311086416.5A CN117275497A (zh) | 2023-08-25 | 2023-08-25 | 基于WebRTC的音频降噪增效方法、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117275497A true CN117275497A (zh) | 2023-12-22 |
Family
ID=89218589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311086416.5A Pending CN117275497A (zh) | 2023-08-25 | 2023-08-25 | 基于WebRTC的音频降噪增效方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117275497A (zh) |
-
2023
- 2023-08-25 CN CN202311086416.5A patent/CN117275497A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111506291B (zh) | 音频数据采集方法、装置、计算机设备及存储介质 | |
CN108829467B (zh) | 第三方平台对接实现方法、装置、设备及存储介质 | |
WO2022142601A1 (zh) | 应用程序的构建方法、装置及计算机设备 | |
CN111935622B (zh) | 带数字功放电子设备的调试方法、装置、设备及存储介质 | |
CN105005495A (zh) | 一种游戏引擎 | |
CN112289307A (zh) | 基于GRPC实现Kaldi语音识别服务的方法、系统及介质 | |
EP3797356B1 (en) | Code base sharing between standalone and web-based versions of an application due to the implementing of an emulated network communication channel | |
CN117275497A (zh) | 基于WebRTC的音频降噪增效方法、设备及存储介质 | |
US20050034099A1 (en) | Method of developing software programs for resource constrained mobile computing devices | |
CN117008920A (zh) | 引擎系统、请求处理方法、装置、计算机设备及存储介质 | |
CN116166457A (zh) | 数据处理方法及相关设备 | |
CN110633162A (zh) | 远程调用实现方法、装置、计算机设备及存储介质 | |
CN110795102B (zh) | 模块编译方法、装置、电子设备和计算机可读介质 | |
CN114281778A (zh) | 数据共享方法和装置 | |
CN111290746A (zh) | 对象访问方法、装置、设备及存储介质 | |
Mullanix et al. | Reference frameworks for eXpressDSP software: RF5, an extensive, high-density system | |
CN116033015B (zh) | 流量切分方法和装置 | |
Louis | Making Sense of The Audio Stack On Unix | |
Ballesteros | Structured I/O streams in Clive: a toolbox approach for wide area network computing | |
Zhuang et al. | Implementation of Android Audio Equalizer Based on FFmpeg | |
van Engelen | gSOAP 2.7. 10 User Guide | |
Krause et al. | Introduction to Node | |
CN118041976A (zh) | 一种实现WebService服务动态生成REST服务的方法及装置 | |
CN112214540A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN117459591A (zh) | 请求消息的处理方法、装置、设备及存储介质 |
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 |