def testMultiStream(self): # stream 0 of multistream1.mka is the same as stream 1 of multistream2.mka p = Pool() stream0 = sAudioLoader(filename=join(testdata.audio_dir, 'generated', 'multistream', 'multistream1.mka'), audioStream=0) stream1 = sAudioLoader(filename=join(testdata.audio_dir, 'generated', 'multistream', 'multistream2.mka'), audioStream=1) stream0.audio >> (p, 'stream0') stream0.numberChannels >> (p, 'nChannels0') stream0.sampleRate >> (p, 'sampleRate0') stream0.md5 >> (p, 'md50') stream0.bit_rate >> (p, 'bit_rate0') stream0.codec >> (p, 'codec0') stream1.audio >> (p, 'stream1') stream1.numberChannels >> (p, 'nChannels1') stream1.sampleRate >> (p, 'sampleRate1') stream1.md5 >> (p, 'md51') stream1.bit_rate >> (p, 'bit_rate1') stream1.codec >> (p, 'codec1') run(stream0) run(stream1) self.assertEqualVector(p['stream0'][0], p['stream1'][0]) # An exception should be thrown if the required audioStream is out of bounds self.assertConfigureFails(sAudioLoader(), {'filename': join(testdata.audio_dir, 'generated', 'multistream', 'multistream1.mka'), 'audioStream': 2})
def pcm(self, sampleRate, filename, stereo=False): # as comparing sample by sample will probably fail the results, in this test # a filename that lasts 10s with impulses of 1 every second is loaded. # the sum of the impulses computed and compared with the expectedSum value. loader = sAudioLoader(filename=join(testdata.audio_dir, filename)) p = Pool() loader.audio >> (p, 'audio') loader.numberChannels >> (p, 'nChannels') loader.sampleRate >> (p, 'sampleRate') loader.md5 >> (p, 'md5') loader.bit_rate >> (p, 'bit_rate') loader.codec >> (p, 'codec') run(loader) self.assertEqual(p['sampleRate'], sampleRate) if stereo: self.assertEqual(p['nChannels'], 2) else: self.assertEqual(p['nChannels'], 1) audio = p['audio'] self.assertEqual(len(audio), 10*sampleRate) sum = 0 # compute sum for stereoSample in audio: sum += stereoSample[0] + stereoSample[1] if stereo: self.assertAlmostEqual(sum, 18, 1e-3) else: self.assertAlmostEqual(sum, 9, 1e-3)
def pcm(self, sampleRate, filename, stereo=False): # as comparing sample by sample will probably fail the results, in this test # a filename that lasts 10s with impulses of 1 every second is loaded. # the sum of the impulses computed and compared with the expectedSum value. loader = sAudioLoader(filename=join(testdata.audio_dir, filename)) p = Pool() loader.audio >> (p, "audio") loader.numberChannels >> (p, "nChannels") loader.sampleRate >> (p, "sampleRate") loader.md5 >> (p, "md5") run(loader) self.assertEqual(p["sampleRate"], sampleRate) if stereo: self.assertEqual(p["nChannels"], 2) else: self.assertEqual(p["nChannels"], 1) audio = p["audio"] self.assertEqual(len(audio), 10 * sampleRate) sum = 0 # compute sum for stereoSample in audio: sum += stereoSample[0] + stereoSample[1] if stereo: self.assertAlmostEqual(sum, 18, 1e-3) else: self.assertAlmostEqual(sum, 9, 1e-3)
def compressed(self, sampleRate, filename, stereo=False): # for compressed files we will compare only those values above certain threshold. noisefloor = 10.0/32767.0 loader = sAudioLoader(filename=join(testdata.audio_dir, filename)) p = Pool() loader.audio >> (p, 'audio') loader.numberChannels >> (p, 'nChannels') loader.sampleRate >> (p, 'sampleRate') run(loader) if stereo: self.assertEqual(p['nChannels'], 2) else: self.assertEqual(p['nChannels'], 1) self.assertEqual(p['sampleRate'], sampleRate) sum = 0 for stereoSample in p['audio']: left = abs(stereoSample[0]) right = abs(stereoSample[1]) # don't add absolute values! if left > noisefloor: sum += round(stereoSample[0]) if right > noisefloor: sum += round(stereoSample[1]) # TODO: ffmpeg seems to decode ogg files in opposite phase, thus: if sum < 0: print 'WARNING: Essentia uses a version of FFMpeg that does reverse decoding of Ogg files...' sum = abs(sum) if stereo: self.assertEqual(sum, 18) else: self.assertEqual(sum, 9)
def compressed(self, sampleRate, filename, stereo=False): # for compressed files we will compare only those values above certain threshold. noisefloor = 10.0 / 32767.0 loader = sAudioLoader(filename=join(testdata.audio_dir, filename)) p = Pool() loader.audio >> (p, 'audio') loader.numberChannels >> (p, 'nChannels') loader.sampleRate >> (p, 'sampleRate') run(loader) if stereo: self.assertEqual(p['nChannels'], 2) else: self.assertEqual(p['nChannels'], 1) self.assertEqual(p['sampleRate'], sampleRate) sum = 0 for stereoSample in p['audio']: left = abs(stereoSample[0]) right = abs(stereoSample[1]) # don't add absolute values! if left > noisefloor: sum += round(stereoSample[0]) if right > noisefloor: sum += round(stereoSample[1]) # TODO: ffmpeg seems to decode ogg files in opposite phase, thus: if sum < 0: print 'WARNING: Essentia uses a version of FFMpeg that does reverse decoding of Ogg files...' sum = abs(sum) if stereo: self.assertEqual(sum, 18) else: self.assertEqual(sum, 9)
def testMultiChannel(self): for ext in ['wav', 'aiff', 'flac']: filename = join(testdata.audio_dir, 'generated', 'multichannel', '4channels.'+ext) self.assertRaises(RuntimeError, lambda: sAudioLoader(filename=filename))
def testInvalidFile(self): for ext in ['wav', 'aiff', 'flac', 'mp3', 'ogg']: self.assertRaises(RuntimeError, lambda: sAudioLoader(filename='unknown.'+ext))
def testMultiChannel(self): for ext in ["wav", "aiff", "flac"]: filename = join(testdata.audio_dir, "generated", "multichannel", "4channels." + ext) self.assertRaises(RuntimeError, lambda: sAudioLoader(filename=filename))
def testInvalidFile(self): for ext in ["wav", "aiff", "flac", "mp3", "ogg"]: self.assertRaises(RuntimeError, lambda: sAudioLoader(filename="unknown." + ext))