audio_stream_player_2d.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef AUDIO_STREAM_PLAYER_2D_H
  2. #define AUDIO_STREAM_PLAYER_2D_H
  3. #include "scene/2d/node_2d.h"
  4. #include "servers/audio/audio_stream.h"
  5. #include "servers/audio_server.h"
  6. class AudioStreamPlayer2D : public Node2D {
  7. GDCLASS(AudioStreamPlayer2D, Node2D)
  8. private:
  9. enum {
  10. MAX_OUTPUTS = 8,
  11. MAX_INTERSECT_AREAS = 32
  12. };
  13. struct Output {
  14. AudioFrame vol;
  15. int bus_index;
  16. Viewport *viewport; //pointer only used for reference to previous mix
  17. };
  18. Output outputs[MAX_OUTPUTS];
  19. volatile int output_count;
  20. volatile bool output_ready;
  21. //these are used by audio thread to have a reference of previous volumes (for ramping volume and avoiding clicks)
  22. Output prev_outputs[MAX_OUTPUTS];
  23. int prev_output_count;
  24. Ref<AudioStreamPlayback> stream_playback;
  25. Ref<AudioStream> stream;
  26. Vector<AudioFrame> mix_buffer;
  27. volatile float setseek;
  28. volatile bool active;
  29. volatile float setplay;
  30. float volume_db;
  31. bool autoplay;
  32. StringName bus;
  33. void _mix_audio();
  34. static void _mix_audios(void *self) { reinterpret_cast<AudioStreamPlayer2D *>(self)->_mix_audio(); }
  35. void _set_playing(bool p_enable);
  36. bool _is_active() const;
  37. void _bus_layout_changed();
  38. uint32_t area_mask;
  39. float max_distance;
  40. float attenuation;
  41. protected:
  42. void _validate_property(PropertyInfo &property) const;
  43. void _notification(int p_what);
  44. static void _bind_methods();
  45. public:
  46. void set_stream(Ref<AudioStream> p_stream);
  47. Ref<AudioStream> get_stream() const;
  48. void set_volume_db(float p_volume);
  49. float get_volume_db() const;
  50. void play(float p_from_pos = 0.0);
  51. void seek(float p_seconds);
  52. void stop();
  53. bool is_playing() const;
  54. float get_playback_position();
  55. void set_bus(const StringName &p_bus);
  56. StringName get_bus() const;
  57. void set_autoplay(bool p_enable);
  58. bool is_autoplay_enabled();
  59. void set_max_distance(float p_pixels);
  60. float get_max_distance() const;
  61. void set_attenuation(float p_curve);
  62. float get_attenuation() const;
  63. void set_area_mask(uint32_t p_mask);
  64. uint32_t get_area_mask() const;
  65. AudioStreamPlayer2D();
  66. ~AudioStreamPlayer2D();
  67. };
  68. #endif