Android Wear上的Gracenote(GNSDK)

时间:2015-06-23 10:24:42

标签: android wear-os gracenote

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

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

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

如果不是:

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

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

最佳, dmkscr

1 个答案:

答案 0 :(得分:1)

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

使用任一方法(将音频字节或指纹传递到掌上电脑),您需要使用 GnMusicId 类而不是 GnMusicIdStream 。原因是 GnMusicIdStream 自动执行多个工作流程步骤(捕获音频,生成指纹,根据指纹执行MusicID查询),并且不提供单独执行它们的挂钩。 GnMusicId 是一个较低级别的类,可让您对此过程进行更细粒度的控制。

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

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

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

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