在需求彻底明朗化,外加从MusicFans转到GraceNote,再从GraceNote的GNSDK转到iOS SDK后,最终完毕了在iOS上通过音乐的部分信息获取完整信息的功能了。(好吧,我承认是相对完整。。。)

首先介绍下在项目中配置GraceNote的iOS SDK。

SDK的下载地址:Mobile Client

注意要先登录才干见到文件的下载链接。另外官网还给出来一个SDK的配置文档,全然跟着走在Xcode 5是走不通的,只是也具有一定的指导作用,建议看一看。

下载解压后,新建一个project,加入GracenoteMusicID.framework到project中:

新建一个头文件GraceNote.h,导入该框架中的头文件(在本project中已经导入所有须要使用到的头文件了):

#ifndef MFDemo_iOS_GraceNote_h
#define MFDemo_iOS_GraceNote_h#import <GracenoteMusicID/GNConfig.h>
#import <GracenoteMusicID/GNOperations.h>
#import <GracenoteMusicID/GNSearchResultReady.h>
#import <GracenoteMusicID/GNSearchResponse.h>
#import <GracenoteMusicID/GNSearchResult.h>
#import <GracenoteMusicID/GNImage.h>
#import <GracenoteMusicID/GNCoverArt.h>
#import <GracenoteMusicID/GNDescriptor.h>#endif

然后配置project环境,依次在Build Phases中增加下列系统库文件:

配置完毕。

事实上这个SDK的使用很的简单。

第一步,通过你的GraceNote帐号配置GNConfig类(我直接放在了AppDelegate中,这样能够配置能够全局使用):

#import <UIKit/UIKit.h>
#import <GracenoteMusicID/GNConfig.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property (retain, nonatomic) GNConfig *app_gnConfig;@end
#import "AppDelegate.h"static NSString * kClientID = @"4541440-79EFBF4E21724D084BA87FF9B242F0C9";
static NSString * kCoverArtProperty = @"content.coverArt";
static NSString * kCoverArtSizeProperty = @"content.coverArt.sizePreference";
static NSString * kYESBooleanString = @"1";
static NSString * kCoverArtSizeLarge = @"LARGE";
static NSString * kCoverArtSizeThumbnail = @"THUMBNAIL";
static NSString * kCoverArtSizeSmall = @"SMALL";@implementation AppDelegate
@synthesize app_gnConfig = _app_gnConfig;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{self.app_gnConfig = [GNConfig init:kClientID]; // <Client ID>-<Client ID Tag>[_app_gnConfig setProperty:kCoverArtProperty value:kYESBooleanString];[_app_gnConfig setProperty:kCoverArtSizeProperty value:kCoverArtSizeThumbnail];return YES;
}

client id就是申请应用时的ID,不清楚的能够參考Use GraceNote SDK in iOS(一)通过序列化的GDO查询专辑封面。然后设置content.coverArt属性打开,否则返回的数据中将不会有专辑封面。

第二步,通过以下的方法发起查询请求:

+ (void) searchByText:(id<GNSearchResultReady>)resultReadyconfig:(GNConfig*)configartist:(NSString*)artistalbumTitle:(NSString*)albumTitletrackTitle:(NSString*)trackTitle;

在Demo中,就是一个Button中的方法:

- (IBAction)check:(id)sender {[_checking_activityIndicator startAnimating];self.view.alpha = 0.75;self.view.userInteractionEnabled = NO;[GNOperations searchByText:selfconfig:((AppDelegate *)[[UIApplication sharedApplication] delegate]).app_gnConfigartist:_artist_textField.textalbumTitle:_album_textField.texttrackTitle:_trackTitle_textField.text];
}

注意resultReady參数设置为一个遵守GNSearchResultReady协议的对象,也就是self。

config參数设置为全局的配置。

artist,albumTitle,trackTitle分别为艺术家,专辑名称,音乐名等,这些是搜索的Key,三个參数最多能够缺省两个。

第三步,在查询成功后,我们能够从GNResultReady:方法中获取server返回的数据,从中剥离出我们须要的信息。可是,很奇怪的是,对于返回结果中的每个GNSearchResponse对象,其AlbumCoverArt均为nil。例如以下图所看到的,注意是10个对象中的每个对象的m_coverArt的值都是nil。

替代的方法是,记录下GNSearchResponse对象的Id信息,然后通过AlbumId发起二次请求,从server中获取完整的专辑信息(这样做确实不好,可是眼下我仅仅找到这个解决方法)

