国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RK3568平臺(tái) TinyAlsa集成第三方音頻算法

這篇具有很好參考價(jià)值的文章主要介紹了RK3568平臺(tái) TinyAlsa集成第三方音頻算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.tinyalsa介紹

ALSA(Advanced Linux Sound Architecture)是一個(gè)開(kāi)源項(xiàng)目,涵蓋了用戶(hù)空間和內(nèi)核空間對(duì)音頻設(shè)備的操作接口,通過(guò)應(yīng)用層使用alsalib可以實(shí)現(xiàn)對(duì)音頻設(shè)備的控制

? ? ? ? TinyAlsa是android推出的一個(gè)精簡(jiǎn)的ALSA庫(kù),當(dāng)然alsa-driver這塊沒(méi)有改動(dòng)

? ? ? ? alsa包含:1、內(nèi)核 alsa-driver 2.用戶(hù)空間 alsa-lib(android使用的TinyAlsa)
RK3568平臺(tái) TinyAlsa集成第三方音頻算法,瑞芯微,音視頻

二.使用tinyplay測(cè)試音頻

RK3568平臺(tái) TinyAlsa集成第三方音頻算法,瑞芯微,音視頻

tinycap /data/test.wav -D pdm聲卡號(hào)   -d 0 -c 10 -r 48000 -b 16 -p 1024 -n 4    //D 后面接pdm聲卡的聲卡號(hào)

三.在TinyAlsa集成第三方音頻降

tinyalsa目錄:

hardware\rockchip\audio\tinyalsa_hal\

第三方算法供應(yīng)商提供的音頻降噪算法so庫(kù):

RK3568平臺(tái) TinyAlsa集成第三方音頻算法,瑞芯微,音視頻

修改Android:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libElevocMeetingVoice
+LOCAL_SRC_FILES_32 := lib_out_honghe/armeabi-v7a/libElevocMeetingVoice.so
+LOCAL_SRC_FILES_64 := lib_out_honghe/arm64-v8a/libElevocMeetingVoice.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_MODULE := audio.primary.$(TARGET_BOARD_HARDWARE)
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_SRC_FILES := \
	bitstream/audio_iec958.c \
	bitstream/audio_bitstream.c \
	bitstream/audio_bitstream_manager.c \
	audio_hw.c \
	alsa_route.c \
	alsa_mixer.c \
	voice_preprocess.c \
	audio_hw_hdmi.c \
	out_honghe.c \
	denoise/rkdenoise.c

LOCAL_C_INCLUDES += \
	$(call include-path-for, audio-utils) \
	$(call include-path-for, audio-route) \
	$(call include-path-for, speex)

LOCAL_CFLAGS += -Wno-error

+LOCAL_SHARED_LIBRARIES := liblog libcutils libaudioutils libaudioroute +libhardware_legacy libspeexresampler libElevocMeetingVoice

#API 31 -> Android 12.0, Android 12.0 link libtinyalsa_iec958
ifneq (1, $(strip $(shell expr $(PLATFORM_SDK_VERSION) \< 31)))
LOCAL_SHARED_LIBRARIES += libtinyalsa_iec958
else
LOCAL_SHARED_LIBRARIES += libtinyalsa
endif

ifeq ($(strip $(BOARD_SUPPORT_MULTIAUDIO)), true)
LOCAL_CFLAGS += -DSUPPORT_MULTIAUDIO
endif

LOCAL_STATIC_LIBRARIES := libspeex
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_CFLAGS += -Wno-error
LOCAL_SRC_FILES:= amix.c alsa_mixer.c
LOCAL_MODULE:= amix
LOCAL_PROPRIETARY_MODULE := true
LOCAL_SHARED_LIBRARIES := liblog libc libcutils
include $(BUILD_EXECUTABLE)

這樣降噪音頻算法so就集成在Android里面了。

一般算法供應(yīng)商會(huì)提供調(diào)用的算法的demo供我們集成在tinyalsa里面。

四.使用算法供應(yīng)商提供的demo測(cè)試音頻

main.cpp:

