Gracenote (GNSDK) Android 磨损

Gracenote (GNSDK) on Android Wear

我正在尝试开发一个 Android Wear 应用程序,它可以使用 Gracenote 的 GNSDK 识别歌曲。我正在构建他们的示例应用程序。

我在可穿戴设备上使用 Wifi 时遇到问题。示例应用程序正在尝试识别歌曲,但未连接到互联网。 (尽管其他应用程序运行良好。)

那么会发生什么: 当手表处于 Wifi 状态且未通过蓝牙连接到 phone 时,它只能通过 Wifi 连接。现在通过蓝牙将 phone 连接到手表,手表应该通过 phone 连接到 Wifi。现在连接不再可用。因此无法通过 phone 的互联网进行识别。有人知道可能是什么原因以及如何解决问题吗?

如果没有:

有没有办法不通过 GnMic 进行完整的专辑识别,而只从 GnMusicIDStream 对象中获取指纹?如果是这样,怎么办?其背后的想法是通过可穿戴设备上的 GnMic 听歌,只抓取指纹,然后将其发送到移动设备。在那里,通过基于指纹的识别来识别歌曲并将结果发送回手表。

希望你们中的一个知道如何解决这个问题!提前谢谢了!感谢您的帮助!

最好的, dmkscr

由于直接从 Wear 设备访问互联网的限制,您必须通过 DataItem 或 [=19= 将原始音频字节或指纹传递到手持设备]MessageApi。 (有关这些 Wear API 的信息,请参阅 https://developer.android.com/training/wearables/data-layer/index.html。)然后,您可以在设备上生成指纹 and/or 并提交 MusicID 查询。然后,您需要再次使用 DataItemMessageApi 将结果数据传回 Wear 设备进行显示。

无论使用哪种方法(将音频字节或指纹传递到手持设备),您都需要使用 GnMusicId class 而不是 GnMusicIdStream 。原因是 GnMusicIdStream 自动执行多个工作流程步骤(捕获音频、生成指纹、根据指纹执行 MusicID 查询),并且不提供单独执行它们的挂钩。 GnMusicId 是一个较低级别 class,可让您更精细地控制此过程。

如果您选择将音频数据传递给手持设备,您可以使用GnMic.getData()在Wear设备上获取音频字节。通过 DataItemMessageApi 将音频数据字节传递到手持设备。然后,在手持设备上, 使用 GnMusicId 的以下方法生成指纹并执行 MusicID 查询:

  • fingerprintBegin(GnFingerprintType fpType, long audioSampleRate, long audioSampleSize, long audioChannels)
  • fingerprintWrite(byte[] audioData, long audioDataSize)
  • fingerprintEnd()
  • fingerprintDataGet()
  • findAlbums(java.lang.String 指纹数据, GnFingerprintType fpType)

可选,如果您选择在 Wear 设备上生成指纹,请执行以下操作

  • 调用GnMusicId.fingerprintFromSource(IGnAudioSource audioSource, GnFingerprintType fpType)生成指纹,使用GnMic实例作为IGnAudioSource
  • 通过GnMusicId.fingerprintDataGet()
  • 获取指纹数据
  • 通过DataItemMessageApi
  • 将指纹数据传递到掌上电脑
  • 在手持设备上,调用GnMusicId.findAlbums(java.lang.String fingerprintData, GnFingerprintType fpType)