Fix #157: Can now import and play flac files
If you ever need an empty flac file with metadata again: 1. Get a flac file (like https://archive.org/download/NineInchNailsTheSlip24bit96khz/01999999.flac) 2. Tag it with Musicbrainz Picard 3. Truncate it, keeping only tags with `ffmpeg -i in.flac -ss 0 -to 0.001 out.flac` Thanks @HgO for the trick!
This commit is contained in:
parent
2f44dd0eb7
commit
ce92747d89
|
@ -28,6 +28,13 @@ def get_id3_tag(f, k):
|
|||
raise TagNotFound(k)
|
||||
|
||||
|
||||
def get_flac_tag(f, k):
|
||||
try:
|
||||
return f.get(k)[0]
|
||||
except (KeyError, IndexError):
|
||||
raise TagNotFound(k)
|
||||
|
||||
|
||||
def get_mp3_recording_id(f, k):
|
||||
try:
|
||||
return [
|
||||
|
@ -121,7 +128,38 @@ CONF = {
|
|||
'getter': get_mp3_recording_id,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
'FLAC': {
|
||||
'getter': get_flac_tag,
|
||||
'fields': {
|
||||
'track_number': {
|
||||
'field': 'tracknumber',
|
||||
'to_application': convert_track_number
|
||||
},
|
||||
'title': {
|
||||
'field': 'title'
|
||||
},
|
||||
'artist': {
|
||||
'field': 'artist'
|
||||
},
|
||||
'album': {
|
||||
'field': 'album'
|
||||
},
|
||||
'date': {
|
||||
'field': 'date',
|
||||
'to_application': lambda v: arrow.get(str(v)).date()
|
||||
},
|
||||
'musicbrainz_albumid': {
|
||||
'field': 'musicbrainz_albumid'
|
||||
},
|
||||
'musicbrainz_artistid': {
|
||||
'field': 'musicbrainz_artistid'
|
||||
},
|
||||
'musicbrainz_recordingid': {
|
||||
'field': 'musicbrainz_trackid'
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ def compute_status(jobs):
|
|||
AUDIO_EXTENSIONS_AND_MIMETYPE = [
|
||||
('ogg', 'audio/ogg'),
|
||||
('mp3', 'audio/mpeg'),
|
||||
('flac', 'audio/flac'),
|
||||
]
|
||||
|
||||
EXTENSION_TO_MIMETYPE = {ext: mt for ext, mt in AUDIO_EXTENSIONS_AND_MIMETYPE}
|
||||
|
|
Binary file not shown.
|
@ -40,3 +40,20 @@ def test_can_get_metadata_from_id3_mp3_file(field, value):
|
|||
data = metadata.Metadata(path)
|
||||
|
||||
assert data.get(field) == value
|
||||
|
||||
|
||||
@pytest.mark.parametrize('field,value', [
|
||||
('title', '999,999'),
|
||||
('artist', 'Nine Inch Nails'),
|
||||
('album', 'The Slip'),
|
||||
('date', datetime.date(2008, 5, 5)),
|
||||
('track_number', 1),
|
||||
('musicbrainz_albumid', uuid.UUID('12b57d46-a192-499e-a91f-7da66790a1c1')),
|
||||
('musicbrainz_recordingid', uuid.UUID('30f3f33e-8d0c-4e69-8539-cbd701d18f28')),
|
||||
('musicbrainz_artistid', uuid.UUID('b7ffd2af-418f-4be2-bdd1-22f8b48613da')),
|
||||
])
|
||||
def test_can_get_metadata_from_flac_file(field, value):
|
||||
path = os.path.join(DATA_DIR, 'sample.flac')
|
||||
data = metadata.Metadata(path)
|
||||
|
||||
assert data.get(field) == value
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Can now import and play flac files (#157)
|
|
@ -5,6 +5,7 @@ export default {
|
|||
],
|
||||
formatsMap: {
|
||||
'audio/ogg': 'ogg',
|
||||
'audio/mpeg': 'mp3'
|
||||
'audio/mpeg': 'mp3',
|
||||
'audio/flac': 'flac'
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue