267 строки
6.9 KiB
C#
267 строки
6.9 KiB
C#
using System;
|
|
using CoreGraphics;
|
|
using Foundation;
|
|
using ObjCRuntime;
|
|
using AVFoundation;
|
|
|
|
namespace ShazamKit {
|
|
|
|
[Native]
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[ErrorDomain ("SHErrorDomain")]
|
|
public enum SHErrorCode : long
|
|
{
|
|
InvalidAudioFormat = 100,
|
|
AudioDiscontinuity = 101,
|
|
SignatureInvalid = 200,
|
|
SignatureDurationInvalid = 201,
|
|
MatchAttemptFailed = 202,
|
|
CustomCatalogInvalid = 300,
|
|
CustomCatalogInvalidURL = 301,
|
|
MediaLibrarySyncFailed = 400,
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[Static]
|
|
enum SHMediaItemProperty
|
|
{
|
|
[Field ("SHMediaItemShazamID")]
|
|
ShazamId,
|
|
[Field ("SHMediaItemTitle")]
|
|
Title,
|
|
[Field ("SHMediaItemSubtitle")]
|
|
Subtitle,
|
|
[Field ("SHMediaItemArtist")]
|
|
Artist,
|
|
[Field ("SHMediaItemWebURL")]
|
|
WebUrl,
|
|
[Field ("SHMediaItemAppleMusicID")]
|
|
AppleMusicId,
|
|
[Field ("SHMediaItemAppleMusicURL")]
|
|
AppleMusicUrl,
|
|
[Field ("SHMediaItemArtworkURL")]
|
|
ArtworkUrl,
|
|
[Field ("SHMediaItemVideoURL")]
|
|
VideoUrl,
|
|
[Field ("SHMediaItemExplicitContent")]
|
|
ExplicitContent,
|
|
[Field ("SHMediaItemGenres")]
|
|
Genres,
|
|
[Field ("SHMediaItemISRC")]
|
|
Isrc,
|
|
[Field ("SHMediaItemMatchOffset")]
|
|
MatchOffset,
|
|
[Field ("SHMediaItemFrequencySkew")]
|
|
FrequencySkew,
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
[DisableDefaultCtor]
|
|
interface SHCatalog
|
|
{
|
|
[Export ("minimumQuerySignatureDuration")]
|
|
double MinimumQuerySignatureDuration { get; }
|
|
|
|
[Export ("maximumQuerySignatureDuration")]
|
|
double MaximumQuerySignatureDuration { get; }
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (SHCatalog))]
|
|
interface SHCustomCatalog
|
|
{
|
|
[Export ("addReferenceSignature:representingMediaItems:error:")]
|
|
bool Add (SHSignature signature, SHMediaItem[] mediaItems, [NullAllowed] out NSError error);
|
|
|
|
[Export ("addCustomCatalogFromURL:error:")]
|
|
bool Add (NSUrl url, [NullAllowed] out NSError error);
|
|
|
|
[Export ("writeToURL:error:")]
|
|
bool Write (NSUrl url, [NullAllowed] out NSError error);
|
|
|
|
[Static]
|
|
[Export ("new")]
|
|
[return: Release]
|
|
SHCustomCatalog Create ();
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
[DisableDefaultCtor]
|
|
interface SHMatch : NSSecureCoding
|
|
{
|
|
[Export ("mediaItems", ArgumentSemantic.Strong)]
|
|
SHMatchedMediaItem[] MediaItems { get; }
|
|
|
|
[Export ("querySignature", ArgumentSemantic.Strong)]
|
|
SHSignature QuerySignature { get; }
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (SHMediaItem))]
|
|
[DisableDefaultCtor]
|
|
interface SHMatchedMediaItem : NSSecureCoding
|
|
{
|
|
[Export ("frequencySkew")]
|
|
float FrequencySkew { get; }
|
|
|
|
[Export ("matchOffset")]
|
|
double MatchOffset { get; }
|
|
|
|
[Export ("predictedCurrentMatchOffset")]
|
|
double PredictedCurrentMatchOffset { get; }
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
[DisableDefaultCtor]
|
|
interface SHMediaItem : NSSecureCoding, NSCopying
|
|
{
|
|
[NullAllowed]
|
|
[Export ("shazamID")]
|
|
string ShazamId { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("title")]
|
|
string Title { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("subtitle")]
|
|
string Subtitle { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("artist")]
|
|
string Artist { get; }
|
|
|
|
[Export ("genres", ArgumentSemantic.Strong)]
|
|
string[] Genres { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("appleMusicID")]
|
|
string AppleMusicId { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("appleMusicURL", ArgumentSemantic.Strong)]
|
|
NSUrl AppleMusicUrl { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("webURL", ArgumentSemantic.Strong)]
|
|
NSUrl WebUrl { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("artworkURL", ArgumentSemantic.Strong)]
|
|
NSUrl ArtworkUrl { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("videoURL", ArgumentSemantic.Strong)]
|
|
NSUrl VideoUrl { get; }
|
|
|
|
[Export ("explicitContent")]
|
|
bool ExplicitContent { get; }
|
|
|
|
[NullAllowed]
|
|
[Export ("isrc")]
|
|
string Isrc { get; }
|
|
|
|
[Static]
|
|
[Export ("mediaItemWithProperties:")]
|
|
SHMediaItem Create (NSDictionary<NSString, NSObject> properties);
|
|
|
|
[Async]
|
|
[Static]
|
|
[Export ("fetchMediaItemWithShazamID:completionHandler:")]
|
|
void FetchMediaItem (string shazamId, Action<SHMediaItem, NSError> completionHandler);
|
|
|
|
[Export ("valueForProperty:")]
|
|
NSObject GetValue (string property);
|
|
|
|
[Export ("objectForKeyedSubscript:")]
|
|
NSObject GetObject (string key);
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
[DisableDefaultCtor]
|
|
interface SHMediaLibrary
|
|
{
|
|
[Static]
|
|
[Export ("defaultLibrary", ArgumentSemantic.Strong)]
|
|
SHMediaLibrary DefaultLibrary { get; }
|
|
|
|
[Async]
|
|
[Export ("addMediaItems:completionHandler:")]
|
|
void Add (SHMediaItem[] mediaItems, Action<NSError> completionHandler);
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
interface SHSession
|
|
{
|
|
[Export ("catalog", ArgumentSemantic.Strong)]
|
|
SHCatalog Catalog { get; }
|
|
|
|
[Wrap ("WeakDelegate")]
|
|
[NullAllowed]
|
|
ISHSessionDelegate Delegate { get; set; }
|
|
|
|
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
|
|
NSObject WeakDelegate { get; set; }
|
|
|
|
[Export ("initWithCatalog:")]
|
|
IntPtr Constructor (SHCatalog catalog);
|
|
|
|
[Export ("matchStreamingBuffer:atTime:")]
|
|
void Match (AVAudioPcmBuffer buffer, [NullAllowed] AVAudioTime time);
|
|
|
|
[Export ("matchSignature:")]
|
|
void Match (SHSignature signature);
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
[DisableDefaultCtor]
|
|
interface SHSignature : NSSecureCoding, NSCopying
|
|
{
|
|
[Export ("initWithDataRepresentation:error:")]
|
|
[DesignatedInitializer]
|
|
IntPtr Constructor (NSData dataRepresentation, [NullAllowed] out NSError error);
|
|
|
|
[Export ("duration")]
|
|
double Duration { get; }
|
|
|
|
[Export ("dataRepresentation", ArgumentSemantic.Strong)]
|
|
NSData DataRepresentation { get; }
|
|
|
|
[Static]
|
|
[Export ("signatureWithDataRepresentation:error:")]
|
|
[return: NullAllowed]
|
|
SHSignature GetSignature (NSData dataRepresentation, [NullAllowed] out NSError error);
|
|
}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[BaseType (typeof (NSObject))]
|
|
interface SHSignatureGenerator
|
|
{
|
|
[Export ("appendBuffer:atTime:error:")]
|
|
bool Append (AVAudioPcmBuffer buffer, [NullAllowed] AVAudioTime time, [NullAllowed] out NSError error);
|
|
|
|
[Export ("signature")]
|
|
SHSignature Signature { get; }
|
|
}
|
|
|
|
interface ISHSessionDelegate {}
|
|
|
|
[iOS (15,0), Mac (12,0), Watch (8,0), TV (15,0), MacCatalyst (15,0)]
|
|
[Protocol, Model (AutoGeneratedName = true)]
|
|
[BaseType (typeof (NSObject))]
|
|
interface SHSessionDelegate
|
|
{
|
|
[Export ("session:didFindMatch:")]
|
|
void DidFindMatch (SHSession session, SHMatch match);
|
|
|
|
[Export ("session:didNotFindMatchForSignature:error:")]
|
|
void DidNotFindMatch (SHSession session, SHSignature signature, [NullAllowed] NSError error);
|
|
}
|
|
}
|