mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-13 03:03:58 +00:00
mutagen < 1.46 reports the wrong bitrate for WAVE files. Test the proper bitrate in this version, don't test the bitrate in earlier versions.
159 lines
5.1 KiB
Python
159 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Picard, the next-generation MusicBrainz tagger
|
|
#
|
|
# Copyright (C) 2018-2020, 2022 Philipp Wolfer
|
|
# Copyright (C) 2020-2021 Laurent Monin
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
from mutagen import version as mutagen_version
|
|
|
|
from picard import config
|
|
from picard.formats import WAVFile
|
|
from picard.metadata import Metadata
|
|
|
|
from .common import (
|
|
REPLAYGAIN_TAGS,
|
|
TAGS,
|
|
CommonTests,
|
|
load_metadata,
|
|
save_metadata,
|
|
skipUnlessTestfile,
|
|
)
|
|
from .test_id3 import CommonId3Tests
|
|
|
|
|
|
expected_info = {
|
|
'length': 82,
|
|
'~channels': '2',
|
|
'~sample_rate': '44100',
|
|
'~bits_per_sample': '16',
|
|
}
|
|
|
|
if WAVFile.supports_tag('artist'):
|
|
from picard.formats.wav import RiffListInfo
|
|
|
|
riff_info_tags = {
|
|
'IART': 'the artist',
|
|
'ICMT': 'the comment',
|
|
'ICOP': 'the copyright',
|
|
'ICRD': 'the date',
|
|
'IGNR': 'the genre',
|
|
'INAM': 'the title',
|
|
'IPRD': 'the album',
|
|
'ITRK': 'the tracknumber',
|
|
'ICNT': 'the releasecountry',
|
|
'IENC': 'the encodedby',
|
|
'IENG': 'the engineer',
|
|
'ILNG': 'the language',
|
|
'IMED': 'the media',
|
|
'IMUS': 'the composer',
|
|
'IPRO': 'the producer',
|
|
'IWRI': 'the writer',
|
|
}
|
|
|
|
class WAVTest(CommonId3Tests.Id3TestCase):
|
|
testfile = 'test.wav'
|
|
expected_info = expected_info
|
|
unexpected_info = ['~video']
|
|
supports_ratings = True
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
# mutagen < 1.46 has broken bitrate calculation for WAVE files
|
|
if mutagen_version >= (1, 46, 0):
|
|
self.expected_info['~bitrate'] = '1411.2'
|
|
|
|
@skipUnlessTestfile
|
|
def test_invalid_track_and_discnumber(self):
|
|
config.setting['write_wave_riff_info'] = False
|
|
super().test_invalid_track_and_discnumber()
|
|
|
|
@skipUnlessTestfile
|
|
def test_load_riff_info_fallback(self):
|
|
self._save_riff_info_tags()
|
|
metadata = load_metadata(self.filename)
|
|
self.assertEqual(metadata['artist'], 'the artist')
|
|
|
|
@skipUnlessTestfile
|
|
def test_save_riff_info(self):
|
|
metadata = Metadata({
|
|
'artist': 'the artist',
|
|
'album': 'the album'
|
|
})
|
|
save_metadata(self.filename, metadata)
|
|
info = RiffListInfo()
|
|
info.load(self.filename)
|
|
self.assertEqual(info['IART'], 'the artist')
|
|
self.assertEqual(info['IPRD'], 'the album')
|
|
|
|
@skipUnlessTestfile
|
|
def test_delete_riff_info_tag(self):
|
|
self._save_riff_info_tags()
|
|
metadata = Metadata()
|
|
del metadata['title']
|
|
save_metadata(self.filename, metadata)
|
|
info = RiffListInfo()
|
|
info.load(self.filename)
|
|
self.assertEqual(info['IART'], 'the artist')
|
|
self.assertNotIn('INAM', info)
|
|
|
|
@skipUnlessTestfile
|
|
def test_riff_save_and_load(self):
|
|
self._save_riff_info_tags()
|
|
loaded_info = RiffListInfo()
|
|
loaded_info.load(self.filename)
|
|
|
|
for key, value in loaded_info.items():
|
|
self.assertEqual(riff_info_tags[key], value)
|
|
|
|
@skipUnlessTestfile
|
|
def test_riff_info_encoding_windows_1252(self):
|
|
info = RiffListInfo()
|
|
info['INAM'] = 'fooßü‰€œžŸ文字'
|
|
info.save(self.filename)
|
|
loaded_info = RiffListInfo()
|
|
loaded_info.load(self.filename)
|
|
self.assertEqual('fooßü‰€œžŸ??', loaded_info['INAM'])
|
|
|
|
@skipUnlessTestfile
|
|
def test_riff_info_encoding_utf_8(self):
|
|
info = RiffListInfo(encoding="utf-8")
|
|
info['INAM'] = 'fooßü‰€œžŸ文字'
|
|
info.save(self.filename)
|
|
loaded_info = RiffListInfo()
|
|
loaded_info.load(self.filename)
|
|
self.assertEqual(info['INAM'], loaded_info['INAM'])
|
|
|
|
def _save_riff_info_tags(self):
|
|
info = RiffListInfo()
|
|
for key, value in riff_info_tags.items():
|
|
info[key] = value
|
|
info.save(self.filename)
|
|
else:
|
|
class WAVTest(CommonTests.SimpleFormatsTestCase):
|
|
testfile = 'test.wav'
|
|
expected_info = expected_info
|
|
unexpected_info = ['~video']
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.unsupported_tags = {**TAGS, **REPLAYGAIN_TAGS}
|
|
|
|
@skipUnlessTestfile
|
|
def test_unsupported_tags(self):
|
|
self._test_unsupported_tags(self.unsupported_tags)
|