刚做完了盖莫音频引擎1.2.8的音频录入功能
这个比较简单
就是把听到的音频保存为一定格式的音频文件(当前只设计了保存为wav文件)
接口很简单
如下:
////////////////////////////////////////////////////////////
/// 定义音频录入类接口
////////////////////////////////////////////////////////////
class AudioCapture : public Object
{
public:
/////////////////////////////////////////////////////////
//! 构造,析构音频录入
/////////////////////////////////////////////////////////
AudioCapture();
virtual ~AudioCapture();
/////////////////////////////////////////////////////////
//! 捕获,停止捕获音频数据
/////////////////////////////////////////////////////////
virtual void CaptureData() = 0;
virtual void StopCapture() = 0;
DECLARE_OBJECT(AudioCapture)
};
只有2个函数
一个是音频数据分批录入
一个就是停止录入音频数据
那么该指针从哪里获取呢?
当然是AudioDevice了
如下(这是盖莫音频引擎的中枢)
/////////////////////////////////////////////////////////
//! 定义音频设备基类
/////////////////////////////////////////////////////////
class AudioDevice : public Object
{
public:
/////////////////////////////////////////////////////////
//! 初始化,卸载音频设备
/////////////////////////////////////////////////////////
virtual bool Init(const engine_string &devicename,
uint16 eax_effect_num,
uint output_freq) = 0;
virtual bool Deinit() = 0;
/////////////////////////////////////////////////////////
//! 获取音频引擎版本号
/////////////////////////////////////////////////////////
virtual const char* GetVerson() const = 0;
/////////////////////////////////////////////////////////
//! 获取音频引擎作者
/////////////////////////////////////////////////////////
virtual const char* GetMaker() const = 0;
/////////////////////////////////////////////////////////
//! 查询音频设备是否支持指定格式的音频文件
/////////////////////////////////////////////////////////
virtual bool IsSupport(const AudioFileType& type) = 0;
/////////////////////////////////////////////////////////
//! 抓取音频音源指针(最大可获取255个音源)
/////////////////////////////////////////////////////////
virtual AudioSource* GetAudioSource() = 0;
/////////////////////////////////////////////////////////
//! 获取听者指针
/////////////////////////////////////////////////////////
virtual AudioListener* GetAudioListener() = 0;
/////////////////////////////////////////////////////////
//! 获取音频捕获设备指针(参数为音频名字)(当前仅仅支持wav格式)(全局唯一)
/////////////////////////////////////////////////////////
virtual RefPtr<AudioCapture> GetAudioCapture(const engine_string& name = "capture")const = 0;
/////////////////////////////////////////////////////////
//! 获取音频设备列表个数
/////////////////////////////////////////////////////////
virtual uint16 GetAudioDeviceNumber() = 0;
virtual engine_string GetDeviceByIndex(uint8 index) = 0;
/////////////////////////////////////////////////////////
//! 获取默认设备名
/////////////////////////////////////////////////////////
virtual engine_string GetDefaultDeviceName()const = 0;
DECLARE_OBJECT(AudioDevice)
};
那么如何使用盖莫音频引擎录入音频呢?
如下:
/*!==========================================================================
*
* 盖莫游戏引擎(GaiMo Game Engine)
*
* 版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
* Copyright (C) 成都盖莫软件技术工作室. All Rights Reserved.
*
* 了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
#include <GEngine/Gaimo.hpp>
//! 使用盖莫游戏引擎内核命名空间
using namespace core;
using namespace std;
int Main()
{
RefPtr<Device> device = InitDevice("音频捕获");
//! 获取音频设备指针
RefPtr<core::AudioDevice> audiodevice = device->GetAudioDevice();
//! 获取音频设备个数
uint16 number = audiodevice->GetAudioDeviceNumber();
for(int i = 0; i < number ; i++)
{
std::cout<<audiodevice->GetDeviceByIndex(i)<<std::endl;
}
//! 初始化音频设备
engine_string audiodeviceinde = audiodevice->GetDeviceByIndex(0);
cout<<"初始化音频设备"<<audiodevice->Init(audiodeviceinde,4,0)<<endl;
//! 获取音频录入指针
RefPtr<AudioCapture> audiocapture = audiodevice->GetAudioCapture("capture");
//! 获取录制开始时间
float time = device->GetTime();
BEGIN_LOOP(device)
//! 录制时间10秒
if(device->GetTime() > time +10)
break;
audiocapture->CaptureData();
END_LOOP(device)
audiocapture->StopCapture();
return EXIT_SUCCESS;
}
步骤就是从设备指针获取音频管理器指针
从音频管理器指针获取音频录入指针
然后在录入过程中调用数据录入函数
停止录入的时候调用StopAudioCapture即可!
当然这是基于盖莫游戏引擎的音频录入
过些天我要发布一个单独的盖莫音频引擎sdk(第三次发布)
题外话
在盖莫游戏引擎2.1.2中音频部分需要增加的功能就是对midi,mid.mod系列音乐文件的支持了
(不过听人说这个解码似乎不太好处理)
到时候欢迎下载啊