-1

在我用于语音识别的 Objective-C 方法中,我有一些代码来测量扬声器的音量。然而,当我尝试将它翻译成 Swift 时,我遇到了 Swift 如何处理相对于 Objective-C 的指针的问题。

这是Objective-C doe:

    AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];

        [inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {

            if ([buffer floatChannelData] != nil) {//open 1 in block

                float volume = fabsf(*buffer.floatChannelData[0]);

                    }
}];

尝试在 Swift 中执行此操作:

 let data = UnsafeMutablePointer<Float>(buffer.floatChannelData)


            if let data = &buffer.floatChannelData?[0] {
                let _ : Float = data[0]
          }

给出多个错误。

在此先感谢您的任何建议。

4

1 回答 1

1

我不明白你为什么需要data.

你可以这样写:

if buffer.floatChannelData != nil {
    let volume = buffer.floatChannelData![0].pointee
    //...
}

或者更快捷如下:

if let floatChannelPointers = buffer.floatChannelData {
    let volume = floatChannelPointers[0].pointee
    //...
}
于 2018-10-01T01:47:35.653 回答