func (s *Source) isValid() bool {
	return s.source != 0
}
isValid will return true if the source is associated with an openal source anymore.
if not it will return false and will disable most funtionality
package openal
import (
	"time"
	"github.com/tanema/amore/audio/openal/al"
	"github.com/tanema/amore/audio/openal/decoding"
)
const (
	maxAttenuationDistance = 1000000.0  
	maxBuffers             = 8          
)
type Source struct {
	decoder      *decoding.Decoder
	source       al.Source
	isStatic     bool
	pitch        float32
	volume       float32
	looping      bool
	paused       bool
	staticBuffer al.Buffer
	offsetBytes  int32
}
func NewSource(filepath string, static bool) (*Source, error) {
	if pool == nil {
		createPool()
	}
	decoder, err := decoding.Decode(filepath)
	if err != nil {
		return nil, err
	}
	newSource := &Source{
		decoder:  decoder,
		isStatic: static,
		pitch:    1,
		volume:   1,
	}
	if static {
		newSource.staticBuffer = al.GenBuffers(1)[0]
		newSource.staticBuffer.BufferData(decoder.Format, decoder.GetData(), decoder.SampleRate)
	}
	return newSource, nil
}