#pragma mark - GNSearchResultReady Protocol- (void)GNResultReady:(GNSearchResult *)result
{NSArray *responses = [result responses];if (!responses || !responses.count) {[[[UIAlertView alloc] initWithTitle:@"对不起" message:@"没有找到不论什么匹配结果" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];[_checking_activityIndicator stopAnimating];self.view.userInteractionEnabled = YES;self.view.alpha = 1.0;_check_button.hidden = NO;return;}[_albumIDArray removeAllObjects];int i = 0;for (GNSearchResponse *resp in responses) {if (i == 10) {break;}NSString *albumID = resp.albumId;if (albumID) {[_albumIDArray addObject:albumID];i++;}}if (!_albumIDArray.count) {[[[UIAlertView alloc] initWithTitle:@"对不起" message:@"没有找到不论什么匹配结果" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];return;}else {[self performSegueWithIdentifier:@"check_segue" sender:self];[_checking_activityIndicator stopAnimating];self.view.userInteractionEnabled = YES;self.view.alpha = 1.0;_check_button.hidden = NO;}
}

在下一个视图中通过AlbumID发起二次请求:

- (void)getAlbumLists {[_albumInfo removeAllObjects];for (NSString *album_id in _albumIDs) {[GNOperations fetchByAlbumId:selfconfig:((AppDelegate *)[[UIApplication sharedApplication] delegate]).app_gnConfigalbumId:album_id];}
}

上几张执行结果图:

这个Demo通过音乐名/专辑名/艺术家获取到专辑封面,歌曲风格,完整的歌曲名,完整的艺术家列表,歌曲风格,发行信息等相对较为完整的信息,重点是拿到了专辑的封面。真机调试过,没什么问题,看来我能够交差了。

完整的代码我就不贴出来了,有兴趣的下载Demo看看。

说明:因为GraceNote的SDK有71M,在Demo中我将其移除,因此Demo是无法执行的。请自行到GraceNote站点中下载GraceNoteMusicID.framework并加入到project中。

转载于:https://www.cnblogs.com/mengfanrong/p/3877607.html

Use GraceNote SDK in iOS(二)获取音乐的完整信息相关推荐

  1. Use GraceNote SDK in iOS(一)通过序列化的GDO查询专辑封面

    在Use MusicBrainz in iOS之后,由于MusicBrainz查不到专辑封面,只能转移到其它提供音乐信息搜索服务的网站,领导给出的就是GraceNote.(有压力...) 需求类似:通 ...

  2. Use GraceNote SDK in iOS(一)通过序列化GDO查询专辑封面

    于Use MusicBrainz in iOS之后,因为MusicBrainz找出专辑封面,它只能转移到其他网站提供的音乐信息搜索服务,领导给出GraceNote.(有压力.. .) 需求类似:通过一 ...

  3. iOS 【获取 AppStore 的上架信息 - 检查版本更新】

    最近有朋友问我怎么在自己的 App 中添加提示更新.甚至强制更新 App 的有关内容.简单说一下,通过比较 AppStore 和 当前安装 App 的版本号差异,如果 AppStore 中的版本号较大 ...

  4. java获取音乐文件的信息_JAudiotagger读取/修改音乐文件的属性信息

    最近需要用java读取音频文件(mp3,flac格式的文件)的详细属性信息,比如:包括采样率(SampleRate).制作格式或制作技术(Format).单曲名(TITLE).单曲艺术家(ARTIST ...

  5. java获取音乐文件的信息_java 获取歌曲文件的信息

    展开全部 这个具体的倒是不太62616964757a686964616fe59b9ee7ad9431333262346436清楚.不过你可以看看java开源播放器YOYOPlayer是如何实现的.以下 ...

  6. ios开发---音乐播放器之怎么获取音乐列表

    博主刚学ios开发不久,最近想要自己写一个音乐播放器.结果昨天关于怎么获取音乐列表的问题在网上找了好久,今天想要把我昨天找到的资料和学到的东西记录下来. 方法一: 这个方法是通过获取到沙盒路径,来得到 ...

  7. 大疆无人机安卓Mobile Sdk开发(二)连接无人机,获取无人机信息

    大疆无人机安卓Mobile Sdk开发(一)简单介绍 大疆无人机安卓Mobile Sdk开发(二)连接无人机,获取无人机信息 大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointM ...

  8. 使用GraceNote Web API开发Mac查询音乐信息应用

    好久没写博客了,最近各种忙,大忙特忙,今晚难得有空,写个博客总结下最近完成的一个任务:使用GraceNote的Web API来开发一个查询音乐信息的应用,其实功能和前面的那些GraceNote SDK ...

  9. 使用GraceNote Web API发展Mac发现音乐信息的应用

    好久没有写博客,最近各种忙,特别忙里忙,今晚难得清闲.写最近完成下一个博客任务的摘要:使用GraceNote的Web API开发一个查询的音乐信息的应用,事实上,并在这些功能的前GraceNote S ...

最新文章

  1. 全面认识网络诊断命令功能与参数——netsh diagnostic命令
  2. Python基础数据之列表知识(二)
  3. 关于Integer.MAX_VALUE + 1 = Integer.MIN_VALUE 问题
  4. 四十五、爬取QQ音乐Lemon 日语歌的评论
  5. 计算机二级ms office过关,计算机二级office-计算机二级MS OFFICE过关攻略!附赠练习软件...
  6. html笔记(一)html4+css2.0、css基础和属性、盒模型
  7. 微型计算机生产制约因素,精品解析:广东省东莞市2019-2020学年高三下学期第一次统考(5月)模拟考试文科综合地理试题...
  8. (原创)计算机视觉之数学原理-基础篇
  9. SpringBoot 2.0 系列003 -- 自定义Parent
  10. Android的activity的title设定内容
  11. 2、ES5的严格模式use strict
  12. python程序-Python程序执行原理,python程序怎么运行的?
  13. linux 脚本 格式化,Shell脚本批量格式化文件名
  14. 大数据处理与开发课程设计——纽约出租车大数据分析
  15. Pattern 模式器: Matcher 匹配器
  16. Matlab中mapminmax函数使用注意事项
  17. java截取图片截图画框
  18. Data Structure - Doubly Linked List (Java)
  19. web工程无法访问本地图片解决方案
  20. kaggle房价预测

热门文章

  1. php 长时间任务,棘轮PHP和长时间运行的任务
  2. C++之管道(Pipeline)模式
  3. Sqoop入门(一篇就够了)
  4. linux crond进程多,Linux之定时任务Crond详解
  5. 李群、李代数之我的理解
  6. 简单理解CMS与G1垃圾收集器
  7. 雷达篇(三)FMCW雷达框图及原理介绍
  8. 精选最新20个优秀源码下载网站排行
  9. C# ListView排序
  10. QT 语音合成(TTS)基于MS speech sdk