将采集的音频进行aac编码并保存

本文介绍了如何对采集的音频进行AAC编码,并提供了实现代码。编码后的AAC文件可用VLC播放,注意播放时可能需要使用耳机,因为音量较小。源代码及资源可在CSDN下载。
摘要由CSDN通过智能技术生成

直接上代码

#include "RtAudio.h"
#include "../libaac/faac.h"
#include "../libaac/faaccfg.h"

#include <memory>
#include <thread>
#include <mutex>
#include <queue>
#include <conio.h>

using namespace std;


const unsigned long uiSampleteRate = 44100;
const unsigned int uiChannels = 2;
const int uiBitRate = 96000;
unsigned long ulSamplesInputSize = 0;
vector<char> vHeader;
vector<char> vBytesCache;
mutex g_i_mutex;
BOOL bStop = false;
shared_ptr<unsigned char> frame = nullptr;
faacEncHandle pFaacHandle;
unsigned long ulMaxOutputSize = 0;
shared_ptr<unsigned char> pOutputBuffer = nullptr;
shared_ptr<RtAudio> pGrabEngine = make_shared<RtAudio>();//语音类
FILE* fp_out = nullptr;
FILE* fp_out1 = nullptr;

float getFrameDuration()
{
	float frameDuration = (float)ulSamplesInputSize * 1000.00 / (float)uiSampleteRate / uiChannels;
	cout <<"AAC frame duration=" << frameDuration << "sample_rate=%d" << uiSampleteRate << endl;
	return frameDuration;
	//(float)getFrameSize() * 1000.00 / ((float)m_samplerate * 16.0 / 8.0 * 2.0);
}

void onDataCaptured(char *data, int size)
{
	lock_guard<mutex> lock(g_i_mutex);
	for (int i = 0; i < size; ++i)
	{
		vBytesCache.push_back(data[i]);
	}
}

void stopCapture(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值