50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
|
#!/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 False
|
||
|
# 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()
|
||
|
|