Скачивайте, сохраняйте и воспроизводите mp3 на iPhone - PullRequest
2 голосов
/ 04 марта 2010

Я хотел бы скачать mp3-файл с какого-либо сайта, сохранить его в моей модели CoreData, AudioMp3, и воспроизвести его.

Функция, представленная ниже, работает, но, во-первых, она неэффективна, так как сначала она должна сохранять mp3 в файл, а во-вторых, воспроизводить повтор того же mp3 в следующий раз, когда его вызывают. Я не думаю, что мое сохранение в базу данных также является правильным, где AudioMp3.mp3 объявлен как двоичный файл:

- (void) playAndSaveMp3: (NSString*) mp3 {

NSURL *urlFromString = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@.mp3",@"http://www.somsite.com/mp3/",mp3]];

NSData *data = [NSData dataWithContentsOfURL:urlFromString];

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];

AudioMp3 *audioMp3 = (AudioMp3 *)[NSEntityDescription insertNewObjectForEntityForName:@"AudioMp3"
                                                                inManagedObjectContext:managedObjectContext];
[audioMp3 setCreationDate:[NSDate date]];

[audioMp3 setMp3Name:mp3];


//[audioMp3 setMp3:data];

// Save to database
NSError *error;
if (![managedObjectContext save:&error]) {
    // Handle the error.
    NSLog(@"Error in saving new notification. Error: %@", error);
}

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
resourcePath = [resourcePath stringByAppendingString:@"/sound.mp3"];

[data writeToFile:resourcePath atomically:NO];

//declare a system sound id
SystemSoundID soundID;

// Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:resourcePath isDirectory:NO];

// Use audio sevices to create the sound
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);

// Use audio services to play the sound
AudioServicesPlaySystemSound(soundID);

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

1 Ответ

2 голосов
/ 05 марта 2010

Решением было использование AVAudioPlayer и метода (id) initWithData: (NSData *) ошибка данных: (NSError **) outError. Сохранение и загрузка работ без проблем.

...