From f7742939ef65767dc3fa98ca5a57e4eb53f8de6f Mon Sep 17 00:00:00 2001 From: Boris Pruessmann Date: Sun, 8 Jan 2017 19:47:59 +0100 Subject: [PATCH 1/3] Support for DSF files --- beets/mediafile.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/beets/mediafile.py b/beets/mediafile.py index 9e3f81db34..59959b8f52 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -40,7 +40,6 @@ import mutagen.mp4 import mutagen.flac import mutagen.asf - import codecs import datetime import re @@ -73,6 +72,7 @@ 'mpc': 'Musepack', 'asf': 'Windows Media', 'aiff': 'AIFF', + 'dsf': 'DSD Stream File', } PREFERRED_IMAGE_EXTENSIONS = {'jpeg': 'jpg'} @@ -728,7 +728,7 @@ def serialize(self, image): class MP3StorageStyle(StorageStyle): """Store data in ID3 frames. """ - formats = ['MP3', 'AIFF'] + formats = ['MP3', 'AIFF', 'DSF'] def __init__(self, key, id3_lang=None, **kwargs): """Create a new ID3 storage style. `id3_lang` is the value for @@ -1475,6 +1475,8 @@ def __init__(self, path, id3v23=False): self.type = 'asf' elif type(self.mgfile).__name__ == 'AIFF': self.type = 'aiff' + elif type(self.mgfile).__name__ == 'DSF': + self.type = 'dsf' else: raise FileTypeError(path, type(self.mgfile).__name__) From 1e10e62d8294770445ce34017b203d87b1ccc113 Mon Sep 17 00:00:00 2001 From: Boris Pruessmann Date: Mon, 9 Jan 2017 18:32:11 +0100 Subject: [PATCH 2/3] Added DSF to test_mediafile --- test/rsrc/empty.dsf | Bin 0 -> 4188 bytes test/rsrc/full.dsf | Bin 0 -> 113475 bytes test/rsrc/unparseable.dsf | Bin 0 -> 4208 bytes test/test_mediafile.py | 12 ++++++++++++ 4 files changed, 12 insertions(+) create mode 100644 test/rsrc/empty.dsf create mode 100644 test/rsrc/full.dsf create mode 100644 test/rsrc/unparseable.dsf diff --git a/test/rsrc/empty.dsf b/test/rsrc/empty.dsf new file mode 100644 index 0000000000000000000000000000000000000000..4cbceb3c97977747977423c92b2e39e7f7a7d192 GIT binary patch literal 4188 zcmZ<>c2SUFfPfeQC<98R<(4RzK-r8)G?*=@%>WYvOF{LfB$g!dpqT^JI!cX(z-S1J lhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2n@pz003D!1tkCg literal 0 HcmV?d00001 diff --git a/test/rsrc/full.dsf b/test/rsrc/full.dsf new file mode 100644 index 0000000000000000000000000000000000000000..a90e6946fc44cd97a56c9846cbea855201a22808 GIT binary patch literal 113475 zcmeIuPj3@P7zf}jX)jPjx%XgkU*dlo@4|`LAVnp`BAY6Q_AqO&jV0TOZ07(cz82!E z@L`yZ9SOcc56?*6o%bEjZ)Ts-#i;dXvLC~*zuZm!{jz`0R=ZaJu(t0c$%9xozvS6J zNz?oMttsO8WB;0lUHJX5f8X&WK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D=FTz}cwxYjdZg z|H`wn8z;ZT`RsPNEXS`qv3wNE-G{mrHoL`kSH60C8k-OAo6G8URlXno6?-w|sC(Qi z$L}rS&d$U;2%i+7`FZb=q_3Gw& zTW@0f@7TUScwVnJbvZmAAJRJI`0~e#Ekji=V^S0KG@eke=SlMwF>Y0_ciYR0w`E*< z^25^d<7P40UcNaS#f6ti@?p2Td2xKay4@}&)g~;~pPpZD=1E@Vc{dwmX*&;D+V5xG zGz`KZom5pGI$5tXE9&y<>S`Zyblz+~z1!Y;bw}7bnc2SUFfPex42pt2Z({f7`OrUa%NHmx&sLcQq14}{mq$HLk@<7>8Eu++E2#kin vXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQKfm0Z$iW7O?lY5S|18{w@Y{ literal 0 HcmV?d00001 diff --git a/test/test_mediafile.py b/test/test_mediafile.py index 5fcb14187b..2adb57c85e 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -887,6 +887,18 @@ class AIFFTest(ReadWriteTestBase, unittest.TestCase): } +class DSFTest(ReadWriteTestBase, unittest.TestCase): + extension = 'dsf' + audio_properties = { + 'length': 0.01, + 'bitrate': 11289600, + 'format': u'DSD Stream File', + 'samplerate': 5644800, + 'bitdepth': 1, + 'channels': 2, + } + + class MediaFieldTest(unittest.TestCase): def test_properties_from_fields(self): From e0a4dc67a85be25156f8012be83faff2cf60cb9a Mon Sep 17 00:00:00 2001 From: Boris Pruessmann Date: Tue, 10 Jan 2017 11:06:57 +0100 Subject: [PATCH 3/3] Test improvements for DSF. - Fixed unparseable.dsf - Added DSF feature detection to test_mediafile.py --- test/rsrc/unparseable.dsf | Bin 4208 -> 5243 bytes test/test_mediafile.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/test/rsrc/unparseable.dsf b/test/rsrc/unparseable.dsf index c5463d5c181ca3261180d4fdedde9888bbc0c325..3b6292e32df6494bca8782c8795627babe575f50 100644 GIT binary patch delta 52 zcmeyM@LPk=CD=tlh5-VqMK