AFSoundManager 2.1

AFSoundManager 2.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2015年3月

Alvaro Franco维护。



  • Alvaro Franco

AFSoundManager v2

AFSoundManager

通过一个完整且基于块的 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 是一个非常初版本的,还有很多工作要做。以下是即将到来的功能的预览

  • [ ] 与控制中心和锁定屏幕控制的集成
  • [x] 改进数据返回,以提供更多有关当前播放的信息
  • [ ] 一个全新的类来使 AFSoundPlayback 处理实时效果,如延迟、自定义均衡器等
  • [ ] AFSoundManager 准备的 UI 控件,以便在您的应用中快速集成完整的播放控件,由 AFSoundManager 支持。

使用

播放声音

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]