私はAVAudioEngineグラフで再生しているmp3ファイルの生のPCMサンプルを計算しようとしています。私はAVAudioPCMBuffer
を提供する44100サンプルごとに閉鎖しています。それはタイプUnsafePointer<UnsafeMutablePointer<Float>>?
のchannelData
のプロパティを持っています。私はSwift 3のポインタで作業していないので、これらのFloat値にアクセスする方法は不明です。処理のためにAVAudioPCMBufferのフロートサンプルにアクセスする
私は、次のコードを持っていますが、多くの問題があります。たとえば
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
}
}
}
、私はN
は、バッファ内のチャネルの数であるN
フロートポインタですUnsafeMutablePointer<Float
Sを反復処理はどうすればよいが。このクラスのApple Docsでバッファサンプルにアクセスすることに関する議論が見つかりませんでした。
私は主な問題はlet samples = chans[a]
だと思います。 Xcodeによるとchans
はUnsafeMutablePointer<Float>
です。しかし、それはそれらのポインタのNumChannels価値があるはずです。だからこそ私はa in 0..<numChans
を添え字に使用しています。しかし、私はちょうどFloat
を取得します。
EDIT:
HM、chans.advanced(by: a)
を使用しての代わりに添字思わ固定のもの