2013-04-23 54 views
0

我在我的應用中實現了音頻錄製,我試過了我在模擬器中編寫的代碼,並且所有工作都很好,但是當我在實際設備中嘗試時我檢查音頻記錄持續時間,它始終爲零,但在模擬器中,它顯示正確的持續時間和代碼是相同的。我必須設置一些在實際設備中使用記錄?在真實設備中錄製音頻不起作用

+0

是你能找出爲什麼發生這種情況? 。面對同樣的問題 – vijar 2014-07-16 21:50:11

回答

1

我有一個很好的記錄方法:

-(IBAction) startRecording 
{ progressView.progress = 0.0; 

NSLog(@"startRecording"); 
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
NSError *err = nil; 
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 
[audioSession setActive:YES error:&err]; 
err = nil; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 

recordSetting = [[NSMutableDictionary alloc] init]; 

// We can use kAudioFormatAppleIMA4 (4:1 compression) or kAudioFormatLinearPCM for nocompression 
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; 

// We can use 44100, 32000, 24000, 16000 or 12000 depending on sound quality 
[recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey]; 

// We can use 2(if using additional h/w) or 1 (iPhone only has one microphone) 
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 

// These settings are used if we are using kAudioFormatLinearPCM format 
//[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
//[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
//[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 



// Create a new dated file 
//NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0]; 
// NSString *caldate = [now description]; 
// recorderFilePath = [[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, caldate] retain]; 
recorderFilePath = [NSString stringWithFormat:@"%@/MySound.caf", DOCUMENTS_FOLDER] ; 

NSLog(@"recorderFilePath: %@",recorderFilePath); 
_recorderFilePath = recorderFilePath; 
self.recorderFilePath = recorderFilePath; 
NSURL *url = [NSURL fileURLWithPath:recorderFilePath]; 

err = nil; 

NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err]; 
if(audioData) 
{ 
    NSFileManager *fm = [NSFileManager defaultManager]; 
    [fm removeItemAtPath:[url path] error:&err]; 
} 

err = nil; 
recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err]; 
if(!recorder){ 
    NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle: @"Warning" 
           message: [err localizedDescription] 
           delegate: nil 
        cancelButtonTitle:@"OK" 
        otherButtonTitles:nil]; 
    [alert show]; 
    return; 
} 

//prepare to record 
[recorder setDelegate:self]; 
[recorder prepareToRecord]; 
recorder.meteringEnabled = YES; 

BOOL audioHWAvailable = audioSession.inputIsAvailable; 
if (! audioHWAvailable) { 
    UIAlertView *cantRecordAlert = 
    [[UIAlertView alloc] initWithTitle: @"Warning" 
           message: @"Audio input hardware not available" 
           delegate: nil 
        cancelButtonTitle:@"OK" 
        otherButtonTitles:nil]; 
    [cantRecordAlert show]; 
    return; 
} 

// start recording 
[recorder recordForDuration:(NSTimeInterval) 30]; 

lblStatusMsg.text = @"Recording..."; 
progressView.progress = 0.0; 
timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(handleTimer) userInfo:nil repeats:YES]; 
NSLog(@"recording"); 
startRecord.enabled = NO; 
stopRecord.enabled = YES; 
} 
+0

你已經嘗試過這種方法在一個真正的iPad,它的工作原理? – user1575803 2013-04-23 12:13:24

+0

是的,我的功能完全正常 – Mutawe 2013-04-23 12:36:34

+0

我有同樣的問題,在錄製音頻時出現問題,但是當我在模擬器中嘗試它時, – user1575803 2013-04-23 13:17:23