//?#include <stdio.h>
#include <string>
#include <math.h>
#include <vector>
#include <sstream>
#include <fstream>
#include <algorithm>
#include <memory>
#include <iostream>
#include <time.h>
//#include "wav_io.h"
#include "ElevocAIOTProcess.h"

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <sys/time.h>
#endif
#include <chrono>
using namespace std;
#define ELEV_FRMAE_SIZE 256
#define ELEV_MIC_NUM 8

#define ELEV_REF_NUM 2
#define ELEV_ALL_NUM (ELEV_MIC_NUM+ELEV_REF_NUM)

static const char* fname_mdl = "./model-1477000--11.475842399597168_export_convert_mdl_q16.EM2";
void test_short(){
	ELEVOC_AIOT_PROCESS* p = elevoc_aiot_init(fname_mdl);

	string record_filePath = "./";
	string input_path = record_filePath + "in.pcm";// "testg12_6ch_230815.raw";// "testg12_230815.raw";//  "testg12.raw"; //"testg12.raw";

	FILE* ifp = fopen(input_path.c_str(), "rb");
	size_t input_size = 0;
	if (ifp != NULL) {
		if (!fseek(ifp, 0, SEEK_END)) {
			input_size = ftell(ifp);
			fseek(ifp, 0, SEEK_SET);
		}
	}
	else {
		fprintf(stderr, "file open error\n");
	}
	printf("samplers : %zd\n", input_size / sizeof(float));

	string outPath = record_filePath + "out.pcm";


	FILE* pFout = fopen(outPath.c_str(), "wb");

	size_t once_read = ELEV_FRMAE_SIZE * ELEV_ALL_NUM;
	size_t left_size = input_size / sizeof(int16_t);
	size_t readSize = 0;

	int16_t readBuffer[ELEV_FRMAE_SIZE * ELEV_ALL_NUM];
	int16_t outputBuffer[ELEV_FRMAE_SIZE];
	int16_t output[ELEV_FRMAE_SIZE];

	printf("start ...\n");
	clock_t start, finish;
	double total_time;
	int frm = 0;
#ifdef COUNT_ELAPSE
    double elapseSum = 0;
    double maxElapse = 0;
    double minElapse = 100;
#endif
	while (true) {
		frm++;
		/*if (frm>=63*114)
		{
		printf("debug\n");
		}*/
		readSize = left_size < once_read ? left_size : once_read;
		if (readSize < once_read) {
			break;
		}
		fread(readBuffer, sizeof(int16_t), once_read, ifp);

		//start = clock();
#ifdef COUNT_ELAPSE
        auto startTime = std::chrono::system_clock::now();
#endif
        printf("guyilian elevoc_aiot_process_short start ...\n");
		elevoc_aiot_process_short(p, readBuffer, once_read* sizeof(short), outputBuffer);
		printf("guyilian elevoc_aiot_process_short end ...\n");

#ifdef COUNT_ELAPSE
        auto endTime = std::chrono::system_clock::now();
        std::chrono::duration<double, std::milli> elapse = endTime - startTime;
        double elapseDouble = elapse.count();
        if (elapseDouble > maxElapse) {
            maxElapse = elapseDouble;
        }
        if (minElapse > elapseDouble) {
            minElapse = elapseDouble;
        }
        elapseSum += elapseDouble;
#endif
		//finish = clock();
		//long total_time = (finish - start);
		//printf("time %ld msec \n", total_time);
		for (int i = 0; i < ELEV_FRMAE_SIZE; i++)
		{
			output[i] = (int16_t)(outputBuffer[i] * 1);
		}
		fwrite(output, sizeof(int16_t), ELEV_FRMAE_SIZE, pFout);
		left_size -= readSize;
	}
#ifdef COUNT_ELAPSE
    std::printf("each frame process avg = cost %f ms ,[min = %f][max = %f] \n",
                elapseSum / (double)frm, minElapse, maxElapse);
#endif
	printf("end ...\n");

	fclose(pFout);
}


int main() {
	//test();
	test_short();
	system("PAUSE");
	return 0;
}

Android:?



LOCAL_PATH := $(call my-dir)

LOCAL_C_INCLUDES += \
    elemain/ElevocAIOTProcess.h

include $(CLEAR_VARS)
LOCAL_CFLAGS += -Wno-error
LOCAL_SRC_FILES := \
	main.cpp
