2017-09-23 1 views
1

Ich möchte Wellenformplotfunktionen zu meinem Soundrecorder/Player hinzufügen, indem ich Objective-C verwende. Ich entdeckte das AudioKit 4, das ein großartiges Framework zu sein scheint, und ich importierte die AudioKit & AudioKitUI-Frameworks von der Website audiokit.io. Ich verwende Xcode 9 mit iOS10.0 Ziel. Leider kann ich nicht einige Klassen aus dem Audiokit in meinem Objective-C-Code ... Zum Beispiel initialisieren, eine AKAudioPlayer Instanz zu erstellen, verwende ich:Verwenden von AudioKit mit Objective-C

AKAudioFile *audioFile = [[AKAudioFile alloc] initForReading: myURL error:&error]; 
AKAudioPlayer* playerAK = [[AKAudioPlayer alloc] initWithFile:audioFile looping:NO deferBuffering:false completionHandler:nil]; 

Von dem, was ich von Apple-Dokumentation verstehe über die Verwendung rasche Rahmen in Objective -C, dachte ich, dass die initWithFile: looping: deferBuffering: completionHandler: die gute Übersetzung in Objective-C von dem schnellen init Aufruf in AKAudioPlayer.swift in Audiokit Rahmen definiert war:

public init(file: AKAudioFile, 
       looping: Bool = false, 
       deferBuffering: Bool = false, 
       completionHandler: AKCallback? = nil) throws... 

die AKAudioFile Objektinstanziierung weder Warnung noch Fehler verursacht. Aber bei der Instantiierung von AKAudioPlayer gibt der Compiler einen Fehler zurück, der besagt, dass keine Schnittstelle den Selektor initWithFile: looping: deferBuffering: completionHandler:

erklärt Was mache ich falsch? Vielen Dank für die Hilfe

Antwort

0

von cmd-Klick auf den AKAudioPlayer Sie die Schnittstelle zu Objective-C ausgesetzt sehen, die einzige verfügbare init ist:

- (nonnull instancetype)init SWIFT_UNAVAILABLE; 

relevante Eigenschaften, um eine Datei zu laden wäre:

@property (nonatomic, readonly, strong) AKAudioFile * _Nonnull audioFile; 
@property (nonatomic, readonly, copy) NSString * _Nonnull path; 

Da der 1. nur gelesen wird, würde ich mit letzterem einen Schuss geben. Also würden Sie enden mit:

@import AudioKit; 

- (void)inSomeMethod { 
    AKAudioPlayer *player = [[AKAudioplayer alloc] init]; 
    player.path = @"/myPath/To/audioFile"; 
} 
+0

Danke. Aber AKAudioPlayer * player = [[AVAudioplayer alloc] init]; Erzeuge den gleichen Compiler Fehler ... (übrigens ist es AKAudioPlayer nicht AVAudioPlayer) – Denis

+0

Sorry, ich habe es bearbeitet, ich arbeite seit kurzem täglich mit 'AVAudioPlayer' und es hält sich an meinen Kopf. Anyway kannst du '[[AKAudioPlayer alloc] init]' aka '[AKAudioPlayer new]' instanziieren? Übrigens gibt es ein Beispiel auf dem Repo https://github.com/AudioKit/AudioKit/tree/master/Examples/iOS/HelloObjectiveC, vielleicht wird es Ihnen den Anfang machen. –

1

AudioKit wurde gerade als 4.0.1 veröffentlicht, um einige Fehler zu korrigieren. Also meine Frage ist jetzt obsolet!