剛做完了蓋莫音頻引擎1.2.8的音頻錄入功能
這個(gè)比較簡(jiǎn)單
就是把聽(tīng)到的音頻保存為一定格式的音頻文件(當(dāng)前只設(shè)計(jì)了保存為wav文件)
接口很簡(jiǎn)單
如下:
////////////////////////////////////////////////////////////
/// 定義音頻錄入類接口
////////////////////////////////////////////////////////////
class AudioCapture : public Object
{
public:
/////////////////////////////////////////////////////////
//! 構(gòu)造,析構(gòu)音頻錄入
/////////////////////////////////////////////////////////
AudioCapture();
virtual ~AudioCapture();
/////////////////////////////////////////////////////////
//! 捕獲,停止捕獲音頻數(shù)據(jù)
/////////////////////////////////////////////////////////
virtual void CaptureData() = 0;
virtual void StopCapture() = 0;
DECLARE_OBJECT(AudioCapture)
};
只有2個(gè)函數(shù)
一個(gè)是音頻數(shù)據(jù)分批錄入
一個(gè)就是停止錄入音頻數(shù)據(jù)
那么該指針從哪里獲取呢?
當(dāng)然是AudioDevice了
如下(這是蓋莫音頻引擎的中樞)
/////////////////////////////////////////////////////////
//! 定義音頻設(shè)備基類
/////////////////////////////////////////////////////////
class AudioDevice : public Object
{
public:
/////////////////////////////////////////////////////////
//! 初始化,卸載音頻設(shè)備
/////////////////////////////////////////////////////////
virtual bool Init(const engine_string &devicename,
uint16 eax_effect_num,
uint output_freq) = 0;
virtual bool Deinit() = 0;
/////////////////////////////////////////////////////////
//! 獲取音頻引擎版本號(hào)
/////////////////////////////////////////////////////////
virtual const char* GetVerson() const = 0;
/////////////////////////////////////////////////////////
//! 獲取音頻引擎作者
/////////////////////////////////////////////////////////
virtual const char* GetMaker() const = 0;
/////////////////////////////////////////////////////////
//! 查詢音頻設(shè)備是否支持指定格式的音頻文件
/////////////////////////////////////////////////////////
virtual bool IsSupport(const AudioFileType& type) = 0;
/////////////////////////////////////////////////////////
//! 抓取音頻音源指針(最大可獲取255個(gè)音源)
/////////////////////////////////////////////////////////
virtual AudioSource* GetAudioSource() = 0;
/////////////////////////////////////////////////////////
//! 獲取聽(tīng)者指針
/////////////////////////////////////////////////////////
virtual AudioListener* GetAudioListener() = 0;
/////////////////////////////////////////////////////////
//! 獲取音頻捕獲設(shè)備指針(參數(shù)為音頻名字)(當(dāng)前僅僅支持wav格式)(全局唯一)
/////////////////////////////////////////////////////////
virtual RefPtr<AudioCapture> GetAudioCapture(const engine_string& name = "capture")const = 0;
/////////////////////////////////////////////////////////
//! 獲取音頻設(shè)備列表個(gè)數(shù)
/////////////////////////////////////////////////////////
virtual uint16 GetAudioDeviceNumber() = 0;
virtual engine_string GetDeviceByIndex(uint8 index) = 0;
/////////////////////////////////////////////////////////
//! 獲取默認(rèn)設(shè)備名
/////////////////////////////////////////////////////////
virtual engine_string GetDefaultDeviceName()const = 0;
DECLARE_OBJECT(AudioDevice)
};
那么如何使用蓋莫音頻引擎錄入音頻呢?
如下:
/*!==========================================================================
*
* 蓋莫游戲引擎(GaiMo Game Engine)
*
* 版權(quán)所有 (C) 2009-2009 成都蓋莫軟件技術(shù)工作室 保留所有權(quán)利
* Copyright (C) 成都蓋莫軟件技術(shù)工作室. All Rights Reserved.
*
* 了解更多情況,請(qǐng)?jiān)L問(wèn) http://www.gaimo.net
****************************************************************************/
#include <GEngine/Gaimo.hpp>
//! 使用蓋莫游戲引擎內(nèi)核命名空間
using namespace core;
using namespace std;
int Main()
{
RefPtr<Device> device = InitDevice("音頻捕獲");
//! 獲取音頻設(shè)備指針
RefPtr<core::AudioDevice> audiodevice = device->GetAudioDevice();
//! 獲取音頻設(shè)備個(gè)數(shù)
uint16 number = audiodevice->GetAudioDeviceNumber();
for(int i = 0; i < number ; i++)
{
std::cout<<audiodevice->GetDeviceByIndex(i)<<std::endl;
}
//! 初始化音頻設(shè)備
engine_string audiodeviceinde = audiodevice->GetDeviceByIndex(0);
cout<<"初始化音頻設(shè)備"<<audiodevice->Init(audiodeviceinde,4,0)<<endl;
//! 獲取音頻錄入指針
RefPtr<AudioCapture> audiocapture = audiodevice->GetAudioCapture("capture");
//! 獲取錄制開(kāi)始時(shí)間
float time = device->GetTime();
BEGIN_LOOP(device)
//! 錄制時(shí)間10秒
if(device->GetTime() > time +10)
break;
audiocapture->CaptureData();
END_LOOP(device)
audiocapture->StopCapture();
return EXIT_SUCCESS;
}
步驟就是從設(shè)備指針獲取音頻管理器指針
從音頻管理器指針獲取音頻錄入指針
然后在錄入過(guò)程中調(diào)用數(shù)據(jù)錄入函數(shù)
停止錄入的時(shí)候調(diào)用StopAudioCapture即可!
當(dāng)然這是基于蓋莫游戲引擎的音頻錄入
過(guò)些天我要發(fā)布一個(gè)單獨(dú)的蓋莫音頻引擎sdk(第三次發(fā)布)
題外話
在蓋莫游戲引擎2.1.2中音頻部分需要增加的功能就是對(duì)midi,mid.mod系列音樂(lè)文件的支持了
(不過(guò)聽(tīng)人說(shuō)這個(gè)解碼似乎不太好處理)
到時(shí)候歡迎下載啊