diff --git a/README.md b/README.md index 2999ba8..5b4f1d0 100644 --- a/README.md +++ b/README.md @@ -124,53 +124,29 @@ let acoustID = AcoustID(apiKey: "zfkYWDrOqAk", timeout: 10.0) Lookup an AudioFingerprint object ``` swift -acoustID.lookup(newFingerprint) { response in - switch response { - case .failure(let error): - // AcoustID.Error - case .success(let results): - // [AcoustID.APIResult] - for result in results { - // Matching score (0.0 to 1.0) - let score = result.score - - for recording in result.recordings! { - // Song title - let title = recording.title - - // Song artists - let artists = recording.artists - - // Song release groups (Albums, Singles, etc.) - let releasegroups = recording.releasegroups - } +do { + let results = try await acoustID.lookup(newFingerprint) + // [AcoustID.APIResult] + for result in results { + // Matching score (0.0 to 1.0) + let score = result.score + for recording in result.recordings! { + // Song title + let title = recording.title + // Song artists + let artists = recording.artists + // Song release groups (Albums, Singles, etc.) + let releasegroups = recording.releasegroups } } -} -``` - -### Handling errors - -Throwing calls throw either an `AudioDecoder.Error` - -``` swift -do { - let fileURL = URL(fileURLWithPath: "Invalid.mp3") - try AudioFingerprint(from: fileURL) } catch { - // AudioDecoder.Error.invalidFile + // AcoustID.Error } ``` -Or an `AudioFingerprint.Error` +### Handling errors -``` swift -do { - try AudioFingerprint(from: "Invalid", duration: 46.0) -} catch { - // AudioFingerprint.Error.invalidFingerprint -} -``` +The `AudioFingerprint` class throws either `AudioDecoder.Error` or `AudioFingerprint.Error` errors, the `AcoustID` class throws `AcoustID.Error` errors. ### Accessing Chromaprints C API diff --git a/Tests/ChromaSwiftTests/ChromaSwiftTests.swift b/Tests/ChromaSwiftTests/ChromaSwiftTests.swift index a72f9ba..e8f9dbf 100644 --- a/Tests/ChromaSwiftTests/ChromaSwiftTests.swift +++ b/Tests/ChromaSwiftTests/ChromaSwiftTests.swift @@ -15,6 +15,7 @@ class ChromaSwiftTests: XCTestCase { let fireworksURL = Bundle.module.url(forResource: "Fireworks", withExtension: "mp3", subdirectory: "Audio")! let fireworksBase64 = "AQADtEmWMkmWaDjRo5l1XEOP5lmEH0cfNHQ-HF2o4SP6EH_QE80Z_MElBZ-Y4ghF1bBr1MLx489Rygfl4B-aL-Ak4-qFZ-qQZ6h-aNGPKzpOQ_yCI-9RfcEv3EEOLXWKHJU_NFIUnijRODyFeyke5OD0QG-OPPiO03jYFA9qBX6OB0doxSHB7gquBFou9Mrxo32g5Tj6oMGHhj36HChv-MLRJ0T5wP_wd_igHfnxD0dvGP2Cojn-4Wh29NmQTyv6HFr-4Ebzoz96NPtxssb5oEfzCneJsmj54TfOD76Oa8dP9K3QrPhQenhwS0BffCOOox_eo39wHg1X9Dz6DR7Doj-KPsO1o9mPK4lA5qB-9DneEI1CGmGFE6cynCnOHLh97D5q8fjQB9-NNx_uKBUu9AnhuAg_fMF-_Amq72jUQnWOvvBxG02lIc8eoMkRjsETGtrh53jUc9h0fAsuojR04sefo3EyaD7QHJH4KMfz4A8uSTp6hFmDPyia48cfHM0P7UmFE-EtPPCP_Dl0hC_O4jnKX0gJnchvoXxwB0d_9PjRC-mOO4Uo7kiLO0TzJ9iPZkf94snh5wj0UDjiJqRxUuiaFs_hUTr-D_lxaNc85OOD-jU85vjx4wmaUXioIHeK3YI-9MclH8cJvyh5HGcOLTdKTei-oHFT5MXzIUvq4yN4QvzQfBvy5WiDMDeu-9CPyDuaN8Rh9HiFI79R0R18q9Br-LhG_IcYnIcPfMTxAaJa4zh-Cz9-yPQRGhd-VKpUwt2OPTuuww8m5CT0MQquBDkdjHgkHTlRPiJEpD_6FMdj4T3KHOmh_fiDBzeeGhqP5gSO7g3EI4d_4cVvWJaP4-bR4sRxSRby4zueQzoq2ST8CzmLZ0e54_OKogF_xC_0ywgjB3XxH70eOGLmIddiuDp0Y_MeOEd-hI-C_nBVnCdxPEh1Tbh4vPABT8tRTccjLWYR8YX4RBmDL_qRK2GRv2hG9CNU8biSD9cPHY2aBaUSHs9xMM9yaBmJJ8fR52huPMJ3HI3CHu2ODz-k5AzKH88BRoeWbjF-pE8PTtPB6_hRjiHxZxQeHwd74z_CTLcQj8d39IHHK8UXDt6G3MahnXhy4jv-ZXikB8c_OA4_yFCp49fQH1eO9Dz648tRmwiTL8dX9Dm0KEoiPPrwXOgJLVUWfBeeL8IZBZImMdB14sIDKpSGN4fOgz8-HTYuG_SOTlGIxsnxKTougXmPhtnx5ZB39OHQ_IeuDD-aHl2O5_hxWhCVB78hq8e7oXyPhpyR63hr1A6aacd3vBOJV0d7I5NyAecunK3QKjJ-NFcGrTPyBD2mVMe-sMR__PiJPC3x5NB19GiqDE_CGC9YDs26o82Lpx9-WB2eF-dDHEfDMSjl44H8F95S49nxUId2OCJjZClx6eiPJi7u40pwHm9Kof0IT0cObw-sXsOVhcdl-GoEPcoJj0GN_oBGJg3-42WDKxeeHUejEvUWPAn0aDhSRSqe5GlwvLDa4ZHwSB_yg3p1PJqDR1_xg6oS6E1xpbnwG4yVKEdD1cZ1QmKPplugvcd14NIjNKJQSheuF7oFZ4k7XNoeXGD2B1rGJSOeHVfCoz-s48oo9MH5o2iW4-oBLQ5TgVk2bfjBHqq0Cw1_lBcuYMqzFKUkHdWIZsvxmfjDBNehhXqJSqRn6FOCH-FuoRmJsxMeHWsuNKOFnviF_MeL5-gO5kHXwj8OP8d7wedx-CEO__hl-MRhUiQOkwQOHzfh4zmcQ_iCyjl0aORghdGhw8fhB2_h8_jhB5_g08Al6OgJ9mh-MGTQaYd4Iq8EX_CITtLBGQwai0eCsFHhOQfDDn88dCJc3chvmNBfNH-gbUeTvcIb9BZ6vBX-QQsYGSUlWD4o7oJ-4uBRq9CXGE3Rh-UQvmjUrIip48mHPsuDpgpxUT_alcebbWCO58QzfOnhKoYcPmiyvEJZ9Bs-9PheMGh69BEc8XB1DeF8tEQ6QsyP0EPj76hcXIHP4vEs3E-QXAvC-Kh1nJKPx8dBIhcPPQl-_IeWuEc95biCo7ly1CJOPLgdVGh-HG_QjRAPq_ug2ceXxjj1ERVEcqnQv7gIHqmLW8mBjzhzhBf2NwnKV1Dp4xdR_UGTRTn05Ud9BemYbMR3lDqe5GiO6cYTksiPO8eT46SJfkkH66ikxdB3gd2P8LJhh0GvBz_eXWi0Dz3yU9CFlEmQBy_xR6h4NFaO5xFqB96Kisoh_egN10HH4MlRaDEu0cKjB93ho04kDlfQ_mAyCceh6RF8omqKD2g8aEuMHs186Dc-pSm-TOgP_0Z7g2cD3UdzhE_wFtPE49bRc0pC_MSPHz_ROA_aBaEsfIXo5EjLW-jx5dh7nMcT5sihTgdHHSaARYAZsRBFABILCBCCaCKMMAxZYQTQBgGBBBMkMACFVR4CIJQUgjECGVMKMYsAIIJQZ6jySAFCKIJEGGDNcBZZ5QE0UgsiDEAEIAQ0EYYgCxwhhAAgBCNQGCaYY3AQo4BjAhArBFIIGSkYQIIARiACBDmqEAAEkSGcUI4AggRCChhlgTKAAGSgYAYIJIRBigHBDLAGEkEJQdQQBIQAkFEKhOLECQqbEdBpgBwACmgIkAQAIQYJAIAQ6QABgGGELGJEEaCAYE4ZZoiCwjhAMBECUSAAARQYBRhgBAmHgBBIKZOYM8IRpIGAFAhBFRICIQMYIYRJRxSghggiBRFCNEwFtBAYShTBCCkBiNRACEMUAsAYAAARRBlBMEPAEEMAOUBaAKGgAAEhiCBAIMKASIYRQYxCAilDGBLIFAkEcNAQgQQkyhBCjOBCUAAQIdgY4xQgBgBgiEJKWEUUMFQABYgBjipkjICCKOOIEIQBRIRBghHEhOACEYKUEEQQpZQ0ikAmkCKEAMEAMxIgoRQwBBqKTAFEEWCYAkYRxw0YAAFHDBAKmaCEMUhARQygRBkOkFBQCQDAAUIYIIRACBFwOEEGHGScFAAgYxgzAjADCJEAIIOMEQ4CAAoxhAAjDAKIAEiEcYII4SgwSgBDDCIMAWeQIowRBZgTRghlgWFGGBWYcMIIY50SgBlsJDJIWCCEMA4w4QSBSiAhgCEGAIMEAUIRQQBBDCKElCpACMUEAEAIISRDhggGAJIMEKIQQkYApAAhxBIinADCCCgEMQIZRIhRShCqMFDCAAUIJgoIJwFQhAgiAFCAGcsQEQQIBghCQBBhFDAEMAMgIBQAJgxQyDBDgGKMMCMREkAsJpwwQChgoEDAECUUYEAAg4BhDApkjBAGOEEEgIYB" let fireworksHash = "00100100010001011111000101100111" + let invalidAPIKeyUrl = URL(string: "https://api.acoustid.org/v2/lookup?client=zfkYWDrUqAk&meta=recordings+releasegroups+compress&duration=46&fingerprint=AQABYJGikFSmJBCPijt6Hqkj_PjgH1l-XDyOnoeW48EFBqJ-4_BxHOeRT4Z_7IFPVLWRQ3sYwzJqW3iOixZeDdoTIeVRK7jE4znCPDrOHNcI8TnKI7wUNDryfvgfnDN6QjzRLsej48e5HbeCB9UHfzHEQ3TjYPrwu_gYdOXx5cSHMw_xED2PHlPy48eDZkW_47jEQufRE4auw8cXFtaP8MmOnMdvaA9jWEftHD8uyULHhBA_hM1x5Th59ImQ7nh2yBr8o5wR5spRHncu5LxwHX0I8UbZI9eFJzquEU9Eoju8NUV-fKjM491xKjz0ohfhQ8eUH88RfjkaLkeON4R2ozmOoz92iBz6Ic-OI48uVIalSUfvQnvh9fCOPi4eXFIonNBsNPKRR9hzfDv6HDmqDd_wKjs0Q8uJVy_u8KiFV7gvbLWKvngETRThoztK0vAP7-jj4sElhcIJLZrRH3mEPce3I3yO4tvxDb2yw-HR4zeqkcdFHd-L3XB9op-MK7iPqvnxlIUd4sepoP1x69CnEj18Qg98TA_-ICWV4wjUhkFz9MdxTIceNOyQ48yOnDvuHJ2mw66h49MOlMfjCZd0nEI9QtRRK0eOPXnQDXmOariOa0H1HO7RNcfdo43S4zr-YpcHV0cvGZeE6njyw8rCFHiOiuLxH6eSHXrRi_ChY_vR5wi_o-GyI8ehqSmaH8fRYw9EDv2Q5ziRRxcqw9Kko3ehHd50eEcfFw8uKRSgeUQjz8gj7Dm-Hf2Ro9qOb7h4VCSaE--NO0Qb-cKn49iuBldN1BNOHVVznIeVhcaPc2jH49-hK9LRHz6hw8f0HD_CPMrR7sjxhtBuNMfxoMceiOwQ4jsAJAUQlAEGmDCIAGXEAQBbyohCAgEVqEACCCIUA4QYAQgBVBAgiCGAKMIgEMIAYQgwSABhFmACCACIoEKQJhAxhhhBhFBCEAABJQgAhAgBkgFBhHCCEAKEQIYgRgAjCiFhBAAOCAQQQ4IgAJgh5xhklGBKCACQI-I4QggSSCiUgBBCAKEMEM4agRwRxxFCCBJIKAAREIAIaBBQQgKBiBBCMASAAIgAgaxgSgiLiCkHKSKEAcZIIpwzhBJCiFEKQQUQIAARSBRyiBCpgGBGGCEAcEAggAQSRgBqBDkbGYWYEgIo5Ig4hCCBiFIQKSGEAUAhkBARwiGGgABCEACIUEAYpgBRADBDyjFOAA")! let invalidAPIKeyData = Data("{\"error\" : {\"message\" : \"invalid API key\", \"code\" : 4}, \"status\" : \"error\"}".utf8) let invalidFingerprintUrl = URL(string: "https://api.acoustid.org/v2/lookup?client=zfkYWDrOqAk&meta=recordings+releasegroups+compress&duration=46&fingerprint=AwABYJGikFSmJBB_VFTQ88gHqzvgH1mu48KP5jw0Hz8OKYPzG_CPE8ePXIZ_7IHPo6qRQ3sYw_JRO8ePS7JwptAeIQyPByeP5wjz6DhzXCPE5yiP8FKORsj74c-D3-gJ8TTaBY-O5zh93AqqBV-gK8chWnQwHb9Y1COu8TjP4SeeycXR86gcTDl-PGhW9DuOJ2Kh9Thh6Dr84cth_Qgf5ciP09DeGI2Obzm-45IsdEwI8UPYHN_xH30ihNnRLjvkwusR3miuHGWP_0LOC9fRZ4GWH2eOXBee6LhGPBGJ7vDWFPnxodp4fIdKhcdZ9IQP8Zie40eYRznaHTneENqN5jiO_tghckWPfAfy6EJlwZLCoy-09_AK7-jj4sElhcIJLTU6H3mEPce3o88RHt_wDVWVHS564vmL86hFXMePrT764omgiYaP7kHJC0d5PC7uB9conNCiGfWOfNiT4zvC56iG6_jQKzscHj1-o1oUHtfxvdgN1yf6ybiC0sebH1ampTieo6J4_Li1Q59K9IIPPdh-9EH4Bw2548ihaima_ehx9NgDfWg-5MF55DvuHI00Ha-hB950eOhj4cIlVcJRjxB1hI1yYE8edBvyo9pxBW9QPYc7outxh0cb-cJ1_NjVwD96yTiFqsfzw8rCFD8-VObx7jgVHnrRi_ChY8qP5wi_HA2XI8dNaLfRHMfRHztEDv2QZ8eRRxcqw5IiHX2hHd50eEcfFw8uKRROaDYa-cgj7Dm-HeFzoNqOb7iyoyKaE7_xkUctH59c3Nh-4qpRK8J9VM2Pp4QdGj9OBe2P_9AVHf3hEzp8TM_xI8yVB50QqA3R3Ojx4JiOByI7hMezIz8AxARABDCABGICAONMAgI5SglEAgGgAgGUICEEI0IxQIgRgBAgBAGAGECAIswBIZwCVAEjBBBUKCcAJIIKQRp0xhBDBCECUAYgAo4gABAiggAJCBCCCEAIAUIAQwxBjABGFEICCqCIAMIwBYgCgBlyjkGGCSUEA8IRcRwhBAkkFAhIEACEEwZJAgSzxDjnjFCOEGKEEwpBBwQgAhoKlJBAIAGEYMwII4AgQCGABCJCSCC02UgQxYQywBgFERGHEkKMYhYpgAxAACKFHICEIAYEQ0gYAYADAgHEkCAIAGDIOQYZJZgSginkiDiOEIIEEgoiJYSAwACFEUBECCEYAkAAgQgBRCggDFNCKETKYYIJxQA")!