Posts

Post not yet marked as solved
0 Replies
162 Views
I am using 3D audio in space using the phase framework. Therefore, I am using sound echoes, etc. So I am using the following code to play the audio. final class PhaseManager {   private var engine: PHASEEngine!   private var listener: PHASEListener!       init() {     engine = PHASEEngine(updateMode: .automatic)     engine.outputSpatializationMode = .alwaysUseChannelBased     engine.defaultReverbPreset = .mediumRoom           listener = PHASEListener(engine: engine)     listener.transform = matrix_identity_float4x4     try? engine.rootObject.addChild(listener)     try? engine.start()   }       func play() {     let spatialPipelineFlags: PHASESpatialPipeline.Flags = [.directPathTransmission, .lateReverb]     let spatialPipeline = PHASESpatialPipeline(flags: spatialPipelineFlags)!           let spatialMixerDefinition = PHASESpatialMixerDefinition(spatialPipeline: spatialPipeline)           let joinSoundId = "\(Int.random(in: 0..<Int.max))"           let audioFileUrl = Bundle.main.url(forResource: "sound", withExtension: "mp3")!           let soundAsset = try! engine.assetRegistry.registerSoundAsset(       url: audioFileUrl,       identifier: joinSoundId,       assetType: .resident,       channelLayout: nil,       normalizationMode: .dynamic)           let samplerNodeDefinition = PHASESamplerNodeDefinition(       soundAssetIdentifier: soundAsset.identifier,       mixerDefinition: spatialMixerDefinition     )     samplerNodeDefinition.playbackMode = .oneShot           let soundEventAsset = try! engine.assetRegistry.registerSoundEventAsset(rootNode: samplerNodeDefinition, identifier: nil)           let source = PHASESource(engine: engine)     source.gain = 0.02     source.transform = matrix_identity_float4x4           try! engine.rootObject.addChild(source)           let mixerParameters = PHASEMixerParameters()     mixerParameters.addSpatialMixerParameters(identifier: spatialMixerDefinition.identifier, source: source, listener: listener)           let soundEvent = try! PHASESoundEvent(engine: engine, assetIdentifier: soundEventAsset.identifier, mixerParameters: mixerParameters)           soundEvent.start { [weak self] _ in       self?.engine.assetRegistry.unregisterAsset(identifier: joinSoundId) { _ in }     }   } } let manager = PhaseManager() manager.play() After playback is complete, memory is not released even though unregisterAsset is executed. manager.play() is performed repeatedly and t the memory is increasing proportionally. Is there any way to free the memory? I have already confirmed that removing the .lateReverb flag or setting source.gain = 1 will free memory, but that does not do what I want to achieve.
Posted Last updated
.