I have an array of Float (representing audio samples) and I want to turn it into an AVAudioPCMBuffer so I can pass it to AVAudioFile's write(from:). There's an obvious way (actually not obvious at all, I cribbed it from this gist):
var floats: [Float] = ... // this comes from somewhere else
let audioBuffer = AudioBuffer(mNumberChannels: 1, mDataByteSize: UInt32(floats.count * MemoryLayout<Float>.size), mData: &floats)
var bufferList = AudioBufferList(mNumberBuffers: 1, mBuffers: audioBuffer)
let outputAudioBuffer = AVAudioPCMBuffer(pcmFormat: buffer.format, bufferListNoCopy: &bufferList)!
try self.renderedAudioFile?.write(from: outputAudioBuffer)
This works (I get the audio output I expect) but in Xcode 13.4.1 this gives me a warning on the &floats: Cannot use inout expression here; argument 'mData' must be a pointer that outlives the call to 'init(mNumberChannels:mDataByteSize:mData:)'
Ok, scope the pointer then:
var floats: [Float] = ... // this comes from somewhere else
try withUnsafeMutablePointer(to: &floats) { bytes in
let audioBuffer = AudioBuffer(mNumberChannels: 1, mDataByteSize: UInt32(bytes.pointee.count * MemoryLayout<Float>.size), mData: bytes)
var bufferList = AudioBufferList(mNumberBuffers: 1, mBuffers: audioBuffer)
let outputAudioBuffer = AVAudioPCMBuffer(pcmFormat: buffer.format, bufferListNoCopy: &bufferList)!
try self.renderedAudioFile?.write(from: outputAudioBuffer)
}
The warning goes away, but now the output is garbage. I really don't understand this as floats.count and bytes.pointee.count are the same number. What am I doing wrong?
Post
Replies
Boosts
Views
Activity
SwiftUI Previews in Xcode 13.2.1 (13C100) are failing for me with:
file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk/usr/lib/swift/shims/Visibility.h' has been modified since the module file '/var/folders/s_/v2rt7nls5794blqbt6c_gl9c0000gn/C/clang/ModuleCache/2LAIGLYLJJQNA/SwiftShims-2TTN5UXQBRCCQ.pcm' was built: mtime changed
This is after quitting Xcode, deleting derived data, starting Xcode again and building from scratch. Anyone else seeing this problem? Any idea how to fix it?
According to the ATO site, if I am a sole trader with revenue of < $75k per annum, I am not requried to register for GST.However, Apple insists I register for GST in order to sell apps on the store in Australia.What do I put on my BAS statement? If I have < $75k revenue, do I say "I had $x revenue and I owe GST of $0"? Or do I say, "I had $x revenue and I owe GST of $x/11" and then just don't pay it?(I know You Are Not A Tax Lawyer, but Australians registered for GST but with revenue below the $75k threshold, what do you do?)