예제 #1
0
        public unsafe void SetData <T>(T[] data, int channelsNum, int bytesPerSample, int sampleRate) where T : unmanaged
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            this.channelsNum    = channelsNum;
            this.bytesPerSample = bytesPerSample;
            this.sampleRate     = sampleRate;

            LengthInSeconds = data.Length / (float)sampleRate / channelsNum;

            var format = GetSoundFormat(channelsNum, bytesPerSample);

            fixed(T *ptr = data)
            {
                AL.BufferData(bufferId, format, (IntPtr)ptr, data.Length * Marshal.SizeOf <T>(), sampleRate);
            }

            AudioEngine.CheckALErrors();
        }