0

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

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

那么会发生什么:当手表处于 Wifi 中且未通过蓝牙连接到手机但仅通过 Wifi 时,它可以工作。现在通过蓝牙将手机连接到手表,手表应该通过手机连接到 Wifi。现在连接不再可用。所以通过手机的互联网识别是行不通的。有没有人知道可能是什么原因以及如何排除故障?

如果不:

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

希望你们中的一个人知道如何解决这个问题!提前谢谢了!任何帮助表示赞赏!

最好的,dmkscr

4

1 回答 1

1

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

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

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

  • 指纹开始(GnFingerprintType fpType,长音频采样率,长音频采样大小,长音频通道)
  • 指纹写入(字节 [] 音频数据,长音频数据大小)
  • 指纹结束()
  • 指纹数据获取()
  • findAlbums(java.lang.String 指纹数据,GnFingerprintType fpType)

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

  • 调用GnMusicId.fingerprintFromSource(IGnAudioSource audioSource, GnFingerprintType fpType)来生成指纹,使用 GnMic 的实例作为IGnAudioSource
  • 通过GnMusicId.fingerprintDataGet()获取指纹数据
  • 通过DataItemMessageApi将指纹数据传递给手持设备
  • 在手持设备上,调用GnMusicId.findAlbums(java.lang.StringfingerprintData, GnFingerprintType fpType)
于 2015-07-07T22:05:54.770 回答