#!/usr/bin/python

from PySFML import sf

class MyCustomStream(sf.SoundStream):

	def Open(self, Filename):
		# Load the sound data into a sound buffer
		self.SoundData = sf.SoundBuffer()
		if not self.SoundData.LoadFromFile(Filename):
			return False
		# Initialize the stream with the sound parameters
		self.Initialize(self.SoundData.GetChannelsCount(), self.SoundData.GetSampleRate())
		# Copy the audio samples into our internal array
		self.myBuffer = self.SoundData.GetSamples()
		return True

	def OnStart(self):
		self.myOffset = 0
		self.myBufferSize = 80000
		return True

	def OnGetData(self):
		# Check if there is enough data to stream
		if self.myOffset > len(self.myBuffer):
			# Returning something else than a string means that we want to stop playing the stream
			return ""
		# Data contains the string of samples we will return
		if self.myOffset + self.myBufferSize >= len(self.myBuffer):
			print("End of audio data reached")
			Data = self.myBuffer[self.myOffset:]
		else:
			Data = self.myBuffer[self.myOffset:self.myOffset+self.myBufferSize]
		# Update the offset
		self.myOffset = self.myBufferSize + self.myOffset
		return Data

def Main():
	Stream = MyCustomStream()
	Stream.Open("./data/fart.wav")
	Stream.Play()
	print("Playing 5 seconds of audio data...")
	sf.Sleep(5)
	Stream.Stop()
	print("Press enter to exit...")
	input()

Main()