2

我想使用 Objective-C 为我的录音机/播放器添加波形图功能。我发现 AudioKit 4 似乎是一个很棒的框架,我从 audiokit.io 网站导入了 AudioKit 和 AudioKitUI 框架。我正在使用带有 iOS10.0 目标的 Xcode 9。不幸的是,我无法在我的 Objective-C 代码中初始化 AudioKit 中的一些类......例如,要创建一个 AKAudioPlayer 实例,我使用:

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

根据我从 Apple 文档中关于在 Objective-C 中使用 swift 框架的了解,我认为这 initWithFile: looping: deferBuffering: completionHandler:是从 AudioKit 框架中的 AKAudioPlayer.swift 中定义的 swift init 调用在 Objective-C 中的良好翻译:

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

AKAudioFile 对象实例化既不会导致警告也不会导致错误。但是在实例化 AKAudioPlayer 时,编译器返回一个错误,说没有接口声明选择器initWithFile: looping: deferBuffering: completionHandler:

我究竟做错了什么?感谢帮助

4

2 回答 2

2

AudioKit 刚刚发布为 4.0.1 以纠正一些错误。所以我的问题现在已经过时了!

于 2017-09-25T12:38:24.537 回答
0

通过cmd-clickAKAudioPlayer可以看到暴露给objective-c的界面,唯一可用init的是:

- (nonnull instancetype)init SWIFT_UNAVAILABLE;

与加载文件相关的属性将是:

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

由于第一个是只读的,所以我会尝试后者。所以你最终会得到:

@import AudioKit;

- (void)inSomeMethod {
    AKAudioPlayer *player = [[AKAudioplayer alloc] init];
    player.path = @"/myPath/To/audioFile";
}
于 2017-09-23T10:27:42.903 回答