pysoundtouch
pysoundtouch is a Python interface to libSoundTouch that uses numarray.
Tempo detection
from pk.audio import buffering
from pk.audio import media
import soundtouch
infile = media.SndFile('tests/drums.wav')
sound = buffering.Sound(length=infile.length)
buffering.Filler(infile, sound).run()
# works with a numarray.NumArray, too!
print soundtouch.find_bpm(sound, sound.samplerate)
FIFOSampleBuffer processing (Unstable)
class SoundTouchTest(unittest.TestCase):
def setUp(self):
self.st = soundtouch.SoundTouch()
def test_init(self):
self.st.setSampleRate(44100)
self.assertEqual(self.st.isEmpty(), True)
self.assertEqual(self.st.numSamples(), 0)
self.st.setRate(44444)
#self.assertEqual(self.st.rate, 44444)
self.st.setTempo(149.1)
#self.assertEqual(int(self.st.tempo), 149)
self.assertRaises(RuntimeError, lambda: self.st.setChannels(3))
self.st.setChannels(2)
#self.assertEqual(self.st.channels, 3)
def test_filter(self):
self.st.setSampleRate(44100)
self.st.setChannels(2)
self.st.setRate(1.0)
self.st.setRateChange(50)
stream_in = numarray.array([1] * 100)
self.st.putSamples(stream_in)
samples = self.st.numSamples()
self.assertEqual(samples > 0, True)
self.assertEqual(self.st.isEmpty(), False)
stream_out = numarray.array([0] * 110);
returned = self.st.receiveSamples(stream_out)
self.assertEqual(returned, samples)
self.assertEqual(self.st.isEmpty(), True)
- SoundTouch Audio Processing Library (Olli Parviainen)