AVAudioEngine 그래프로 재생중인 mp3 파일의 원시 PCM 샘플에 대한 계산을 시도하고 있습니다. 나는 AVAudioPCMBuffer
을 제공하는 44100 샘플마다 마감 처리를하고 있습니다. 이 유형은 channelData
이고 유형은 UnsafePointer<UnsafeMutablePointer<Float>>?
입니다. Swift 3에서 포인터로 작업하지 않았으므로이 Float 값에 액세스하는 방법이 확실하지 않습니다.처리를 위해 AVAudioPCMBuffer의 플로트 샘플에 액세스
나는 다음과 같은 코드를 가지고 있지만 많은 문제가 있습니다 : 나는 N
버퍼의 채널 수는 N
플로트 포인터가있는 UnsafeMutablePointer<Float
의 반복 어떻게 예를 들어
audioPlayerNode.installTap(onBus: 0,
bufferSize: 1024,
format: audioPlayerNode.outputFormat(forBus: 0)) { (pcmBuffer, time) in
let numChans = Int(pcmBuffer.format.channelCount)
let frameLength = pcmBuffer.frameLength
if let chans = pcmBuffer.floatChannelData?.pointee {
for a in 0..<numChans {
let samples = chans[a]// samples is type Float. should be pointer to Floats.
for b in 0..<flength {
print("sample: \(b)") // should be samples[b] but that gives error as "samples" is Float
}
}
}
는. 이 클래스의 Apple 문서에서 버퍼 샘플에 액세스하는 방법에 대한 설명을 찾을 수 없습니다.
주된 문제는 let samples = chans[a]
이라고 생각합니다. Xcode는 chans
이 UnsafeMutablePointer<Float>
이라고 말합니다. 하지만 NumChannels 가치가 있어야합니다. 그래서 내가 첨자로 a in 0..<numChans
을 사용하는 이유입니다. 그러나 내가 할 때 나는 단지 Float
이된다.
편집 :
흠, chans.advanced(by: a)
를 사용하는 대신에 첨자 보인다 고정 일