objective-c与cocos2d-x的互相调用实现获取麦克风音量大小
来源:互联网 发布:cdkey软件 编辑:程序博客网 时间:2024/06/04 18:06
为了在游戏中增加一些效果,需要实施的获取ios设备的麦克风音量,为此,在网上找了好多资料,终是未能满足要求,最后在这位朋友扬名的博客上找到了对应的实例,同时也感谢扬名的分享,这里给出链接http://www.cnblogs.com/pure/archive/2013/03/10/2933440.html,望各位朋友共同学习。
头文件如下:
#import <UIKit/UIKit.h>#import <AVFoundation/AVFoundation.h>#import <CoreAudio/CoreAudioTypes.h>#include "HelloWorldScene.h"@interface MicBlowViewController : UIViewController {AVAudioRecorder *recorder;NSTimer *levelTimer;double lowPassResults; HelloWorld* m_pcallBack;//获取麦克风音量的layer层}- (void)levelTimerCallback:(NSTimer *)timer;- (void)setThe:(HelloWorld*)callback;@endcpp文件如下:
#import "MicBlowViewController.h"#include "HelloWorldScene.h"@implementation MicBlowViewController- (void)viewDidLoad { [super viewDidLoad];NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat: 44100.0], AVSampleRateKey, [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey, nil];NSError *error;recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];if (recorder) {[recorder prepareToRecord];recorder.meteringEnabled = YES;[recorder record];levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];} elseNSLog([error description]);}- (void)setThe:(HelloWorld*)callback{ m_pcallBack = callback; }- (void)levelTimerCallback:(NSTimer *)timer {//起一个计时器不断测试[recorder updateMeters];const double ALPHA = 0.05;double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; if((lowPassResults > 0.4) && (lowPassResults < 0.95)) { NSLog(@"value = %f", lowPassResults); m_pcallBack->voiceVec.push_back(lowPassResults);//将结果保存到voidcVec中 }}- (void)dealloc {[levelTimer release];[recorder release]; [super dealloc];}@end在这里我根据自己项目的需求做了如上改动,经过测试,虽然结果与实际情况可能有点出入,但还算可以。下面就可以在自己写的cpp里调用该接口了,这里贴出我的调用方式
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) MicBlowViewController *micBlow = [[MicBlowViewController alloc] init];//创建对象并初始化 [micBlow setThe:this];//将HelloWorld指针传给oc中的MicBlowViewController,方便取出返回值 [micBlow viewDidLoad];//调用viewDidLoad函数 #endif增加一个setTHe函数是为了将测试出的结果反馈到HelloWorld,然后在HelloWorld可以根据返回值做出相应的操作,之前没接触过oc,通过这个功能也是简单的了解了一下oc的语法和函数用法,继续学习!!!
0 0
- objective-c与cocos2d-x的互相调用实现获取麦克风音量大小
- JavaScript与Objective-C的互相调用
- Android 实时获取麦克风录音的音量大小
- cocos2d-x中lua与C++,C语言互相调用
- cocos2d-x中通过Jni实现Java与C++的互相调用-------------------cocos2d-x-3.0正式版本(7.3)
- cocos2d-x中通过Jni实现Java与C++的互相调用
- c# Winform 获取麦克风音量 控制麦克风音量大小 (自用笔记未测试)
- 实时获取麦克风输入音量的代码
- Android 获取麦克风的音量(分贝)
- Cocos2D-x 用CCControlSlider设置调节音量的大小
- 获取麦克风音量
- Cocos2d-js与OC(Objective-C)的相互调用
- [寒江孤叶丶的Cocos2d-x之旅_25]Cocos2d-x 浅谈Lua与C++函数间互相调用问题
- cocos2d-x 3.x中lua调用原理1--从基本的c++与lua互相调用开始
- Flex获取窗体大小 Flex与JS互相调用
- 使用UIWebView时objective-c与javascript互相调用 1
- 使用UIWebView时objective-c与javascript互相调用 1
- [iOS] 使用UIWebView时objective-c与javascript互相调用
- RTSP流媒体数据传输的两种方式(TCP和UDP)
- Android调用系统相机拍照、裁剪,并保存到手机SD卡中,展示到界面
- CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(3)线性渐变
- Tomcat Server的结构图
- Java---08---多态性
- objective-c与cocos2d-x的互相调用实现获取麦克风音量大小
- Apache 2.2.15 and Tomcat 5.5.29整合报错解决503
- Android乱弹onLowMemory()和onTrimMemory()
- linux环境下自动备份mysql
- 从ruby实现时间服务器ntp同步功能也谈“逆向工程”
- Java中break return continue 区别
- MOLAP_ROLAP_HOLAP的区别和联系
- java 随笔
- centos7修改mariadb数据库文件的路径