iOS Запись аудио и сохранение в плейлисте - PullRequest
1 голос
/ 23 мая 2011

Я ищу запись звука с микрофона iPhone через кнопку записи. Я скачал и попал в пример проекта, который Apple предоставляет для этого (SpeakHere).

Однако в качестве следующего шага я хотел бы сохранить запись пользователей в стиле «плейлист» (не используя плейлист iTunes, а локальный плейлист).

Возможно ли сделать это с помощью Objective-C (в отличие от предоставляемой в настоящее время реализации C) - в идеале CoreData будет использоваться для хранения аудио.

Спасибо

1 Ответ

2 голосов
/ 07 июля 2011

Вот как я это сделал:

1) Найдите временный файл, который создает код SpeakHere, - найдите расширение .caf в классе SpeakHereController. Затем переместите этот временный файл в каталог вашего приложения с помощью чего-то вроде этого:

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"];

Обратите внимание, что если вы сохраните аудиофайлы в папке «Документы» и включите «Приложение поддерживает общий доступ к файлам iTunes» в своем файле info.plist, то пользователи смогут копировать свои записи из приложения и сохранять их на своих компьютерах ... a хорошая функция, если вы хотите предложить его.

...