Cocos2d-x IOS录音
cocos2d吧
全部回复
仅看楼主
level 7
liuxijob 楼主
Cocos2d-x IOS平台录音可以考虑C++调用OC混编来实现。
平台:黑苹果OS X 10.8.2 (12C60)
工具 : Xcode4.6.3 破解版
这里IOS录音主要用到了AVFoundation框架
1.首先创建一个OC类IosAudioPlay,用于录音
IosAudioPlay.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface IosAudioPlay : UIViewController <AVAudioPlayerDelegate>
{
NSURL *recordedFile;
AVAudioPlayer *player;
AVAudioRecorder *recorder;
}
-(void)playAudio;
-(void)AudioRecording;
@end
IosAudioPlay.mm
#import "IosAudioPlay.h"
@implementation IosAudioPlay
extern BOOL isRecording;
-(void)playAudio
{
if([player isPlaying])
{
NSLog(@"停止录音播放");
[player pause];
}
else
{
NSLog(@"开始录音播放");
[player play];
}
}
-(void)AudioRecording
{
recordedFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"RecordedFile"]];
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *sessionError;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
if(session == nil)
NSLog(@"创建session: %@失败!", [sessionError description]);
else
[session setActive:YES error:nil];
if(!isRecording)
{
isRecording = YES;
NSLog(@"正在录音");
recorder = [[AVAudioRecorder alloc] initWithURL:recordedFile settings:nil error:nil];
[recorder prepareToRecord];
[recorder record];
player = nil;
}
else
{
isRecording = NO;
NSLog(@"停止录音");
NSError *playerError;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedFile error:&playerError];
if (player == nil)
{
NSLog(@"创建player: %@失败!", [playerError description]);
}
player.delegate = self;
[recorder stop];
recorder = nil;
}
}
@end
2.添加HelloWorld混编类
HelloWorld.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene();
void AudioPlay(CCObject* pSender);
void AudioRecord(CCObject* pSender);
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorld.mm
#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "IosAudioPlay.h"
using namespace cocos2d;
using namespace CocosDenshion;
IosAudioPlay *iosApp;
//添加一个全局变量控制录音状态
bool isRecording;
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
isRecording=NO;
// 初始化对象
iosApp =[[IosAudioPlay alloc] init];
CCMenuItemFont * fontItem =CCMenuItemFont::create("AudioPlay", this, menu_selector(HelloWorld::AudioPlay));
fontItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 280, 20) );
CCMenuItemFont * pCloseItem =CCMenuItemFont::create("AudioRecord", this, menu_selector(HelloWorld::AudioRecord));
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 120, 20) );
CCMenu* pMenu = CCMenu::create(fontItem, pCloseItem, NULL);
pMenu->setPosition(CCPointZero );
this->addChild(pMenu, 1);
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition( ccp(size.width / 2, size.height - 20) );
this->addChild(pLabel, 1);
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
pSprite->setPosition( ccp(size.width/2, size.height/2) );
this->addChild(pSprite, 0);
return true;
}
void HelloWorld::AudioRecord(CCObject* pSender)
{
[iosApp AudioRecording];
}
void HelloWorld::AudioPlay(CCObject* pSender)
{
[iosApp playAudio];
}
void HelloWorld::onEnter()
{
CCLayer::onEnter();
}
void HelloWorld:: onExit()
{
CCLayer::onExit();
if (iosApp) {
[iosApp release];
iosApp =NULL;
}
}
2014年07月25日 01点07分 1
1