def get_audio_duration(filename, obj=None): if filename.lower().endswith('.wav'): # rough estimate, doesn't take metadata into account sz = files.getsize(filename) channels, bits, freq = 2, 16, 44100 sz /= (1.0 * channels * (bits / 8.0)) length = sz / freq return length else: import easypythonmutagen return easypythonmutagen.get_audio_duration(filename, obj)
def test_lengthAndBitrate(self): # get duration; no tag object provided tmpdirsl = self.tmpdir + '/' self.assertEqual(1023, int(1000 * get_audio_duration(tmpdirsl + 'flac.flac'))) self.assertEqual(1160, int(1000 * get_audio_duration(tmpdirsl + 'm4a16.m4a'))) self.assertEqual(1091, int(1000 * get_audio_duration(tmpdirsl + 'm4a128.m4a'))) self.assertEqual(1091, int(1000 * get_audio_duration(tmpdirsl + 'm4a224.m4a'))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb16.mp3'))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb128.mp3'))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb224.mp3'))) self.assertEqual(2873, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb16.mp3'))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb128.mp3'))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb224.mp3'))) self.assertEqual(1591, int(1000 * get_audio_duration(tmpdirsl + 'ogg_01.ogg'))) self.assertEqual(1591, int(1000 * get_audio_duration(tmpdirsl + 'ogg_10.ogg'))) # get duration; tag object provided self.assertEqual(1023, int(1000 * get_audio_duration(tmpdirsl + 'flac.flac', EasyPythonMutagen(tmpdirsl + 'flac.flac')))) self.assertEqual(1160, int(1000 * get_audio_duration(tmpdirsl + 'm4a16.m4a', EasyPythonMutagen(tmpdirsl + 'm4a16.m4a')))) self.assertEqual(1091, int(1000 * get_audio_duration(tmpdirsl + 'm4a128.m4a', EasyPythonMutagen(tmpdirsl + 'm4a128.m4a')))) self.assertEqual(1091, int(1000 * get_audio_duration(tmpdirsl + 'm4a224.m4a', EasyPythonMutagen(tmpdirsl + 'm4a224.m4a')))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb16.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_avgb16.mp3')))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb128.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_avgb128.mp3')))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_avgb224.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_avgb224.mp3')))) self.assertEqual(2873, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb16.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_cnsb16.mp3')))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb128.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_cnsb128.mp3')))) self.assertEqual(2773, int(1000 * get_audio_duration(tmpdirsl + 'mp3_cnsb224.mp3', EasyPythonMutagen(tmpdirsl + 'mp3_cnsb224.mp3')))) self.assertEqual(1591, int(1000 * get_audio_duration(tmpdirsl + 'ogg_01.ogg', EasyPythonMutagen(tmpdirsl + 'ogg_01.ogg')))) self.assertEqual(1591, int(1000 * get_audio_duration(tmpdirsl + 'ogg_10.ogg', EasyPythonMutagen(tmpdirsl + 'ogg_10.ogg')))) # get empirical bitrate self.assertEqual(29, int(get_empirical_bitrate(tmpdirsl + 'm4a16.m4a'))) self.assertEqual(136, int(get_empirical_bitrate(tmpdirsl + 'mp3_avgb128.mp3'))) self.assertEqual(233, int(get_empirical_bitrate(tmpdirsl + 'mp3_cnsb224.mp3'))) # unsupported extensions self.assertRaisesRegexp(ValueError, 'unsupported', lambda: get_audio_duration('missing_extension')) self.assertRaisesRegexp(ValueError, 'unsupported', lambda: get_audio_duration('unsupported.mp3.extension.mp5')) self.assertRaisesRegexp(ValueError, 'unsupported', lambda: get_empirical_bitrate('missing_extension')) self.assertRaisesRegexp(ValueError, 'unsupported', lambda: get_empirical_bitrate('unsupported.mp3.extension.mp5'))