def extract_ogg_tag(path): """ Read tags out of .ogg files encoded with different codecs Returns a tuple (tag, error) """ ogg_tag = None error = None # Encapsulate all try except blocks in if statements. # Only read for tag if it already does not exist. if not ogg_tag: try: # Try to read ogg-Vorbis files ogg_tag = OggVorbis(path) except Exception: # move to next codec type pass if not ogg_tag: try: # Try to read ogg-FLAC files ogg_tag = OggFLAC(path) except Exception: # move to next codec type pass if not ogg_tag: # log error for user to see error = 'Unable to read metadata from the .ogg/.oga file. Only Vorbis and FLAC are supported.' return (ogg_tag, error)
def clean(self): file = self.cleaned_data.get('file', False) acceptedMime = ['audio/mpeg', 'audio/mpeg3', 'audio/x-mpeg-3', 'audio/ogg', 'application/ogg', 'audio/x-ogg', 'application/x-ogg', 'video/ogg', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav'] type = "none" if file: if file._size > 10*1024*1024: raise forms.ValidationError(file.name + ': File too large. Max Limit: 10MB') elif not file.content_type in acceptedMime: raise forms.ValidationError(file.name + ': It is not a mp3, ogg, or wav file') try: OggVorbis(file.temporary_file_path()) type = 'OGG' except: pass try: OggFLAC(file.temporary_file_path()) type = 'OGG' except: pass try: OggOpus(file.temporary_file_path()) type = 'OGG' except: pass try: OggSpeex(file.temporary_file_path()) type = 'OGG' except: pass try: OggTheora(file.temporary_file_path()) type = 'OGG' except: pass try: MP3(file.temporary_file_path()) type = 'MP3' except: pass try: WavPack(file.temporary_file_path()) type = 'WAV' except: pass if not type in ['OGG', 'MP3', 'WAV']: raise forms.ValidationError(file.name + ': Unsupported file type') return file else: raise forms.ValidationError(file.name + ': File cannot be opened')
def __init__(self, file, threshold=60, duration_distance_threshold=10000): self.file = file self.threshold = threshold self.ddt = duration_distance_threshold self.cleaner = re.compile(r"[^A-Za-z0-9 ]").sub try: self.audio = MP3(file, ID3=EasyID3) except: try: self.audio = FLAC(file) except: try: self.audio = OggVorbis(file) except: try: self.audio = OggFLAC(file) except: try: self.audio = OggTheora(file) except: try: self.audio = APEv2(file) except: try: self.audio = ASF(file) except: try: self.audio = MP4(file) except: try: self.audio = Musepack(file) except: try: self.audio = TrueAudio(file) except: try: self.audio = WavPack(file) except: raise FileTypeException( 'Unknown file type, no metadata, or file not found.' ) try: [title] = self.audio['title'] self.title = self.__clean_literal(str(title)) except: self.title = None try: [artist] = self.audio['artist'] self.artist = self.__clean_literal(str(artist)) except: self.artist = None try: [album] = self.audio['album'] self.album = self.__clean_literal(str(album)) except: self.album = None self.mbzQuery()
def isAMusicFile(filePath): type = "none" try: OggVorbis(filePath) type = 'OGG' except: pass try: OggFLAC(filePath) type = 'OGG' except: pass try: OggOpus(filePath) type = 'OGG' except: pass try: OggSpeex(filePath) type = 'OGG' except: pass try: OggTheora(filePath) type = 'OGG' except: pass try: MP3(filePath) type = 'MP3' except: pass try: WavPack(filePath) type = 'WAV' except: pass if not type in ['OGG', 'MP3', 'WAV']: return False return True
def get_ogg_or_flac(path): from mutagen.oggflac import OggFLAC from mutagen.oggopus import OggOpus from mutagen.oggvorbis import OggVorbis from mutagen.flac import FLAC try: return OggVorbis(path) except: pass try: return FLAC(path) except: pass try: return OggFLAC(path) except: pass try: return OggOpus(path) except: pass return None
def get_mutagen_audio (path): logging.debug("GET mutagen audio" + path) ext = get_file_extension(path) audio = None if ext == ".flac": audio = FLAC(path) if ext == ".ape": audio = MonkeysAudio(path) if ext == ".mp3": audio = MP3(path, ID3=EasyID3) if ext == ".wv": audio = WavPack(path) if ext == ".wma": audio = ASF(path) if ext == ".ogg": try: audio = OggVorbis(path) except: from mutagen.oggtheora import OggTheora try: audio = OggTheora(path) except: from mutagen.oggflac import OggFLAC try: audio = OggFLAC(path) except: from mutagen.oggspeex import OggSpeex try: audio = OggSpeex(path) except: logging.error("This file in not ogg format") if ext == ".m4a" or ext == ".mp4" or ext == ".mkv": audio = MP4(path) return audio
def test_module_delete(self): delete(self.filename) self.scan_file() self.failIf(OggFLAC(self.filename).tags)
def setUp(self): original = os.path.join("tests", "data", "empty.oggflac") fd, self.filename = mkstemp(suffix='.ogg') os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename)
class TOggFLAC(TOggFileType): Kind = OggFLAC def setUp(self): original = os.path.join("tests", "data", "empty.oggflac") fd, self.filename = mkstemp(suffix='.ogg') os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename) def test_vendor(self): self.failUnless(self.audio.tags.vendor.startswith("reference libFLAC")) self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor") def test_streaminfo_bad_marker(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"fLaC", b"!fLa", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_streaminfo_too_short(self): page = OggPage(open(self.filename, "rb")).write() self.failUnlessRaises(OggError, OggFLACStreamInfo, cBytesIO(page[:10])) def test_streaminfo_bad_version(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"\x01\x00", b"\x02\x00", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_flac_reference_simple_save(self): if not have_flac: return self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_really_big(self): if not have_flac: return self.test_really_big() self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_module_delete(self): delete(self.filename) self.scan_file() self.failIf(OggFLAC(self.filename).tags) def test_flac_reference_delete(self): if not have_flac: return self.audio.delete() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_medium_sized(self): if not have_flac: return self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_delete_readd(self): if not have_flac: return self.audio.delete() self.audio.tags.clear() self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_not_my_ogg(self): fn = os.path.join('tests', 'data', 'empty.ogg') self.failUnlessRaises(IOError, type(self.audio), fn) self.failUnlessRaises(IOError, self.audio.save, fn) self.failUnlessRaises(IOError, self.audio.delete, fn) def test_mime(self): self.failUnless("audio/x-oggflac" in self.audio.mime)
def setUp(self): original = os.path.join(DATA_DIR, "empty.oggflac") fd, self.filename = mkstemp(suffix='.ogg') os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename)
class TOggFLAC(TestCase, TOggFileTypeMixin): Kind = OggFLAC PADDING_SUPPORT = False def setUp(self): original = os.path.join(DATA_DIR, "empty.oggflac") fd, self.filename = mkstemp(suffix='.ogg') os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename) def tearDown(self): os.unlink(self.filename) def test_vendor(self): self.failUnless( self.audio.tags.vendor.startswith("reference libFLAC")) self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor") def test_streaminfo_bad_marker(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"fLaC", b"!fLa", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_streaminfo_too_short(self): page = OggPage(open(self.filename, "rb")).write() self.failUnlessRaises(OggError, OggFLACStreamInfo, cBytesIO(page[:10])) def test_streaminfo_bad_version(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"\x01\x00", b"\x02\x00", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_flac_reference_simple_save(self): if not have_flac: return self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_really_big(self): if not have_flac: return self.test_really_big() self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_module_delete(self): delete(self.filename) self.scan_file() self.failIf(OggFLAC(self.filename).tags) def test_flac_reference_delete(self): if not have_flac: return self.audio.delete() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_medium_sized(self): if not have_flac: return self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_delete_readd(self): if not have_flac: return self.audio.delete() self.audio.tags.clear() self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_not_my_ogg(self): fn = os.path.join(DATA_DIR, 'empty.ogg') self.failUnlessRaises(IOError, type(self.audio), fn) self.failUnlessRaises(IOError, self.audio.save, fn) self.failUnlessRaises(IOError, self.audio.delete, fn) def test_mime(self): self.failUnless("audio/x-oggflac" in self.audio.mime) def test_info_pprint(self): self.assertTrue(self.audio.info.pprint().startswith(u"Ogg FLAC"))
def setUp(self): original = os.path.join("tests", "data", "empty.oggflac") fd, self.filename = mkstemp(suffix=".ogg") os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename)
class TOggFLAC(TOggFileType): Kind = OggFLAC def setUp(self): original = os.path.join("tests", "data", "empty.oggflac") fd, self.filename = mkstemp(suffix=".ogg") os.close(fd) shutil.copy(original, self.filename) self.audio = OggFLAC(self.filename) def test_vendor(self): self.failUnless(self.audio.tags.vendor.startswith("reference libFLAC")) self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor") def test_streaminfo_bad_marker(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"fLaC", b"!fLa", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_streaminfo_too_short(self): page = OggPage(open(self.filename, "rb")).write() self.failUnlessRaises(OggError, OggFLACStreamInfo, cBytesIO(page[:10])) def test_streaminfo_bad_version(self): page = OggPage(open(self.filename, "rb")).write() page = page.replace(b"\x01\x00", b"\x02\x00", 1) self.failUnlessRaises(IOError, OggFLACStreamInfo, cBytesIO(page)) def test_flac_reference_simple_save(self): if not have_flac: return self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_really_big(self): if not have_flac: return self.test_really_big() self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_module_delete(self): delete(self.filename) self.scan_file() self.failIf(OggFLAC(self.filename).tags) def test_flac_reference_delete(self): if not have_flac: return self.audio.delete() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_medium_sized(self): if not have_flac: return self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_flac_reference_delete_readd(self): if not have_flac: return self.audio.delete() self.audio.tags.clear() self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() value = os.system("flac --ogg -t %s 2> %s" % (self.filename, devnull)) self.failIf(value and value != NOTFOUND) def test_not_my_ogg(self): fn = os.path.join("tests", "data", "empty.ogg") self.failUnlessRaises(IOError, type(self.audio), fn) self.failUnlessRaises(IOError, self.audio.save, fn) self.failUnlessRaises(IOError, self.audio.delete, fn) def test_mime(self): self.failUnless("audio/x-oggflac" in self.audio.mime)
def setUp(self): self.filename = get_temp_copy(os.path.join(DATA_DIR, "empty.oggflac")) self.audio = OggFLAC(self.filename)
class TOggFLAC(TestCase, TOggFileTypeMixin): Kind = OggFLAC PADDING_SUPPORT = False def setUp(self): self.filename = get_temp_copy(os.path.join(DATA_DIR, "empty.oggflac")) self.audio = OggFLAC(self.filename) def tearDown(self): os.unlink(self.filename) def test_vendor(self): self.failUnless( self.audio.tags.vendor.startswith("reference libFLAC")) self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor") def test_streaminfo_bad_marker(self): with open(self.filename, "rb") as h: page = OggPage(h).write() page = page.replace(b"fLaC", b"!fLa", 1) self.failUnlessRaises(error, OggFLACStreamInfo, cBytesIO(page)) def test_streaminfo_too_short(self): with open(self.filename, "rb") as h: page = OggPage(h).write() self.failUnlessRaises(OggError, OggFLACStreamInfo, cBytesIO(page[:10])) def test_streaminfo_bad_version(self): with open(self.filename, "rb") as h: page = OggPage(h).write() page = page.replace(b"\x01\x00", b"\x02\x00", 1) self.failUnlessRaises(error, OggFLACStreamInfo, cBytesIO(page)) def test_flac_reference_simple_save(self): if not have_flac: return self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_really_big(self): if not have_flac: return self.test_really_big() self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_module_delete(self): delete(self.filename) self.scan_file() self.failIf(OggFLAC(self.filename).tags) def test_flac_reference_delete(self): if not have_flac: return self.audio.delete() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_medium_sized(self): if not have_flac: return self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_flac_reference_delete_readd(self): if not have_flac: return self.audio.delete() self.audio.tags.clear() self.audio["foobar"] = "foobar" * 1000 self.audio.save() self.scan_file() self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) def test_not_my_ogg(self): fn = os.path.join(DATA_DIR, 'empty.ogg') self.failUnlessRaises(error, type(self.audio), fn) self.failUnlessRaises(error, self.audio.save, fn) self.failUnlessRaises(error, self.audio.delete, fn) def test_mime(self): self.failUnless("audio/x-oggflac" in self.audio.mime) def test_info_pprint(self): self.assertTrue(self.audio.info.pprint().startswith(u"Ogg FLAC"))
def isSongValid(file): acceptedMime = [ 'audio/mp3', 'audio/mpeg', 'audio/mpeg3', 'audio/x-mpeg-3', 'audio/ogg', 'application/ogg', 'audio/x-ogg', 'application/x-ogg', 'video/ogg', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav' ] type = "none" if file: if file._size > 10 * 1024 * 1024: return ('File too large. Max Limit: 10MB') elif not file.content_type in acceptedMime: if settings.DEBUG: return ('MIMETYPE: ' + file.content_type + ' Not a mp3, ogg, or wav file') else: logger.error('MIMETYPE: ' + file.content_type + ' Not a mp3, ogg, or wav file') return ('It is not a mp3, ogg, or wav file') try: OggVorbis(file.temporary_file_path()) type = 'OGG' except: pass try: OggFLAC(file.temporary_file_path()) type = 'OGG' except: pass try: OggOpus(file.temporary_file_path()) type = 'OGG' except: pass try: OggSpeex(file.temporary_file_path()) type = 'OGG' except: pass try: OggTheora(file.temporary_file_path()) type = 'OGG' except: pass try: MP3(file.temporary_file_path()) type = 'MP3' except: pass try: WavPack(file.temporary_file_path()) type = 'WAV' except: pass if not type in ['OGG', 'MP3', 'WAV']: return ('Unsupported file type') return True else: return ('File cannot be opened')