| 
 | 
 
盖莫音频引擎1.2.8进阶(1):音频录入 
刚做完了盖莫音频引擎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系列音乐文件的支持了 
(不过听人说这个解码似乎不太好处理) 
 
到时候欢迎下载啊 |   
 
 
 
 |