您的位置:首页 > 移动开发 > IOS开发

IOS中录音后再播放声音太小问题解决

2014-07-02 11:05 127 查看
- (BOOL)canRecord
{

__block BOOL bCanRecord =
YES;

if ([[[UIDevice
currentDevice] systemVersion]
compare:@"7.0"] !=
NSOrderedAscending)
{

AVAudioSession *audioSession = [AVAudioSession
sharedInstance];

if ([audioSession
respondsToSelector:@selector(requestRecordPermission:)]) {
[audioSession
performSelector:@selector(requestRecordPermission:)
withObject:^(BOOL granted) {

if (granted) {
bCanRecord =
YES;
}
else {
bCanRecord =
NO;
}
}];
}
}

return bCanRecord;
}

-(void)initRecordSession
{

AVAudioSession *session = [AVAudioSession
sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayAndRecord
error:nil];
[session
setActive:YES
error:nil];
}

-(void)onRecordSoundStop:(UIButton *)sender
{

AVAudioSession *session = [AVAudioSession
sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayback
error:nil]; //此处需要恢复设置回放标志,否则会导致其它播放声音也会变小
[session
setActive:YES
error:nil];

[_timerRec
invalidate];

if (_recorder.currentTime > 1)
{

[_recorder
stop];

PlayNodeData *model =
_dataOfVideoArrary[sender.tag];
model.hasSound =
YES;

[_btnPlay
setImage:[UIImage
imageNamed:@"simulate_image_play1"]
forState:UIControlStateNormal];
}

}

//
-(void)onRecordSoundStart:(UIButton *)sender
{

if (![self
canRecord])
{

[[[UIAlertView
alloc] initWithTitle:nil

message:[NSString
stringWithFormat:@"应用需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"]

delegate:nil

cancelButtonTitle:@"好"

otherButtonTitles:nil]
show];

return;
}

[self
initRecordSession];

NSDictionary *settings = [[NSDictionary
alloc] initWithObjectsAndKeys:
[NSNumber
numberWithFloat:44100.0],AVSampleRateKey ,
//采样率 8000/44100/96000
[NSNumber
numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey,
//录音格式
[NSNumber
numberWithInt:16],AVLinearPCMBitDepthKey,
//线性采样位数 8、16、24、32
[NSNumber
numberWithInt:2],AVNumberOfChannelsKey,
//声道 1,2

[NSNumber
numberWithInt:AVAudioQualityHigh],AVEncoderAudioQualityKey,
//录音质量

nil];

NSURL *strURL = [NSURL
fileURLWithPath:[self
GetRecordSoundFileName:sender.tag]];

_recorder = [[AVAudioRecorder
alloc] initWithURL:strURL
settings:settings error:nil];

_recorder.meteringEnabled =
YES;

_recorder.delegate =
self;

[_recorder
prepareToRecord];

[_recorder
record];

_timerRec = [NSTimer
scheduledTimerWithTimeInterval:0 target:self
selector:@selector(detectionVoice)
userInfo:nil
repeats:YES];

}

-(void)detectionVoice
{

return;

[_recorder
updateMeters];//刷新音量数据

//获取音量的平均值 [recorder averagePowerForChannel:0];

//音量的最大值 [recorder peakPowerForChannel:0];

double lowPassResults =
pow(10, (0.05 * [_recorder
peakPowerForChannel:0]));

NSLog(@"%lf",lowPassResults);

//最大50 0

//图片
小-》大

if (0<lowPassResults<=0.06) {
;
}else
if (0.06<lowPassResults<=0.13) {
;
}else
if (0.13<lowPassResults<=0.20) {
;
}else
if (0.20<lowPassResults<=0.27) {
;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