Use MusicBrainz in iOS(一)初步使用

2024-05-26 10:48

本文主要是介绍Use MusicBrainz in iOS(一)初步使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近比较忙,一些文章写到了印象笔记中去了,也确实没有什么拿得出手写上博客的,所以最近都没怎么写博客。

今天接到了一个任务,就是使用MusicBrainz获取音乐的完整信息。今天下来,简单搭建好了工程的环境,写了个最简单的Demo,其中遇到了不少的坑,现在总结下,让朋友们少走点弯路。

首先介绍下MusicBrainz,简单来说它就是一个数据库(或者说是音乐世界的百科全书),通过它可以根据音乐文件的一小段信息,如歌曲名,歌手和创作时间等零碎信息,从数据库中获取该歌曲的完整信息。

对于那些热爱音乐而又有点强迫症的用户是最适合不过的了。


由于任务只是在iOS上发起网络请求从MusicBrainz中获取数据,所以我直奔主题了。

1.Clone MusicBrainz-objc from GitHub

从GitHub上下载MusicBrainz-objc的第三方类库,注意一定要Clone(原因下面说明),不能简单地Download ZIP:


也可以直接用命令git clone,只要不是简单的Download ZIP就行了。


2.Create static library and headers

打开工程,选择libmusicbrainz-iphoneos的scheme,Build工程。

如果该文件来自于Download ZIP,由于没有git文件,所以运行shell script时会报错,也无法加载submodules。

如果之前已经运行过了,建议通过Command + Shift + K,Clean一下已经生成的文件。



在Products下通过Show in Finder打开生成的文件路径:



3.Add library to project

新建一个工程MusicBrainzDemo,将Debug-iphoneos或Debug-iphonesimulator中生成的静态库文件和头文件复制到该工程的MusicBrainzDemo文件夹中。



注意一定要将Headers和.a文件放进MusicBrainzDemo / MusicBrainzDemo目录中,否则要在Build Settings下另外设置类库的查找路径。

接着添加以上文件到工程中。


4.Build Settings

打开MusicBrainzDemo工程,打开Build Settings选项,搜索Header Search Paths,添加一项:$(SDKROOT)/usr/include/libxml2,目的是给出libxml2这个动态库的头文件搜索路径。

如下图:


由于MusicBrainz类库还用到了自行创建的Category,所以还要在Other Linker Flags中添加-all_load选项。否则会报错。



5.Build Phases

打开Build Phases选项,添加以下类库:



经过以上步骤,类库在工程中就配置好了,有点麻烦,CocoaPods也不支持该类库(该项目最近一次更新在两年前,现在都来到了iOS 7的年代,原来的工程还停留在iOS 5,如果按MusicBrainz在GitHub上的指导还需要iphone simulator 5.1,实在太麻烦。挺大的一个坑,所以这里我直接按照自己的思路配置项目)。


6.Code and Test

添加代码,测试一下。关于MusicBrainz-iOS类库中的API详见其文档

代码如下:

#import "ViewController.h"
#import "MB.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad
{[super viewDidLoad];MBConnection *conn = [MBConnection connection];MBRequest *req = [MBRequest lookupWithEntity:MBEntityArtistmbid:@"86119d30-d930-4e65-a97a-e31e22388166"incParameters:(MBIncParameterArtistRels | MBIncParameterReleaseGroups)];void (^successBlock)(MBRequest *, MBMetadata *) = ^(MBRequest *request, MBMetadata *metadata) {NSLog(@"%@", metadata.Artist.Name);NSLog(@"success");};void (^failureBlock)(MBRequest *, NSError *, NSData *) = ^(MBRequest *request, NSError *error, NSData *data) {NSLog(@"Error for %@", error);};[conn enqueueRequest:req onSuccess:successBlock onFailure:failureBlock];
}@end

运行后控制台输出如下:

2014-04-10 02:00:46.632 MusicBrainzDemo[16273:60b] -[MBConnection enqueueRequest:onSuccess:onFailure:] [Line 120] method => Thursday, April 10, 2014 at 2:00:46 AM China Standard Time
Request
-------
curl -X GET -H "Accept-Language: en, fr, de, zh-Hans, zh-Hant, ja, nl, it, es, es-MX, ko, pt, pt-PT, da, fi, nb, sv, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, en-AU, ca, hu, vi, en-us" -H "User-Agent: libmusicbrainz-objc-faf64ac" "http://musicbrainz.org:80/ws/2/artist/86119d30-d930-4e65-a97a-e31e22388166/?client=libmusicbrainz-objc-test&inc=release-groups%2Bartist-rels&limit=25&offset=0"
2014-04-10 02:00:46.637 MusicBrainzDemo[16273:60b] -[MKNetworkEngine reachabilityChanged:] [Line 194] Server [musicbrainz.org] is reachable via Wifi
2014-04-10 02:00:49.781 MusicBrainzDemo[16273:60b] 陳奕迅
2014-04-10 02:00:49.781 MusicBrainzDemo[16273:60b] success

这段代码的功能是通过一个MBID从MusicBrainz数据库中获取艺术家信息,也就是陈奕迅(歌神啊)。


初步的配置和简单的测试Demo到此为止,接下来会做稍微深层次的探索。博客会继续更新。



这篇关于Use MusicBrainz in iOS(一)初步使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004253

相关文章

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Integration Redis 使用示例详解

《SpringIntegrationRedis使用示例详解》本文给大家介绍SpringIntegrationRedis的配置与使用,涵盖依赖添加、Redis连接设置、分布式锁实现、消息通道配置及... 目录一、依赖配置1.1 Maven 依赖1.2 Gradle 依赖二、Redis 连接配置2.1 配置 R

Python WSGI HTTP服务器Gunicorn使用详解

《PythonWSGIHTTP服务器Gunicorn使用详解》Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处... 目录一、什么是 Gunicorn?二、为什么需要Gunicorn?三、安装Gunicorn四、基本使用启

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

使用Python提取PDF大纲(书签)的完整指南

《使用Python提取PDF大纲(书签)的完整指南》PDF大纲(Outline)​​是PDF文档中的导航结构,通常显示在阅读器的侧边栏中,方便用户快速跳转到文档的不同部分,大纲通常以层级结构组织,包含... 目录一、PDF大纲简介二、准备工作所需工具常见安装问题三、代码实现完整代码核心功能解析四、使用效果控

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

MYSQL中information_schema的使用

《MYSQL中information_schema的使用》information_schema是MySQL中的一个虚拟数据库,用于提供关于MySQL服务器及其数据库的元数,这些元数据包括数据库名称、表... 目录关键要点什么是information_schema?主要功能使用示例mysql 中informa