|
|
7 mēneši atpakaļ | |
|---|---|---|
| .. | ||
| Classes | 7 mēneši atpakaļ | |
| LICENSE | 7 mēneši atpakaļ | |
| README.md | 7 mēneši atpakaļ | |
iOS audio playing (both local and streaming) and recording made easy through a complete and block-driven Objective-C class. AFSoundManager uses AudioToolbox and AVFoundation frameworks to serve the audio.
##Installation
###CocoaPods
AFSoundManager is available on CocoaPods so you can get it by adding this line to your Podfile:
pod 'AFSoundManager'
###Manual
If you don't use CocoaPods, you will have to import these files into your project:
AFSoundManager.h
AFSoundPlayback.h
AFSoundPlayback.m
AFSoundItem.h
AFSoundItem.m
AFSoundQueue.h
AFSoundQueue.m
AFSoundRecord.h
AFSoundRecord.m
NSTimer+AFSoundManager.h
NSTimer+AFSoundManager.m
Also, you need to import AVFoundation, AudioToolbox and MediaPlayer frameworks.
##Roadmap
Since the v2.0 is a very first version, there's a lot of work remaining. This is a sneak peek of what's coming soon:
##Usage
###Playing a sound
objc AFSoundItem *item = [[AFSoundItem alloc] initWithLocalResource:@"demo.mp3" atPath:nil];
AFSoundPlayback *player = [[AFSoundPlayback alloc] initWithItem:item];
[player play];
[_queue listenFeedbackUpdatesWithBlock:^(AFSoundItem *item) {
NSLog(@"Item duration: %ld - time elapsed: %ld", (long)item.duration, (long)item.timePlayed);
} andFinishedBlock:^(void) {
NSLog(@"Track finished playing");
}];
###Playing a queue
So, an ```AFSoundItem``` object can be played individually, but it can also be part of a queue, managed by ```AFSoundQueue```.
objc
AFSoundItem *item1 = [[AFSoundItem alloc] initWithLocalResource:@"demo1.mp3" atPath:nil]; AFSoundItem *item2 = [[AFSoundItem alloc] initWithLocalResource:@"demo2.mp3" atPath:nil]; AFSoundItem *item3 = [[AFSoundItem alloc] initWithLocalResource:@"demo3.mp3" atPath:nil];
AFSoundQueue *queue = [[AFSoundQueue alloc] initWithItems:@[item1, item2, item3]]; [queue playCurrentItem];
[_queue listenFeedbackUpdatesWithBlock:^(AFSoundItem *item) {
NSLog(@"Item duration: %ld - time elapsed: %ld", (long)item.duration, (long)item.timePlayed);
} andFinishedBlock:^(AFSoundItem *nextItem) {
NSLog(@"Finished item, next one is %@", nextItem.title);
}];
The block will be executed each 1 second, returning a dictionary with info about the current item. **Expect more info returned by the block in future releases**, like the current item object (```AFSoundItem```), current queue index, etc.
###Current playing actions
####Standard
objc -(void)play; -(void)pause; -(void)restart; -(void)playAtSecond:(NSInteger)second;
####Queue
objc -(void)playCurrentItem; -(void)pause; -(void)playNextItem; -(void)playPreviousItem; -(void)playItem:(AFSoundItem *)item; -(void)playItemAtIndex:(NSInteger)index;
###Managing a queue
To manage a queue, you can both add items with ```-addItem:``` or ```addItem:atIndex:``` or remove items from the current queue with ```-removeItem:``` and ```-removeItemAtIndex:```
###Fetching metadata
Since you'll be working with ```AFSoundItem``` to manage your tracks, you can obtain the metadata related like the ```title```, ```album```, ```artist``` and ```artwork```.
[_queue listenFeedbackUpdatesWithBlock:^(AFSoundItem *item) {
NSLog(@"Item duration: %ld - time elapsed: %ld", (long)item.duration, (long)item.timePlayed);
} andFinishedBlock:^(AFSoundItem *nextItem) {
NSLog(@"Finished item, next one is %@, by %@ album from the album %@", nextItem.title, nextItem.artist, nextItem.album);
[self updateArtwork:nextItem.artwork];
}];
###Recording a sound
As the previous version, ```AFSoundManager``` lets you record sound quickly thanks to ```AFSoundRecord```:
objc AFSoundRecord *recorder = [[AFSoundRecord alloc] initWithFilePath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
[recorder startRecording]; ```
##License AFSoundManager is under MIT license so feel free to use it!
##Author Made by Alvaro Franco. If you have any question, feel free to drop me a line at alvarofrancoayala@gmail.com