View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vídeos

Abrir menu Fechar menu
  • Coleções
  • Todos os vídeos
  • Sobre

Mais vídeos

  • Sobre
  • Código
  • Enhance your spatial computing app with RealityKit audio

    Elevate your spatial computing experience using RealityKit audio. Discover how spatial audio can make your 3D immersive experiences come to life. From ambient audio, reverb, to real-time procedural audio that can add character to your 3D content, learn how RealityKit audio APIs can help make your app more engaging.

    Capítulos

    • 0:00 - Introduction
    • 2:01 - Spatial audio
    • 11:43 - Collisions
    • 16:57 - Reverb presets
    • 18:24 - Immersive music
    • 20:41 - Mix groups

    Recursos

    • Creating a Spaceship game
    • Forum: Spatial Computing
      • Vídeo HD
      • Vídeo SD

    Vídeos relacionados

    WWDC24

    • Build a spatial drawing app with RealityKit
    • Discover RealityKit APIs for iOS, macOS, and visionOS
    • Enhance the immersion of media viewing in custom environments
  • Buscar neste vídeo...
    • 3:11 - Play vapor trail audio

      // Vapor trail audio
      
      import RealityKit
      
      func playVaporTrailAudio(from engine: Entity) async throws {
          let resource = try await AudioFileResource(named: "VaporTrail")
          engine.playAudio(resource)
      }
    • 4:02 - Make vapor trail audio playback more dynamic

      // Vapor trail audio
      
      import RealityKit
      
      func playVaporTrailAudio(from engine: Entity) async throws {
          let resource = try await AudioFileResource(
              named: "VaporTrail",
              configuration: AudioFileResource.Configuration(
                 shouldLoop: true,
                 shouldRandomizeStartTime: true
              )
          )
          let controller: AudioPlaybackController = engine.playAudio(resource)
          controller.gain = -.infinity
          controller.fade(to: .zero, duration: 1)
        
          let audioSource = Entity()
          audioSource.orientation = .init(angle: .pi, axis: [0, 1, 0])
          audioSource.components.set(
              SpatialAudioComponent(directivity: .beam(focus: 0.25))
          )
          engine.addChild(audioSource)
          let controller = audioSource.playAudio(resource)
      
      }
    • 7:10 - Exhaust audio

      // Exhaust audio
      
      import RealityKit
      
      func updateAudio(for exhaust: Entity, throttle: Float) {
          let gain = decibels(amplitude: throttle)
          exhaust.components[SpatialAudioComponent.self]?.gain = Audio.Decibel(gain)
      }
      
      func decibels(amplitude: Float) -> Float { 20 * log10(amplitude) }
    • 8:17 - Turbine audio

      // Turbine audio
      
      import RealityKit
      
      var turbineController: AudioGeneratorController?
      
      func playTurbineAudio(from engine: Entity) {
          let audioUnit = try await AudioUnitTurbine.instantiate()
          let configuration = AudioGeneratorConfiguration(layoutTag: kAudioChannelLayoutTag_Mono)
          let format = AVAudioFormat(
              standardFormatWithSampleRate: Double(AudioGeneratorConfiguration.sampleRate),
              channelLayout: .init(layoutTag: configuration.layoutTag)!
          )
          try audioUnit.outputBusses[0].setFormat(format)
      		try audioUnit.allocateRenderResources()
          let renderBlock = audioUnit.internalRenderBlock
          turbineController = try engine.playAudio(configuration: configuration) { 
              isSilence, timestamp, frameCount, outputData in
              var renderFlags = AudioUnitRenderActionFlags()
              return renderBlock(&renderFlags, timestamp, frameCount, 0, outputData, nil, nil)
          }
      }
    • 11:28 - Setting distance attenuation and gain

      import RealityKit
      
      func configureDistanceAttenuation(for spaceshipHifi: Entity) {
          spaceshipHifi.components.set(
              SpatialAudioComponent(
                  gain: -18,
                  distanceAttenuation: .rolloff(factor: 4)
              )
          )
      }
    • 12:36 - Loudness variation

      // Loudness variation
      
      import RealityKit
      
      func handleCollisionBegan(_ collision: CollisionEvents.Began) {
          let resource: AudioFileGroupResource // …
          let controller = collision.entityA.playAudio(resource)
          controller.gain = relativeLoudness(for: collision)
      }
    • 14:44 - Defining audio materials

      // Audio materials
      
      import RealityKit
      
      enum AudioMaterial {
          case none
          case plastic
          case rock
          case metal
          case drywall
          case wood
          case glass
          case concrete
          case fabric
      }
      
      struct AudioMaterialComponent: Component {
          var material: AudioMaterial
      }
    • 14:53 - Setting audio materials

      // Setting Audio Materials
      
      asteroid.components.set(
          AudioMaterialComponent(material: .rock)
      )
      
      spaceship.components.set(
          AudioMaterialComponent(material: .plastic)
      )
    • 15:04 - Handling collision audio

      // Audio materials
      
      import RealityKit
      
      func handleCollisionBegan(_ collision: CollisionEvents.Began) {
          guard 
              let audioMaterials = audioMaterials(for: collision),
              let resource: AudioFileGroupResource = collisionAudio[audioMaterials] 
          else {
              return 
          }
          let controller = collision.entityA.playAudio(resource)
          controller.gain = relativeLoudness(for: collision)
      }
    • 17:18 - Reverb presets

      // Reverb presets
      
      import Studio
      
      func prepareStudioEnvironment() async throws {
          let studio = try await Entity(named: "Studio", in: studioBundle)
          studio.components.set(
             ReverbComponent(reverb: .preset(.veryLargeRoom))
          )
          rootEntity.addChild(studio)
      }
    • 20:05 - Immersive music

      // Immersive music
      
      import RealityKit
      
      func playJoyRideMusic(from entity: Entity) async throws {
          let resource = try await AudioFileResource(
              named: “JoyRideMusic”,
              configuration: .init(
                  loadingStrategy: .stream,
                  shouldLoop: true       
              )
          )
          entity.components.set(AmbientAudioComponent())
          entity.playAudio(resource)
      }
    • 21:57 - Using AudioMixGroup with a RealityKit entity

      // Audio mix groups
      
      import RealityKit
      
      let resource = try await AudioFileResource(
          named: “JoyRideMusic”,
          configuration: .init(
              loadingStrategy: .stream,
              shouldLoop: true,
              mixGroupName: “Music”
          )
      )
      
      var audioMixerEntity = Entity()
      
      func updateMixGroup(named mixGroupName: String, to level: Audio.Decibel) {
          var mixGroup = AudioMixGroup(name: mixGroupName)
          mixGroup.gain = level
          let component = AudioMixGroupsComponent(mixGroups: [mixGroup])
          audioMixerEntity.components.set(component)
      }

Developer Footer

  • Vídeos
  • WWDC24
  • Enhance your spatial computing app with RealityKit audio
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines