2015-01-21 38 views
0

我是新來的ios開發人員,面臨創建應用程序時遇到的問題。 我的應用程序可以錄製音頻並保存並再次播放。我已經使用AVAudiorecorder和AVAudioplayer。 只要錄製停止,它會要求用戶將名稱(在文本框中)提供給要保存的文件,然後,所有保存的文件的列表應該出現並可以在下一個屏幕上播放。 (與italk錄音機應用程序相同) 我想將錄製的文件保存在文檔目錄中,並希望包含所有音頻文件元數據的數據庫。數據庫應該有ID,日期,標題,路徑。將錄製的音頻保存到文檔目錄中,並創建一個包含所有音頻文件的數據庫

這是我做了什麼:

if (player.playing) { 
     [player stop]; 
    } 

    if (!recorder.recording) { 

     [self updatefilecounter]; 
     AVAudioSession *session = [AVAudioSession sharedInstance]; 
     [session setActive:YES error:nil]; 

     // Set the audio file 
     //filename = @"nnnn"; 
     filename = @"Music/nnnn"; 
     filename = [filename stringByAppendingString:@(filecounter).stringValue]; 
     filename = [filename stringByAppendingString:@".m4a"]; 

NSArray *pathComponents = [NSArray arrayWithObjects: 
          [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],filename,nil]; 

NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

     // Setup audio session 
     [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

     // Define the recorder setting 
     NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 
     [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
     [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
     [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 

     // Initiate and prepare the recorder 
     recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL]; 
     recorder.delegate = self; 
     recorder.meteringEnabled = YES; 

     NSLog(@"%@", outputFileURL); 

     NSLog(@"%@", filename); 
     [recorder record]; 

    } else { 

     // Stop recording 
     [recorder stop]; 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setActive:NO error:nil]; 

SaveAudioVC *vc = [self.storyboardinstantiateViewControllerWithIdentifier:@"SaveAudioVC"]; 

     [self.navigationController pushViewController:vc animated:YES]; 
    } 
} 

文件被保存爲nnnn.1,nnnn.2等等,但是當我停止應用程序並再次運行它覆蓋上的文件,我想用戶給出他/她選擇的名字來保存該文件,並將其顯示在具有給定名稱的最後一個屏幕上的記錄文件中。 我已經提到這個鏈接:Record audio and save permanently in iOS

但是我的要求不匹配,從而PLZ指導我保存在文件目錄中的記錄文件,在文本字段給文件命名爲每個用戶的願望,並顯示所有保存文件並創建一個數據庫,如上所述。

回答

0

我想你應該給路徑字符串像[@"Music" stringByAppendingByPathComponents:@"nnnn"]而不filename = @"Music/nnnn";

我希望它會給你一些想法。
當我開始音頻錄音時,我給它臨時名稱,如temp.m4a
比我停止錄音時我用波紋管方法替換臨時名稱與新名稱。

/* 
give name and replace it with defaultName'temp.m4a' 
*/ 
- (void)convertNewName:(NSString*)newname{ 
    NSString* folder=[documentDirectory stringByAppendingPathComponent:@"VoiceDB"]; 
    NSString* defaultfile=[folder stringByAppendingPathComponent:@"temp.m4a"]; 
    newname=[NSString stringWithFormat:@"%@.m4a",newname]; 
    NSString *newPath = [[defaultfile stringByDeletingLastPathComponent] stringByAppendingPathComponent:newname]; 
    [[NSFileManager defaultManager] moveItemAtPath:defaultfile toPath:newPath error:nil]; 
} 
相關問題