diff --git a/NEWS b/NEWS index f98de31de..bd98b5431 100644 --- a/NEWS +++ b/NEWS @@ -41,6 +41,7 @@ * Fix a bug where some files would be erroneously interpreted as MP4. * Fix permission bits applied to album art files. * Fix malformed MusicBrainz queries caused by null characters. +# Fix a bug with old versions of the Monkey's Audio format. * Retry in more cases when MusicBrainz servers are slow/overloaded. * The old "albumify" plugin for upgrading databases was removed. diff --git a/beets/mediafile.py b/beets/mediafile.py index a54d5a1a5..a65a0bd1d 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -715,10 +715,14 @@ class MediaFile(object): @property def bitrate(self): if self.type in ('flac', 'ape'): - # Simulate bitrate for lossless formats. - #fixme: The utility of this guess is questionable. - return self.mgfile.info.sample_rate * \ - self.mgfile.info.bits_per_sample + if hasattr(self.mgfile.info, 'bits_per_sample'): + # Simulate bitrate for lossless formats. + #fixme: The utility of this guess is questionable. + return self.mgfile.info.sample_rate * \ + self.mgfile.info.bits_per_sample + else: + # Old APE file format. + return 0 elif self.type == 'wv': # Mutagen doesn't provide enough information. return 0 diff --git a/test/rsrc/oldape.ape b/test/rsrc/oldape.ape new file mode 100644 index 000000000..7589a7b1d Binary files /dev/null and b/test/rsrc/oldape.ape differ diff --git a/test/test_mediafile.py b/test/test_mediafile.py index c6bfa3006..ce19e366f 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -63,6 +63,10 @@ class EdgeTest(unittest.TestCase): self.assertEqual(f.disc, 4) self.assertEqual(f.disctotal, 5) + def test_old_ape_version_bitrate(self): + f = beets.mediafile.MediaFile(os.path.join('rsrc', 'oldape.ape')) + self.assertEqual(f.bitrate, 0) + _sc = beets.mediafile._safe_cast class InvalidValueToleranceTest(unittest.TestCase): def test_packed_integer_with_extra_chars(self):