最近在做的项目里有一个功能,就是拿到手机媒体库中的音频文件,并实现APP中的播放,已经转成MP3格式上传到服务器上。
首先是要能获取到ipod library中的音频。这里我用的是MPMediaQuery,在这里有一个坑,可以拿到的歌曲中有很多歌曲的AssetURL为nil,这是因为MPMediaQuery只能拿到用户通过itunes倒入进去的歌曲url。
代码如下:
// 1.创建媒体选择队列(从ipod库中读出音乐文件)
MPMediaQuery*everything = [[MPMediaQueryalloc]init];
// 2.创建读取条件(类似于对数据做一个筛选) Value:作用等同于MPMediaType枚值
MPMediaPropertyPredicate*albumNamePredicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType];
//3.给队列添加读取条件
[everythingaddFilterPredicate:albumNamePredicate];
//4.从队列中获取符合条件的数组集合
NSArray*itemsFromGenericQuery = [everythingitems];
//5.便利解析数据
for(MPMediaItem*songinitemsFromGenericQuery) {
//歌曲名字
> NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
//歌曲路径
NSString *url = [song valueForProperty: MPMediaItemPropertyAssetURL];
//歌手
NSString *songer = [song valueForProperty: MPMediaItemPropertyArtist];
}
拿到后肯定是实现APP中的播放,这个就很简单了。采用AVAudioPlayer就好了
经过一番查阅,最终找到一个办法,就是先把它转为caf 写到内存里,然后再把.caf转为.mp3 就可以上传了。这里caf转mp3需要使用第三方库:lame (lame三库的资源)
代码如下:
1.导出成caf格式,这种导出方式,文件名必须以.caf作为后缀
- (void)convertToCAF:(NSString *)songUrl name:(NSString *)songName
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(v