如何重新保存(复制)文件目录中的音频文件并发送该保存的音频文件?

问题描述:

我正在记录音频文件并发送到服务器。记录,停止,播放和发送正常工作。但我的问题是,如果我点击停止按钮,我想在文档目录中保存该新的名称的音频文件并将此音频文件发送到服务器。我的代码是...如何重新保存(复制)文件目录中的音频文件并发送该保存的音频文件?

// File path where the recording will be saved on the iOS device 
audioFilePath = [[self applicationDocumentsDirectory].path stringByAppendingPathComponent:@"RecordAudio.wav"]; 
NSLog(@"%@", audioFilePath); 

NSURL *outputFileURL = [NSURL fileURLWithPath:audioFilePath]; 

// Setup audio session 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryRecord error:nil]; 

// Define the recorder setting 
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 16] forKey:AVLinearPCMBitDepthKey]; 
[recordSetting setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsBigEndianKey]; 
[recordSetting setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsFloatKey]; 
[recordSetting setValue:[NSNumber numberWithInt: AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey]; 

// Initiate and prepare the recorder 
NSError *error = nil; 
audioRecorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:&error]; 
audioRecorder.delegate = self; 
audioRecorder.meteringEnabled = YES; 

// Deal with any errors 
if (error) 
NSLog(@"error: %@", [error localizedDescription]); 
else 
[audioRecorder prepareToRecord]; 

// Check to see if we have permission to use the microphone. 
if ([session respondsToSelector:@selector(requestRecordPermission:)]) { 
    [session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) { 
     if (granted) { 
      NSLog(@"Mic access granted"); 
     } 
     else { 
      NSLog(@"Mic access NOT granted"); 
     } 
    }]; 
} 

-(NSURL *)applicationDocumentsDirectory { 

NSLog(@"%@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
                inDomains:NSUserDomainMask] lastObject]); 
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
               inDomains:NSUserDomainMask] lastObject]; 
} 

- (IBAction)record:(id)sender { 

NSLog(@"Started Recording"); 
if (!audioRecorder.recording) 
{ 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryRecord error:nil]; 
    [session setActive:YES error:nil]; 

    // Start recording 
    [audioRecorder record]; 
} 
} 

- (IBAction)stop:(id)sender { 

NSLog(@"Stop Recording"); 
if ([audioRecorder isRecording]) 
{ 
    [audioRecorder stop]; 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [audioSession setActive:NO error:nil]; 

} 
else if (audioPlayer.playing) 
[audioPlayer stop]; 
} 

如果我写在停止方法这个代码..

NSLog(@"%@", audioRecorder.url); // RecordAudio.wav 
NSString *urlString = [audioRecorder.url.absoluteString stringByReplacingOccurrencesOfString:@"RecordAudio.wav" withString:@"RecordAudio2.wav"]; 
self.sendingURL = [NSURL URLWithString:urlString]; 
NSLog(@"%@", self.sendingURL); 

当我点击停止按钮我收到提示 错误:操作无法完成。 (OSStatus错误2003334207.)

您无法更改该音频文件的名称。你可以做的是用你的新名称使用NSFileManager类创建该音频文件的副本

NSFileManager *fManager = [NSFileManager defaultManager]; 
    [fManager copyItemAtURL:oldURL toURL:newURL error:error]; 
+0

很好,谢谢你。我确实喜欢这个.. NSLog(@“%@”,audioRecorder.url); // RecordAudio.wav。 NSString * urlString = [audioRecorder.url.absoluteString stringByReplacingOccurrencesOfString:@“RecordAudio.wav”withString:@“。RecordAudio5.wav”]; self.sendingURL = [NSURL URLWithString:urlString]; NSLog(@“%@”,self.sendingURL);现在我用名为“RecordAudio5.wav”的新名称发送它正在工作。很好,谢谢你的回复... – iOS