Skip to content

Audio Player 3D

App: apps/audio_player_3d/

A 3D radio in a scene: power button, volume/frequency knobs, and body rotation. Reuses the tuner logic and channel format from Audio Player. The radio model and scripts come from a Blend file; interaction uses raycast picking.

Terminal window
% ./plume3d audio_player_3d

or

Terminal window
% ./../plume3d .

Or: build/Debug/plume3d apps/audio_player_3d with cwd so the app finds game.toml, main.wren, and scripts.

  • Power — Left-click the power button toggles on/off (NLA-driven animation; state from AnimationState.getFloat("power_on")).
  • Body — Left-click + drag on the radio body to rotate it (Y axis).
  • Volume — Left-click + drag the volume knob; drag up = louder.
  • Frequency — Left-click + drag the frequency knob or tuner to tune FM (88–108 MHz).
  • Right-click + drag — Look around (FPS camera).
  • WASD / Arrow keys — Move camera.
  • F12 — Screenshot.
  • ChannelsScripts/radio.toml (same format as audio_player); paths relative to app dir.
  • Soundssounds/ with static.wav and tracks referenced in Scripts/radio.toml (or copy from ../audio_player/sounds/).
  • 3D modelModels/Radio_V3.blend. Loaded with Resource.loadBlend(...); the “Radio” class is instantiated into the scene.
  • Root — Class name Radio, script Scripts/radio.wren, config Scripts/radio.toml.
  • Interactables — Set Node Id (e.g. radio_body, power_button, knob_volume, knob_frequency) so scripts can use radioRoot.nodes["radio_body"] etc.; raycast hit names use Blender object names (e.g. Radio_Body, Radio_Power_Button).
  • Meshes — Objects with mesh data are rendered automatically.