IOS 通过麦克风检测声音分贝
来源:互联网 发布:朗道 知乎 编辑:程序博客网 时间:2024/05/16 01:01
在iphone真机上测的数据始始终没有变化, 在模拟器上是可以的,折腾了半天,终于搜索找到解决方法,在代码中添加
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
1. 开发环境xocde5.1.1 , IOS sdk7.1
2. 引入框架:AVFoundation.framework
3. 部分源码如下:
#import "MicBlowViewController.h"@implementation MicBlowViewController- (void)viewDidLoad{ [super viewDidLoad]; /* 必须添加这句话,否则在模拟器可以,在真机上获取始终是0 */ [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; /* 不需要保存录音文件 */ NSURL *url = [NSURL fileURLWithPath:@"/dev/null"]; NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat: 44100.0], AVSampleRateKey, [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber numberWithInt: 2], 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: 1 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES]; } else { NSLog(@"%@", [error description]); } }/* 该方法确实会随环境音量变化而变化,但具体分贝值是否准确暂时没有研究 */- (void)levelTimerCallback:(NSTimer *)timer {[recorder updateMeters]; float level; // The linear 0.0 .. 1.0 value we need. float minDecibels = -80.0f; // Or use -60dB, which I measured in a silent room. float decibels = [recorder averagePowerForChannel:0]; if (decibels < minDecibels) { level = 0.0f; } else if (decibels >= 0.0f) { level = 1.0f; } else { float root = 2.0f; float minAmp = powf(10.0f, 0.05f * minDecibels); float inverseAmpRange = 1.0f / (1.0f - minAmp); float amp = powf(10.0f, 0.05f * decibels); float adjAmp = (amp - minAmp) * inverseAmpRange; level = powf(adjAmp, 1.0f / root); } /* level 范围[0 ~ 1], 转为[0 ~120] 之间 */ dispatch_async(dispatch_get_main_queue(), ^{ [_textLabel setText:[NSString stringWithFormat:@"%f", level*120]]; });}- (void)dealloc { [levelTimer release]; [recorder release]; [_textLabel release]; [_cLabel release]; [super dealloc];}@end
0 1
- IOS 通过麦克风检测声音分贝
- IOS 通过麦克风检测声音分贝
- ios通过PCM计算声音分贝大小
- iOS 设备 检测声音输出设备及耳机麦克风的处理
- 声音分贝
- 资质android声音检测仪---分贝仪 (附有源码)
- ios 检测声音支持
- 通过网络发送和播放麦克风的声音
- iOS麦克风权限的检测和获取
- iOS 屏幕录制 (可选录入麦克风的声音)
- Android 获取麦克风的音量(分贝)
- Android 录音声音分贝获取
- 获取麦克风声音数据
- 相机检测 麦克风检测
- iOS 相机 麦克风 照片 权限的检测与获取
- 使用C#实现通过网络发送和播放麦克风的声音
- 麦克风没声音怎么办,解决麦克风没声音的方法
- 麦克风没有声音的设置
- 进程地址空间与虚拟存储空间
- HTTP协议 (三) 压缩
- 指针 和 引用
- HTTP返回码总结
- C语言复习总结
- IOS 通过麦克风检测声音分贝
- java 并发
- 关于iphone开发中的@property和@synthesize的一些见解
- 机房收费系统中“事务”的应用
- turn.js 类似书籍翻页的效果
- C++复习总结
- 关于在ajax中无法对全局变量进行赋值的原因解读
- git submodule
- linux常用命令