通过一个完整且基于块的 Objective-C 类,轻松实现 iOS 的音频播放(包括本地和流媒体)和录音。AFSoundManager 使用 AudioToolbox 和 AVFoundation 框架来处理音频。
如果您不使用 CocoaPods,您必须将这些文件导入到您的项目中
AFSoundManager.h
AFSoundPlayback.h
AFSoundPlayback.m
AFSoundItem.h
AFSoundItem.m
AFSoundQueue.h
AFSoundQueue.m
AFSoundRecord.h
AFSoundRecord.m
NSTimer+AFSoundManager.h
NSTimer+AFSoundManager.m
另外,您还需要导入 AVFoundation、AudioToolbox 和 MediaPlayer 框架。
由于 v2.0 是一个非常初版本的,还有很多工作要做。以下是即将到来的功能的预览
AFSoundItem
会处理任何声音项,并且将由 AFSoundPlayback
处理。该 AFSoundItem
将包含每个声音、歌曲、章节等的定位和元数据。
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");
}];
因此,AFSoundItem
对象可以单独播放,但它也可以是某个队列的一部分,该队列由 AFSoundQueue
管理。
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);
}];
该块每秒钟执行一次,返回一个包含有关当前项的信息的字典。请期待未来版本中通过该块返回更多信息,比如当前项对象(AFSoundItem
),当前队列索引等。
-(void)play;
-(void)pause;
-(void)restart;
-(void)playAtSecond:(NSInteger)second;
-(void)playCurrentItem;
-(void)pause;
-(void)playNextItem;
-(void)playPreviousItem;
-(void)playItem:(AFSoundItem *)item;
-(void)playItemAtIndex:(NSInteger)index;
管理队列时,您可以使用 -addItem:
或 addItem:atIndex:
添加项目,或者使用 -removeItem:
和 -removeItemAtIndex:
从当前队列中移除项目。
由于您将使用 AFSoundItem
来管理您的音轨,因此您可以获取相关的元数据,如 title
(标题)、album
(专辑)、artist
(艺术家)和 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];
}];
和前一个版本一样,AFSoundManager
允许您通过 AFSoundRecord
快速录制声音。
AFSoundRecord *recorder = [[AFSoundRecord alloc] initWithFilePath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
[recorder startRecording];
AFSoundManager 处于 MIT 许可之下,因此请随意使用它!
由 Alvaro Franco 制作。如果您有任何问题,请随时给我发邮件:[email protected]