このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
ここに言語を入力 ``` コード ```### 前提・実現したいこと swift 初心者なのですがマイクから音声を取得し、それをフーリエ変換するアプリの作成途中で XcodeのplaygroundでSwiftを使いwavファイルをフーリエ変換するプログラムを作成したいと考えています。 ### 発生している問題・エラーメッセージ bufferに値がうまく渡らず、DSPComplex型にオーディオデータを変換出来ません。 ``` エラーメッセージ Value of optional type 'AVAudioPCMBuffer?' must be unwrapped to a value of type 'AVAudioPCMBuffer' Value of optional type 'AVAudioPCMBuffer?' must be unwrapped to refer to member 'floatChannelData' of wrapped base type 'AVAudioPCMBuffer' ``` ### 該当のソースコード ```ここに言語を入力 import AVFoundation import AudioToolbox import Accelerate var soundURL = Bundle.main.url(forResource: "1", withExtension: "wav") let audioFile = try! AVAudioFile(forReading: soundURL!) let frameCount = UInt32(audioFile.length) let buffer = AVAudioPCMBuffer(pcmFormat: audioFile.processingFormat, frameCapacity: frameCount) do { try audioFile.readIntoBuffer(buffer, frameCount:frameCount) } catch { } let log2n = UInt(round(log2(Double(frameCount)))) let bufferSize = Int(1 << log2n) let fftSetup = vDSP_create_fftsetup(log2n, Int32(kFFTRadix2)) var realp = [Float](repeating: 0,count: bufferSize/2) var imagp = [Float](repeating: 0,count: bufferSize/2) var output = DSPSplitComplex(realp: &realp, imagp: &imagp) vDSP_ctoz(UnsafePointer<DSPComplex>(buffer.floatChannelData.memory), 2, &output, 1, UInt(bufferSize / 2)) vDSP_fft_zrip(fftSetup!, &output, 1, log2n, Int32(FFT_FORWARD)) var fft = [Float](repeating: 0.0,count:Int(bufferSize / 2)) let bufferOver2: vDSP_Length = vDSP_Length(bufferSize / 2) vDSP_zvmags(&output, 1, &fft, 1, bufferOver2) ``` ```ここに言語名を入力 swift5 ``` ### 試したこと フォーマットを変えたり、オプショナルについても調べて色々試しましたがうまく行きませんでした。 是非、対処法を教えていただけないでしょうか。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー