• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿

            剛做完了蓋莫音頻引擎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í)候歡迎下載啊
            posted on 2010-04-24 18:18 ccsdu2009 閱讀(1238) 評(píng)論(2)  編輯 收藏 引用 所屬分類: Game引擎
            Comments
             
            韩国无遮挡三级久久| 久久精品国产久精国产思思| 久久久久国产亚洲AV麻豆| 伊人久久综合热线大杳蕉下载| 日韩精品久久久久久| 国产精品一区二区久久精品涩爱| 无码人妻久久一区二区三区 | 99久久精品费精品国产 | 狠狠色丁香婷婷久久综合| 亚洲精品无码久久久久久| 久久精品国产影库免费看| 久久中文精品无码中文字幕| 中文国产成人精品久久不卡| 久久久久四虎国产精品| 亚洲精品午夜国产VA久久成人 | 久久人妻少妇嫩草AV无码蜜桃 | 久久精品国产亚洲一区二区| 中文字幕久久欲求不满| 色综合久久中文字幕无码| 久久97久久97精品免视看| 久久丫精品国产亚洲av不卡| 狠狠色伊人久久精品综合网| 久久人妻AV中文字幕| 久久精品国产福利国产琪琪| 91久久婷婷国产综合精品青草 | 波多野结衣久久精品| 亚洲天堂久久精品| av无码久久久久不卡免费网站| 久久亚洲sm情趣捆绑调教| 国产成人久久777777| 久久精品成人免费看| 国产亚洲欧美精品久久久| 久久天堂AV综合合色蜜桃网| 久久久这里有精品| 久久99亚洲综合精品首页| 成人久久综合网| 韩国免费A级毛片久久| 久久天天躁狠狠躁夜夜躁2O2O| 国产成人久久精品一区二区三区| 亚洲欧美久久久久9999| 亚洲国产日韩欧美久久|