最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Windows上使用vs編譯fdk-aac的教程詳解

 更新時間:2023年11月08日 14:22:32   作者:CodeOfCC  
有時需要在Windows上用到fdk-aac,fdk-aac是源碼是cmake的,可以直接轉(zhuǎn)成vs項目,下面就跟隨小編一起學(xué)習(xí)一下如何在Windows上使用vs編譯fdk-aac吧

前言

有時需要在Windows上用到fdk-aac,fdk-aac是源碼是cmake的,可以直接轉(zhuǎn)成vs項目,而且在Shift Media Project中有提供vs版的源碼,我們直接下載下來就可以編譯。

一、獲取源碼

在Shift Media Project的github中就可以找到最新的fdk-aac的vs項目源碼:

https://github.com/ShiftMediaProject/fdk-aac

下載完成后直接找到SMP目錄。

打開sln即可以編譯了。

二、使用示例

將wav文件編碼成acc文件,其中WavFileReader對象參考:《C++ 讀取wav文件中的PCM數(shù)據(jù)》

#include<stdio.h>
#include"aacenc_lib.h"
#include"WavFileReader.h"
void main(int argc, char* argv[])
{
	FILE* f;
	AC::WavFileReader wr;
	HANDLE_AACENCODER encoder;
	unsigned char buffer1[2048], buffer2[2048];	
	int readBytes ;
	//打開文件
	f = fopen("./out.aac", "wb+");
	if (!f)
	{
	    printf("aac file create error!\n");
		goto end;
	}
	//wav文件聲音格式為44100 2 16
	if (!wr.OpenWavFile("test_music.wav"))
	{
	    printf("wav file open error!\n");
		goto end;
	}
	//初始化編碼器
	if (aacEncOpen(&encoder, 0, 2) != AACENC_OK) {
	    printf("encoder open error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_SAMPLERATE, 44100) != AACENC_OK) {
		printf("set samplerate error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_BITRATE, 128*1024) != AACENC_OK) {
		printf("set bitrate error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_SBR_MODE, 0) != AACENC_OK) {
		printf("set sbr_mode error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_AOT, AOT_AAC_LC) != AACENC_OK) {
		printf("set aot error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_CHANNELMODE, MODE_2) != AACENC_OK) {
		printf("set channelmode error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_CHANNELORDER, 1) != AACENC_OK) {
		printf("set channelorder error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_BITRATEMODE, 0) != AACENC_OK) {
		printf("set bitratemode error!\n");
		goto end;
	}
	if (aacEncoder_SetParam(encoder, AACENC_TRANSMUX, 2) != AACENC_OK) {
		printf("set transmux error!\n");
		goto end;
	}
	do {
	    //讀取wav的pcm數(shù)據(jù)
		readBytes=	wr.ReadData(buffer1,2048);
		AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };
		AACENC_InArgs in_args = { 0 ,0 };
		AACENC_OutArgs out_args = { 0 };
		int in_identifier = IN_AUDIO_DATA;
		int in_elem_size =2;
		void* in_ptr = buffer1;
		int out_identifier = OUT_BITSTREAM_DATA;
		int out_size = 2048;
		int out_elem_size = 1;
		void* out_ptr = buffer2;
		in_args.numInSamples = readBytes / 2;  			
		in_buf.numBufs = 1;
		in_buf.bufs = (void**)&in_ptr;
		in_buf.bufferIdentifiers = &in_identifier;
		in_buf.bufSizes = &readBytes;
		in_buf.bufElSizes = &in_elem_size;
		out_buf.numBufs = 1;
		out_buf.bufs = (void**)&out_ptr;
		out_buf.bufferIdentifiers = &out_identifier;
		out_buf.bufSizes = &out_size;
		out_buf.bufElSizes = &out_elem_size;
		//編碼
		if ((aacEncEncode((encoder), &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) {
			printf("encode error!\n");
			goto end;
		}
	
		if (out_args.numOutBytes > 0)
			//寫入文件
		{
			fwrite(buffer2, 1, out_args.numOutBytes, f);
		}
	}
	while (readBytes > 0);
end:
	if(encoder)
	aacEncClose((HANDLE_AACENCODER*)(&encoder));
	if(f)
	fclose(f);
}

到此這篇關(guān)于Windows上使用vs編譯fdk-aac的教程詳解的文章就介紹到這了,更多相關(guān)Windows編譯fdk-aac內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 貪吃蛇C語言代碼實現(xiàn)(難度可選)

    貪吃蛇C語言代碼實現(xiàn)(難度可選)

    這篇文章主要為大家詳細(xì)介紹了貪吃蛇C語言代碼實現(xiàn),游戲難度可供選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 關(guān)于C語言函數(shù)strstr()的分析以及實現(xiàn)

    關(guān)于C語言函數(shù)strstr()的分析以及實現(xiàn)

    以下是對C語言中strstr()函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C語言中sizeof函數(shù)的基本使用總結(jié)

    C語言中sizeof函數(shù)的基本使用總結(jié)

    這篇文章主要給大家介紹了關(guān)于C語言中sizeof函數(shù)的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • C++實現(xiàn)LeetCode(155.最小棧)

    C++實現(xiàn)LeetCode(155.最小棧)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(155.最小棧),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    這篇文章主要介紹了C語言中指針 int *p=0;和int *p;*p=0;和”&“有什么關(guān)系和區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C語言手把手教你實現(xiàn)貪吃蛇AI(上)

    C語言手把手教你實現(xiàn)貪吃蛇AI(上)

    這篇文章主要介紹了C語言手把手教你實現(xiàn)貪吃蛇AI,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++設(shè)計模式之訪問者模式

    C++設(shè)計模式之訪問者模式

    這篇文章主要介紹了C++設(shè)計模式之訪問者模式,本文講解了什么是訪問者模式、訪問者模式的UML類圖、訪問者模式的實現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++ 使用VS Code運行程序時終端輸出中文亂碼的解決辦法

    C++ 使用VS Code運行程序時終端輸出中文亂碼的解決辦法

    這篇文章主要介紹了C++ 使用VS Code運行程序時終端輸出中文亂碼的解決辦法 ,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 深入理解C語言中指針常量和常量指針

    深入理解C語言中指針常量和常量指針

    本文介紹了C語言中的指針常量和常量指針,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • c語言階乘之和問題示例詳解

    c語言階乘之和問題示例詳解

    這篇文章主要給大家介紹了關(guān)于c語言階乘之和問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

崇文区| 衡阳市| 阜新| 沙洋县| 集安市| 南城县| 沐川县| 正阳县| 嫩江县| 襄汾县| 安仁县| 北川| 云浮市| 镶黄旗| 汕头市| 成安县| 普兰县| 铁力市| 寿光市| 咸宁市| 黄龙县| 大余县| 信阳市| 马山县| 蕉岭县| 保定市| 定兴县| 黔西| 曲周县| 焉耆| 花垣县| 六盘水市| 西城区| 临泽县| 维西| 北川| 思茅市| 木里| 自治县| 长武县| 临澧县|