我是这样做的:
1) 找到 SpeakHere 代码创建的临时文件——在 SpeakHereController 类中查找 .caf 扩展名。然后将该临时文件移动到您的应用程序目录,如下所示:
NSString *myFileName = @"MyName"; // this would probably come from a user text field
NSString *tempName = @"recordedFile.caf";
NSString *saveName = [NSString stringWithFormat:@"Documents/%@.caf", myFileName];
NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:tempName];
NSString *savePath = [NSHomeDirectory() stringByAppendingPathComponent:saveName];
2) 保存一些关于文件的元数据,至少是它的名称。我将其放入 NSUserDefaults 中,如下所示:
NSDictionary *recordingMetadata = [NSDictionary dictionaryWithObjectsAndKeys:
myFileName, @"name",
[NSDate date], @"date",
nil];
[self.savedRecordings addObject:recordingMetadata]; // savedRecordings is an array I created earlier by loading the NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:self.savedRecordings forKey:@"recordings"]; // now I'm updating the NSUserDefaults
3) 现在您可以通过遍历 self.savedRecordings 来显示已保存记录的列表。
4) 当用户选择录音时,您可以轻松地用所选文件名初始化一个 AVAudioPlayer 并播放它。
5) 要让用户删除录音,您可以执行以下操作:
NSString *myFileName = @"MyName";
// delete the audio file from the application directory
NSString *fileName = [NSString stringWithFormat:@"Documents/%@.caf", myFileName];
NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:fileName];
[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];
// delete the metadata from the user preferences
for (int i=0; i<[self.savedRecordings count]; i++) {
NSDictionary *thisRecording = [self.savedRecordings objectAtIndex:i];
if ([myFileName isEqualToString:[thisRecording objectForKey:@"name"]]) {
[self.savedRecordings removeObjectAtIndex:i];
break;
}
}
[[NSUserDefaults standardUserDefaults] setObject:self.savedRecordings forKey:@"recordings"];
请注意,如果您将音频文件保存到 Documents 文件夹并在 info.plist 中启用“应用程序支持 iTunes 文件共享”,那么用户可以将他们的录音从应用程序中复制出来并保存到他们的计算机上......不错的功能,如果你想提供的话。