I'm working on migrating my Android app from the legacy Gracenote Mobile Client to the newer GNSDK for Mobile SDK, and I've hit a few snags:

  1. In mobile client, I used GNOperations.recognizeMIDStreamFromRadio(GNSearchResultReady, GNConfig, samplePCMBuffer) to initiate a fingerprint and lookup operation on a PCM buffer. My application can only supply prerecorded audio to Gracenote (as opposed to simply pointing Gracenote at a streaming audio source), ideally as raw PCM though I could encode to standard compression formats if necessary. What should I use from the GNSDK for Mobile API to effect the same fingerprint and lookup operation on supplied prerecorded audio data, which can hopefully still be raw PCM?
  2. The class GnMusicId looks like it might be a handy generic fingerprint generator and query issuer class, so it might be the answer to #1 above.  However, I haven't found a way to determine when it finishes writing a fingerprint and, therefore, we are ready to issue a query.  How can I get a callback letting me know that GnMusicId has finished writing a fingerprint from the GnMusicId.fingerprintWrite(byte[] audioData, long audioDataSize) method, and that the fingerprint is ready to be used in a query via GnMusicId.findAlbums(fingerprintDataGet(), GnFingerprintType.kFingerprintTypeStream6)?
  3. In Mobile Client I was able to cancel ongoing Gracenote operations using GNOperations.cancel(GNSearchResultReady) -- I've read that the new architecture requires that specific operations be canceled individually due to a more modular design, but I haven't found a standard cancellation API on the various operations the GNSDK for Mobile can perform -- how should I cancel fingerprint and song lookup operations in GNSDK for Mobile?