欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

一、獲取源碼

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

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

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

打開(kāi)sln即可以編譯了。

二、使用示例

將wav文件編碼成acc文件,其中WavFileReader對(duì)象參考:《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 ;
	//打開(kāi)文件
	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)
			//寫(xiě)入文件
		{
			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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 初識(shí)C++?Vector模板與實(shí)例化原理

    初識(shí)C++?Vector模板與實(shí)例化原理

    這篇文章主要為大家介紹了初識(shí)C++?Vector模板與實(shí)例化原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 深入理解C++移位運(yùn)算符

    深入理解C++移位運(yùn)算符

    下面小編就為大家?guī)?lái)一篇深入理解C++移位運(yùn)算符。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • 最新評(píng)論