大多数浏览器和
Developer App 均支持流媒体播放。
-
探索 ShazamKit
在使用 ShazamKit 时,善用 app 中 Shazam 的准确音频匹配功能。学习如何利用庞大的 Shazam 目录营造各种体验,包括从您的 app 捕获的视频中快速准确地识别正在播放的歌曲,根据室内播放的音乐提供动态视觉效果,甚至与外部音频同步,带来配套的 app 体验。我们还将向您展示如何在 ShazamKit 中构建匹配任意音频源的自定义目录,一切都在设备上完成。更深入的了解详见“用 ShazamKit 创建自定义音频体验”,您将和我们一起编写代码,并学习如何构建与流视频内容完美同步的教育 app。
资源
相关视频
WWDC23
WWDC22
WWDC21
-
下载
嗨 欢迎各位 我是玛尔 我在Shazam的产品团队 我希望大家喜欢WWDC21 我要在这里向各位介绍ShazamKit 这是能让你将音频辨识 整合到你的应用程序的框架 今天我会向各位说明 ShazamKit是什么 以及几个应用上的范例 接着 我会把时间交给我同事詹姆斯 他会告诉大家Shazam目录辨识 是怎么运作的 并且提供一些开始使用的诀窍 让我们从ShazamKit是什么开始 大家可能已经很熟悉Shazam 这个于2008年发表的音频辨识 应用程序 也是App Store上面 最早的应用程序之一 这个应用程序在13年后成长很多 甚至Shazam这个字还被当成动词使用 它的技术赋予Siri “这是什么歌”的功能 并且整合到快捷方式和控制中心里 它的核心技术是音频辨识 精准和几乎是实时的音频配对 就算背景有噪音下也能做到 辨识是通过聆听音频内 不同的声学记号 然后在Shazam自己的目录内容中 或者在目前使用者能够 自己建立的音频目录中 寻找精准的配对 然而 不同于SoundAnalysis Shazam并不是侦测及分析 话语、歌唱和嗡嗡声的声音分类器 事实上 Shazam完全无法辨别出 特定的声响 像是在音频中的笑声或掌声 很快地 詹姆斯会向大家说明 Shazam的辨识过程 如果大家想了解 声音的侦测和分类 也可以去看SoundAnalysis那段 同时 让我们再多谈谈ShazamKit 这个能将辨识功能 带入你的应用程序的框架 ShazamKit可以分成三个组件 包含Shazam目录辨识 自定目录辨识和数据库管理 Shazam目录辨识让你能够 在你的应用程序中加入歌曲辨识 自定目录辨识则让你能更进一步 在设备端和随机音频做比对 这一段我们主要会把重点 放在Shazam目录辨识和数据库管理 不过 请跟着我们的同事亚历克斯 一起写程序编码 他会告诉大家如何 “在你的应用程序 建立使用者音频比对” 接下来 要向大家说明一些 你能在应用程序上 利用ShazamKit的机会 让我们从找到一张完美的自拍开始 自拍可以很有趣 当你能创造特殊的情绪和气氛 就更有趣了 Shazam目录辨识能帮忙 辨识出环境中播放的音乐 并且找出歌曲的元数据 例如歌曲名称和艺人 不过 你还能创造有点不同的体验 或氛围 让你的自拍 不只是在沙发上听音乐和录音 ShazamKit应用程序界面 也会传回例如类别的元数据 让你能够模拟在闹区俱乐部里 享受那首歌的样子 ShazamKit不只会辨识音乐 在虚拟教学的环境下也很有用 远距教学对老师和学生来说 都是很大的挑战 包括要跟上屏幕中的课程 以及在应用程序之间的操作 自定目录辨识 能让你的教育应用程序 提供他们一种更无缝接轨的体验 通过语音课程内容 作为某种远程摇控 当视频会议在播放内容时 这个框架能让学生的应用程序 出现同步化的活动 老师们在知道学生的应用程序 即便是暂停或重复部分课程后 依旧能跟上 也能比较安心 如果你跟我一样喜欢居家改造节目 你一定会喜欢当家具一闪过屏幕 就试着立刻找出来的挑战 利用ShazamKit让你的展示和影片 变成可以购买的 还有互动性第二屏幕的扩增实境体验 不论是实时或在有需求时收看 观众都在收看的同时 在家同步浏览 模拟 以及购买该型号 现在让我们在真实生活中试试看 你是否曾经看着 你和你朋友在一起时的影片 你希望知道背景播放的是哪一首歌? 这里有个例子 我朋友跟我想看看彼此的星期五夜晚 这是他寄给我的影片 我不认识任何人 能让我如此放松 感受那频率 放松享受 只有你和我 使用ShazamKit 我的应用程序开始做辨识 并且在Shazam的目录中找到这首歌 现在我知道播放的是什么歌 我可以把它存到数据库 或者用它开启周末美好的播放列表 接下来轮到詹姆斯 告诉大家Shazam目录辨识 是怎么运作的 谢谢你 玛尔 嗨 各位 我是詹姆斯 我是Shazam团队的 程序经理 今天我要跟大家说明在玛尔的影片中 ShazamKit是如何辨识音乐的 当玛尔按下“辨识歌曲”按钮时 发生了什么事呢? ShazamKit将影片中的音频代表 传送到Shazam的服务器 在Shazam的音乐目录中找到配对 并且传回关于那首歌的信息 在我们的应用程序上显示出来 让我们进一步看看 Shazam如何和音频配对 很重要的是Shazam并不会 和音频本身做配对 而是会产生一个我们叫“记号”的 有损音频代表 并且和它做比对 这种方式有两个好处 首先 记号的大小比起它的来源 至少小了十倍 这能大幅度降低 通过网络传输的数据量 其次 记号是不可逆的 意思是说 不能以特定的记号 来复原原始音频 这对于保护我们使用者的隐私 是非常重要的 那么记号听起来是什么样子? 让我放一首 看大家能不能 辨识出是什么歌 没错 这是比莉艾利什的《我的未来》 你也可以自己用Shazam比对看看 现在让我们谈谈目录 目录是记号的集合 当然 如果少了从音频建立出来 描述音频的相关元数据 目录中的记号就没什么用 我们把这些称为参考记号 元数据则是原始音频的参照 Shazam目录 是包含大量全球音乐的 参考记号集合 它被存放在云端空间 并且由Apple组织和管理 经常把最新的曲目更新上去 在Shazam目录的每个记号 皆是从曲子的完整音频所产生的 而且有对应到那首歌 元数据的参照 万一你想跟自己的音频比对怎么办? 在这种情况下 你可以用用户目录 这些是由随机音频 不只是从音乐 所产生的记号集合 而且用户可以加入自己的元数据 相对于Shazam目录存储于云端 比对用户目录则是 在你自己的应用程序中进行 大家可以收看 “以ShazamKit 建立使用者音频体验” 的编码 来了解更多 当你想要搜寻目录 你需要一个查询记号 它代表你想搜寻的音频的一小部分 在这个应用程序中 它是包含音乐的一部分音频 在这个图标中 查询记号 和代表一首音乐完整音频的参考记号 做比对 并且配对成功 每首歌在Shazam目录中搜寻配对时 都会经过相同的步骤 那么回到第一张图 现在我们知道 我们将查询记号通过网络送出 和Shazam目录做比对 这个目录是参考记号 和歌曲信息的集合 当玛尔按下“辨识”的按钮时 配对成功 并且传回歌曲的信息 ShazamKit很棒的地方在于 它能通过对话对象帮你完成这些 对话对象的输入端可以是音频或记号 结果则通过它的委托传送回去 在你开始比对Shazam目录前 你需要替开发者端的应用标识符 开启ShazamKit应用程序服务 如果是在用户目录配对 这个步骤则不是必要的 好 让我们看看它的程序编码 长什么样子 首先 我要建立一个对话对象 它的默认初始化程序 会和Shazam目录做比对 接着 我要设定它的委托 这样一来搜寻到任何配对就会通知我 如果你要以持续的音频串流做配对 例如从麦克风来的音频 我们建议你使用 对话上的matchStreamingBuffer 因为它是针对那种情况的优化方法 不过 在我们这个例子中 我已经取得影片中的完整音频 所以我要建立一个记号产生器 再把音频传过去 当我准备好进行配对时 我会把产生器中的记号方法叫出来 将我上传的音频转化成记号 接着我将产生的记号 传送到对话对象的配对方法 回到我们的应用程序 从音频中产生记号 和利用对话在Shazam目录中 找到配对的歌曲之后 下一步是显示歌曲的信息 刚才我描述过如何用记号和元数据 建立目录 在Shazam目录的例子中 这个元数据是歌曲的信息 例如曲目的名称和艺人 以及其他像是所属专辑图标的属性 在ShazamKit中 代表这些信息的对象叫做媒体项目 对于刚刚配对成功的记号 你还会收到额外的信息 例如在音频中配对到的位置在哪 和配对音频和原始音频之间 在频率上的任何差异 这叫做配对的媒体项目 它是媒体项目的子集 在先前的程序代码范例中 我建立了对话委托 当进行配对时 我们可以通过它 来通知我们 成功配对、没有配对或错误的情形 一个记号有可能会配对到很多首曲目 这些会以配对的媒体项目数组呈现 在我们的应用程序码中 我们会采用第一个 现在我们可以开始 设定一些回传的属性 专辑图标是靠artworkURL属性取得 歌曲名称和演出者是通过 名称和艺人属性添加上去的数据 当歌曲在Apple音乐目录中配对成功 和显示它的详细内容时 应该按照Apple音乐识别指南来 设置歌曲的归因 在本app中 我们加入能启动 由媒体项目回传Apple音乐URL的按扭 在你的应用程序中 辨识出歌曲的使用者 可能会希望将这首歌 存到他们的Shazam数据库 如果有安装Shazam应用程序 便可以读取Shazam数据库 或长按 控制中心模块的音乐辨识也可以 而且它会同步到装置上 让我们来试试看 首先 我要长按 控制中心模块的音乐辨识 上面显示我里面已经有几首歌了 接着 按应用程序中“加入”的按钮 把找到的音乐加入那个列表内 现在我要重开数据库 检查看看有没有加进去 很好 已经进去了 而且上面出现 歌曲来源的应用程序名称 这里是程序代码的样子 SHMediaLibrary内建的默认实体 能对应到用户Shazam数据库 这是以端对端加密储存 只有在授予双因素认证的设备上 可以存取 数据库只能接收 对应到Shazam目录中歌曲的项目 要写入Shazam数据库 并不需要特殊权限 不过我们强烈建议 不要在未知会使用者的状况下 将内容储存进去 所有存入数据库的歌曲可归因于 加入这些歌曲的app 在MediaItem 我们还开放很多属性 让大家能够探索 例如matchOffset 它会显示配对发生在歌曲的什么位置 此外 新的MusicKit框架 提供了描述歌曲和它的关系的 型别对象 我们已经开放 歌曲属性的Swift程序语言 想知道更多细节 各位可以查看 “在Swift程序语言中 使用MusicKit”这一段 现在我们认识它的全貌了 我们将音频记号传送到 Shazam目录做配对 使用对话来操控整个流程 接着对话会将歌曲信息 以配对的媒体项目的形式 通过它的委托回传 我们同时提供我们应用程序的用户 将该歌曲加入他们的Shazam数据库 这个选项 现在我把时间交还给玛尔 她会向大家说明一些很棒的作法 交给你了 玛尔 谢谢你 詹姆斯 现在大家知道ShazamKit是什么 它是如何运作 以及怎么应用它 各位就可以开始组建了 在大家开始执行ShazamKit时 请参考这些很好的作法 首先 如果你是要比对实时的音频 像是从麦克风来的音频 请使用matchStreamingBuffer 它比较容易 而且能够处理很多 产生大范围记号的基本逻辑 接着 如果你的案例需要用到麦克风 当你一得到你要的结果 就马上停止录音 这样你能够避免消耗不必要的资源 或是避免麦克风的运作时间 比使用者预期得更长 最后 在写入用户的数据库前 我们强烈建议提供使用者 选择同意的选项 和从一开始就说清楚这个举动 我希望大家喜欢认识ShazamKit 我们等不及想要看 大家创造的神奇经验和作品 我们刚刚讨论的所有信息 以及文件的连结都附在这一段里面 相信大家可以开始了 还有 别忘了试试看 自定目录辨识的编码 谢谢各位收看 希望你们也能继续享受WWDC21 [音乐]
-
-
9:11 - Matching signatures using SHSession
// Matching signatures using SHSession let session = SHSession() session.delegate = self let signatureGenerator = SHSignatureGenerator() try signatureGenerator.append(buffer, at: nil) let signature = signatureGenerator.signature() session.match(signature)
-
10:45 - Receive matches via session delegate
// Receiving matches via the session delegate extension SongResultViewController: SHSessionDelegate { public func session(_ session: SHSession, didFind match: SHMatch) { guard let matchedMediaItem = match.mediaItems.first else { return } DispatchQueue.main.async { self.songView.titleLabel.text = matchedMediaItem.title self.songView.artistLabel.text = matchedMediaItem.artist } } }
-
12:24 - Add to Shazam library
// Adding to a customer’s library guard let matchedMediaItem = match.mediaItems.first else { return } SHMediaLibrary.default.add([matchedMediaItem]) { error in if error != nil { // handle the error } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。