LOCAL_MODULE:= elemain
LOCAL_PROPRIETARY_MODULE := true
LOCAL_SHARED_LIBRARIES := liblog libc libcutils libElevocMeetingVoice
include $(BUILD_EXECUTABLE)

這樣測(cè)試demo會(huì)被編譯成可執(zhí)行文件elemain。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-818732.html

到了這里,關(guān)于RK3568平臺(tái) TinyAlsa集成第三方音頻算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot集成常用第三方框架-ES

    SpringBoot集成常用第三方框架-ES

    作者主頁(yè):編程指南針 作者簡(jiǎn)介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專(zhuān)家 、CSDN內(nèi)容合伙人、掘金特邀作者、阿里云博客專(zhuān)家、51CTO特邀作者、多年架構(gòu)師設(shè)計(jì)經(jīng)驗(yàn)、騰訊課堂常駐講師 主要內(nèi)容:Java項(xiàng)目、Python項(xiàng)目、前端項(xiàng)目、人工智能與大數(shù)據(jù)、簡(jiǎn)歷模板、學(xué)習(xí)資料、面試題庫(kù)

    2024年02月03日
    瀏覽(96)
  • 第三方平臺(tái)創(chuàng)建小程序步驟

    第三方平臺(tái)創(chuàng)建小程序步驟

    創(chuàng)建小程序 第一步: 登錄微信開(kāi)放平臺(tái) https://open.weixin.qq.com/ 第二步: 找到圖片對(duì)應(yīng)的位置,復(fù)制 登錄授權(quán)的發(fā)起頁(yè)域名 第三步: 登錄,如果不記得賬號(hào)密碼的話(huà)在開(kāi)發(fā)平臺(tái)的通知中心里面有消息提示中有默認(rèn)的賬號(hào)和密碼 第四步: 選擇開(kāi)發(fā)輔助中的開(kāi)發(fā)調(diào)試,獲取 component_acces

    2024年02月09日
    瀏覽(41)
  • 微信開(kāi)放平臺(tái)之第三方平臺(tái)開(kāi)發(fā),從哪里入手?

    微信開(kāi)放平臺(tái)之第三方平臺(tái)開(kāi)發(fā),從哪里入手?

    大家好,我是悟空碼字 疫情之下,最近有不少兄弟沒(méi)有挺進(jìn)決賽,半途成了小羊人,可謂是出師未捷身先死。話(huà)說(shuō)回來(lái),不管怎么樣,盡量保護(hù)好自己,能越晚變羊越好。 開(kāi)始說(shuō)正事,不管是自己在創(chuàng)業(yè)或?qū)W習(xí)也好,還是公司的開(kāi)發(fā)任務(wù)也罷,有很多小伙伴在開(kāi)發(fā)多小程序

    2024年02月10日
    瀏覽(20)
  • 微信第三方平臺(tái)對(duì)接小程序發(fā)版

    微信第三方平臺(tái)對(duì)接小程序發(fā)版

    微信第三方平臺(tái)是商家把公眾號(hào)或小程序代交給服務(wù)商來(lái)管理, 當(dāng)商家把小程序授權(quán)給第三方平臺(tái)后,同時(shí)授權(quán)小程序開(kāi)發(fā)與數(shù)據(jù)分析,小程序后臺(tái)就無(wú)法發(fā)版 ,必須開(kāi)發(fā)人員調(diào)小程序的api才能實(shí)現(xiàn)發(fā)版;如不需要調(diào)第三方平臺(tái)接口的方式發(fā)布,取消 小程序開(kāi)發(fā)與數(shù)據(jù)分析

    2024年02月16日
    瀏覽(25)
  • Xcode通過(guò)Add package自動(dòng)集成第三方SDK問(wèn)題匯總

    Xcode通過(guò)Add package自動(dòng)集成第三方SDK問(wèn)題匯總

    問(wèn)題1: ?解決方法:這個(gè)問(wèn)題可能是因?yàn)?Adjust 或者 Facebook 的庫(kù)當(dāng)中依賴(lài)的某些類(lèi)庫(kù)的倉(cāng)庫(kù)地址是 git:// 協(xié)議,通過(guò)這種協(xié)議與 GitHub 通訊時(shí)會(huì)使用到你的 SSH 配置,你電腦上相關(guān)的 ssh key 使用了 GitHub 不再支持的格式,請(qǐng)參考提示中的網(wǎng)址重新生成相關(guān)的 SSH key:https://githu

    2024年02月13日
    瀏覽(90)
  • 京東數(shù)據(jù)分析工具推薦(京東第三方數(shù)據(jù)平臺(tái))

    京東數(shù)據(jù)分析工具推薦(京東第三方數(shù)據(jù)平臺(tái))

    京東平臺(tái)的店鋪眾多,同行數(shù)不勝數(shù)。作為商家,如果連自己競(jìng)爭(zhēng)對(duì)手的情況都不知道的話(huà),很難在這個(gè)平臺(tái)存活下去。 那么,這次鯨參謀就來(lái)重點(diǎn)說(shuō)一下我們的京東數(shù)據(jù)分析工具里的“競(jìng)品分析”功能。 競(jìng)品分析,主要是對(duì)京東店鋪運(yùn)營(yíng)期間競(jìng)爭(zhēng)對(duì)手的市場(chǎng)經(jīng)營(yíng)狀況與策略

    2024年02月04日
    瀏覽(46)
  • ??低昳SC 平臺(tái)第三方對(duì)接門(mén)禁權(quán)限分享

    ??低昳SC 平臺(tái)第三方對(duì)接門(mén)禁權(quán)限分享

    一、 場(chǎng)景描述 iSC 平臺(tái)的門(mén)禁產(chǎn)品及功能在項(xiàng)目應(yīng)用廣泛,第三方對(duì)接門(mén)禁權(quán)限功能的需求也越來(lái)也 多,由于門(mén)禁權(quán)限下發(fā)需要涉及到往設(shè)備上下發(fā),第三方接口調(diào)用一旦不正確,不合理的接 口調(diào)用很容易給我們平臺(tái)造成額外的性能消耗,甚至導(dǎo)致我們平臺(tái)掛掉,特此梳理

    2024年02月02日
    瀏覽(29)
  • Flink保姆級(jí)教程,超詳細(xì),教學(xué)集成多個(gè)第三方工具(從入門(mén)到精通)

    Flink保姆級(jí)教程,超詳細(xì),教學(xué)集成多個(gè)第三方工具(從入門(mén)到精通)

    目錄 一.Flink簡(jiǎn)介 Flink發(fā)展歷程 Flink特性 二、Flink 部署及啟動(dòng) 1.?本地執(zhí)行 (Local Execution) 2.?Standalone 集群部署 2.1 會(huì)話(huà)模式(Session Mode) 2.2 單作業(yè)模式(Per-Job Mode)和應(yīng)用模式(Application Mode) 3.?資源管理器集成部署 三.Flink架構(gòu)和執(zhí)行原理 Flink架構(gòu) 任務(wù)槽和資源 Flink資源管

    2024年04月29日
    瀏覽(56)
  • Android基于JNA集成調(diào)用第三方C/C++的so庫(kù)

    Android基于JNA集成調(diào)用第三方C/C++的so庫(kù)

    Android基于JNA集成調(diào)用第三方C/C++的so庫(kù) (1)引入JNA。 基于JNA開(kāi)源項(xiàng)目,JNA對(duì)Android NDK的封裝,簡(jiǎn)化Android層JNI集成調(diào)用C/C++的so庫(kù)。 GitHub - java-native-access/jna: Java Native Access Java Native Access. Contribute to java-native-access/jna development by creating an account on GitHub. https://github.com/java-native-ac

    2024年02月02日
    瀏覽(24)
  • 基于Docker部署OpenLDAP,同時(shí)集成第三方系統(tǒng)(GitLab、JIRA、Nexus、Harbor)

    基于Docker部署OpenLDAP,同時(shí)集成第三方系統(tǒng)(GitLab、JIRA、Nexus、Harbor)

    這里可以了解什么是LDAP,為什么要用它 下面通過(guò)docker-compose一鍵部署openLDAP、phpldapadmin和self-service-password。(通過(guò)K8s部署的方式大同小異) 準(zhǔn)備open-ldap的docker-compose文件 執(zhí)行 docker-compose up 命令,就可以一鍵部署openldap、phpldapadmin(他就是openldap的操作頁(yè)面)、self-service-passw

    2023年04月08日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包