using System; using System.Runtime.InteropServices; namespace Raylib_cs; /// /// Audio stream type
/// NOTE: Useful to create custom audio streams not bound to a specific file ///
[StructLayout(LayoutKind.Sequential)] public struct AudioStream { //TODO: convert /// /// Pointer to internal data(rAudioBuffer *) used by the audio system /// public IntPtr Buffer; /// /// Pointer to internal data processor, useful for audio effects /// public IntPtr Processor; /// /// Frequency (samples per second) /// public uint SampleRate; /// /// Bit depth (bits per sample): 8, 16, 32 (24 not supported) /// public uint SampleSize; /// /// Number of channels (1-mono, 2-stereo) /// public uint Channels; public readonly CBool IsValid => Raylib.IsAudioStreamValid(this); public readonly CBool IsPlaying => Raylib.IsAudioStreamPlaying(this); public readonly CBool IsProcessed => Raylib.IsAudioStreamProcessed(this); public static AudioStream Load(uint sampleRate, uint sampleSize, uint channels) { return Raylib.LoadAudioStream(sampleRate, sampleSize, channels); } public readonly void Play() { Raylib.PlayAudioStream(this); } public readonly void Pause() { Raylib.PauseAudioStream(this); } public readonly void Resume() { Raylib.ResumeAudioStream(this); } public unsafe void Update(void* data, int frameCount) { Raylib.UpdateAudioStream(this, data, frameCount); } public readonly void Stop() { Raylib.StopAudioStream(this); } public static void SetBufferSizeDefault(int size) { Raylib.SetAudioStreamBufferSizeDefault(size); } /// /// Set pan for this audio stream where 0.5 is centered /// /// public void SetPan(float pan) { Raylib.SetAudioStreamPan(this, pan); } /// /// Set pitch for this audio stream where 1.0 si base level /// public void SetPitch(float pitch) { Raylib.SetAudioStreamPitch(this, pitch); } /// /// Set the volume from 0.0 to 1.0 /// public void SetVolume(float volume) { Raylib.SetAudioStreamVolume(this, volume); } public void Unload() { Raylib.UnloadAudioStream(this); } }