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)
示例#2
0
 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'))