From 48906a5513685a61cf18654514324062e95dcdfb Mon Sep 17 00:00:00 2001 From: Bradlee Speice Date: Mon, 10 Dec 2012 12:55:06 -0500 Subject: [PATCH] Add in the audiotools resources --- Melodia/resources/__init__.py | 6 + Melodia/resources/audiotools/__aiff__.py | 751 +++ Melodia/resources/audiotools/__ape__.py | 808 +++ Melodia/resources/audiotools/__au__.py | 256 + Melodia/resources/audiotools/__dvda__.py | 687 +++ Melodia/resources/audiotools/__flac__.py | 2150 ++++++++ Melodia/resources/audiotools/__freedb__.py | 724 +++ Melodia/resources/audiotools/__id3__.py | 1765 +++++++ Melodia/resources/audiotools/__id3v1__.py | 190 + Melodia/resources/audiotools/__image__.py | 538 ++ Melodia/resources/audiotools/__init__.py | 4591 +++++++++++++++++ Melodia/resources/audiotools/__m4a__.py | 1942 +++++++ Melodia/resources/audiotools/__m4a_atoms__.py | 387 ++ Melodia/resources/audiotools/__mp3__.py | 973 ++++ Melodia/resources/audiotools/__musepack__.py | 332 ++ .../resources/audiotools/__musicbrainz__.py | 638 +++ Melodia/resources/audiotools/__shn__.py | 507 ++ Melodia/resources/audiotools/__speex__.py | 268 + Melodia/resources/audiotools/__vorbis__.py | 842 +++ .../resources/audiotools/__vorbiscomment__.py | 294 ++ Melodia/resources/audiotools/__wav__.py | 1023 ++++ Melodia/resources/audiotools/__wavpack__.py | 661 +++ Melodia/resources/audiotools/cdio.so | Bin 0 -> 60126 bytes .../audiotools/construct/__init__.py | 115 + .../audiotools/construct/adapters.py | 482 ++ .../resources/audiotools/construct/core.py | 1249 +++++ .../resources/audiotools/construct/debug.py | 160 + .../audiotools/construct/lib/__init__.py | 10 + .../audiotools/construct/lib/binary.py | 61 + .../audiotools/construct/lib/bitstream.py | 80 + .../audiotools/construct/lib/container.py | 275 + .../resources/audiotools/construct/lib/hex.py | 36 + .../audiotools/construct/lib/path.py | 151 + .../audiotools/construct/lib/utils.py | 22 + .../resources/audiotools/construct/macros.py | 628 +++ Melodia/resources/audiotools/cue.py | 418 ++ Melodia/resources/audiotools/decoders.so | Bin 0 -> 1207464 bytes Melodia/resources/audiotools/delta.py | 277 + Melodia/resources/audiotools/encoders.so | Bin 0 -> 532170 bytes Melodia/resources/audiotools/flac.py | 715 +++ Melodia/resources/audiotools/pcm.so | Bin 0 -> 89275 bytes Melodia/resources/audiotools/player.py | 804 +++ Melodia/resources/audiotools/prot.so | Bin 0 -> 88316 bytes Melodia/resources/audiotools/replaygain.so | Bin 0 -> 66097 bytes .../resources/audiotools/replaygain_old.py | 259 + Melodia/resources/audiotools/resample.so | Bin 0 -> 1570132 bytes Melodia/resources/audiotools/toc.py | 246 + Melodia/resources/audiotools/verify.so | Bin 0 -> 666841 bytes 48 files changed, 26321 insertions(+) create mode 100644 Melodia/resources/__init__.py create mode 100644 Melodia/resources/audiotools/__aiff__.py create mode 100644 Melodia/resources/audiotools/__ape__.py create mode 100644 Melodia/resources/audiotools/__au__.py create mode 100644 Melodia/resources/audiotools/__dvda__.py create mode 100644 Melodia/resources/audiotools/__flac__.py create mode 100644 Melodia/resources/audiotools/__freedb__.py create mode 100644 Melodia/resources/audiotools/__id3__.py create mode 100644 Melodia/resources/audiotools/__id3v1__.py create mode 100644 Melodia/resources/audiotools/__image__.py create mode 100644 Melodia/resources/audiotools/__init__.py create mode 100644 Melodia/resources/audiotools/__m4a__.py create mode 100644 Melodia/resources/audiotools/__m4a_atoms__.py create mode 100644 Melodia/resources/audiotools/__mp3__.py create mode 100644 Melodia/resources/audiotools/__musepack__.py create mode 100644 Melodia/resources/audiotools/__musicbrainz__.py create mode 100644 Melodia/resources/audiotools/__shn__.py create mode 100644 Melodia/resources/audiotools/__speex__.py create mode 100644 Melodia/resources/audiotools/__vorbis__.py create mode 100644 Melodia/resources/audiotools/__vorbiscomment__.py create mode 100644 Melodia/resources/audiotools/__wav__.py create mode 100644 Melodia/resources/audiotools/__wavpack__.py create mode 100755 Melodia/resources/audiotools/cdio.so create mode 100644 Melodia/resources/audiotools/construct/__init__.py create mode 100644 Melodia/resources/audiotools/construct/adapters.py create mode 100644 Melodia/resources/audiotools/construct/core.py create mode 100644 Melodia/resources/audiotools/construct/debug.py create mode 100644 Melodia/resources/audiotools/construct/lib/__init__.py create mode 100644 Melodia/resources/audiotools/construct/lib/binary.py create mode 100644 Melodia/resources/audiotools/construct/lib/bitstream.py create mode 100644 Melodia/resources/audiotools/construct/lib/container.py create mode 100644 Melodia/resources/audiotools/construct/lib/hex.py create mode 100644 Melodia/resources/audiotools/construct/lib/path.py create mode 100644 Melodia/resources/audiotools/construct/lib/utils.py create mode 100644 Melodia/resources/audiotools/construct/macros.py create mode 100644 Melodia/resources/audiotools/cue.py create mode 100755 Melodia/resources/audiotools/decoders.so create mode 100644 Melodia/resources/audiotools/delta.py create mode 100755 Melodia/resources/audiotools/encoders.so create mode 100644 Melodia/resources/audiotools/flac.py create mode 100755 Melodia/resources/audiotools/pcm.so create mode 100644 Melodia/resources/audiotools/player.py create mode 100755 Melodia/resources/audiotools/prot.so create mode 100755 Melodia/resources/audiotools/replaygain.so create mode 100644 Melodia/resources/audiotools/replaygain_old.py create mode 100755 Melodia/resources/audiotools/resample.so create mode 100644 Melodia/resources/audiotools/toc.py create mode 100755 Melodia/resources/audiotools/verify.so diff --git a/Melodia/resources/__init__.py b/Melodia/resources/__init__.py new file mode 100644 index 0000000..896cc2c --- /dev/null +++ b/Melodia/resources/__init__.py @@ -0,0 +1,6 @@ +import os, sys +def get_resource_dir(): + return os.path.dirname( + os.path.abspath(__file__) + ) + diff --git a/Melodia/resources/audiotools/__aiff__.py b/Melodia/resources/audiotools/__aiff__.py new file mode 100644 index 0000000..8b0b3bf --- /dev/null +++ b/Melodia/resources/audiotools/__aiff__.py @@ -0,0 +1,751 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, Con, PCMReader, + __capped_stream_reader__, PCMReaderError, + transfer_data, DecodingError, EncodingError, + ID3v22Comment, BUFFER_SIZE, ChannelMask, + ReorderedPCMReader, pcm, + cStringIO, os, AiffContainer, to_pcm_progress) + +import gettext + +gettext.install("audiotools", unicode=True) + +_HUGE_VAL = 1.79769313486231e+308 + + +class IEEE_Extended(Con.Adapter): + """A construct for handling 80-bit IEEE-extended values.""" + + def __init__(self, name): + Con.Adapter.__init__( + self, + Con.Struct(name, + Con.Embed(Con.BitStruct(None, + Con.Flag("signed"), + Con.Bits("exponent", 15))), + Con.UBInt64("mantissa"))) + + def _encode(self, value, context): + import math + + if (value < 0): + signed = True + value *= -1 + else: + signed = False + + (fmant, exponent) = math.frexp(value) + if ((exponent > 16384) or (fmant >= 1)): + exponent = 0x7FFF + mantissa = 0 + else: + exponent += 16382 + mantissa = fmant * (2 ** 64) + + return Con.Container(signed=signed, + exponent=exponent, + mantissa=mantissa) + + def _decode(self, obj, context): + if ((obj.exponent == 0) and (obj.mantissa == 0)): + return 0 + else: + if (obj.exponent == 0x7FFF): + return _HUGE_VAL + else: + f = obj.mantissa * (2.0 ** (obj.exponent - 16383 - 63)) + return f if not obj.signed else -f + +####################### +#AIFF +####################### + + +class AiffReader(PCMReader): + """A subclass of PCMReader for reading AIFF file contents.""" + + def __init__(self, aiff_file, + sample_rate, channels, channel_mask, bits_per_sample, + chunk_length, process=None): + """aiff_file should be rewound to the start of the SSND chunk.""" + + alignment = AiffAudio.SSND_ALIGN.parse_stream(aiff_file) + PCMReader.__init__(self, + file=__capped_stream_reader__( + aiff_file, + chunk_length - AiffAudio.SSND_ALIGN.sizeof()), + sample_rate=sample_rate, + channels=channels, + channel_mask=channel_mask, + bits_per_sample=bits_per_sample, + process=process, + signed=True, + big_endian=True) + self.ssnd_chunk_length = chunk_length - 8 + standard_channel_mask = ChannelMask(self.channel_mask) + aiff_channel_mask = AIFFChannelMask(standard_channel_mask) + if (channels in (3, 4, 6)): + self.channel_order = [aiff_channel_mask.channels().index(channel) + for channel in + standard_channel_mask.channels()] + else: + self.channel_order = None + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + #align bytes downward if an odd number is read in + bytes -= (bytes % (self.channels * self.bits_per_sample / 8)) + pcm_data = self.file.read( + max(bytes, self.channels * self.bits_per_sample / 8)) + if ((len(pcm_data) == 0) and (self.ssnd_chunk_length > 0)): + raise IOError("ssnd chunk ends prematurely") + else: + self.ssnd_chunk_length -= len(pcm_data) + + try: + framelist = pcm.FrameList(pcm_data, + self.channels, + self.bits_per_sample, + True, True) + if (self.channel_order is not None): + return pcm.from_channels([framelist.channel(channel) + for channel in self.channel_order]) + else: + return framelist + except ValueError: + raise IOError("ssnd chunk ends prematurely") + + +class InvalidAIFF(InvalidFile): + """Raised if some problem occurs parsing AIFF chunks.""" + + pass + + +class AiffAudio(AiffContainer): + """An AIFF audio file.""" + + SUFFIX = "aiff" + NAME = SUFFIX + + AIFF_HEADER = Con.Struct("aiff_header", + Con.Const(Con.Bytes("aiff_id", 4), "FORM"), + Con.UBInt32("aiff_size"), + Con.Const(Con.Bytes("aiff_type", 4), "AIFF")) + + CHUNK_HEADER = Con.Struct("chunk_header", + Con.Bytes("chunk_id", 4), + Con.UBInt32("chunk_length")) + + COMM_CHUNK = Con.Struct("comm", + Con.UBInt16("channels"), + Con.UBInt32("total_sample_frames"), + Con.UBInt16("sample_size"), + IEEE_Extended("sample_rate")) + + SSND_ALIGN = Con.Struct("ssnd", + Con.UBInt32("offset"), + Con.UBInt32("blocksize")) + + PRINTABLE_ASCII = set([chr(i) for i in xrange(0x20, 0x7E + 1)]) + + def __init__(self, filename): + """filename is a plain string.""" + + self.filename = filename + + comm_found = False + ssnd_found = False + try: + f = open(self.filename, 'rb') + for (chunk_id, chunk_length, chunk_offset) in self.chunks(): + if (chunk_id == 'COMM'): + f.seek(chunk_offset, 0) + comm = self.COMM_CHUNK.parse(f.read(chunk_length)) + self.__channels__ = comm.channels + self.__total_sample_frames__ = comm.total_sample_frames + self.__sample_size__ = comm.sample_size + self.__sample_rate__ = int(comm.sample_rate) + comm_found = True + elif (chunk_id == 'SSND'): + f.seek(chunk_offset, 0) + ssnd = self.SSND_ALIGN.parse_stream(f) + ssnd_found = True + elif (not set(chunk_id).issubset(self.PRINTABLE_ASCII)): + raise InvalidAIFF(_("chunk header not ASCII")) + + if (not comm_found): + raise InvalidAIFF(_("no COMM chunk found")) + if (not ssnd_found): + raise InvalidAIFF(_("no SSND chunk found")) + f.close() + except IOError, msg: + raise InvalidAIFF(str(msg)) + except Con.FieldError: + raise InvalidAIFF(_("invalid COMM or SSND chunk")) + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__sample_size__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + #this unusual arrangement is taken from the AIFF specification + if (self.channels() <= 2): + return ChannelMask.from_channels(self.channels()) + elif (self.channels() == 3): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True) + elif (self.channels() == 4): + return ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.channels() == 6): + return ChannelMask.from_fields( + front_left=True, side_left=True, + front_center=True, front_right=True, + side_right=True, back_center=True) + else: + return ChannelMask(0) + + def lossless(self): + """Returns True.""" + + return True + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_sample_frames__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(12) + + return ((header[0:4] == 'FORM') and + (header[8:12] == 'AIFF')) + + def chunks(self): + """Yields a (chunk_id, length, offset) per AIFF chunk.""" + + f = open(self.filename, 'rb') + try: + aiff_header = self.AIFF_HEADER.parse_stream(f) + except Con.ConstError: + raise InvalidAIFF(_(u"Not an AIFF file")) + except Con.core.FieldError: + raise InvalidAIFF(_(u"Invalid AIFF file")) + + total_size = aiff_header.aiff_size - 4 + while (total_size > 0): + chunk_header = self.CHUNK_HEADER.parse_stream(f) + total_size -= 8 + yield (chunk_header.chunk_id, + chunk_header.chunk_length, + f.tell()) + f.seek(chunk_header.chunk_length, 1) + total_size -= chunk_header.chunk_length + f.close() + + def comm_chunk(self): + """Returns (channels, pcm_frames, bits_per_sample, sample_rate) .""" + + try: + for (chunk_id, chunk_length, chunk_offset) in self.chunks(): + if (chunk_id == 'COMM'): + f = open(self.filename, 'rb') + f.seek(chunk_offset, 0) + comm = self.COMM_CHUNK.parse(f.read(chunk_length)) + f.close() + return (comm.channels, + comm.total_sample_frames, + comm.sample_size, + int(comm.sample_rate)) + else: + raise InvalidAIFF(_(u"COMM chunk not found")) + except IOError, msg: + raise InvalidAIFF(str(msg)) + except Con.FieldError: + raise InvalidAIFF(_(u"invalid COMM chunk")) + + def chunk_files(self): + """Yields a (chunk_id,length,file) per AIFF chunk. + + The file object is capped to read only its chunk data.""" + + f = open(self.filename, 'rb') + try: + aiff_header = self.AIFF_HEADER.parse_stream(f) + except Con.ConstError: + raise InvalidAIFF(_(u"Not an AIFF file")) + except Con.core.FieldError: + raise InvalidAIFF(_(u"Invalid AIFF file")) + + total_size = aiff_header.aiff_size - 4 + while (total_size > 0): + chunk_header = self.CHUNK_HEADER.parse_stream(f) + total_size -= 8 + yield (chunk_header.chunk_id, + chunk_header.chunk_length, + __capped_stream_reader__(f, chunk_header.chunk_length)) + total_size -= chunk_header.chunk_length + f.close() + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + for (chunk_id, chunk_length, chunk_offset) in self.chunks(): + if (chunk_id == 'ID3 '): + f = open(self.filename, 'rb') + f.seek(chunk_offset, 0) + id3 = ID3v22Comment.parse(f) + f.close() + return id3 + else: + return None + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + if (metadata is None): + return + + import tempfile + + id3_chunk = ID3v22Comment.converted(metadata).build() + + new_aiff = tempfile.TemporaryFile() + new_aiff.seek(12, 0) + + id3_found = False + for (chunk_id, chunk_length, chunk_file) in self.chunk_files(): + if (chunk_id != 'ID3 '): + new_aiff.write(self.CHUNK_HEADER.build( + Con.Container(chunk_id=chunk_id, + chunk_length=chunk_length))) + transfer_data(chunk_file.read, new_aiff.write) + else: + new_aiff.write(self.CHUNK_HEADER.build( + Con.Container(chunk_id='ID3 ', + chunk_length=len(id3_chunk)))) + new_aiff.write(id3_chunk) + id3_found = True + + if (not id3_found): + new_aiff.write(self.CHUNK_HEADER.build( + Con.Container(chunk_id='ID3 ', + chunk_length=len(id3_chunk)))) + new_aiff.write(id3_chunk) + + header = Con.Container( + aiff_id='FORM', + aiff_size=new_aiff.tell() - 8, + aiff_type='AIFF') + new_aiff.seek(0, 0) + new_aiff.write(self.AIFF_HEADER.build(header)) + new_aiff.seek(0, 0) + f = open(self.filename, 'wb') + transfer_data(new_aiff.read, f.write) + new_aiff.close() + f.close() + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + import tempfile + + new_aiff = tempfile.TemporaryFile() + new_aiff.seek(12, 0) + + for (chunk_id, chunk_length, chunk_file) in self.chunk_files(): + if (chunk_id != 'ID3 '): + new_aiff.write(self.CHUNK_HEADER.build( + Con.Container(chunk_id=chunk_id, + chunk_length=chunk_length))) + transfer_data(chunk_file.read, new_aiff.write) + + header = Con.Container( + aiff_id='FORM', + aiff_size=new_aiff.tell() - 8, + aiff_type='AIFF') + new_aiff.seek(0, 0) + new_aiff.write(self.AIFF_HEADER.build(header)) + new_aiff.seek(0, 0) + f = open(self.filename, 'wb') + transfer_data(new_aiff.read, f.write) + new_aiff.close() + f.close() + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + for (chunk_id, chunk_length, chunk_offset) in self.chunks(): + if (chunk_id == 'SSND'): + f = open(self.filename, 'rb') + f.seek(chunk_offset, 0) + return AiffReader(f, + self.sample_rate(), + self.channels(), + int(self.channel_mask()), + self.bits_per_sample(), + chunk_length) + else: + return PCMReaderError(u"no SSND chunk found", + self.sample_rate(), + self.channels(), + int(self.channel_mask()), + self.bits_per_sample) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new AiffAudio object.""" + + try: + f = open(filename, 'wb') + except IOError, msg: + raise EncodingError(str(msg)) + + if (int(pcmreader.channel_mask) in + (0x4, # FC + 0x3, # FL, FR + 0x7, # FL, FR, FC + 0x33, # FL, FR, BL, BR + 0x707)): # FL, SL, FC, FR, SR, BC + standard_channel_mask = ChannelMask(pcmreader.channel_mask) + aiff_channel_mask = AIFFChannelMask(standard_channel_mask) + pcmreader = ReorderedPCMReader( + pcmreader, + [standard_channel_mask.channels().index(channel) + for channel in aiff_channel_mask.channels()]) + + try: + aiff_header = Con.Container(aiff_id='FORM', + aiff_size=4, + aiff_type='AIFF') + + comm_chunk = Con.Container( + channels=pcmreader.channels, + total_sample_frames=0, + sample_size=pcmreader.bits_per_sample, + sample_rate=float(pcmreader.sample_rate)) + + ssnd_header = Con.Container(chunk_id='SSND', + chunk_length=0) + ssnd_alignment = Con.Container(offset=0, + blocksize=0) + + #skip ahead to the start of the SSND chunk + f.seek(cls.AIFF_HEADER.sizeof() + + cls.CHUNK_HEADER.sizeof() + + cls.COMM_CHUNK.sizeof() + + cls.CHUNK_HEADER.sizeof(), 0) + + #write the SSND alignment info + f.write(cls.SSND_ALIGN.build(ssnd_alignment)) + + #write big-endian samples to SSND chunk from pcmreader + try: + framelist = pcmreader.read(BUFFER_SIZE) + except (ValueError, IOError), err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + total_pcm_frames = 0 + while (len(framelist) > 0): + f.write(framelist.to_bytes(True, True)) + total_pcm_frames += framelist.frames + try: + framelist = pcmreader.read(BUFFER_SIZE) + except (ValueError, IOError), err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + total_size = f.tell() + + #return to the start of the file + f.seek(0, 0) + + #write AIFF header + aiff_header.aiff_size = total_size - 8 + f.write(cls.AIFF_HEADER.build(aiff_header)) + + #write COMM chunk + comm_chunk.total_sample_frames = total_pcm_frames + comm_chunk = cls.COMM_CHUNK.build(comm_chunk) + f.write(cls.CHUNK_HEADER.build(Con.Container( + chunk_id='COMM', + chunk_length=len(comm_chunk)))) + f.write(comm_chunk) + + #write SSND chunk header + f.write(cls.CHUNK_HEADER.build(Con.Container( + chunk_id='SSND', + chunk_length=(total_pcm_frames * + (pcmreader.bits_per_sample / 8) * + pcmreader.channels) + + cls.SSND_ALIGN.sizeof()))) + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + finally: + f.close() + + return cls(filename) + + def to_aiff(self, aiff_filename, progress=None): + """Writes the contents of this file to the given .aiff filename string. + + Raises EncodingError if some error occurs during decoding.""" + + try: + self.verify() + except InvalidAiff, err: + raise EncodingError(str(err)) + + try: + output = file(aiff_filename, 'wb') + input = file(self.filename, 'rb') + except IOError, msg: + raise EncodingError(str(msg)) + try: + transfer_data(input.read, output.write) + finally: + input.close() + output.close() + + @classmethod + def from_aiff(cls, filename, aiff_filename, compression=None, + progress=None): + try: + cls(aiff_filename).verify() + except InvalidAiff, err: + raise EncodingError(unicode(err)) + + try: + input = file(aiff_filename, 'rb') + output = file(filename, 'wb') + except IOError, err: + raise EncodingError(str(err)) + try: + total_bytes = os.path.getsize(aiff_filename) + current_bytes = 0 + s = input.read(4096) + while (len(s) > 0): + current_bytes += len(s) + output.write(s) + if (progress is not None): + progress(current_bytes, total_bytes) + s = input.read(4096) + output.flush() + try: + return AiffAudio(filename) + except InvalidFile: + cls.__unlink__(filename) + raise EncodingError(u"invalid AIFF source file") + finally: + input.close() + output.close() + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + if (hasattr(target_class, "from_aiff")): + return target_class.from_aiff(target_path, + self.filename, + compression=compression, + progress=progress) + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + def pcm_split(self): + """Returns a pair of data strings before and after PCM data. + + The first contains all data before the PCM content of the data chunk. + The second containing all data after the data chunk. + """ + + head = cStringIO.StringIO() + tail = cStringIO.StringIO() + current_block = head + + aiff_file = open(self.filename, 'rb') + try: + try: + #transfer the 12-bite FORMsizeAIFF header + header = AiffAudio.AIFF_HEADER.parse(aiff_file.read(12)) + total_size = header.aiff_size - 4 + current_block.write(AiffAudio.AIFF_HEADER.build(header)) + except Con.ConstError: + raise InvalidAIFF(_(u"Not an AIFF file")) + except Con.core.FieldError: + raise InvalidAIFF(_(u"Invalid AIFF file")) + + while (total_size > 0): + try: + #transfer each chunk header + chunk_header = AiffAudio.CHUNK_HEADER.parse( + aiff_file.read(8)) + current_block.write(AiffAudio.CHUNK_HEADER.build( + chunk_header)) + total_size -= 8 + except Con.core.FieldError: + raise InvalidAiff(_(u"Invalid AIFF file")) + + #and transfer the full content of non-ssnd chunks + if (chunk_header.chunk_id != "SSND"): + current_block.write( + aiff_file.read(chunk_header.chunk_length)) + else: + #or, the top 8 align bytes of the ssnd chunk + try: + align = AiffAudio.SSND_ALIGN.parse( + aiff_file.read(8)) + current_block.write(AiffAudio.SSND_ALIGN.build( + align)) + aiff_file.seek(chunk_header.chunk_length - 8, + os.SEEK_CUR) + current_block = tail + except Con.core.FieldError: + raise InvalidAiff(_(u"Invalid AIFF file")) + + total_size -= chunk_header.chunk_length + + return (head.getvalue(), tail.getvalue()) + finally: + aiff_file.close() + + @classmethod + def aiff_from_chunks(cls, filename, chunk_iter): + """Builds a new AIFF file from a chunk data iterator. + + filename is the path to the wave file to build. + chunk_iter should yield (chunk_id, chunk_data) tuples. + """ + + f = file(filename, 'wb') + + header = Con.Container() + header.aiff_id = 'FORM' + header.aiff_type = 'AIFF' + header.aiff_size = 4 + + #write an unfinished header with an invalid size (for now) + f.write(cls.AIFF_HEADER.build(header)) + + for (chunk_id, chunk_data) in chunk_iter: + + #not sure if I need to fix chunk sizes + #to fall on 16-bit boundaries + + chunk_header = cls.CHUNK_HEADER.build( + Con.Container(chunk_id=chunk_id, + chunk_length=len(chunk_data))) + f.write(chunk_header) + header.aiff_size += len(chunk_header) + + f.write(chunk_data) + header.aiff_size += len(chunk_data) + + #now that the chunks are done, go back and re-write the header + f.seek(0, 0) + f.write(cls.AIFF_HEADER.build(header)) + f.close() + + def has_foreign_aiff_chunks(self): + return (set(['COMM', 'SSND']) != + set([chunk[0] for chunk in self.chunks()])) + + +class AIFFChannelMask(ChannelMask): + """The AIFF-specific channel mapping.""" + + def __repr__(self): + return "AIFFChannelMask(%s)" % \ + ",".join(["%s=%s" % (field, getattr(self, field)) + for field in self.SPEAKER_TO_MASK.keys() + if (getattr(self, field))]) + + def channels(self): + """Returns a list of speaker strings this mask contains. + + Returned in the order in which they should appear + in the PCM stream. + """ + + count = len(self) + if (count == 1): + return ["front_center"] + elif (count == 2): + return ["front_left", "front_right"] + elif (count == 3): + return ["front_left", "front_right", "front_center"] + elif (count == 4): + return ["front_left", "front_right", + "back_left", "back_right"] + elif (count == 6): + return ["front_left", "side_left", "front_center", + "front_right", "side_right", "back_center"] + else: + return [] diff --git a/Melodia/resources/audiotools/__ape__.py b/Melodia/resources/audiotools/__ape__.py new file mode 100644 index 0000000..3c73db8 --- /dev/null +++ b/Melodia/resources/audiotools/__ape__.py @@ -0,0 +1,808 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, WaveAudio, InvalidFile, PCMReader, + Con, transfer_data, subprocess, BIN, MetaData, + os, re, TempWaveReader, Image, cStringIO) +import gettext + +gettext.install("audiotools", unicode=True) + + +#takes a pair of integers for the current and total values +#returns a unicode string of their combined pair +#for example, __number_pair__(2,3) returns u"2/3" +#whereas __number_pair__(4,0) returns u"4" +def __number_pair__(current, total): + if (total == 0): + return u"%d" % (current) + else: + return u"%d/%d" % (current, total) + + +####################### +#MONKEY'S AUDIO +####################### + + +class ApeTagItem: + """A container for APEv2 tag items.""" + + APEv2_FLAGS = Con.BitStruct("APEv2_FLAGS", + Con.Bits("undefined1", 5), + Con.Flag("read_only"), + Con.Bits("encoding", 2), + Con.Bits("undefined2", 16), + Con.Flag("contains_header"), + Con.Flag("contains_no_footer"), + Con.Flag("is_header"), + Con.Bits("undefined3", 5)) + + APEv2_TAG = Con.Struct("APEv2_TAG", + Con.ULInt32("length"), + Con.Embed(APEv2_FLAGS), + Con.CString("key"), + Con.MetaField("value", + lambda ctx: ctx["length"])) + + def __init__(self, item_type, read_only, key, data): + """Fields are as follows: + + item_type is 0 = UTF-8, 1 = binary, 2 = external, 3 = reserved. + read_only is True if the item is read only. + key is an ASCII string. + data is a binary string of the data itself. + """ + + self.type = item_type + self.read_only = read_only + self.key = key + self.data = data + + def __repr__(self): + return "ApeTagItem(%s,%s,%s,%s)" % \ + (repr(self.type), + repr(self.read_only), + repr(self.key), + repr(self.data)) + + def __str__(self): + return self.data + + def __unicode__(self): + return self.data.rstrip(chr(0)).decode('utf-8', 'replace') + + def build(self): + """Returns this tag as a binary string of data.""" + + return self.APEv2_TAG.build( + Con.Container(key=self.key, + value=self.data, + length=len(self.data), + encoding=self.type, + undefined1=0, + undefined2=0, + undefined3=0, + read_only=self.read_only, + contains_header=False, + contains_no_footer=False, + is_header=False)) + + @classmethod + def binary(cls, key, data): + """Returns an ApeTagItem of binary data. + + key is an ASCII string, data is a binary string.""" + + return cls(1, False, key, data) + + @classmethod + def external(cls, key, data): + """Returns an ApeTagItem of external data. + + key is an ASCII string, data is a binary string.""" + + return cls(2, False, key, data) + + @classmethod + def string(cls, key, data): + """Returns an ApeTagItem of text data. + + key is an ASCII string, data is a UTF-8 binary string.""" + + return cls(0, False, key, data.encode('utf-8', 'replace')) + + +class ApeTag(MetaData): + """A complete APEv2 tag.""" + + ITEM = ApeTagItem + + APEv2_FLAGS = Con.BitStruct("APEv2_FLAGS", + Con.Bits("undefined1", 5), + Con.Flag("read_only"), + Con.Bits("encoding", 2), + Con.Bits("undefined2", 16), + Con.Flag("contains_header"), + Con.Flag("contains_no_footer"), + Con.Flag("is_header"), + Con.Bits("undefined3", 5)) + + APEv2_FOOTER = Con.Struct("APEv2", + Con.String("preamble", 8), + Con.ULInt32("version_number"), + Con.ULInt32("tag_size"), + Con.ULInt32("item_count"), + Con.Embed(APEv2_FLAGS), + Con.ULInt64("reserved")) + + APEv2_HEADER = APEv2_FOOTER + + APEv2_TAG = ApeTagItem.APEv2_TAG + + ATTRIBUTE_MAP = {'track_name': 'Title', + 'track_number': 'Track', + 'track_total': 'Track', + 'album_number': 'Media', + 'album_total': 'Media', + 'album_name': 'Album', + 'artist_name': 'Artist', + #"Performer" is not a defined APEv2 key + #it would be nice to have, yet would not be standard + 'performer_name': 'Performer', + 'composer_name': 'Composer', + 'conductor_name': 'Conductor', + 'ISRC': 'ISRC', + 'catalog': 'Catalog', + 'copyright': 'Copyright', + 'publisher': 'Publisher', + 'year': 'Year', + 'date': 'Record Date', + 'comment': 'Comment'} + + INTEGER_ITEMS = ('Track', 'Media') + + def __init__(self, tags, tag_length=None): + """Constructs an ApeTag from a list of ApeTagItem objects. + + tag_length is an optional total length integer.""" + + for tag in tags: + if (not isinstance(tag, ApeTagItem)): + raise ValueError("%s is not ApeTag" % (repr(tag))) + self.__dict__["tags"] = tags + self.__dict__["tag_length"] = tag_length + + def __eq__(self, metadata): + if (isinstance(metadata, ApeTag)): + if (set(self.keys()) != set(metadata.keys())): + return False + + for tag in self.tags: + try: + if (tag.data != metadata[tag.key].data): + return False + except KeyError: + return False + else: + return True + elif (isinstance(metadata, MetaData)): + return MetaData.__eq__(self, metadata) + else: + return False + + def keys(self): + return [tag.key for tag in self.tags] + + def __getitem__(self, key): + for tag in self.tags: + if (tag.key == key): + return tag + else: + raise KeyError(key) + + def get(self, key, default): + try: + return self[key] + except KeyError: + return default + + def __setitem__(self, key, value): + for i in xrange(len(self.tags)): + if (self.tags[i].key == key): + self.tags[i] = value + return + else: + self.tags.append(value) + + def index(self, key): + for (i, tag) in enumerate(self.tags): + if (tag.key == key): + return i + else: + raise ValueError(key) + + def __delitem__(self, key): + for i in xrange(len(self.tags)): + if (self.tags[i].key == key): + del(self.tags[i]) + return + + #if an attribute is updated (e.g. self.track_name) + #make sure to update the corresponding dict pair + def __setattr__(self, key, value): + if (key in self.ATTRIBUTE_MAP): + if (key == 'track_number'): + self['Track'] = self.ITEM.string( + 'Track', __number_pair__(value, self.track_total)) + elif (key == 'track_total'): + self['Track'] = self.ITEM.string( + 'Track', __number_pair__(self.track_number, value)) + elif (key == 'album_number'): + self['Media'] = self.ITEM.string( + 'Media', __number_pair__(value, self.album_total)) + elif (key == 'album_total'): + self['Media'] = self.ITEM.string( + 'Media', __number_pair__(self.album_number, value)) + else: + self[self.ATTRIBUTE_MAP[key]] = self.ITEM.string( + self.ATTRIBUTE_MAP[key], value) + else: + self.__dict__[key] = value + + def __getattr__(self, key): + if (key == 'track_number'): + try: + return int(re.findall('\d+', + unicode(self.get("Track", u"0")))[0]) + except IndexError: + return 0 + elif (key == 'track_total'): + try: + return int(re.findall('\d+/(\d+)', + unicode(self.get("Track", u"0")))[0]) + except IndexError: + return 0 + elif (key == 'album_number'): + try: + return int(re.findall('\d+', + unicode(self.get("Media", u"0")))[0]) + except IndexError: + return 0 + elif (key == 'album_total'): + try: + return int(re.findall('\d+/(\d+)', + unicode(self.get("Media", u"0")))[0]) + except IndexError: + return 0 + elif (key in self.ATTRIBUTE_MAP): + return unicode(self.get(self.ATTRIBUTE_MAP[key], u'')) + elif (key in MetaData.__FIELDS__): + return u'' + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __delattr__(self, key): + if (key == 'track_number'): + setattr(self, 'track_number', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self['Track']) + elif (key == 'track_total'): + setattr(self, 'track_total', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self['Track']) + elif (key == 'album_number'): + setattr(self, 'album_number', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self['Media']) + elif (key == 'album_total'): + setattr(self, 'album_total', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self['Media']) + elif (key in self.ATTRIBUTE_MAP): + try: + del(self[self.ATTRIBUTE_MAP[key]]) + except ValueError: + pass + elif (key in MetaData.__FIELDS__): + pass + else: + try: + del(self.__dict__[key]) + except KeyError: + raise AttributeError(key) + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to an ApeTag object.""" + + if ((metadata is None) or (isinstance(metadata, ApeTag))): + return metadata + else: + tags = cls([]) + for (field, key) in cls.ATTRIBUTE_MAP.items(): + if (field not in cls.__INTEGER_FIELDS__): + field = unicode(getattr(metadata, field)) + if (len(field) > 0): + tags[key] = cls.ITEM.string(key, field) + + if ((metadata.track_number != 0) or + (metadata.track_total != 0)): + tags["Track"] = cls.ITEM.string( + "Track", __number_pair__(metadata.track_number, + metadata.track_total)) + + if ((metadata.album_number != 0) or + (metadata.album_total != 0)): + tags["Media"] = cls.ITEM.string( + "Media", __number_pair__(metadata.album_number, + metadata.album_total)) + + for image in metadata.images(): + tags.add_image(image) + + return tags + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + metadata = self.__class__.converted(metadata) + if (metadata is None): + return + + for tag in metadata.tags: + if ((tag.key not in ('Track', 'Media')) and + (len(str(tag)) > 0) and + (len(str(self.get(tag.key, ""))) == 0)): + self[tag.key] = tag + for attr in ("track_number", "track_total", + "album_number", "album_total"): + if ((getattr(self, attr) == 0) and + (getattr(metadata, attr) != 0)): + setattr(self, attr, getattr(metadata, attr)) + + def __comment_name__(self): + return u'APEv2' + + #takes two (key,value) apetag pairs + #returns cmp on the weighted set of them + #(title first, then artist, album, tracknumber) + @classmethod + def __by_pair__(cls, pair1, pair2): + KEY_MAP = {"Title": 1, + "Album": 2, + "Track": 3, + "Media": 4, + "Artist": 5, + "Performer": 6, + "Composer": 7, + "Conductor": 8, + "Catalog": 9, + "Publisher": 10, + "ISRC": 11, + #"Media": 12, + "Year": 13, + "Record Date": 14, + "Copyright": 15} + + return cmp((KEY_MAP.get(pair1[0], 16), pair1[0], pair1[1]), + (KEY_MAP.get(pair2[0], 16), pair2[0], pair2[1])) + + def __comment_pairs__(self): + items = [] + + for tag in self.tags: + if (tag.key in ('Cover Art (front)', 'Cover Art (back)')): + pass + elif (tag.type == 0): + items.append((tag.key, unicode(tag))) + else: + if (len(str(tag)) <= 20): + items.append((tag.key, str(tag).encode('hex'))) + else: + items.append((tag.key, + str(tag).encode('hex')[0:39].upper() + + u"\u2026")) + + return sorted(items, ApeTag.__by_pair__) + + @classmethod + def supports_images(cls): + """Returns True.""" + + return True + + def __parse_image__(self, key, type): + data = cStringIO.StringIO(str(self[key])) + description = Con.CString(None).parse_stream(data).decode('utf-8', + 'replace') + data = data.read() + return Image.new(data, description, type) + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + if (image.type == 0): + self['Cover Art (front)'] = self.ITEM.external( + 'Cover Art (front)', + Con.CString(None).build(image.description.encode( + 'utf-8', 'replace')) + image.data) + elif (image.type == 1): + self['Cover Art (back)'] = self.ITEM.binary( + 'Cover Art (back)', + Con.CString(None).build(image.description.encode( + 'utf-8', 'replace')) + image.data) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + if ((image.type == 0) and 'Cover Art (front)' in self.keys()): + del(self['Cover Art (front)']) + elif ((image.type == 1) and 'Cover Art (back)' in self.keys()): + del(self['Cover Art (back)']) + + def images(self): + """Returns a list of embedded Image objects.""" + + #APEv2 supports only one value per key + #so a single front and back cover are all that is possible + img = [] + if ('Cover Art (front)' in self.keys()): + img.append(self.__parse_image__('Cover Art (front)', 0)) + if ('Cover Art (back)' in self.keys()): + img.append(self.__parse_image__('Cover Art (back)', 1)) + return img + + @classmethod + def read(cls, apefile): + """Returns an ApeTag object from an APEv2 tagged file object. + + May return None if the file object has no tag.""" + + apefile.seek(-32, 2) + footer = cls.APEv2_FOOTER.parse(apefile.read(32)) + + if (footer.preamble != 'APETAGEX'): + return None + + apefile.seek(-(footer.tag_size), 2) + + return cls([ApeTagItem(item_type=tag.encoding, + read_only=tag.read_only, + key=tag.key, + data=tag.value) + for tag in Con.StrictRepeater( + footer.item_count, + cls.APEv2_TAG).parse(apefile.read())], + tag_length=footer.tag_size + ApeTag.APEv2_FOOTER.sizeof() + if footer.contains_header else + footer.tag_size) + + def build(self): + """Returns an APEv2 tag as a binary string.""" + + header = Con.Container(preamble='APETAGEX', + version_number=2000, + tag_size=0, + item_count=len(self.tags), + undefined1=0, + undefined2=0, + undefined3=0, + read_only=False, + encoding=0, + contains_header=True, + contains_no_footer=False, + is_header=True, + reserved=0l) + + footer = Con.Container(preamble=header.preamble, + version_number=header.version_number, + tag_size=0, + item_count=len(self.tags), + undefined1=0, + undefined2=0, + undefined3=0, + read_only=False, + encoding=0, + contains_header=True, + contains_no_footer=False, + is_header=False, + reserved=0l) + + tags = "".join([tag.build() for tag in self.tags]) + + footer.tag_size = header.tag_size = \ + len(tags) + len(ApeTag.APEv2_FOOTER.build(footer)) + + return ApeTag.APEv2_FOOTER.build(header) + \ + tags + \ + ApeTag.APEv2_FOOTER.build(footer) + + +class ApeTaggedAudio: + """A class for handling audio formats with APEv2 tags. + + This class presumes there will be a filename attribute which + can be opened and checked for tags, or written if necessary.""" + + APE_TAG_CLASS = ApeTag + + def get_metadata(self): + """Returns an ApeTag object, or None. + + Raises IOError if unable to read the file.""" + + f = file(self.filename, 'rb') + try: + return self.APE_TAG_CLASS.read(f) + finally: + f.close() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + Raises IOError if unable to write the file.""" + + apetag = self.APE_TAG_CLASS.converted(metadata) + + if (apetag is None): + return + + current_metadata = self.get_metadata() + if (current_metadata is not None): # there's existing tags to delete + f = file(self.filename, "rb") + untagged_data = f.read()[0:-current_metadata.tag_length] + f.close() + f = file(self.filename, "wb") + f.write(untagged_data) + f.write(apetag.build()) + f.close() + else: # no existing tags + f = file(self.filename, "ab") + f.write(apetag.build()) + f.close() + + def delete_metadata(self): + """Deletes the track's MetaData. + + Raises IOError if unable to write the file.""" + + current_metadata = self.get_metadata() + if (current_metadata is not None): # there's existing tags to delete + f = file(self.filename, "rb") + untagged_data = f.read()[0:-current_metadata.tag_length] + f.close() + f = file(self.filename, "wb") + f.write(untagged_data) + f.close() + + +class ApeAudio(ApeTaggedAudio, AudioFile): + """A Monkey's Audio file.""" + + SUFFIX = "ape" + NAME = SUFFIX + DEFAULT_COMPRESSION = "5000" + COMPRESSION_MODES = tuple([str(x * 1000) for x in range(1, 6)]) + BINARIES = ("mac",) + + FILE_HEAD = Con.Struct("ape_head", + Con.String('id', 4), + Con.ULInt16('version')) + + #version >= 3.98 + APE_DESCRIPTOR = Con.Struct("ape_descriptor", + Con.ULInt16('padding'), + Con.ULInt32('descriptor_bytes'), + Con.ULInt32('header_bytes'), + Con.ULInt32('seektable_bytes'), + Con.ULInt32('header_data_bytes'), + Con.ULInt32('frame_data_bytes'), + Con.ULInt32('frame_data_bytes_high'), + Con.ULInt32('terminating_data_bytes'), + Con.String('md5', 16)) + + APE_HEADER = Con.Struct("ape_header", + Con.ULInt16('compression_level'), + Con.ULInt16('format_flags'), + Con.ULInt32('blocks_per_frame'), + Con.ULInt32('final_frame_blocks'), + Con.ULInt32('total_frames'), + Con.ULInt16('bits_per_sample'), + Con.ULInt16('number_of_channels'), + Con.ULInt32('sample_rate')) + + #version <= 3.97 + APE_HEADER_OLD = Con.Struct("ape_header_old", + Con.ULInt16('compression_level'), + Con.ULInt16('format_flags'), + Con.ULInt16('number_of_channels'), + Con.ULInt32('sample_rate'), + Con.ULInt32('header_bytes'), + Con.ULInt32('terminating_bytes'), + Con.ULInt32('total_frames'), + Con.ULInt32('final_frame_blocks')) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + + (self.__samplespersec__, + self.__channels__, + self.__bitspersample__, + self.__totalsamples__) = ApeAudio.__ape_info__(filename) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + return file.read(4) == "MAC " + + def lossless(self): + """Returns True.""" + + return True + + @classmethod + def supports_foreign_riff_chunks(cls): + """Returns True.""" + + return True + + def has_foreign_riff_chunks(self): + """Returns True.""" + + #FIXME - this isn't strictly true + #I'll need a way to detect foreign chunks in APE's stream + #without decoding it first, + #but since I'm not supporting APE anyway, I'll take the lazy way out + return True + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bitspersample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__totalsamples__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplespersec__ + + @classmethod + def __ape_info__(cls, filename): + f = file(filename, 'rb') + try: + file_head = cls.FILE_HEAD.parse_stream(f) + + if (file_head.id != 'MAC '): + raise InvalidFile(_(u"Invalid Monkey's Audio header")) + + if (file_head.version >= 3980): # the latest APE file type + descriptor = cls.APE_DESCRIPTOR.parse_stream(f) + header = cls.APE_HEADER.parse_stream(f) + + return (header.sample_rate, + header.number_of_channels, + header.bits_per_sample, + ((header.total_frames - 1) * \ + header.blocks_per_frame) + \ + header.final_frame_blocks) + else: # old-style APE file (obsolete) + header = cls.APE_HEADER_OLD.parse_stream(f) + + if (file_head.version >= 3950): + blocks_per_frame = 0x48000 + elif ((file_head.version >= 3900) or + ((file_head.version >= 3800) and + (header.compression_level == 4000))): + blocks_per_frame = 0x12000 + else: + blocks_per_frame = 0x2400 + + if (header.format_flags & 0x01): + bits_per_sample = 8 + elif (header.format_flags & 0x08): + bits_per_sample = 24 + else: + bits_per_sample = 16 + + return (header.sample_rate, + header.number_of_channels, + bits_per_sample, + ((header.total_frames - 1) * \ + blocks_per_frame) + \ + header.final_frame_blocks) + + finally: + f.close() + + def to_wave(self, wave_filename): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + if (self.filename.endswith(".ape")): + devnull = file(os.devnull, "wb") + sub = subprocess.Popen([BIN['mac'], + self.filename, + wave_filename, + '-d'], + stdout=devnull, + stderr=devnull) + sub.wait() + devnull.close() + else: + devnull = file(os.devnull, 'ab') + import tempfile + ape = tempfile.NamedTemporaryFile(suffix='.ape') + f = file(self.filename, 'rb') + transfer_data(f.read, ape.write) + f.close() + ape.flush() + sub = subprocess.Popen([BIN['mac'], + ape.name, + wave_filename, + '-d'], + stdout=devnull, + stderr=devnull) + sub.wait() + ape.close() + devnull.close() + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new ApeAudio object.""" + + if (str(compression) not in cls.COMPRESSION_MODES): + compression = cls.DEFAULT_COMPRESSION + + devnull = file(os.devnull, "wb") + sub = subprocess.Popen([BIN['mac'], + wave_filename, + filename, + "-c%s" % (compression)], + stdout=devnull, + stderr=devnull) + sub.wait() + devnull.close() + return ApeAudio(filename) diff --git a/Melodia/resources/audiotools/__au__.py b/Melodia/resources/audiotools/__au__.py new file mode 100644 index 0000000..acb0127 --- /dev/null +++ b/Melodia/resources/audiotools/__au__.py @@ -0,0 +1,256 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, PCMReader, Con, + transfer_data, InvalidFormat, + __capped_stream_reader__, BUFFER_SIZE, + FILENAME_FORMAT, EncodingError, DecodingError, + ChannelMask) +import audiotools.pcm +import gettext + +gettext.install("audiotools", unicode=True) + + +class InvalidAU(InvalidFile): + pass + + +####################### +#Sun AU +####################### + + +class AuReader(PCMReader): + """A subclass of PCMReader for reading Sun AU file contents.""" + + def __init__(self, au_file, data_size, + sample_rate, channels, channel_mask, bits_per_sample): + """au_file is a file, data_size is an integer byte count. + + sample_rate, channels, channel_mask and bits_per_sample are ints. + """ + + PCMReader.__init__(self, + file=au_file, + sample_rate=sample_rate, + channels=channels, + channel_mask=channel_mask, + bits_per_sample=bits_per_sample) + self.data_size = data_size + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + #align bytes downward if an odd number is read in + bytes -= (bytes % (self.channels * self.bits_per_sample / 8)) + bytes = max(bytes, self.channels * self.bits_per_sample / 8) + pcm_data = self.file.read(bytes) + if ((len(pcm_data) == 0) and (self.data_size > 0)): + raise IOError("data ends prematurely") + else: + self.data_size -= len(pcm_data) + + try: + return audiotools.pcm.FrameList(pcm_data, + self.channels, + self.bits_per_sample, + True, + True) + except ValueError: + raise IOError("data ends prematurely") + + +class AuAudio(AudioFile): + """A Sun AU audio file.""" + + SUFFIX = "au" + NAME = SUFFIX + + AU_HEADER = Con.Struct('header', + Con.Const(Con.String('magic_number', 4), '.snd'), + Con.UBInt32('data_offset'), + Con.UBInt32('data_size'), + Con.UBInt32('encoding_format'), + Con.UBInt32('sample_rate'), + Con.UBInt32('channels')) + + def __init__(self, filename): + AudioFile.__init__(self, filename) + + try: + f = file(filename, 'rb') + except IOError, msg: + raise InvalidAU(str(msg)) + try: + header = AuAudio.AU_HEADER.parse_stream(f) + + if (header.encoding_format not in (2, 3, 4)): + raise InvalidFile(_(u"Unsupported Sun AU encoding format")) + + self.__bits_per_sample__ = {2: 8, 3: 16, 4: 24}[ + header.encoding_format] + self.__channels__ = header.channels + self.__sample_rate__ = header.sample_rate + self.__total_frames__ = header.data_size / \ + (self.__bits_per_sample__ / 8) / \ + self.__channels__ + self.__data_offset__ = header.data_offset + self.__data_size__ = header.data_size + except Con.ConstError: + raise InvalidFile(_(u"Invalid Sun AU header")) + except Con.FieldError: + raise InvalidAU(_(u"Invalid Sun AU header")) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + return file.read(4) == ".snd" + + def lossless(self): + """Returns True.""" + + return True + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bits_per_sample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if (self.channels() <= 2): + return ChannelMask.from_channels(self.channels()) + else: + return ChannelMask(0) + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_frames__ + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + f = file(self.filename, 'rb') + f.seek(self.__data_offset__, 0) + + return AuReader(au_file=f, + data_size=self.__data_size__, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample()) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new AuAudio object.""" + + if (pcmreader.bits_per_sample not in (8, 16, 24)): + raise InvalidFormat( + _(u"Unsupported bits per sample %s") % ( + pcmreader.bits_per_sample)) + + bytes_per_sample = pcmreader.bits_per_sample / 8 + + header = Con.Container(magic_number='.snd', + data_offset=0, + data_size=0, + encoding_format={8: 2, 16: 3, 24: 4}[ + pcmreader.bits_per_sample], + sample_rate=pcmreader.sample_rate, + channels=pcmreader.channels) + + try: + f = file(filename, 'wb') + except IOError, err: + raise EncodingError(str(err)) + try: + #send out a dummy header + f.write(AuAudio.AU_HEADER.build(header)) + header.data_offset = f.tell() + + #send our big-endian PCM data + #d will be a list of ints, so we can't use transfer_data + try: + framelist = pcmreader.read(BUFFER_SIZE) + while (len(framelist) > 0): + bytes = framelist.to_bytes(True, True) + f.write(bytes) + header.data_size += len(bytes) + framelist = pcmreader.read(BUFFER_SIZE) + except (IOError, ValueError), err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + + #send out a complete header + f.seek(0, 0) + f.write(AuAudio.AU_HEADER.build(header)) + finally: + f.close() + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + + return AuAudio(filename) + + @classmethod + def track_name(cls, file_path, track_metadata=None, format=None, + suffix=None): + """Constructs a new filename string. + + Given a plain string to an existing path, + a MetaData-compatible object (or None), + a UTF-8-encoded Python format string + and an ASCII-encoded suffix string (such as "mp3") + returns a plain string of a new filename with format's + fields filled-in and encoded as FS_ENCODING. + Raises UnsupportedTracknameField if the format string + contains invalid template fields.""" + + if (format is None): + format = "track%(track_number)2.2d.au" + return AudioFile.track_name(file_path, track_metadata, format, + suffix=cls.SUFFIX) diff --git a/Melodia/resources/audiotools/__dvda__.py b/Melodia/resources/audiotools/__dvda__.py new file mode 100644 index 0000000..dcd3bdb --- /dev/null +++ b/Melodia/resources/audiotools/__dvda__.py @@ -0,0 +1,687 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import Con, re, os, pcm, cStringIO, struct + + +class DVDAudio: + """An object representing an entire DVD-Audio disc. + + A DVDAudio object contains one or more DVDATitle objects + (accessible via the .titlesets attribute). + Typically, only the first DVDTitle is interesting. + Each DVDATitle then contains one or more DVDATrack objects. + """ + + SECTOR_SIZE = 2048 + PTS_PER_SECOND = 90000 + + AUDIO_TS_IFO = Con.Struct( + "AUDIO_TS_IFO", + Con.Const(Con.Bytes("identifier", 12), "DVDAUDIO-AMG"), + Con.UBInt32("AMG_start_sector"), + Con.Padding(12), + Con.UBInt32("AMGI_end_sector"), + Con.UBInt16("DVD_version"), + Con.Padding(4), + Con.UBInt16("volume_count"), + Con.UBInt16("volume_number"), + Con.UBInt8("disc_side"), + Con.Padding(4), + Con.UBInt8("autoplay"), + Con.UBInt32("ts_to_sv"), + Con.Padding(10), + Con.UBInt8("video_titlesets"), + Con.UBInt8("audio_titlesets"), + Con.Bytes("provider_identifier", 40)) + + ATS_XX_S1 = Con.Struct( + "ATS_XX", + Con.Const(Con.String("identifier", 12), "DVDAUDIO-ATS"), + Con.UBInt32("ATS_end_sector"), + Con.Padding(12), + Con.UBInt32("ATSI_end_sector"), + Con.UBInt16("DVD_specification_version"), + Con.UBInt32("VTS_category"), + Con.Padding(90), + Con.UBInt32("ATSI_MAT_end_sector"), + Con.Padding(60), + Con.UBInt32("VTSM_VOBS_start_sector"), + Con.UBInt32("ATST_AOBS_start_sector"), + Con.UBInt32("VTS_PTT_SRPT_start_sector"), + Con.UBInt32("ATS_PGCI_UT_start_sector"), + Con.UBInt32("VTSM_PGCI_UT_start_sector"), + Con.UBInt32("VTS_TMAPT_start_sector"), + Con.UBInt32("VTSM_C_ADT_start_sector"), + Con.UBInt32("VTSM_VOBU_ADMA_start_sector"), + Con.UBInt32("VTS_C_ADT_start_sector"), + Con.UBInt32("VTS_VOBU_ADMAP_start_sector"), + Con.Padding(24)) + + ATS_XX_S2 = Con.Struct( + "ATS_XX2", + Con.UBInt16("title_count"), + Con.Padding(2), + Con.UBInt32("last_byte_address"), + Con.StrictRepeater( + lambda ctx: ctx['title_count'], + Con.Struct('titles', + Con.UBInt16("unknown1"), + Con.UBInt16("unknown2"), + Con.UBInt32("byte_offset")))) + + ATS_TITLE = Con.Struct( + "ATS_title", + Con.Bytes("unknown1", 2), + Con.UBInt8("tracks"), + Con.UBInt8("indexes"), + Con.UBInt32("track_length"), + Con.Bytes("unknown2", 4), + Con.UBInt16("sector_pointers_table"), + Con.Bytes("unknown3", 2), + Con.StrictRepeater( + lambda ctx: ctx["tracks"], + Con.Struct("timestamps", + Con.Bytes("unknown1", 2), + Con.Bytes("unknown2", 2), + Con.UBInt8("index_number"), + Con.Bytes("unknown3", 1), + Con.UBInt32("first_pts"), + Con.UBInt32("pts_length"), + Con.Padding(6)))) + + ATS_SECTOR_POINTER = Con.Struct( + "sector_pointer", + Con.Const(Con.Bytes("unknown", 4), + '\x01\x00\x00\x00'), + Con.UBInt32("first_sector"), + Con.UBInt32("last_sector")) + + PACK_HEADER = Con.Struct( + "pack_header", + Con.Const(Con.UBInt32("sync_bytes"), 0x1BA), + Con.Embed(Con.BitStruct( + "markers", + Con.Const(Con.Bits("marker1", 2), 1), + Con.Bits("system_clock_high", 3), + Con.Const(Con.Bits("marker2", 1), 1), + Con.Bits("system_clock_mid", 15), + Con.Const(Con.Bits("marker3", 1), 1), + Con.Bits("system_clock_low", 15), + Con.Const(Con.Bits("marker4", 1), 1), + Con.Bits("scr_extension", 9), + Con.Const(Con.Bits("marker5", 1), 1), + Con.Bits("bit_rate", 22), + Con.Const(Con.Bits("marker6", 2), 3), + Con.Bits("reserved", 5), + Con.Bits("stuffing_length", 3))), + Con.StrictRepeater(lambda ctx: ctx["stuffing_length"], + Con.UBInt8("stuffing"))) + + PES_HEADER = Con.Struct( + "pes_header", + Con.Const(Con.Bytes("start_code", 3), "\x00\x00\x01"), + Con.UBInt8("stream_id"), + Con.UBInt16("packet_length")) + + PACKET_HEADER = Con.Struct( + "packet_header", + Con.UBInt16("unknown1"), + Con.Byte("pad1_size"), + Con.StrictRepeater(lambda ctx: ctx["pad1_size"], + Con.Byte("pad1")), + Con.Byte("stream_id"), + Con.Byte("crc"), + Con.Byte("padding"), + Con.Switch("info", + lambda ctx: ctx["stream_id"], + {0xA0: Con.Struct( # PCM info + "pcm", + Con.Byte("pad2_size"), + Con.UBInt16("first_audio_frame"), + Con.UBInt8("padding2"), + Con.Embed(Con.BitStruct( + "flags", + Con.Bits("group1_bps", 4), + Con.Bits("group2_bps", 4), + Con.Bits("group1_sample_rate", 4), + Con.Bits("group2_sample_rate", 4))), + Con.UBInt8("padding3"), + Con.UBInt8("channel_assignment")), + + 0xA1: Con.Struct( # MLP info + "mlp", + Con.Byte("pad2_size"), + Con.StrictRepeater(lambda ctx: ctx["pad2_size"], + Con.Byte("pad2")), + Con.Bytes("mlp_size", 4), + Con.Const(Con.Bytes("sync_words", 3), "\xF8\x72\x6F"), + Con.Const(Con.UBInt8("stream_type"), 0xBB), + Con.Embed(Con.BitStruct( + "flags", + Con.Bits("group1_bps", 4), + Con.Bits("group2_bps", 4), + Con.Bits("group1_sample_rate", 4), + Con.Bits("group2_sample_rate", 4), + Con.Bits("unknown1", 11), + Con.Bits("channel_assignment", 5), + Con.Bits("unknown2", 48))))})) + + def __init__(self, audio_ts_path, cdrom_device=None): + """A DVD-A which contains PCMReader-compatible track objects.""" + + #an inventory of AUDIO_TS files converted to uppercase keys + self.files = dict([(name.upper(), + os.path.join(audio_ts_path, name)) + for name in os.listdir(audio_ts_path)]) + + titleset_numbers = list(self.__titlesets__()) + + #for each titleset, read an ATS_XX_0.IFO file + #each titleset contains one or more DVDATitle objects + #and each DVDATitle object contains one or more DVDATrack objects + self.titlesets = [self.__titles__(titleset) for titleset in + titleset_numbers] + + #for each titleset, calculate the lengths of the corresponding AOBs + #in terms of 2048 byte sectors + self.aob_sectors = [] + for titleset in titleset_numbers: + aob_re = re.compile("ATS_%2.2d_\\d\\.AOB" % (titleset)) + titleset_aobs = dict([(key, value) for (key, value) in + self.files.items() + if (aob_re.match(key))]) + for aob_length in [os.path.getsize(titleset_aobs[key]) / + DVDAudio.SECTOR_SIZE + for key in sorted(titleset_aobs.keys())]: + if (len(self.aob_sectors) == 0): + self.aob_sectors.append( + (0, aob_length)) + else: + self.aob_sectors.append( + (self.aob_sectors[-1][1], + self.aob_sectors[-1][1] + aob_length)) + + try: + if ((cdrom_device is not None) and + ('DVDAUDIO.MKB' in self.files.keys())): + + from audiotools.prot import CPPMDecoder + + self.unprotector = CPPMDecoder( + cdrom_device, self.files['DVDAUDIO.MKB']).decode + else: + self.unprotector = lambda sector: sector + except ImportError: + self.unprotector = lambda sector: sector + + def __getitem__(self, key): + return self.titlesets[key] + + def __len__(self): + return len(self.titlesets) + + def __titlesets__(self): + """return valid audio titleset integers from AUDIO_TS.IFO""" + + try: + f = open(self.files['AUDIO_TS.IFO'], 'rb') + except (KeyError, IOError): + raise InvalidDVDA(_(u"unable to open AUDIO_TS.IFO")) + try: + try: + for titleset in xrange( + 1, + DVDAudio.AUDIO_TS_IFO.parse_stream(f).audio_titlesets + 1): + #ensure there are IFO files and AOBs + #for each valid titleset + if (("ATS_%2.2d_0.IFO" % (titleset) in + self.files.keys()) and + ("ATS_%2.2d_1.AOB" % (titleset) in + self.files.keys())): + yield titleset + + except Con.ConstError: + raise InvalidDVDA(_(u"invalid AUDIO_TS.IFO")) + finally: + f.close() + + def __titles__(self, titleset): + """returns a list of DVDATitle objects for the given titleset""" + + try: + f = open(self.files['ATS_%2.2d_0.IFO' % (titleset)], 'rb') + except (KeyError, IOError): + raise InvalidDVDA( + _(u"unable to open ATS_%2.2d_0.IFO") % (titleset)) + try: + try: + #the first sector contains little of interest + #but we'll read it to check the identifier string + DVDAudio.ATS_XX_S1.parse_stream(f) + except Con.ConstError: + raise InvalidDVDA(_(u"invalid ATS_%2.2d_0.IFO") % (titleset)) + + #then move to the second sector and continue parsing + f.seek(DVDAudio.SECTOR_SIZE, os.SEEK_SET) + + #may contain one or more titles + title_records = DVDAudio.ATS_XX_S2.parse_stream(f) + + titles = [] + + for (title_number, + title_offset) in enumerate(title_records.titles): + f.seek(DVDAudio.SECTOR_SIZE + + title_offset.byte_offset, + os.SEEK_SET) + title = DVDAudio.ATS_TITLE.parse_stream(f) + + f.seek(DVDAudio.SECTOR_SIZE + + title_offset.byte_offset + + title.sector_pointers_table, + os.SEEK_SET) + sector_pointers = ([None] + + [DVDAudio.ATS_SECTOR_POINTER.parse_stream(f) + for i in xrange(title.indexes)]) + + dvda_title = DVDATitle(dvdaudio=self, + titleset=titleset, + title=title_number + 1, + pts_length=title.track_length, + tracks=[]) + + #for each track, determine its first and last sector + #based on the sector pointers between the track's + #initial index and the next track's initial index + for (track_number, + (timestamp, next_timestamp)) in enumerate(zip( + title.timestamps, title.timestamps[1:])): + dvda_title.tracks.append( + DVDATrack( + dvdaudio=self, + titleset=titleset, + title=dvda_title, + track=track_number + 1, + first_pts=timestamp.first_pts, + pts_length=timestamp.pts_length, + first_sector=sector_pointers[ + timestamp.index_number].first_sector, + last_sector=sector_pointers[ + next_timestamp.index_number - 1].last_sector)) + + #for the last track, its sector pointers + #simply consume what remains on the list + timestamp = title.timestamps[-1] + dvda_title.tracks.append( + DVDATrack( + dvdaudio=self, + titleset=titleset, + title=dvda_title, + track=len(title.timestamps), + first_pts=timestamp.first_pts, + pts_length=timestamp.pts_length, + first_sector=sector_pointers[ + timestamp.index_number].first_sector, + last_sector=sector_pointers[-1].last_sector)) + + titles.append(dvda_title) + + return titles + finally: + f.close() + + def sector_reader(self, aob_filename): + if (self.unprotector is None): + return SectorReader(aob_filename) + else: + return UnprotectionSectorReader(aob_filename, + self.unprotector) + + +class InvalidDVDA(Exception): + pass + + +class DVDATitle: + """An object representing a DVD-Audio title. + + Contains one or more DVDATrack objects + which may are accessible via __getitem__ + """ + + def __init__(self, dvdaudio, titleset, title, pts_length, tracks): + """length is in PTS ticks, tracks is a list of DVDATrack objects""" + + self.dvdaudio = dvdaudio + self.titleset = titleset + self.title = title + self.pts_length = pts_length + self.tracks = tracks + + def __len__(self): + return len(self.tracks) + + def __getitem__(self, index): + return self.tracks[index] + + def __repr__(self): + return "DVDATitle(%s)" % \ + (",".join(["%s=%s" % (key, getattr(self, key)) + for key in ["titleset", "title", "pts_length", + "tracks"]])) + + def info(self): + """returns a (sample_rate, channels, channel_mask, bps, type) tuple""" + + #find the AOB file of the title's first track + track_sector = self[0].first_sector + titleset = re.compile("ATS_%2.2d_\\d\\.AOB" % (self.titleset)) + for aob_path in sorted([self.dvdaudio.files[key] for key in + self.dvdaudio.files.keys() + if (titleset.match(key))]): + aob_sectors = os.path.getsize(aob_path) / DVDAudio.SECTOR_SIZE + if (track_sector > aob_sectors): + track_sector -= aob_sectors + else: + break + else: + raise ValueError(_(u"unable to find track sector in AOB files")) + + #open that AOB file and seek to that track's first sector + aob_file = open(aob_path, 'rb') + try: + aob_file.seek(track_sector * DVDAudio.SECTOR_SIZE) + + #read the pack header + DVDAudio.PACK_HEADER.parse_stream(aob_file) + + #skip packets until the stream ID 0xBD is found + pes_header = DVDAudio.PES_HEADER.parse_stream(aob_file) + while (pes_header.stream_id != 0xBD): + aob_file.read(pes_header.packet_length) + pes_header = DVDAudio.PES_HEADER.parse_stream(aob_file) + + #parse the PCM/MLP header + header = DVDAudio.PACKET_HEADER.parse_stream(aob_file) + + #return the values indicated by the header + return (DVDATrack.SAMPLE_RATE[ + header.info.group1_sample_rate], + DVDATrack.CHANNELS[ + header.info.channel_assignment], + DVDATrack.CHANNEL_MASK[ + header.info.channel_assignment], + DVDATrack.BITS_PER_SAMPLE[ + header.info.group1_bps], + header.stream_id) + + finally: + aob_file.close() + + def stream(self): + titleset = re.compile("ATS_%2.2d_\\d\\.AOB" % (self.titleset)) + + return AOBStream( + aob_files=sorted([self.dvdaudio.files[key] + for key in self.dvdaudio.files.keys() + if (titleset.match(key))]), + first_sector=self[0].first_sector, + last_sector=self[-1].last_sector, + unprotector=self.dvdaudio.unprotector) + + def to_pcm(self): + (sample_rate, + channels, + channel_mask, + bits_per_sample, + stream_type) = self.info() + + if (stream_type == 0xA1): + from audiotools.decoders import MLPDecoder + + return MLPDecoder(IterReader(self.stream().packet_payloads()), + (self.pts_length * sample_rate) / + DVDAudio.PTS_PER_SECOND) + elif (stream_type == 0xA0): + from audiotools.decoders import AOBPCMDecoder + + return AOBPCMDecoder(IterReader(self.stream().packet_payloads()), + sample_rate, + channels, + channel_mask, + bits_per_sample) + else: + raise ValueError(_(u"unsupported DVD-Audio stream type")) + + +class DVDATrack: + """An object representing an individual DVD-Audio track.""" + + SAMPLE_RATE = [48000, 96000, 192000, 0, 0, 0, 0, 0, + 44100, 88200, 176400, 0, 0, 0, 0, 0] + CHANNELS = [1, 2, 3, 4, 3, 4, 5, 3, 4, 5, 4, 5, 6, 4, 5, 4, 5, 6, 5, 5, 6] + CHANNEL_MASK = [0x4, 0x3, 0x103, 0x33, 0xB, 0x10B, 0x3B, 0x7, + 0x107, 0x37, 0xF, 0x10F, 0x3F, 0x107, 0x37, 0xF, + 0x10F, 0x3F, 0x3B, 0x37, 0x3F] + BITS_PER_SAMPLE = [16, 20, 24] + [0] * 13 + + def __init__(self, dvdaudio, + titleset, title, track, + first_pts, pts_length, + first_sector, last_sector): + self.dvdaudio = dvdaudio + self.titleset = titleset + self.title = title + self.track = track + self.first_pts = first_pts + self.pts_length = pts_length + self.first_sector = first_sector + self.last_sector = last_sector + + def __repr__(self): + return "DVDATrack(%s)" % \ + (", ".join(["%s=%s" % (attr, getattr(self, attr)) + for attr in ["titleset", + "title", + "track", + "first_pts", + "pts_length", + "first_sector", + "last_sector"]])) + + def sectors(self): + """iterates (aob_file, start_sector, end_sector) + + for each AOB file necessary to extract the track's data + in the order in which they should be read.""" + + track_sectors = Rangeset(self.first_sector, + self.last_sector + 1) + + for (i, (start_sector, + end_sector)) in enumerate(self.dvdaudio.aob_sectors): + aob_sectors = Rangeset(start_sector, end_sector) + intersection = aob_sectors & track_sectors + if (len(intersection)): + yield (self.dvdaudio.files["ATS_%2.2d_%d.AOB" % \ + (self.titleset, i + 1)], + intersection.start - start_sector, + intersection.end - start_sector) + + +class Rangeset: + """An optimized combination of range() and set()""" + + #The purpose of this class is for finding the subset of + #two Rangesets, such as with: + # + # >>> Rangeset(1, 10) & Rangeset(5, 15) + # Rangeset(5, 10) + # + #which returns another Rangeset object. + #This is preferable to performing: + # + # >>> set(range(1, 10)) & set(range(5, 15)) + # set([8, 9, 5, 6, 7]) + # + #which allocates lots of unnecessary values + #when all we're interested in is the min and max. + + def __init__(self, start, end): + self.start = start + self.end = end + + def __repr__(self): + return "Rangeset(%s, %s)" % (repr(self.start), repr(self.end)) + + def __len__(self): + return self.end - self.start + + def __getitem__(self, i): + if (i >= 0): + if (i < len(self)): + return self.start + i + else: + raise IndexError(i) + else: + if (-i - 1 < len(self)): + return self.end + i + else: + raise IndexError(i) + + def __and__(self, rangeset): + min_point = max(self.start, rangeset.start) + max_point = min(self.end, rangeset.end) + + if (min_point <= max_point): + return Rangeset(min_point, max_point) + else: + return Rangeset(0, 0) + + +class AOBSectorReader: + def __init__(self, aob_files): + self.aob_files = list(aob_files) + self.aob_files.sort() + + self.current_file_index = 0 + self.current_file = open(self.aob_files[self.current_file_index], 'rb') + + def read(self, *args): + s = self.current_file.read(DVDAudio.SECTOR_SIZE) + if (len(s) == DVDAudio.SECTOR_SIZE): + return s + else: + try: + #if we can increment to the next file, + #close the current one and do so + self.current_file.close() + self.current_file_index += 1 + self.current_file = open( + self.aob_files[self.current_file_index], 'rb') + return self.read() + except IndexError: + #otherwise, we've reached the end of all the files + return "" + + def seek(self, sector): + for self.current_file_index in xrange(len(self.aob_files)): + aob_size = os.path.getsize( + self.aob_files[self.current_file_index]) / DVDAudio.SECTOR_SIZE + if (sector <= aob_size): + self.current_file = open( + self.aob_files[self.current_file_index], 'rb') + if (sector > 0): + self.current_file.seek(sector * DVDAudio.SECTOR_SIZE) + return + else: + sector -= aob_size + + def close(self): + self.current_file.close() + del(self.aob_files) + del(self.current_file_index) + del(self.current_file) + + +class AOBStream: + def __init__(self, aob_files, first_sector, last_sector, + unprotector=lambda sector: sector): + self.aob_files = aob_files + self.first_sector = first_sector + self.last_sector = last_sector + self.unprotector = unprotector + + def sectors(self): + first_sector = self.first_sector + last_sector = self.last_sector + + reader = AOBSectorReader(self.aob_files) + reader.seek(first_sector) + last_sector -= first_sector + for i in xrange(last_sector + 1): + yield self.unprotector(reader.read()) + reader.close() + + def packets(self): + packet_header_size = struct.calcsize(">3sBH") + + for sector in self.sectors(): + assert(sector[0:4] == '\x00\x00\x01\xBA') + stuffing_count = ord(sector[13]) & 0x7 + sector_bytes = 2048 - (14 + stuffing_count) + sector = cStringIO.StringIO(sector[-sector_bytes:]) + while (sector_bytes > 0): + (start_code, + stream_id, + packet_length) = struct.unpack( + ">3sBH", sector.read(packet_header_size)) + sector_bytes -= packet_header_size + + assert(start_code == '\x00\x00\x01') + if (stream_id == 0xBD): + yield sector.read(packet_length) + else: + sector.read(packet_length) + sector_bytes -= packet_length + + def packet_payloads(self): + def payload(packet): + pad1_len = ord(packet[2]) + pad2_len = ord(packet[3 + pad1_len + 3]) + return packet[3 + pad1_len + 4 + pad2_len:] + + for packet in self.packets(): + yield payload(packet) + + +class IterReader: + def __init__(self, iterator): + self.iterator = iterator + + def read(self, bytes): + try: + return self.iterator.next() + except StopIteration: + return "" + + def close(self): + pass diff --git a/Melodia/resources/audiotools/__flac__.py b/Melodia/resources/audiotools/__flac__.py new file mode 100644 index 0000000..414c3d7 --- /dev/null +++ b/Melodia/resources/audiotools/__flac__.py @@ -0,0 +1,2150 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, MetaData, InvalidFile, PCMReader, + Con, transfer_data, transfer_framelist_data, + subprocess, BIN, BUFFER_SIZE, cStringIO, + os, open_files, Image, sys, WaveAudio, AiffAudio, + ReplayGain, ignore_sigint, sheet_to_unicode, + EncodingError, UnsupportedChannelMask, DecodingError, + UnsupportedChannelCount, analyze_frames, + Messenger, BufferedPCMReader, calculate_replay_gain, + ChannelMask, PCMReaderError, __default_quality__, + WaveContainer, AiffContainer, to_pcm_progress) +from __vorbiscomment__ import * +from __id3__ import ID3v2Comment +from __vorbis__ import OggStreamReader, OggStreamWriter + +import gettext + +gettext.install("audiotools", unicode=True) + + +####################### +#FLAC +####################### + + +class InvalidFLAC(InvalidFile): + pass + + +class FlacMetaDataBlockTooLarge(Exception): + """Raised if one attempts to build a FlacMetaDataBlock too large.""" + + pass + + +class FlacMetaDataBlock: + """A container for FLAC metadata blocks.""" + + def __init__(self, type, data): + """Initialized with a type integer and data binary string.""" + + self.type = type + self.data = data + + def build_block(self, last=0): + """Returns the entire block as a string, including header. + + last is a bit indicating this is the last block before audio data. + Raises FlacMetaDataBlockTooLarge if data is too large to fit + in a single FLAC metadata block.""" + + if (len(self.data) > (1 << 24)): + raise FlacMetaDataBlockTooLarge() + + return FlacAudio.METADATA_BLOCK_HEADER.build( + Con.Container(last_block=last, + block_type=self.type, + block_length=len(self.data))) + self.data + + +class FlacMetaData(MetaData): + """A container for a FLAC file's list of metadata blocks.""" + + def __init__(self, blocks): + """blocks is a list of plain FlacMetaDataBlock objects. + + These are converted internally into MetaData/ImageMetaData fields + as needed, depending on the type. + """ + + #IMPORTANT! + #Externally converted FlacMetaData likely won't have a valid STREAMINFO + #so set_metadata() must override this value with the current + #FLAC's streaminfo before setting the metadata blocks. + self.__dict__['streaminfo'] = None + + #Don't use an external SEEKTABLE, either. + self.__dict__['seektable'] = None + + self.__dict__['vorbis_comment'] = None + self.__dict__['cuesheet'] = None + self.__dict__['image_blocks'] = [] + self.__dict__['extra_blocks'] = [] + + for block in blocks: + #metadata block data cannot exceed 2^24 bits + if (len(block.data) > (1 << 24)): + continue + + if ((block.type == 0) and (self.streaminfo is None)): + #only one STREAMINFO allowed + self.__dict__['streaminfo'] = block + elif ((block.type == 4) and (self.vorbis_comment is None)): + #only one VORBIS_COMMENT allowed + comments = {} + + comment_container = FlacVorbisComment.VORBIS_COMMENT.parse( + block.data) + + for comment in comment_container.value: + try: + key = comment[0:comment.index("=")].upper() + value = comment[comment.index("=") + 1:].decode( + 'utf-8') + + comments.setdefault(key, []).append(value) + except ValueError: + pass + + self.__dict__['vorbis_comment'] = FlacVorbisComment( + comments, comment_container.vendor_string) + + elif ((block.type == 5) and (self.cuesheet is None)): + #only one CUESHEET allowed + self.__dict__['cuesheet'] = FlacCueSheet( + FlacCueSheet.CUESHEET.parse(block.data), + FlacAudio.STREAMINFO.parse( + self.streaminfo.data).samplerate) + elif ((block.type == 3) and (self.seektable is None)): + #only one SEEKTABLE allowed + self.__dict__['seektable'] = FlacSeektable( + [FlacSeekpoint(sample_number=point.sample_number, + byte_offset=point.byte_offset, + frame_samples=point.frame_samples) + for point in FlacSeektable.SEEKTABLE.parse(block.data)]) + elif (block.type == 6): + #multiple PICTURE blocks are ok + image = FlacAudio.PICTURE_COMMENT.parse(block.data) + + self.__dict__['image_blocks'].append(FlacPictureComment( + type=image.type, + mime_type=image.mime_type.decode('ascii', 'replace'), + description=image.description.decode('utf-8', 'replace'), + width=image.width, + height=image.height, + color_depth=image.color_depth, + color_count=image.color_count, + data=image.data)) + elif (block.type != 1): + #everything but the padding is stored as extra + self.__dict__['extra_blocks'].append(block) + + if (self.vorbis_comment is None): + self.vorbis_comment = FlacVorbisComment({}) + + def __comment_name__(self): + return u'FLAC' + + def __comment_pairs__(self): + return self.vorbis_comment.__comment_pairs__() + + def __unicode__(self): + if (self.cuesheet is None): + return MetaData.__unicode__(self) + else: + return u"%s%sCuesheet:\n%s" % (MetaData.__unicode__(self), + os.linesep * 2, + unicode(self.cuesheet)) + + def __setattr__(self, key, value): + # self.__dict__[key] = value + # setattr(self.vorbis_comment, key, value) + if (key in self.__FIELDS__): + setattr(self.vorbis_comment, key, value) + else: + self.__dict__[key] = value + + def __getattr__(self, key): + if (key in self.__FIELDS__): + return getattr(self.vorbis_comment, key) + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __delattr__(self, key): + if (key in self.__FIELDS__): + delattr(self.vorbis_comment, key) + else: + try: + del(self.__dict__[key]) + except KeyError: + raise AttributeError(key) + + @classmethod + def converted(cls, metadata): + """Takes a MetaData object and returns a FlacMetaData object.""" + + if ((metadata is None) or (isinstance(metadata, FlacMetaData))): + return metadata + else: + blocks = [] + try: + blocks.append(FlacMetaDataBlock( + type=4, + data=FlacVorbisComment.converted(metadata).build())) + except FlacMetaDataBlockTooLarge: + pass + + for image in metadata.images(): + try: + blocks.append(FlacMetaDataBlock( + type=6, + data=FlacPictureComment.converted(image).build())) + except FlacMetaDataBlockTooLarge: + pass + + return FlacMetaData(blocks) + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + self.vorbis_comment.merge(metadata) + if (len(self.images()) == 0): + for image in metadata.images(): + self.add_image(image) + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + self.__dict__['image_blocks'].append( + FlacPictureComment.converted(image)) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + image_blocks = self.__dict__['image_blocks'] + + if (image in image_blocks): + image_blocks.pop(image_blocks.index(image)) + + def images(self): + """Returns a list of embedded Image objects.""" + + return self.__dict__['image_blocks'][:] + + def metadata_blocks(self): + """Yields all current blocks as FlacMetaDataBlock-compatible objects. + + Note that any padding block is not returned. + """ + + yield self.streaminfo + yield self.vorbis_comment + + if (self.seektable is not None): + yield self.seektable + + if (self.cuesheet is not None): + yield self.cuesheet + + for image in self.images(): + yield image + + for extra in self.extra_blocks: + yield extra + + def build(self, padding_size=4096): + """Returns all of a FLAC file's metadata as a binary string. + + padding_size indicates the side of the PADDING block to append + (not counting its 32 bit header). + """ + + built_blocks = [] + blocks = self.metadata_blocks() + + #STREAMINFO must always be first and is always a fixed size + built_blocks.append(blocks.next().build_block()) + + #then come the rest of the blocks in any order + for block in blocks: + try: + built_blocks.append(block.build_block()) + except FlacMetaDataBlockTooLarge: + if (isinstance(block, VorbisComment)): + #if VORBISCOMMENT is too large, substitute a blank one + #(this only happens when one pushes over 16MB(!) of text + # into a comment, which simply isn't going to happen + # accidentcally) + built_blocks.append(FlacVorbisComment( + vorbis_data={}, + vendor_string=block.vendor_string).build_block()) + + #finally, append a fresh PADDING block + built_blocks.append( + FlacMetaDataBlock(type=1, + data=chr(0) * padding_size).build_block(last=1)) + + return "".join(built_blocks) + + @classmethod + def supports_images(cls): + """Returns True.""" + + return True + + +class FlacVorbisComment(VorbisComment): + """A slight variation of VorbisComment without the framing bit. + + Also includes a build_block() method for FlacMetaDataBlock + compatiblity.""" + + VORBIS_COMMENT = Con.Struct("vorbis_comment", + Con.PascalString( + "vendor_string", + length_field=Con.ULInt32("length")), + Con.PrefixedArray( + length_field=Con.ULInt32("length"), + subcon=Con.PascalString("value", + length_field=Con.ULInt32("length")))) + + def build_block(self, last=0): + """Returns the entire block as a string, including header. + + last is a bit indicating this is the last block before audio data. + Raises FlacMetaDataBlockTooLarge if data is too large to fit + in a single FLAC metadata block.""" + + block = self.build() + if (len(block) > (1 << 24)): + raise FlacMetaDataBlockTooLarge() + + return FlacAudio.METADATA_BLOCK_HEADER.build( + Con.Container(last_block=last, + block_type=4, + block_length=len(block))) + block + + @classmethod + def converted(cls, metadata): + """Converts metadata from another class to FlacVorbisComment.""" + + if ((metadata is None) or (isinstance(metadata, FlacVorbisComment))): + return metadata + elif (isinstance(metadata, FlacMetaData)): + return metadata.vorbis_comment + elif (isinstance(metadata, VorbisComment)): + return FlacVorbisComment(metadata, metadata.vendor_string) + else: + values = {} + for key in cls.ATTRIBUTE_MAP.keys(): + if (key in cls.__INTEGER_FIELDS__): + if (getattr(metadata, key) != 0): + values[cls.ATTRIBUTE_MAP[key]] = \ + [unicode(getattr(metadata, key))] + elif (getattr(metadata, key) != u""): + values[cls.ATTRIBUTE_MAP[key]] = \ + [unicode(getattr(metadata, key))] + + return FlacVorbisComment(values) + + +class FlacPictureComment(Image): + """This is a container for FLAC's PICTURE metadata blocks.""" + + def __init__(self, type, mime_type, description, + width, height, color_depth, color_count, data): + """Initialization fields are as follows: + + type - an integer type whose values are: + 0 - front cover + 1 - back cover + 2 - leaflet page + 3 - media + 4 - other + mime_type - unicode string of the image's MIME type + description - a unicode string + width - width of image, as integer number of pixels + height - height of image, as integer number of pixels + color_depth - color depth of image (24 for JPEG, 8 for GIF, etc.) + color_count - number of palette colors, or 0 + data - plain string of the actual binary image data + """ + + Image.__init__(self, + data=data, + mime_type=mime_type, + width=width, + height=height, + color_depth=color_depth, + color_count=color_count, + description=description, + type={3: 0, 4: 1, 5: 2, 6: 3}.get(type, 4)) + self.flac_type = type + + @classmethod + def converted(cls, image): + """Converts an Image object to a FlacPictureComment.""" + + return FlacPictureComment( + type={0: 3, 1: 4, 2: 5, 3: 6}.get(image.type, 0), + mime_type=image.mime_type, + description=image.description, + width=image.width, + height=image.height, + color_depth=image.color_depth, + color_count=image.color_count, + data=image.data) + + def type_string(self): + """Returns the image's type as a human readable plain string. + + For example, an image of type 0 returns "Front Cover". + """ + + return {0: "Other", + 1: "File icon", + 2: "Other file icon", + 3: "Cover (front)", + 4: "Cover (back)", + 5: "Leaflet page", + 6: "Media", + 7: "Lead artist / lead performer / soloist", + 8: "Artist / Performer", + 9: "Conductor", + 10: "Band / Orchestra", + 11: "Composer", + 12: "Lyricist / Text writer", + 13: "Recording Location", + 14: "During recording", + 15: "During performance", + 16: "Movie / Video screen capture", + 17: "A bright colored fish", + 18: "Illustration", + 19: "Band/Artist logotype", + 20: "Publisher / Studio logotype"}.get(self.flac_type, "Other") + + def __repr__(self): + return ("FlacPictureComment(type=%s,mime_type=%s,description=%s," + + "width=%s,height=%s,...)") % \ + (repr(self.flac_type), repr(self.mime_type), + repr(self.description), + repr(self.width), repr(self.height)) + + def build(self): + """Returns a PICTURE comment as a raw string. + + This does not include the 32 bit header.""" + + if (len(self.data) > (1 << 24)): + raise FlacMetaDataBlockTooLarge() + + return FlacAudio.PICTURE_COMMENT.build( + Con.Container(type=self.flac_type, + mime_type=self.mime_type.encode('ascii'), + description=self.description.encode('utf-8'), + width=self.width, + height=self.height, + color_depth=self.color_depth, + color_count=self.color_count, + data=self.data)) + + def build_block(self, last=0): + """Returns the entire block as a string, including header. + + last is a bit indicating this is the last block before audio data. + Raises FlacMetaDataBlockTooLarge if data is too large to fit + in a single FLAC metadata block.""" + + block = self.build() + if (len(block) > (1 << 24)): + #why check both here and in build()? + #because while the raw image data itself might be small enough + #additional info like "description" could push it over + #the metadata block size limit + raise FlacMetaDataBlockTooLarge() + + return FlacAudio.METADATA_BLOCK_HEADER.build( + Con.Container(last_block=last, + block_type=6, + block_length=len(block))) + block + + +class FlacCueSheet: + """A container for FLAC CUESHEET metadata blocks.""" + + CUESHEET = Con.Struct( + "flac_cuesheet", + Con.String("catalog_number", 128), + Con.UBInt64("lead_in_samples"), + Con.Embed(Con.BitStruct("flags", + Con.Flag("is_cd"), + Con.Padding(7))), # reserved + Con.Padding(258), # reserved + Con.PrefixedArray( + length_field=Con.Byte("count"), + subcon=Con.Struct("cuesheet_tracks", + Con.UBInt64("track_offset"), + Con.Byte("track_number"), + Con.String("ISRC", 12), + Con.Embed(Con.BitStruct("sub_flags", + Con.Flag("non_audio"), + Con.Flag("pre_emphasis"), + Con.Padding(6))), + Con.Padding(13), + Con.PrefixedArray( + length_field=Con.Byte("count"), + subcon=Con.Struct("cuesheet_track_index", + Con.UBInt64("offset"), + Con.Byte("point_number"), + Con.Padding(3)))))) # reserved + + def __init__(self, container, sample_rate=44100): + """container is a Container object returned by CUESHEET.parse().""" + + self.type = 5 + self.container = container + self.sample_rate = sample_rate + + def build_block(self, last=0): + """Returns the entire block as a string, including header. + + last is a bit indicating this is the last block before audio data.""" + + #the largest possible CUESHEET cannot exceed the metadata block size + #so no need to test for it + block = self.CUESHEET.build(self.container) + + return FlacAudio.METADATA_BLOCK_HEADER.build( + Con.Container(last_block=last, + block_type=5, + block_length=len(block))) + block + + @classmethod + def converted(cls, sheet, total_frames, sample_rate=44100): + """Converts a cuesheet compatible object to FlacCueSheet objects. + + A total_frames integer (in PCM frames) is also required. + """ + + #number is the track number integer + #ISRC is a 12 byte string, or None + #indexes is a list of indexes()-compatible index points + #(i.e. given incrementally as CD frames) + #returns a Container + def track_container(number, ISRC, indexes): + if (ISRC is None): + ISRC = chr(0) * 12 + + if (len(indexes) == 1): + base_number = 1 + else: + base_number = 0 + + return Con.Container( + track_offset=indexes[0] * sample_rate / 75, + track_number=number, + ISRC=ISRC, + non_audio=False, + pre_emphasis=False, # FIXME, check for this + cuesheet_track_index=[Con.Container( + offset=((index - indexes[0]) * sample_rate / 75), + point_number=point_number + base_number) + for (point_number, index) in + enumerate(indexes)]) + + catalog_number = sheet.catalog() + if (catalog_number is None): + catalog_number = "" + + ISRCs = sheet.ISRCs() + + return cls(Con.Container( + catalog_number=catalog_number + \ + (chr(0) * (128 - len(catalog_number))), + lead_in_samples=sample_rate * 2, + is_cd=True, + cuesheet_tracks=[track_container(i + 1, + ISRCs.get(i + 1, None), + indexes) + for (i, indexes) in + enumerate(sheet.indexes())] + \ + [Con.Container(track_offset=total_frames, + track_number=170, + ISRC=chr(0) * 12, + non_audio=False, + pre_emphasis=False, + cuesheet_track_index=[])]), + sample_rate) + + def catalog(self): + """Returns the cuesheet's catalog number as a plain string.""" + + if (len(self.container.catalog_number.rstrip(chr(0))) > 0): + return self.container.catalog_number.rstrip(chr(0)) + else: + return None + + def ISRCs(self): + """Returns a list of ISRC values as plain strings.""" + + return dict([(track.track_number, track.ISRC) for track in + self.container.cuesheet_tracks + if ((track.track_number != 170) and + (len(track.ISRC.strip(chr(0))) > 0))]) + + def indexes(self): + """Returns a list of (start, end) integer tuples.""" + + return [tuple([(index.offset + track.track_offset) * 75 / \ + self.sample_rate + for index in + sorted(track.cuesheet_track_index, + lambda i1, i2: cmp(i1.point_number, + i2.point_number))]) + for track in + sorted(self.container.cuesheet_tracks, + lambda t1, t2: cmp(t1.track_number, + t2.track_number)) + if (track.track_number != 170)] + + def pcm_lengths(self, total_length): + """Returns a list of PCM lengths for all cuesheet audio tracks. + + Note that the total length variable is only for compatibility. + It is not necessary for FlacCueSheets. + """ + if (len(self.container.cuesheet_tracks) > 0): + return [(current.track_offset + + max([i.offset for i in + current.cuesheet_track_index] + [0])) - + ((previous.track_offset + + max([i.offset for i in + previous.cuesheet_track_index] + [0]))) + for (previous, current) in + zip(self.container.cuesheet_tracks, + self.container.cuesheet_tracks[1:])] + else: + return [] + + def __unicode__(self): + return sheet_to_unicode(self, None) + + +class FlacSeektable: + SEEKTABLE = Con.GreedyRepeater( + Con.Struct("seekpoint", + Con.UBInt64("sample_number"), + Con.UBInt64("byte_offset"), + Con.UBInt16("frame_samples"))) + + def __init__(self, seekpoints): + self.seekpoints = seekpoints + + def __repr__(self): + return "FlacSeektable(%s)" % (self.seekpoints) + + def build_block(self, last=0): + seektable_data = FlacSeektable.SEEKTABLE.build( + [Con.Container(sample_number=point.sample_number, + byte_offset=point.byte_offset, + frame_samples=point.frame_samples) + for point in self.seekpoints]) + + return FlacAudio.METADATA_BLOCK_HEADER.build( + Con.Container(last_block=last, + block_type=3, + block_length=len(seektable_data))) + seektable_data + + +class FlacSeekpoint: + def __init__(self, sample_number, byte_offset, frame_samples): + self.sample_number = sample_number + self.byte_offset = byte_offset + self.frame_samples = frame_samples + + def __repr__(self): + return "FLacSeekpoint(%s, %s, %s)" % \ + (self.sample_number, + self.byte_offset, + self.frame_samples) + + +class FlacAudio(WaveContainer, AiffContainer): + """A Free Lossless Audio Codec file.""" + + SUFFIX = "flac" + NAME = SUFFIX + DEFAULT_COMPRESSION = "8" + COMPRESSION_MODES = tuple(map(str, range(0, 9))) + COMPRESSION_DESCRIPTIONS = {"0": _(u"least amount of compresson, " + + u"fastest compression speed"), + "8": _(u"most amount of compression, " + + u"slowest compression speed")} + + METADATA_BLOCK_HEADER = Con.BitStruct("metadata_block_header", + Con.Bit("last_block"), + Con.Bits("block_type", 7), + Con.Bits("block_length", 24)) + + STREAMINFO = Con.Struct("flac_streaminfo", + Con.UBInt16("minimum_blocksize"), + Con.UBInt16("maximum_blocksize"), + Con.Embed(Con.BitStruct("flags", + Con.Bits("minimum_framesize", 24), + Con.Bits("maximum_framesize", 24), + Con.Bits("samplerate", 20), + Con.Bits("channels", 3), + Con.Bits("bits_per_sample", 5), + Con.Bits("total_samples", 36))), + Con.StrictRepeater(16, Con.Byte("md5"))) + + PICTURE_COMMENT = Con.Struct("picture_comment", + Con.UBInt32("type"), + Con.PascalString( + "mime_type", + length_field=Con.UBInt32("mime_type_length")), + Con.PascalString( + "description", + length_field=Con.UBInt32("description_length")), + Con.UBInt32("width"), + Con.UBInt32("height"), + Con.UBInt32("color_depth"), + Con.UBInt32("color_count"), + Con.PascalString( + "data", + length_field=Con.UBInt32("data_length"))) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + self.__samplerate__ = 0 + self.__channels__ = 0 + self.__bitspersample__ = 0 + self.__total_frames__ = 0 + + try: + self.__read_streaminfo__() + except IOError, msg: + raise InvalidFLAC(str(msg)) + except (Con.FieldError, Con.ArrayError): + raise InvalidFLAC("invalid STREAMINFO block") + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + if (file.read(4) == 'fLaC'): + try: + block_ids = list(cls.__block_ids__(file)) + except Con.FieldError: + return False + if ((len(block_ids) == 0) or (0 not in block_ids)): + messenger = Messenger("audiotools", None) + messenger.error(_(u"STREAMINFO block not found")) + elif (block_ids[0] != 0): + messenger = Messenger("audiotools", None) + messenger.error(_(u"STREAMINFO not first metadata block. " + + u"Please fix with tracklint(1)")) + else: + return True + else: + #I've seen FLAC files tagged with ID3v2 comments. + #Though the official flac binaries grudgingly accept these, + #such tags are unnecessary and outside the specification + #so I will encourage people to remove them. + + try: + file.seek(-4, 1) + except IOError: + return False + + ID3v2Comment.skip(file) + if (file.read(4) == 'fLaC'): + messenger = Messenger("audiotools", None) + messenger.error(_(u"ID3v2 tag found at start of FLAC file. " + + u"Please remove with tracklint(1)")) + return False + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if (self.channels() <= 2): + return ChannelMask.from_channels(self.channels()) + else: + vorbis_comment = self.get_metadata().vorbis_comment + if ("WAVEFORMATEXTENSIBLE_CHANNEL_MASK" in vorbis_comment.keys()): + try: + return ChannelMask( + int(vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"][0], 16)) + except ValueError: + pass + + #if there is no WAVEFORMATEXTENSIBLE_CHANNEL_MASK + #or it's not an integer, use FLAC's default mask based on channels + if (self.channels() == 3): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True) + elif (self.channels() == 4): + return ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.channels() == 5): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True) + elif (self.channels() == 6): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True, + low_frequency=True) + else: + return ChannelMask(0) + + def lossless(self): + """Returns True.""" + + return True + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + f = file(self.filename, 'rb') + try: + if (f.read(4) != 'fLaC'): + raise InvalidFLAC(_(u'Invalid FLAC file')) + + blocks = [] + + while (True): + header = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(f) + blocks.append(FlacMetaDataBlock( + type=header.block_type, + data=f.read(header.block_length))) + if (header.last_block == 1): + break + + return FlacMetaData(blocks) + finally: + f.close() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + metadata = FlacMetaData.converted(metadata) + + if (metadata is None): + return + old_metadata = self.get_metadata() + + #if metadata's STREAMINFO block matches old_metadata's STREAMINFO + #we're almost certainly setting a modified version + #of our original metadata + #in that case, we skip the metadata block porting + #and assume higher-level routines know what they're doing + if ((old_metadata.streaminfo is not None) and + (metadata.streaminfo is not None) and + (old_metadata.streaminfo.data == metadata.streaminfo.data)): + #do nothing + pass + else: + #port over the old STREAMINFO and SEEKTABLE blocks + old_streaminfo = old_metadata.streaminfo + old_seektable = old_metadata.seektable + metadata.streaminfo = old_streaminfo + if (old_seektable is not None): + metadata.seektable = old_seektable + + #grab "WAVEFORMATEXTENSIBLE_CHANNEL_MASK" from existing file + #(if any) + if ((self.channels() > 2) or (self.bits_per_sample() > 16)): + metadata.vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"] = [ + u"0x%.4x" % (int(self.channel_mask()))] + + #APPLICATION blocks should stay with the existing file (if any) + metadata.extra_blocks = [block for block in metadata.extra_blocks + if (block.type != 2)] + + for block in old_metadata.extra_blocks: + if (block.type == 2): + metadata.extra_blocks.append(block) + + #always grab "vendor_string" from the existing file + vendor_string = old_metadata.vorbis_comment.vendor_string + metadata.vorbis_comment.vendor_string = vendor_string + + minimum_metadata_length = len(metadata.build(padding_size=0)) + 4 + current_metadata_length = self.metadata_length() + + if ((minimum_metadata_length <= current_metadata_length) and + ((current_metadata_length - minimum_metadata_length) < + (4096 * 2))): + #if the FLAC file's metadata + padding is large enough + #to accomodate the new chunk of metadata, + #simply overwrite the beginning of the file + + stream = file(self.filename, 'r+b') + stream.write('fLaC') + stream.write(metadata.build( + padding_size=current_metadata_length - \ + minimum_metadata_length)) + stream.close() + else: + #if the new metadata is too large to fit in the current file, + #or if the padding gets unnecessarily large, + #rewrite the entire file using a temporary file for storage + + import tempfile + + stream = file(self.filename, 'rb') + + if (stream.read(4) != 'fLaC'): + raise InvalidFLAC(_(u'Invalid FLAC file')) + + block = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(stream) + while (block.last_block == 0): + stream.seek(block.block_length, 1) + block = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(stream) + stream.seek(block.block_length, 1) + + file_data = tempfile.TemporaryFile() + transfer_data(stream.read, file_data.write) + file_data.seek(0, 0) + + stream = file(self.filename, 'wb') + stream.write('fLaC') + stream.write(metadata.build()) + transfer_data(file_data.read, stream.write) + file_data.close() + stream.close() + + def metadata_length(self): + """Returns the length of all FLAC metadata blocks as an integer. + + This includes the 4 byte "fLaC" file header.""" + + f = file(self.filename, 'rb') + try: + if (f.read(4) != 'fLaC'): + raise InvalidFLAC(_(u'Invalid FLAC file')) + + header = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(f) + f.seek(header.block_length, 1) + while (header.last_block == 0): + header = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(f) + f.seek(header.block_length, 1) + return f.tell() + finally: + f.close() + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + self.set_metadata(MetaData()) + + @classmethod + def __read_flac_header__(cls, flacfile): + p = FlacAudio.METADATA_BLOCK_HEADER.parse(flacfile.read(4)) + return (p.last_block, p.block_type, p.block_length) + + @classmethod + def __block_ids__(cls, flacfile): + p = Con.Container(last_block=False, + block_type=None, + block_length=0) + + while (not p.last_block): + p = FlacAudio.METADATA_BLOCK_HEADER.parse_stream(flacfile) + yield p.block_type + flacfile.seek(p.block_length, 1) + + def set_cuesheet(self, cuesheet): + """Imports cuesheet data from a Cuesheet-compatible object. + + This are objects with catalog(), ISRCs(), indexes(), and pcm_lengths() + methods. Raises IOError if an error occurs setting the cuesheet.""" + + if (cuesheet is None): + return + + metadata = self.get_metadata() + if (metadata is None): + metadata = FlacMetaData.converted(MetaData()) + + metadata.cuesheet = FlacCueSheet.converted( + cuesheet, self.total_frames(), self.sample_rate()) + self.set_metadata(metadata) + + def get_cuesheet(self): + """Returns the embedded Cuesheet-compatible object, or None. + + Raises IOError if a problem occurs when reading the file.""" + + metadata = self.get_metadata() + if (metadata is not None): + return metadata.cuesheet + else: + return None + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + from . import decoders + + try: + return decoders.FlacDecoder(self.filename, + self.channel_mask()) + except (IOError, ValueError), msg: + #The only time this is likely to occur is + #if the FLAC is modified between when FlacAudio + #is initialized and when to_pcm() is called. + return PCMReaderError(error_message=str(msg), + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample()) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new FlacAudio object.""" + + from . import encoders + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + encoding_options = {"0": {"block_size": 1152, + "max_lpc_order": 0, + "min_residual_partition_order": 0, + "max_residual_partition_order": 3}, + "1": {"block_size": 1152, + "max_lpc_order": 0, + "adaptive_mid_side": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 3}, + "2": {"block_size": 1152, + "max_lpc_order": 0, + "exhaustive_model_search": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 3}, + "3": {"block_size": 4096, + "max_lpc_order": 6, + "min_residual_partition_order": 0, + "max_residual_partition_order": 4}, + "4": {"block_size": 4096, + "max_lpc_order": 8, + "adaptive_mid_side": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 4}, + "5": {"block_size": 4096, + "max_lpc_order": 8, + "mid_side": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 5}, + "6": {"block_size": 4096, + "max_lpc_order": 8, + "mid_side": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 6}, + "7": {"block_size": 4096, + "max_lpc_order": 8, + "mid_side": True, + "exhaustive_model_search": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 6}, + "8": {"block_size": 4096, + "max_lpc_order": 12, + "mid_side": True, + "exhaustive_model_search": True, + "min_residual_partition_order": 0, + "max_residual_partition_order": 6}}[ + compression] + + if (pcmreader.channels > 8): + raise UnsupportedChannelCount(filename, pcmreader.channels) + + if (int(pcmreader.channel_mask) == 0): + if (pcmreader.channels <= 6): + channel_mask = {1: 0x0004, + 2: 0x0003, + 3: 0x0007, + 4: 0x0033, + 5: 0x0037, + 6: 0x003F}[pcmreader.channels] + else: + channel_mask = 0 + + elif (int(pcmreader.channel_mask) not in + (0x0001, # 1ch - mono + 0x0004, # 1ch - mono + 0x0003, # 2ch - left, right + 0x0007, # 3ch - left, right, center + 0x0033, # 4ch - left, right, back left, back right + 0x0603, # 4ch - left, right, side left, side right + 0x0037, # 5ch - L, R, C, back left, back right + 0x0607, # 5ch - L, R, C, side left, side right + 0x003F, # 6ch - L, R, C, LFE, back left, back right + 0x060F)): # 6 ch - L, R, C, LFE, side left, side right + raise UnsupportedChannelMask(filename, + int(pcmreader.channel_mask)) + else: + channel_mask = int(pcmreader.channel_mask) + + try: + offsets = encoders.encode_flac( + filename, + pcmreader=BufferedPCMReader(pcmreader), + **encoding_options) + flac = FlacAudio(filename) + metadata = flac.get_metadata() + + #generate SEEKTABLE from encoder offsets and add it to metadata + from bisect import bisect_right + + metadata_length = flac.metadata_length() + seekpoint_interval = pcmreader.sample_rate * 10 + total_samples = 0 + all_frames = {} + sample_offsets = [] + for (byte_offset, pcm_frames) in offsets: + all_frames[total_samples] = (byte_offset - metadata_length, + pcm_frames) + sample_offsets.append(total_samples) + total_samples += pcm_frames + + seekpoints = [] + for pcm_frame in xrange(0, + flac.total_frames(), + seekpoint_interval): + flac_frame = bisect_right(sample_offsets, pcm_frame) - 1 + seekpoints.append( + FlacSeekpoint( + sample_number=sample_offsets[flac_frame], + byte_offset=all_frames[sample_offsets[flac_frame]][0], + frame_samples=all_frames[sample_offsets[flac_frame]][1] + )) + + metadata.seektable = FlacSeektable(seekpoints) + + #if channels or bps is too high, + #automatically generate and add channel mask + if (((pcmreader.channels > 2) or + (pcmreader.bits_per_sample > 16)) and + (channel_mask != 0)): + metadata.vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"] = [ + u"0x%.4x" % (channel_mask)] + + flac.set_metadata(metadata) + + return flac + except (IOError, ValueError), err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + + def has_foreign_riff_chunks(self): + """Returns True if the audio file contains non-audio RIFF chunks. + + During transcoding, if the source audio file has foreign RIFF chunks + and the target audio format supports foreign RIFF chunks, + conversion should be routed through .wav conversion + to avoid losing those chunks.""" + + return 'riff' in [block.data[0:4] for block in + self.get_metadata().extra_blocks + if block.type == 2] + + def riff_wave_chunks(self, progress=None): + """Generate a set of (chunk_id,chunk_data tuples) + + These are for use by WaveAudio.from_chunks + and are taken from "riff" APPLICATION blocks + or generated from our PCM data.""" + + for application_block in [block.data for block in + self.get_metadata().extra_blocks + if (block.data.startswith("riff"))]: + (chunk_id, chunk_data) = (application_block[4:8], + application_block[12:]) + if (chunk_id == 'RIFF'): + continue + elif (chunk_id == 'data'): + #FIXME - this is a lot more inefficient than it should be + data = cStringIO.StringIO() + pcm = to_pcm_progress(self, progress) + if (self.bits_per_sample > 8): + transfer_framelist_data(pcm, data.write, True, False) + else: + transfer_framelist_data(pcm, data.write, False, False) + pcm.close() + yield (chunk_id, data.getvalue()) + data.close() + else: + yield (chunk_id, chunk_data) + + def to_wave(self, wave_filename, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + if (self.has_foreign_riff_chunks()): + WaveAudio.wave_from_chunks(wave_filename, + self.riff_wave_chunks(progress)) + else: + WaveAudio.from_pcm(wave_filename, to_pcm_progress(self, progress)) + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new FlacAudio object.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if (WaveAudio(wave_filename).has_foreign_riff_chunks()): + flac = cls.from_pcm(filename, + to_pcm_progress(WaveAudio(wave_filename), + progress), + compression=compression) + + metadata = flac.get_metadata() + + wav = file(wave_filename, 'rb') + try: + wav_header = wav.read(12) + + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "riff" + wav_header)) + + total_size = WaveAudio.WAVE_HEADER.parse( + wav_header).wave_size - 4 + while (total_size > 0): + chunk_header = WaveAudio.CHUNK_HEADER.parse(wav.read(8)) + if (chunk_header.chunk_id != 'data'): + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "riff" + + WaveAudio.CHUNK_HEADER.build( + chunk_header) + + wav.read( + chunk_header.chunk_length))) + else: + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "riff" + + WaveAudio.CHUNK_HEADER.build( + chunk_header))) + wav.seek(chunk_header.chunk_length, 1) + total_size -= (chunk_header.chunk_length + 8) + + flac.set_metadata(metadata) + + return flac + finally: + wav.close() + else: + return cls.from_pcm(filename, + to_pcm_progress(WaveAudio(wave_filename), + progress), + compression=compression) + + def has_foreign_aiff_chunks(self): + """Returns True if the audio file contains non-audio AIFF chunks.""" + + return 'aiff' in [block.data[0:4] for block in + self.get_metadata().extra_blocks + if block.type == 2] + + @classmethod + def from_aiff(cls, filename, aiff_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .aiff file. + + Takes a filename string, aiff_filename string + of an existing AiffAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new FlacAudio object.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if (AiffAudio(aiff_filename).has_foreign_aiff_chunks()): + flac = cls.from_pcm(filename, + to_pcm_progress(AiffAudio(aiff_filename), + progress), + compression=compression) + + metadata = flac.get_metadata() + + aiff = file(aiff_filename, 'rb') + try: + aiff_header = aiff.read(12) + + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "aiff" + aiff_header)) + + total_size = AiffAudio.AIFF_HEADER.parse( + aiff_header).aiff_size - 4 + while (total_size > 0): + chunk_header = AiffAudio.CHUNK_HEADER.parse(aiff.read(8)) + if (chunk_header.chunk_id != 'SSND'): + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "aiff" + + AiffAudio.CHUNK_HEADER.build( + chunk_header) + + aiff.read( + chunk_header.chunk_length))) + else: + metadata.extra_blocks.append( + FlacMetaDataBlock(2, "aiff" + + AiffAudio.CHUNK_HEADER.build( + chunk_header) + + aiff.read(8))) + aiff.seek(chunk_header.chunk_length - 8, 1) + total_size -= (chunk_header.chunk_length + 8) + + flac.set_metadata(metadata) + + return flac + finally: + aiff.close() + else: + return cls.from_pcm(filename, + to_pcm_progress(AiffAudio(aiff_filename), + progress), + compression=compression) + + def to_aiff(self, aiff_filename, progress=None): + if (self.has_foreign_aiff_chunks()): + AiffAudio.aiff_from_chunks(aiff_filename, + self.aiff_chunks(progress)) + else: + AiffAudio.from_pcm(aiff_filename, to_pcm_progress(self, progress)) + + def aiff_chunks(self, progress=None): + """Generate a set of (chunk_id,chunk_data tuples) + + These are for use by AiffAudio.from_chunks + and are taken from "aiff" APPLICATION blocks + or generated from our PCM data.""" + + for application_block in [block.data for block in + self.get_metadata().extra_blocks + if (block.data.startswith("aiff"))]: + (chunk_id, chunk_data) = (application_block[4:8], + application_block[12:]) + if (chunk_id == 'FORM'): + continue + elif (chunk_id == 'SSND'): + #FIXME - this is a lot more inefficient than it should be + data = cStringIO.StringIO() + data.write(chunk_data) + pcm = to_pcm_progress(self, progress) + transfer_framelist_data(pcm, data.write, True, True) + pcm.close() + yield (chunk_id, data.getvalue()) + data.close() + else: + yield (chunk_id, chunk_data) + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + #If a FLAC has embedded RIFF *and* embedded AIFF chunks, + #RIFF takes precedence if the target format supports both. + #It's hard to envision a scenario in which that would happen. + + import tempfile + + if (target_class == WaveAudio): + self.to_wave(target_path, progress=progress) + return WaveAudio(target_path) + elif (target_class == AiffAudio): + self.to_aiff(target_path, progress=progress) + return AiffAudio(target_path) + elif (self.has_foreign_riff_chunks() and + hasattr(target_class, "from_wave")): + temp_wave = tempfile.NamedTemporaryFile(suffix=".wav") + try: + #we'll only log the second leg of conversion, + #since that's likely to be the slower portion + self.to_wave(temp_wave.name) + return target_class.from_wave(target_path, + temp_wave.name, + compression, + progress=progress) + finally: + temp_wave.close() + elif (self.has_foreign_aiff_chunks() and + hasattr(target_class, "from_aiff")): + temp_aiff = tempfile.NamedTemporaryFile(suffix=".aiff") + try: + self.to_aiff(temp_aiff.name) + return target_class.from_aiff(target_path, + temp_aiff.name, + compression, + progress=progress) + finally: + temp_aiff.close() + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bitspersample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_frames__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplerate__ + + def __read_streaminfo__(self): + f = file(self.filename, "rb") + if (f.read(4) != "fLaC"): + raise InvalidFLAC(_(u"Not a FLAC file")) + + (stop, header_type, length) = FlacAudio.__read_flac_header__(f) + if (header_type != 0): + raise InvalidFLAC(_(u"STREAMINFO not first metadata block")) + + p = FlacAudio.STREAMINFO.parse(f.read(length)) + + md5sum = "".join(["%.2X" % (x) for x in p.md5]).lower() + + self.__samplerate__ = p.samplerate + self.__channels__ = p.channels + 1 + self.__bitspersample__ = p.bits_per_sample + 1 + self.__total_frames__ = p.total_samples + self.__md5__ = "".join([chr(c) for c in p.md5]) + f.close() + + def seektable(self, pcm_frames): + """Returns a new FlacSeektable block from this file's data.""" + + from bisect import bisect_right + + def seekpoints(reader, metadata_length): + total_samples = 0 + + for frame in analyze_frames(reader): + yield (total_samples, frame['offset'] - metadata_length, + frame['block_size']) + total_samples += frame['block_size'] + + all_frames = dict([(point[0], (point[1], point[2])) + for point in seekpoints(self.to_pcm(), + self.metadata_length())]) + sample_offsets = all_frames.keys() + sample_offsets.sort() + + seekpoints = [] + for pcm_frame in xrange(0, self.total_frames(), pcm_frames): + flac_frame = bisect_right(sample_offsets, pcm_frame) - 1 + seekpoints.append( + FlacSeekpoint( + sample_number=sample_offsets[flac_frame], + byte_offset=all_frames[sample_offsets[flac_frame]][0], + frame_samples=all_frames[sample_offsets[flac_frame]][1])) + + return FlacSeektable(seekpoints) + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + tracks = [track for track in open_files(filenames) if + isinstance(track, cls)] + + if (len(tracks) > 0): + for (track, + track_gain, + track_peak, + album_gain, + album_peak) in calculate_replay_gain(tracks, progress): + metadata = track.get_metadata() + if (hasattr(metadata, "vorbis_comment")): + comment = metadata.vorbis_comment + comment["REPLAYGAIN_TRACK_GAIN"] = [ + "%1.2f dB" % (track_gain)] + comment["REPLAYGAIN_TRACK_PEAK"] = [ + "%1.8f" % (track_peak)] + comment["REPLAYGAIN_ALBUM_GAIN"] = [ + "%1.2f dB" % (album_gain)] + comment["REPLAYGAIN_ALBUM_PEAK"] = ["%1.8f" % (album_peak)] + comment["REPLAYGAIN_REFERENCE_LOUDNESS"] = [u"89.0 dB"] + track.set_metadata(metadata) + + @classmethod + def can_add_replay_gain(cls): + """Returns True.""" + + return True + + @classmethod + def lossless_replay_gain(cls): + """Returns True.""" + + return True + + def replay_gain(self): + """Returns a ReplayGain object of our ReplayGain values. + + Returns None if we have no values.""" + + vorbis_metadata = self.get_metadata().vorbis_comment + + if (set(['REPLAYGAIN_TRACK_PEAK', 'REPLAYGAIN_TRACK_GAIN', + 'REPLAYGAIN_ALBUM_PEAK', 'REPLAYGAIN_ALBUM_GAIN']).issubset( + vorbis_metadata.keys())): # we have ReplayGain data + try: + return ReplayGain( + vorbis_metadata['REPLAYGAIN_TRACK_GAIN'][0][0:-len(" dB")], + vorbis_metadata['REPLAYGAIN_TRACK_PEAK'][0], + vorbis_metadata['REPLAYGAIN_ALBUM_GAIN'][0][0:-len(" dB")], + vorbis_metadata['REPLAYGAIN_ALBUM_PEAK'][0]) + except ValueError: + return None + else: + return None + + def __eq__(self, audiofile): + if (isinstance(audiofile, FlacAudio)): + return self.__md5__ == audiofile.__md5__ + elif (isinstance(audiofile, AudioFile)): + try: + from hashlib import md5 + except ImportError: + from md5 import new as md5 + + p = audiofile.to_pcm() + m = md5() + s = p.read(BUFFER_SIZE) + while (len(s) > 0): + m.update(s.to_bytes(False, True)) + s = p.read(BUFFER_SIZE) + p.close() + return m.digest() == self.__md5__ + else: + return False + + def sub_pcm_tracks(self): + """Yields a PCMReader object per cuesheet track.""" + + metadata = self.get_metadata() + if ((metadata is not None) and (metadata.cuesheet is not None)): + indexes = [(track.track_number, + [index.point_number for index in + sorted(track.cuesheet_track_index, + lambda i1, i2: cmp(i1.point_number, + i2.point_number))]) + for track in + metadata.cuesheet.container.cuesheet_tracks] + + if (len(indexes) > 0): + for ((cur_tracknum, cur_indexes), + (next_tracknum, next_indexes)) in zip(indexes, + indexes[1:]): + if (next_tracknum != 170): + cuepoint = "%s.%s-%s.%s" % (cur_tracknum, + max(cur_indexes), + next_tracknum, + max(next_indexes)) + else: + cuepoint = "%s.%s-%s.0" % (cur_tracknum, + max(cur_indexes), + next_tracknum) + + sub = subprocess.Popen([BIN['flac'], "-s", "-d", "-c", + "--force-raw-format", + "--endian=little", + "--sign=signed", + "--cue=%s" % (cuepoint), + self.filename], + stdout=subprocess.PIPE) + + yield PCMReader(sub.stdout, + sample_rate=self.__samplerate__, + channels=self.__channels__, + bits_per_sample=self.__bitspersample__, + process=sub) + + +####################### +#Ogg FLAC +####################### + + +class OggFlacAudio(AudioFile): + """A Free Lossless Audio Codec file inside an Ogg container.""" + + SUFFIX = "oga" + NAME = SUFFIX + DEFAULT_COMPRESSION = "8" + COMPRESSION_MODES = tuple(map(str, range(0, 9))) + COMPRESSION_DESCRIPTIONS = {"0": _(u"least amount of compresson, " + + u"fastest compression speed"), + "8": _(u"most amount of compression, " + + u"slowest compression speed")} + BINARIES = ("flac",) + + OGGFLAC_STREAMINFO = Con.Struct('oggflac_streaminfo', + Con.Const(Con.Byte('packet_byte'), + 0x7F), + Con.Const(Con.String('signature', 4), + 'FLAC'), + Con.Byte('major_version'), + Con.Byte('minor_version'), + Con.UBInt16('header_packets'), + Con.Const(Con.String('flac_signature', 4), + 'fLaC'), + Con.Embed( + FlacAudio.METADATA_BLOCK_HEADER), + Con.Embed( + FlacAudio.STREAMINFO)) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + self.__samplerate__ = 0 + self.__channels__ = 0 + self.__bitspersample__ = 0 + self.__total_frames__ = 0 + + try: + self.__read_streaminfo__() + except IOError, msg: + raise InvalidFLAC(str(msg)) + except (Con.FieldError, Con.ArrayError): + raise InvalidFLAC("invalid STREAMINFO block") + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(0x23) + + return (header.startswith('OggS') and + header[0x1C:0x21] == '\x7FFLAC') + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bitspersample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_frames__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplerate__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if (self.channels() <= 2): + return ChannelMask.from_channels(self.channels()) + else: + vorbis_comment = self.get_metadata().vorbis_comment + if ("WAVEFORMATEXTENSIBLE_CHANNEL_MASK" in vorbis_comment.keys()): + try: + return ChannelMask( + int(vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"][0], 16)) + except ValueError: + pass + + #if there is no WAVEFORMATEXTENSIBLE_CHANNEL_MASK + #or it's not an integer, use FLAC's default mask based on channels + if (self.channels() == 3): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True) + elif (self.channels() == 4): + return ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.channels() == 5): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True) + elif (self.channels() == 6): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True, + low_frequency=True) + else: + return ChannelMask(0) + + def lossless(self): + """Returns True.""" + + return True + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + stream = OggStreamReader(file(self.filename, "rb")) + try: + packets = stream.packets() + + blocks = [FlacMetaDataBlock( + type=0, + data=FlacAudio.STREAMINFO.build( + self.OGGFLAC_STREAMINFO.parse(packets.next())))] + + while (True): + block = packets.next() + header = FlacAudio.METADATA_BLOCK_HEADER.parse( + block[0:FlacAudio.METADATA_BLOCK_HEADER.sizeof()]) + blocks.append( + FlacMetaDataBlock( + type=header.block_type, + data=block[FlacAudio.METADATA_BLOCK_HEADER.sizeof():])) + if (header.last_block == 1): + break + + return FlacMetaData(blocks) + finally: + stream.close() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + import tempfile + + comment = FlacMetaData.converted(metadata) + + #port over the old STREAMINFO and SEEKTABLE blocks + if (comment is None): + return + old_metadata = self.get_metadata() + old_streaminfo = old_metadata.streaminfo + old_seektable = old_metadata.seektable + comment.streaminfo = old_streaminfo + if (old_seektable is not None): + comment.seektable = old_seektable + + #grab "vendor_string" from the existing file + vendor_string = old_metadata.vorbis_comment.vendor_string + comment.vorbis_comment.vendor_string = vendor_string + + #grab "WAVEFORMATEXTENSIBLE_CHANNEL_MASK" from existing file + #(if any) + if ((self.channels() > 2) or (self.bits_per_sample() > 16)): + comment.vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"] = [ + u"0x%.4x" % (int(self.channel_mask()))] + + reader = OggStreamReader(file(self.filename, 'rb')) + new_file = tempfile.TemporaryFile() + writer = OggStreamWriter(new_file) + + #grab the serial number from the old file's current header + pages = reader.pages() + (header_page, header_data) = pages.next() + serial_number = header_page.bitstream_serial_number + del(pages) + + #skip the metadata packets in the old file + packets = reader.packets(from_beginning=False) + while (True): + block = packets.next() + header = FlacAudio.METADATA_BLOCK_HEADER.parse( + block[0:FlacAudio.METADATA_BLOCK_HEADER.sizeof()]) + if (header.last_block == 1): + break + + del(packets) + + #write our new comment blocks to the new file + blocks = list(comment.metadata_blocks()) + + #oggflac_streaminfo is a Container for STREAMINFO data + #Ogg FLAC STREAMINFO differs from FLAC STREAMINFO, + #so some fields need to be filled-in + oggflac_streaminfo = FlacAudio.STREAMINFO.parse(blocks.pop(0).data) + oggflac_streaminfo.packet_byte = 0x7F + oggflac_streaminfo.signature = 'FLAC' + oggflac_streaminfo.major_version = 0x1 + oggflac_streaminfo.minor_version = 0x0 + oggflac_streaminfo.header_packets = len(blocks) + 1 # +1 for padding + oggflac_streaminfo.flac_signature = 'fLaC' + oggflac_streaminfo.last_block = 0 + oggflac_streaminfo.block_type = 0 + oggflac_streaminfo.block_length = FlacAudio.STREAMINFO.sizeof() + + sequence_number = 0 + for (page_header, page_data) in OggStreamWriter.build_pages( + 0, serial_number, sequence_number, + OggFlacAudio.OGGFLAC_STREAMINFO.build(oggflac_streaminfo), + header_type=0x2): + writer.write_page(page_header, page_data) + sequence_number += 1 + + #the non-STREAMINFO blocks are the same as FLAC, so write them out + for block in blocks: + try: + for (page_header, page_data) in OggStreamWriter.build_pages( + 0, serial_number, sequence_number, + block.build_block()): + writer.write_page(page_header, page_data) + sequence_number += 1 + except FlacMetaDataBlockTooLarge: + if (isinstance(block, VorbisComment)): + #VORBISCOMMENT can't be skipped, so build an empty one + for (page_header, + page_data) in OggStreamWriter.build_pages( + 0, serial_number, sequence_number, + FlacVorbisComment( + vorbis_data={}, + vendor_string=block.vendor_string).build_block()): + writer.write_page(page_header, page_data) + sequence_number += 1 + else: + pass + + #finally, write out a padding block + for (page_header, page_data) in OggStreamWriter.build_pages( + 0, serial_number, sequence_number, + FlacMetaDataBlock(type=1, + data=chr(0) * 4096).build_block(last=1)): + writer.write_page(page_header, page_data) + sequence_number += 1 + + #now write the rest of the old pages to the new file, + #re-sequenced and re-checksummed + for (page, data) in reader.pages(from_beginning=False): + page.page_sequence_number = sequence_number + page.checksum = OggStreamReader.calculate_ogg_checksum(page, data) + writer.write_page(page, data) + sequence_number += 1 + + reader.close() + + #re-write the file with our new data in "new_file" + f = file(self.filename, "wb") + new_file.seek(0, 0) + transfer_data(new_file.read, f.write) + new_file.close() + f.close() + writer.close() + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + self.set_metadata(MetaData()) + + def metadata_length(self): + """Returns None.""" + + return None + + def __read_streaminfo__(self): + stream = OggStreamReader(file(self.filename, "rb")) + try: + packets = stream.packets() + try: + header = self.OGGFLAC_STREAMINFO.parse(packets.next()) + except Con.ConstError: + raise InvalidFLAC(_(u'Invalid Ogg FLAC streaminfo')) + except StopIteration: + raise InvalidFLAC(_(u'Invalid Ogg FLAC streaminfo')) + + self.__samplerate__ = header.samplerate + self.__channels__ = header.channels + 1 + self.__bitspersample__ = header.bits_per_sample + 1 + self.__total_frames__ = header.total_samples + self.__header_packets__ = header.header_packets + + self.__md5__ = "".join([chr(c) for c in header.md5]) + + del(packets) + finally: + stream.close() + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + sub = subprocess.Popen([BIN['flac'], "-s", "--ogg", "-d", "-c", + "--force-raw-format", + "--endian=little", + "--sign=signed", + self.filename], + stdout=subprocess.PIPE, + stderr=file(os.devnull, 'ab')) + return PCMReader(sub.stdout, + sample_rate=self.__samplerate__, + channels=self.__channels__, + bits_per_sample=self.__bitspersample__, + channel_mask=int(self.channel_mask()), + process=sub, + signed=True, + big_endian=False) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new OggFlacAudio object.""" + + SUBSTREAM_SAMPLE_RATES = frozenset([ + 8000, 16000, 22050, 24000, 32000, + 44100, 48000, 96000]) + SUBSTREAM_BITS = frozenset([8, 12, 16, 20, 24]) + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if ((pcmreader.sample_rate in SUBSTREAM_SAMPLE_RATES) and + (pcmreader.bits_per_sample in SUBSTREAM_BITS)): + lax = [] + else: + lax = ["--lax"] + + if (pcmreader.channels > 8): + raise UnsupportedChannelCount(filename, pcmreader.channels) + + if (int(pcmreader.channel_mask) == 0): + if (pcmreader.channels <= 6): + channel_mask = {1: 0x0004, + 2: 0x0003, + 3: 0x0007, + 4: 0x0033, + 5: 0x0037, + 6: 0x003F}[pcmreader.channels] + else: + channel_mask = 0 + + elif (int(pcmreader.channel_mask) not in + (0x0001, # 1ch - mono + 0x0004, # 1ch - mono + 0x0003, # 2ch - left, right + 0x0007, # 3ch - left, right, center + 0x0033, # 4ch - left, right, back left, back right + 0x0603, # 4ch - left, right, side left, side right + 0x0037, # 5ch - L, R, C, back left, back right + 0x0607, # 5ch - L, R, C, side left, side right + 0x003F, # 6ch - L, R, C, LFE, back left, back right + 0x060F)): # 6ch - L, R, C, LFE, side left, side right + raise UnsupportedChannelMask(filename, + int(pcmreader.channel_mask)) + else: + channel_mask = int(pcmreader.channel_mask) + + devnull = file(os.devnull, 'ab') + + sub = subprocess.Popen([BIN['flac']] + lax + \ + ["-s", "-f", "-%s" % (compression), + "-V", "--ogg", + "--endian=little", + "--channels=%d" % (pcmreader.channels), + "--bps=%d" % (pcmreader.bits_per_sample), + "--sample-rate=%d" % (pcmreader.sample_rate), + "--sign=signed", + "--force-raw-format", + "-o", filename, "-"], + stdin=subprocess.PIPE, + stdout=devnull, + stderr=devnull, + preexec_fn=ignore_sigint) + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (ValueError, IOError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + sub.stdin.close() + devnull.close() + + if (sub.wait() == 0): + oggflac = OggFlacAudio(filename) + if (((pcmreader.channels > 2) or + (pcmreader.bits_per_sample > 16)) and + (channel_mask != 0)): + metadata = oggflac.get_metadata() + metadata.vorbis_comment[ + "WAVEFORMATEXTENSIBLE_CHANNEL_MASK"] = [ + u"0x%.4x" % (channel_mask)] + oggflac.set_metadata(metadata) + return oggflac + else: + raise EncodingError(u"error encoding file with flac") + + def set_cuesheet(self, cuesheet): + """Imports cuesheet data from a Cuesheet-compatible object. + + This are objects with catalog(), ISRCs(), indexes(), and pcm_lengths() + methods. Raises IOError if an error occurs setting the cuesheet.""" + + if (cuesheet is None): + return + + metadata = self.get_metadata() + if (metadata is None): + metadata = FlacMetaData.converted(MetaData()) + + metadata.cuesheet = FlacCueSheet.converted( + cuesheet, self.total_frames(), self.sample_rate()) + self.set_metadata(metadata) + + def get_cuesheet(self): + """Returns the embedded Cuesheet-compatible object, or None. + + Raises IOError if a problem occurs when reading the file.""" + + metadata = self.get_metadata() + if (metadata is not None): + return metadata.cuesheet + else: + return None + + def sub_pcm_tracks(self): + """Yields a PCMReader object per cuesheet track. + + This currently does nothing since the FLAC reference + decoder has limited support for Ogg FLAC. + """ + + return iter([]) + + def verify(self, progress=None): + """Verifies the current file for correctness. + + Returns True if the file is okay. + Raises an InvalidFile with an error message if there is + some problem with the file.""" + + from audiotools import verify_ogg_stream + + #Ogg stream verification is likely to be so fast + #that individual calls to progress() are + #a waste of time. + if (progress is not None): + progress(0, 1) + + try: + f = open(self.filename, 'rb') + except IOError, err: + raise InvalidFLAC(str(err)) + try: + try: + result = verify_ogg_stream(f) + if (progress is not None): + progress(1, 1) + return result + except (IOError, ValueError), err: + raise InvalidFLAC(str(err)) + finally: + f.close() diff --git a/Melodia/resources/audiotools/__freedb__.py b/Melodia/resources/audiotools/__freedb__.py new file mode 100644 index 0000000..6487715 --- /dev/null +++ b/Melodia/resources/audiotools/__freedb__.py @@ -0,0 +1,724 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (VERSION, Con, cStringIO, sys, re, MetaData, + AlbumMetaData, AlbumMetaDataFile, __most_numerous__, + DummyAudioFile, MetaDataFileException) +import StringIO +import gettext + +gettext.install("audiotools", unicode=True) + +####################### +#XMCD +####################### + + +class XMCDException(MetaDataFileException): + """Raised if some error occurs parsing an XMCD file.""" + + def __unicode__(self): + return _(u"Invalid XMCD file") + + +class XMCD(AlbumMetaDataFile): + LINE_LENGTH = 78 + + def __init__(self, fields, comments): + """fields a dict of key->values. comment is a list of comments. + + keys are plain strings. values and comments are unicode.""" + + self.fields = fields + self.comments = comments + + def __getattr__(self, key): + if (key == 'album_name'): + dtitle = self.fields.get('DTITLE', u"") + if (u" / " in dtitle): + return dtitle.split(u" / ", 1)[1] + else: + return dtitle + elif (key == 'artist_name'): + dtitle = self.fields.get('DTITLE', u"") + if (u" / " in dtitle): + return dtitle.split(u" / ", 1)[0] + else: + return u"" + elif (key == 'year'): + return self.fields.get('DYEAR', u"") + elif (key == 'catalog'): + return u"" + elif (key == 'extra'): + return self.fields.get('EXTD', u"") + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __setattr__(self, key, value): + if (key == 'album_name'): + dtitle = self.fields.get('DTITLE', u"") + if (u" / " in dtitle): + artist = dtitle.split(u" / ", 1)[0] + self.fields['DTITLE'] = u"%s / %s" % (artist, value) + else: + self.fields['DTITLE'] = value + elif (key == 'artist_name'): + dtitle = self.fields.get('DTITLE', u"") + if (u" / " in dtitle): + album = dtitle.split(u" / ", 1)[1] + else: + album = dtitle + self.fields['DTITLE'] = u"%s / %s" % (value, album) + elif (key == 'year'): + self.fields['DYEAR'] = value + elif (key == 'catalog'): + pass + elif (key == 'extra'): + self.fields['EXTD'] = value + else: + self.__dict__[key] = value + + def __len__(self): + track_field = re.compile(r'(TTITLE|EXTT)(\d+)') + + return max(set([int(m.group(2)) for m in + [track_field.match(key) for key in self.fields.keys()] + if m is not None])) + 1 + + def to_string(self): + def write_field(f, key, value): + chars = list(value) + encoded_value = "%s=" % (key) + + while ((len(chars) > 0) and + (len(encoded_value + + chars[0].encode('utf-8', 'replace')) < + XMCD.LINE_LENGTH)): + encoded_value += chars.pop(0).encode('utf-8', 'replace') + + f.write("%s\r\n" % (encoded_value)) + if (len(chars) > 0): + write_field(f, key, u"".join(chars)) + + output = cStringIO.StringIO() + + for comment in self.comments: + output.write(comment.encode('utf-8')) + output.write('\r\n') + + fields = set(self.fields.keys()) + for field in ['DISCID', 'DTITLE', 'DYEAR', 'DGENRE']: + if (field in fields): + write_field(output, field, self.fields[field]) + fields.remove(field) + + for i in xrange(len(self)): + field = 'TTITLE%d' % (i) + if (field in fields): + write_field(output, field, self.fields[field]) + fields.remove(field) + + if ('EXTD' in fields): + write_field(output, 'EXTD', self.fields['EXTD']) + fields.remove('EXTD') + + for i in xrange(len(self)): + field = 'EXTT%d' % (i) + if (field in fields): + write_field(output, field, self.fields[field]) + fields.remove(field) + + for field in fields: + write_field(output, field, self.fields[field]) + + return output.getvalue() + + @classmethod + def from_string(cls, string): + # try: + # data = string.decode('latin-1') + # except UnicodeDecodeError: + # data = string.decode('utf-8','replace') + #FIXME - handle latin-1 files? + data = string.decode('utf-8', 'replace') + + if (not data.startswith(u"# xmcd")): + raise XMCDException() + + fields = {} + comments = [] + field_line = re.compile(r'([A-Z0-9]+?)=(.*)') + + for line in StringIO.StringIO(data): + if (line.startswith(u'#')): + comments.append(line.rstrip('\r\n')) + else: + match = field_line.match(line.rstrip('\r\n')) + if (match is not None): + key = match.group(1).encode('ascii') + value = match.group(2) + if (key in fields): + fields[key] += value + else: + fields[key] = value + + return cls(fields, comments) + + def get_track(self, index): + try: + ttitle = self.fields['TTITLE%d' % (index)] + track_extra = self.fields['EXTT%d' % (index)] + except KeyError: + return (u"", u"", u"") + + if (u' / ' in ttitle): + (track_artist, track_title) = ttitle.split(u' / ', 1) + else: + track_title = ttitle + track_artist = u"" + + return (track_title, track_artist, track_extra) + + def set_track(self, index, name, artist, extra): + if ((index < 0) or (index >= len(self))): + raise IndexError(index) + + if (len(artist) > 0): + self.fields["TTITLE%d" % (index)] = u"%s / %s" % (artist, name) + else: + self.fields["TTITLE%d" % (index)] = name + + if (len(extra) > 0): + self.fields["EXTT%d" % (index)] = extra + + @classmethod + def from_tracks(cls, tracks): + def track_string(track, album_artist, metadata): + if (track.track_number() in metadata.keys()): + metadata = metadata[track.track_number()] + if (metadata.artist_name == album_artist): + return metadata.track_name + else: + return u"%s / %s" % (metadata.artist_name, + metadata.track_name) + else: + return u"" + + audiofiles = [f for f in tracks if f.track_number() != 0] + audiofiles.sort(lambda t1, t2: cmp(t1.track_number(), + t2.track_number())) + + discid = DiscID([track.cd_frames() for track in audiofiles]) + + metadata = dict([(t.track_number(), t.get_metadata()) + for t in audiofiles + if (t.get_metadata() is not None)]) + + artist_names = [m.artist_name for m in metadata.values()] + if (len(artist_names) == 0): + album_artist = u"" + elif ((len(artist_names) > 1) and + (len(set(artist_names)) == len(artist_names))): + #if all track artists are different, don't pick one + album_artist = u"Various" + else: + album_artist = __most_numerous__(artist_names) + + return cls(dict([("DISCID", str(discid).decode('ascii')), + ("DTITLE", u"%s / %s" % \ + (album_artist, + __most_numerous__([m.album_name for m in + metadata.values()]))), + ("DYEAR", __most_numerous__([m.year for m in + metadata.values()])), + ("EXTDD", u""), + ("PLAYORDER", u"")] + \ + [("TTITLE%d" % (track.track_number() - 1), + track_string(track, album_artist, metadata)) + for track in audiofiles] + \ + [("EXTT%d" % (track.track_number() - 1), + u"") + for track in audiofiles]), + [u"# xmcd", + u"#", + u"# Track frame offsets:"] + + [u"#\t%d" % (offset) for offset in discid.offsets()] + + [u"#", + u"# Disc length: %d seconds" % ( + (discid.length() / 75) + 2), + u"#"]) + + +####################### +#FREEDB +####################### + +class DiscID: + """An object representing a 32 bit FreeDB disc ID value.""" + + DISCID = Con.Struct('discid', + Con.UBInt8('digit_sum'), + Con.UBInt16('length'), + Con.UBInt8('track_count')) + + def __init__(self, tracks=[], offsets=None, length=None, lead_in=150): + """Fields are as follows: + + tracks - a list of track lengths in CD frames + offsets - a list of track offsets in CD frames + length - the length of the entire disc in CD frames + lead_in - the location of the first track on the CD, in frames + + These fields are all optional. + One will presumably fill them with data later in that event. + """ + + self.tracks = tracks + self.__offsets__ = offsets + self.__length__ = length + self.__lead_in__ = lead_in + + @classmethod + def from_cdda(cls, cdda): + """Given a CDDA object, returns a populated DiscID. + + May raise ValueError if there are no audio tracks on the CD.""" + + tracks = list(cdda) + if (len(tracks) < 1): + raise ValueError(_(u"no audio tracks in CDDA object")) + + return cls(tracks=[t.length() for t in tracks], + offsets=[t.offset() for t in tracks], + length=cdda.last_sector(), + lead_in=tracks[0].offset()) + + def add(self, track): + """Adds a new track length, in CD frames.""" + + self.tracks.append(track) + + def offsets(self): + """Returns a list of calculated offset integers, from track lengths.""" + + if (self.__offsets__ is None): + offsets = [self.__lead_in__] + + for track in self.tracks[0:-1]: + offsets.append(track + offsets[-1]) + + return offsets + else: + return self.__offsets__ + + def length(self): + """Returns the total length of the disc, in seconds.""" + + if (self.__length__ is None): + return sum(self.tracks) + else: + return self.__length__ + + def idsuffix(self): + """Returns a FreeDB disc ID suffix string. + + This is for making server queries.""" + + return str(len(self.tracks)) + " " + \ + " ".join([str(offset) for offset in self.offsets()]) + \ + " " + str((self.length() + self.__lead_in__) / 75) + + def __str__(self): + def __count_digits__(i): + if (i == 0): + return 0 + else: + return (i % 10) + __count_digits__(i / 10) + + disc_id = Con.Container() + + disc_id.track_count = len(self.tracks) + disc_id.length = self.length() / 75 + disc_id.digit_sum = sum([__count_digits__(o / 75) + for o in self.offsets()]) % 0xFF + + return DiscID.DISCID.build(disc_id).encode('hex') + + def freedb_id(self): + """Returns the entire FreeDB disc ID, including suffix.""" + + return str(self) + " " + self.idsuffix() + + def toxmcd(self, output): + """Writes a newly created XMCD file to output. + + Its values are populated from this DiscID's fields.""" + + output.write(XMCD.from_tracks( + [DummyAudioFile(length, None, i + 1) + for (i, length) in enumerate(self.tracks)]).to_string()) + + +class FreeDBException(Exception): + """Raised if some problem occurs during FreeDB querying.""" + + pass + + +class FreeDB: + """A class for performing queries on a FreeDB or compatible server. + + This operates using the original FreeDB client-server protocol.""" + + LINE = re.compile(r'\d\d\d\s.+') + + def __init__(self, server, port, messenger): + """server is a string, port is an int, messenger is a Messenger. + + Queries are sent to the server, and output to the messenger.""" + + self.server = server + self.port = port + self.socket = None + self.r = None + self.w = None + self.messenger = messenger + + def connect(self): + """Performs the initial connection.""" + + import socket + + try: + self.messenger.info(_(u"Connecting to \"%s\"") % (self.server)) + + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.connect((self.server, self.port)) + + self.r = self.socket.makefile("rb") + self.w = self.socket.makefile("wb") + + (code, msg) = self.read() # the welcome message + if (code == 201): + self.messenger.info(_(u"Connected ... attempting to login")) + else: + self.r.close() + self.w.close() + self.socket.close() + raise FreeDBException(_(u"Invalid hello message")) + + self.write("cddb hello user %s %s %s" % \ + (socket.getfqdn(), "audiotools", VERSION)) + + (code, msg) = self.read() # the handshake successful message + if (code != 200): + self.r.close() + self.w.close() + self.socket.close() + raise FreeDBException(_(u"Handshake unsuccessful")) + + self.write("proto 6") + + (code, msg) = self.read() # the protocol successful message + if ((code != 200) and (code != 201)): + self.r.close() + self.w.close() + self.socket.close() + raise FreeDBException(_(u"Protocol change unsuccessful")) + + except socket.error, err: + raise FreeDBException(err[1]) + + def close(self): + """Closes an open connection.""" + + self.messenger.info(_(u"Closing connection")) + + self.write("quit") + (code, msg) = self.read() # the quit successful message + + self.r.close() + self.w.close() + self.socket.close() + + def write(self, line): + """Writes a single command line to the server.""" + + if (self.socket is not None): + self.w.write(line) + self.w.write("\r\n") + self.w.flush() + + def read(self): + """Reads a result line from the server.""" + + line = self.r.readline() + if (FreeDB.LINE.match(line)): + return (int(line[0:3]), line[4:].rstrip("\r\n")) + else: + return (None, line.rstrip("\r\n")) + + def query(self, disc_id): + """Given a DiscID, performs an album query and returns matches. + + Each match is a (category, id) pair, which the user may + need to decide between.""" + + matches = [] + + self.messenger.info( + _(u"Sending Disc ID \"%(disc_id)s\" to server \"%(server)s\"") % \ + {"disc_id": str(disc_id).decode('ascii'), + "server": self.server.decode('ascii', 'replace')}) + + self.write("cddb query " + disc_id.freedb_id()) + (code, msg) = self.read() + if (code == 200): + matches.append(msg) + elif ((code == 211) or (code == 210)): + while (msg != "."): + (code, msg) = self.read() + if (msg != "."): + matches.append(msg) + + if (len(matches) == 1): + self.messenger.info(_(u"1 match found")) + else: + self.messenger.info(_(u"%s matches found") % (len(matches))) + + return map(lambda m: m.split(" ", 2), matches) + + def read_data(self, category, id, output): + """Reads the FreeDB entry matching category and id to output. + + category and id are raw strings, as returned by query(). + output is an open file object. + """ + + self.write("cddb read " + category + " " + id) + (code, msg) = self.read() + if (code == 210): + line = self.r.readline() + while (line.strip() != "."): + output.write(line) + line = self.r.readline() + else: + print >> sys.stderr, (code, msg) + + +class FreeDBWeb(FreeDB): + """A class for performing queries on a FreeDB or compatible server. + + This operates using the FreeDB web-based protocol.""" + + def __init__(self, server, port, messenger): + """server is a string, port is an int, messenger is a Messenger. + + Queries are sent to the server, and output to the messenger.""" + + self.server = server + self.port = port + self.connection = None + self.messenger = messenger + + def connect(self): + """Performs the initial connection.""" + + import httplib + + self.connection = httplib.HTTPConnection(self.server, self.port, + timeout=10) + + def close(self): + """Closes an open connection.""" + + if (self.connection is not None): + self.connection.close() + + def write(self, line): + """Writes a single command line to the server.""" + + import urllib + import socket + + u = urllib.urlencode({"hello": "user %s %s %s" % \ + (socket.getfqdn(), + "audiotools", + VERSION), + "proto": str(6), + "cmd": line}) + + try: + self.connection.request( + "POST", + "/~cddb/cddb.cgi", + u, + {"Content-type": "application/x-www-form-urlencoded", + "Accept": "text/plain"}) + except socket.error, msg: + raise FreeDBException(str(msg)) + + def read(self): + """Reads a result line from the server.""" + + response = self.connection.getresponse() + return response.read() + + def __parse_line__(self, line): + if (FreeDB.LINE.match(line)): + return (int(line[0:3]), line[4:].rstrip("\r\n")) + else: + return (None, line.rstrip("\r\n")) + + def query(self, disc_id): + """Given a DiscID, performs an album query and returns matches. + + Each match is a (category, id) pair, which the user may + need to decide between.""" + + matches = [] + + self.messenger.info( + _(u"Sending Disc ID \"%(disc_id)s\" to server \"%(server)s\"") % \ + {"disc_id": str(disc_id).decode('ascii'), + "server": self.server.decode('ascii', 'replace')}) + + self.write("cddb query " + disc_id.freedb_id()) + data = cStringIO.StringIO(self.read()) + (code, msg) = self.__parse_line__(data.readline()) + if (code == 200): + matches.append(msg) + elif ((code == 211) or (code == 210)): + while (msg != "."): + (code, msg) = self.__parse_line__(data.readline()) + if (msg != "."): + matches.append(msg) + + if (len(matches) == 1): + self.messenger.info(_(u"1 match found")) + else: + self.messenger.info(_(u"%s matches found") % (len(matches))) + + return map(lambda m: m.split(" ", 2), matches) + + def read_data(self, category, id, output): + """Reads the FreeDB entry matching category and id to output. + + category and id are raw strings, as returned by query(). + output is an open file object. + """ + + self.write("cddb read " + category + " " + id) + data = cStringIO.StringIO(self.read()) + (code, msg) = self.__parse_line__(data.readline()) + if (code == 210): + line = data.readline() + while (line.strip() != "."): + output.write(line) + line = data.readline() + else: + print >> sys.stderr, (code, msg) + + +#matches is a list of (category,disc_id,title) tuples returned from +#FreeDB.query(). If the length of that list is 1, return the first +#item. If the length is greater than one, present the user a list of +#choices and force him/her to pick the closest match for the CD. +#That data can then be sent to FreeDB.read_data() +def __select_match__(matches, messenger): + if (len(matches) == 1): + return matches[0] + elif (len(matches) < 1): + return None + else: + messenger.info(_(u"Please Select the Closest Match:")) + selected = 0 + while ((selected < 1) or (selected > len(matches))): + for i in range(len(matches)): + messenger.info(_(u"%(choice)s) [%(genre)s] %(name)s") % \ + {"choice": i + 1, + "genre": matches[i][0], + "name": matches[i][2].decode('utf-8', + 'replace')}) + try: + messenger.partial_info(_(u"Your Selection [1-%s]:") % \ + (len(matches))) + selected = int(sys.stdin.readline().strip()) + except ValueError: + selected = 0 + + return matches[selected - 1] + + +def __select_default_match__(matches, selection): + if (len(matches) < 1): + return None + else: + try: + return matches[selection] + except IndexError: + return matches[0] + + +def get_xmcd(disc_id, output, freedb_server, freedb_server_port, + messenger, default_selection=None): + """Runs through the entire FreeDB querying sequence. + + Fields are as follows: + disc_id - a DiscID object + output - an open file object for writing + freedb_server - a server name string + freedb_port - a server port int + messenger - a Messenger object + default_selection - if given, the default match to choose + """ + + try: + freedb = FreeDBWeb(freedb_server, freedb_server_port, messenger) + freedb.connect() + except FreeDBException, msg: + #if an exception occurs during the opening, + #freedb will auto-close its sockets + raise IOError(str(msg)) + + try: + matches = freedb.query(disc_id) + #HANDLE MULTIPLE MATCHES, or NO MATCHES + if (len(matches) > 0): + if (default_selection is None): + (category, idstring, title) = __select_match__( + matches, messenger) + else: + (category, idstring, title) = __select_default_match__( + matches, default_selection) + + freedb.read_data(category, idstring, output) + output.flush() + + freedb.close() + except FreeDBException, msg: + #otherwise, close the sockets manually + freedb.close() + raise IOError(str(msg)) + + return len(matches) diff --git a/Melodia/resources/audiotools/__id3__.py b/Melodia/resources/audiotools/__id3__.py new file mode 100644 index 0000000..a6ec07f --- /dev/null +++ b/Melodia/resources/audiotools/__id3__.py @@ -0,0 +1,1765 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (MetaData, Con, re, os, cStringIO, + Image, InvalidImage, config) +import codecs +import gettext + +gettext.install("audiotools", unicode=True) + + +class UCS2Codec(codecs.Codec): + """A special unicode codec for UCS-2. + + This is a subset of UTF-16 with no support for surrogate pairs, + limiting it to U+0000-U+FFFF.""" + + @classmethod + def fix_char(cls, c): + """A filter which changes overly large c values to "unknown".""" + + if (ord(c) <= 0xFFFF): + return c + else: + return u"\ufffd" + + def encode(self, input, errors='strict'): + """Encodes unicode input to plain UCS-2 strings.""" + + return codecs.utf_16_encode(u"".join(map(self.fix_char, input)), + errors) + + def decode(self, input, errors='strict'): + """Decodes plain UCS-2 strings to unicode.""" + + (chars, size) = codecs.utf_16_decode(input, errors, True) + return (u"".join(map(self.fix_char, chars)), size) + + +class UCS2CodecStreamWriter(UCS2Codec, codecs.StreamWriter): + pass + + +class UCS2CodecStreamReader(UCS2Codec, codecs.StreamReader): + pass + + +def __reg_ucs2__(name): + if (name == 'ucs2'): + return (UCS2Codec().encode, + UCS2Codec().decode, + UCS2CodecStreamReader, + UCS2CodecStreamWriter) + else: + return None + +codecs.register(__reg_ucs2__) + + +class UnsupportedID3v2Version(Exception): + """Raised if one encounters an ID3v2 tag not version .2, .3 or .4.""" + + pass + + +class Syncsafe32(Con.Adapter): + """An adapter for padding 24 bit values to 32 bits.""" + + def __init__(self, name): + Con.Adapter.__init__(self, + Con.StrictRepeater(4, Con.UBInt8(name))) + + def _encode(self, value, context): + data = [] + for i in xrange(4): + data.append(value & 0x7F) + value = value >> 7 + data.reverse() + return data + + def _decode(self, obj, context): + i = 0 + for x in obj: + i = (i << 7) | (x & 0x7F) + return i + + +class __24BitsBE__(Con.Adapter): + def _encode(self, value, context): + return chr((value & 0xFF0000) >> 16) + \ + chr((value & 0x00FF00) >> 8) + \ + chr(value & 0x0000FF) + + def _decode(self, obj, context): + return (ord(obj[0]) << 16) | (ord(obj[1]) << 8) | ord(obj[2]) + + +def UBInt24(name): + """An unsigned, big-endian, 24-bit struct.""" + + return __24BitsBE__(Con.Bytes(name, 3)) + + +#UTF16CString and UTF16BECString implement a null-terminated string +#of UTF-16 characters by reading them as unsigned 16-bit integers, +#looking for the null terminator (0x0000) and then converting the integers +#back before decoding. It's a little half-assed, but it seems to work. +#Even large UTF-16 characters with surrogate pairs (those above U+FFFF) +#shouldn't have embedded 0x0000 bytes in them, +#which ID3v2.2/2.3 aren't supposed to use anyway since they're limited +#to UCS-2 encoding. + +class WidecharCStringAdapter(Con.Adapter): + """An adapter for handling NULL-terminated UTF-16/UCS-2 strings.""" + + def __init__(self, obj, encoding): + Con.Adapter.__init__(self, obj) + self.encoding = encoding + + def _encode(self, obj, context): + return Con.GreedyRepeater(Con.UBInt16("s")).parse(obj.encode( + self.encoding)) + [0] + + def _decode(self, obj, context): + c = Con.UBInt16("s") + + return "".join([c.build(s) for s in obj[0:-1]]).decode(self.encoding) + + +def UCS2CString(name): + """A UCS-2 encoded, NULL-terminated string.""" + + return WidecharCStringAdapter(Con.RepeatUntil(lambda obj, ctx: obj == 0x0, + Con.UBInt16(name)), + encoding='ucs2') + + +def UTF16CString(name): + """A UTF-16 encoded, NULL-terminated string.""" + + return WidecharCStringAdapter(Con.RepeatUntil(lambda obj, ctx: obj == 0x0, + Con.UBInt16(name)), + encoding='utf-16') + + +def UTF16BECString(name): + """A UTF-16BE encoded, NULL-terminated string.""" + + return WidecharCStringAdapter(Con.RepeatUntil(lambda obj, ctx: obj == 0x0, + Con.UBInt16(name)), + encoding='utf-16be') + + +def __attrib_equals__(attributes, o1, o2): + import operator + + try: + return reduce(operator.and_, + [getattr(o1, attrib) == getattr(o2, attrib) + for attrib in attributes]) + except AttributeError: + return False + + +#takes a pair of integers for the current and total values +#returns a unicode string of their combined pair +#for example, __number_pair__(2,3) returns u"2/3" +#whereas __number_pair__(4,0) returns u"4" + +def __padded_number_pair__(current, total): + if (total == 0): + return u"%2.2d" % (current) + else: + return u"%2.2d/%2.2d" % (current, total) + + +def __unpadded_number_pair__(current, total): + if (total == 0): + return u"%d" % (current) + else: + return u"%d/%d" % (current, total) + + +if (config.getboolean_default("ID3", "pad", False)): + __number_pair__ = __padded_number_pair__ +else: + __number_pair__ = __unpadded_number_pair__ + + +####################### +#ID3v2.2 +####################### + + +class ID3v22Frame: + """A container for individual ID3v2.2 frames.""" + + FRAME = Con.Struct("id3v22_frame", + Con.Bytes("frame_id", 3), + Con.PascalString("data", length_field=UBInt24("size"))) + #we use TEXT_TYPE to differentiate frames which are + #supposed to return text unicode when __unicode__ is called + #from those that just return summary data + TEXT_TYPE = False + + def __init__(self, frame_id, data): + """frame_id is the 3 byte ID. data is a binary string.""" + + self.id = frame_id + self.data = data + + def __len__(self): + return len(self.data) + + def __eq__(self, o): + return __attrib_equals__(["frame_id", "data"], self, o) + + def build(self): + """Returns a binary string of ID3v2.2 frame data.""" + + return self.FRAME.build(Con.Container(frame_id=self.id, + data=self.data)) + + def __unicode__(self): + if (self.id.startswith('W')): + return self.data.rstrip(chr(0)).decode('iso-8859-1', 'replace') + else: + if (len(self.data) <= 20): + return unicode(self.data.encode('hex').upper()) + else: + return (unicode(self.data[0:19].encode('hex').upper()) + + u"\u2026") + + @classmethod + def parse(cls, container): + """Returns the appropriate ID3v22Frame subclass from a Container. + + Container is parsed from ID3v22Frame.FRAME + and contains "frame_id and "data" attributes. + """ + + if (container.frame_id.startswith('T')): + try: + encoding_byte = ord(container.data[0]) + return ID3v22TextFrame(container.frame_id, + encoding_byte, + container.data[1:].decode( + ID3v22TextFrame.ENCODING[encoding_byte])) + except IndexError: + return ID3v22TextFrame(container.frame_id, + 0, + u"") + elif (container.frame_id == 'PIC'): + frame_data = cStringIO.StringIO(container.data) + pic_header = ID3v22PicFrame.FRAME_HEADER.parse_stream(frame_data) + return ID3v22PicFrame( + frame_data.read(), + pic_header.format.decode('ascii', 'replace'), + pic_header.description, + pic_header.picture_type) + elif (container.frame_id == 'COM'): + com_data = cStringIO.StringIO(container.data) + try: + com = ID3v22ComFrame.COMMENT_HEADER.parse_stream(com_data) + return ID3v22ComFrame( + com.encoding, + com.language, + com.short_description, + com_data.read().decode( + ID3v22TextFrame.ENCODING[com.encoding], 'replace')) + except Con.core.ArrayError: + return cls(frame_id=container.frame_id, data=container.data) + except Con.core.FieldError: + return cls(frame_id=container.frame_id, data=container.data) + else: + return cls(frame_id=container.frame_id, + data=container.data) + + +class ID3v22TextFrame(ID3v22Frame): + """A container for individual ID3v2.2 text frames.""" + + ENCODING = {0x00: "latin-1", + 0x01: "ucs2"} + + TEXT_TYPE = True + + def __init__(self, frame_id, encoding, s): + """frame_id is a 3 byte ID, encoding is 0/1, s is a unicode string.""" + + self.id = frame_id + self.encoding = encoding + self.string = s + + def __eq__(self, o): + return __attrib_equals__(["id", "encoding", "string"], self, o) + + def __len__(self): + return len(self.string) + + def __unicode__(self): + return self.string + + def __int__(self): + try: + return int(re.findall(r'\d+', self.string)[0]) + except IndexError: + return 0 + + def total(self): + """If the frame is number/total formatted, return the "total" int.""" + + try: + return int(re.findall(r'\d+/(\d+)', self.string)[0]) + except IndexError: + return 0 + + @classmethod + def from_unicode(cls, frame_id, s): + """Builds an ID3v22TextFrame from 3 byte frame_id and unicode s.""" + + if (frame_id == 'COM'): + return ID3v22ComFrame.from_unicode(s) + + for encoding in 0x00, 0x01: + try: + s.encode(cls.ENCODING[encoding]) + return cls(frame_id, encoding, s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.2 frame data.""" + + return self.FRAME.build(Con.Container( + frame_id=self.id, + data=chr(self.encoding) + \ + self.string.encode(self.ENCODING[self.encoding], + 'replace'))) + + +class ID3v22ComFrame(ID3v22TextFrame): + """A container for ID3v2.2 comment (COM) frames.""" + + COMMENT_HEADER = Con.Struct( + "com_frame", + Con.Byte("encoding"), + Con.String("language", 3), + Con.Switch("short_description", + lambda ctx: ctx.encoding, + {0x00: Con.CString("s", encoding='latin-1'), + 0x01: UCS2CString("s")})) + + TEXT_TYPE = True + + def __init__(self, encoding, language, short_description, content): + """encoding is 0/1, language is a string, the rest are unicode. + + We're mostly interested in encoding and content. + The language and short_description fields are rarely used.""" + + self.encoding = encoding + self.language = language + self.short_description = short_description + self.content = content + self.id = 'COM' + + def __len__(self): + return len(self.content) + + def __eq__(self, o): + return __attrib_equals__(["encoding", "language", + "short_description", "content"], self, o) + + def __unicode__(self): + return self.content + + def __int__(self): + return 0 + + @classmethod + def from_unicode(cls, s): + """Builds an ID3v22ComFrame from a unicode string.""" + + for encoding in 0x00, 0x01: + try: + s.encode(cls.ENCODING[encoding]) + return cls(encoding, 'eng', u'', s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.2 frame data.""" + + return self.FRAME.build(Con.Container( + frame_id=self.id, + data=self.COMMENT_HEADER.build(Con.Container( + encoding=self.encoding, + language=self.language, + short_description=self.short_description)) + + self.content.encode(self.ENCODING[self.encoding], + 'replace'))) + + +class ID3v22PicFrame(ID3v22Frame, Image): + """A container for ID3v2.2 image (PIC) frames.""" + + FRAME_HEADER = Con.Struct('pic_frame', + Con.Byte('text_encoding'), + Con.String('format', 3), + Con.Byte('picture_type'), + Con.Switch("description", + lambda ctx: ctx.text_encoding, + {0x00: Con.CString( + "s", encoding='latin-1'), + 0x01: UCS2CString("s")})) + + def __init__(self, data, format, description, pic_type): + """Fields are as follows: + + data - a binary string of raw image data + format - a unicode string + description - a unicode string + pic_type - an integer + """ + + ID3v22Frame.__init__(self, 'PIC', None) + + try: + img = Image.new(data, u'', 0) + except InvalidImage: + img = Image(data=data, mime_type=u'', + width=0, height=0, color_depth=0, color_count=0, + description=u'', type=0) + + self.pic_type = pic_type + self.format = format + Image.__init__(self, + data=data, + mime_type=img.mime_type, + width=img.width, + height=img.height, + color_depth=img.color_depth, + color_count=img.color_count, + description=description, + type={3: 0, 4: 1, 5: 2, 6: 3}.get(pic_type, 4)) + + def type_string(self): + """Returns the image's type as a human readable plain string. + + For example, an image of type 0 returns "Front Cover""" + + #FIXME - these should be internationalized + return {0: "Other", + 1: "32x32 pixels 'file icon' (PNG only)", + 2: "Other file icon", + 3: "Cover (front)", + 4: "Cover (back)", + 5: "Leaflet page", + 6: "Media (e.g. label side of CD)", + 7: "Lead artist/lead performer/soloist", + 8: "Artist / Performer", + 9: "Conductor", + 10: "Band / Orchestra", + 11: "Composer", + 12: "Lyricist / Text writer", + 13: "Recording Location", + 14: "During recording", + 15: "During performance", + 16: "Movie/Video screen capture", + 17: "A bright coloured fish", + 18: "Illustration", + 19: "Band/Artist logotype", + 20: "Publisher/Studio logotype"}.get(self.pic_type, "Other") + + def __unicode__(self): + return u"%s (%d\u00D7%d,'%s')" % \ + (self.type_string(), + self.width, self.height, self.mime_type) + + def __eq__(self, i): + return Image.__eq__(self, i) + + def build(self): + """Returns a binary string of ID3v2.2 frame data.""" + + try: + self.description.encode('latin-1') + text_encoding = 0 + except UnicodeEncodeError: + text_encoding = 1 + + return ID3v22Frame.FRAME.build( + Con.Container(frame_id='PIC', + data=self.FRAME_HEADER.build( + Con.Container(text_encoding=text_encoding, + format=self.format.encode('ascii'), + picture_type=self.pic_type, + description=self.description)) + self.data)) + + @classmethod + def converted(cls, image): + """Given an Image object, returns an ID3v22PicFrame object.""" + + return cls(data=image.data, + format={u"image/png": u"PNG", + u"image/jpeg": u"JPG", + u"image/jpg": u"JPG", + u"image/x-ms-bmp": u"BMP", + u"image/gif": u"GIF", + u"image/tiff": u"TIF"}.get(image.mime_type, + u"JPG"), + description=image.description, + pic_type={0: 3, 1: 4, 2: 5, 3: 6}.get(image.type, 0)) + + +class ID3v22Comment(MetaData): + """A complete ID3v2.2 comment.""" + + Frame = ID3v22Frame + TextFrame = ID3v22TextFrame + PictureFrame = ID3v22PicFrame + CommentFrame = ID3v22ComFrame + + TAG_HEADER = Con.Struct("id3v22_header", + Con.Const(Con.Bytes("file_id", 3), 'ID3'), + Con.Byte("version_major"), + Con.Byte("version_minor"), + Con.Embed(Con.BitStruct("flags", + Con.Flag("unsync"), + Con.Flag("compression"), + Con.Padding(6))), + Syncsafe32("length")) + + ATTRIBUTE_MAP = {'track_name': 'TT2', + 'track_number': 'TRK', + 'track_total': 'TRK', + 'album_name': 'TAL', + 'artist_name': 'TP1', + 'performer_name': 'TP2', + 'conductor_name': 'TP3', + 'composer_name': 'TCM', + 'media': 'TMT', + 'ISRC': 'TRC', + 'copyright': 'TCR', + 'publisher': 'TPB', + 'year': 'TYE', + 'date': 'TRD', + 'album_number': 'TPA', + 'album_total': 'TPA', + 'comment': 'COM'} + + INTEGER_ITEMS = ('TRK', 'TPA') + + KEY_ORDER = ('TT2', 'TAL', 'TRK', 'TPA', 'TP1', 'TP2', 'TCM', 'TP3', + 'TPB', 'TRC', 'TYE', 'TRD', None, 'COM', 'PIC') + + def __init__(self, frames): + """frame should be a list of ID3v2?Frame-compatible objects.""" + + self.__dict__["frames"] = {} # a frame_id->[frame list] mapping + + for frame in frames: + self.__dict__["frames"].setdefault(frame.id, []).append(frame) + + def __repr__(self): + return "ID3v22Comment(%s)" % (repr(self.__dict__["frames"])) + + def __comment_name__(self): + return u'ID3v2.2' + + def __comment_pairs__(self): + key_order = list(self.KEY_ORDER) + + def by_weight(keyval1, keyval2): + (key1, key2) = (keyval1[0], keyval2[0]) + + if (key1 in key_order): + order1 = key_order.index(key1) + else: + order1 = key_order.index(None) + + if (key2 in key_order): + order2 = key_order.index(key2) + else: + order2 = key_order.index(None) + + return cmp((order1, key1), (order2, key2)) + + pairs = [] + + for (key, values) in sorted(self.frames.items(), by_weight): + for value in values: + pairs.append((' ' + key, unicode(value))) + + return pairs + + def __unicode__(self): + comment_pairs = self.__comment_pairs__() + if (len(comment_pairs) > 0): + max_key_length = max([len(pair[0]) for pair in comment_pairs]) + line_template = u"%%(key)%(length)d.%(length)ds : %%(value)s" % \ + {"length": max_key_length} + + return unicode(os.linesep.join( + [u"%s Comment:" % (self.__comment_name__())] + \ + [line_template % {"key": key, "value": value} for + (key, value) in comment_pairs])) + else: + return u"" + + #if an attribute is updated (e.g. self.track_name) + #make sure to update the corresponding dict pair + def __setattr__(self, key, value): + if (key in self.ATTRIBUTE_MAP): + if (key == 'track_number'): + value = __number_pair__(value, self.track_total) + elif (key == 'track_total'): + value = __number_pair__(self.track_number, value) + elif (key == 'album_number'): + value = __number_pair__(value, self.album_total) + elif (key == 'album_total'): + value = __number_pair__(self.album_number, value) + + self.frames[self.ATTRIBUTE_MAP[key]] = [ + self.TextFrame.from_unicode(self.ATTRIBUTE_MAP[key], + unicode(value))] + elif (key in MetaData.__FIELDS__): + pass + else: + self.__dict__[key] = value + + def __getattr__(self, key): + if (key in self.ATTRIBUTE_MAP): + try: + frame = self.frames[self.ATTRIBUTE_MAP[key]][0] + if (key in ('track_number', 'album_number')): + return int(frame) + elif (key in ('track_total', 'album_total')): + return frame.total() + else: + return unicode(frame) + except KeyError: + if (key in MetaData.__INTEGER_FIELDS__): + return 0 + else: + return u"" + elif (key in MetaData.__FIELDS__): + return u"" + else: + raise AttributeError(key) + + def __delattr__(self, key): + if (key in self.ATTRIBUTE_MAP): + if (key == 'track_number'): + setattr(self, 'track_number', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self.frames[self.ATTRIBUTE_MAP[key]]) + elif (key == 'track_total'): + setattr(self, 'track_total', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self.frames[self.ATTRIBUTE_MAP[key]]) + elif (key == 'album_number'): + setattr(self, 'album_number', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self.frames[self.ATTRIBUTE_MAP[key]]) + elif (key == 'album_total'): + setattr(self, 'album_total', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self.frames[self.ATTRIBUTE_MAP[key]]) + elif (self.ATTRIBUTE_MAP[key] in self.frames): + del(self.frames[self.ATTRIBUTE_MAP[key]]) + elif (key in MetaData.__FIELDS__): + pass + else: + raise AttributeError(key) + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + image = self.PictureFrame.converted(image) + self.frames.setdefault('PIC', []).append(image) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + del(self.frames['PIC'][self['PIC'].index(image)]) + + def images(self): + """Returns a list of embedded Image objects.""" + + if ('PIC' in self.frames.keys()): + return self.frames['PIC'][:] + else: + return [] + + def __getitem__(self, key): + return self.frames[key] + + #this should always take a list of items, + #either unicode strings (for text fields) + #or something Frame-compatible (for everything else) + #or possibly both in one list + def __setitem__(self, key, values): + frames = [] + for value in values: + if (isinstance(value, unicode)): + frames.append(self.TextFrame.from_unicode(key, value)) + elif (isinstance(value, int)): + frames.append(self.TextFrame.from_unicode(key, unicode(value))) + elif (isinstance(value, self.Frame)): + frames.append(value) + + self.frames[key] = frames + + def __delitem__(self, key): + del(self.frames[key]) + + def len(self): + return len(self.frames) + + def keys(self): + return self.frames.keys() + + def values(self): + return self.frames.values() + + def items(self): + return self.frames.items() + + @classmethod + def parse(cls, stream): + """Given a file stream, returns an ID3v22Comment object.""" + + header = cls.TAG_HEADER.parse_stream(stream) + + #read in the whole tag + stream = cStringIO.StringIO(stream.read(header.length)) + + #read in a collection of parsed Frame containers + frames = [] + + while (stream.tell() < header.length): + try: + container = cls.Frame.FRAME.parse_stream(stream) + except Con.core.FieldError: + break + except Con.core.ArrayError: + break + + if (chr(0) in container.frame_id): + break + else: + try: + frames.append(cls.Frame.parse(container)) + except UnicodeDecodeError: + break + + return cls(frames) + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to an ID3v22Comment object.""" + + if ((metadata is None) or + (isinstance(metadata, cls) and + (cls.Frame is metadata.Frame))): + return metadata + + frames = [] + + for (field, key) in cls.ATTRIBUTE_MAP.items(): + value = getattr(metadata, field) + if (key not in cls.INTEGER_ITEMS): + if (len(value.strip()) > 0): + frames.append(cls.TextFrame.from_unicode(key, value)) + + frames.append(cls.TextFrame.from_unicode( + cls.INTEGER_ITEMS[0], + __number_pair__(metadata.track_number, + metadata.track_total))) + + if ((metadata.album_number != 0) or + (metadata.album_total != 0)): + frames.append(cls.TextFrame.from_unicode( + cls.INTEGER_ITEMS[1], + __number_pair__(metadata.album_number, + metadata.album_total))) + + for image in metadata.images(): + frames.append(cls.PictureFrame.converted(image)) + + if (hasattr(cls, 'ITUNES_COMPILATION')): + frames.append(cls.TextFrame.from_unicode( + cls.ITUNES_COMPILATION, u'1')) + + return cls(frames) + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + metadata = self.__class__.converted(metadata) + if (metadata is None): + return + + for (key, values) in metadata.frames.items(): + if ((key not in self.INTEGER_ITEMS) and + (len(values) > 0) and + (len(values[0]) > 0) and + (len(self.frames.get(key, [])) == 0)): + self.frames[key] = values + + for attr in ("track_number", "track_total", + "album_number", "album_total"): + if ((getattr(self, attr) == 0) and + (getattr(metadata, attr) != 0)): + setattr(self, attr, getattr(metadata, attr)) + + def build(self): + """Returns an ID3v2.2 comment as a binary string.""" + + subframes = "".join(["".join([value.build() for value in values]) + for values in self.frames.values()]) + + return self.TAG_HEADER.build( + Con.Container(file_id='ID3', + version_major=0x02, + version_minor=0x00, + unsync=False, + compression=False, + length=len(subframes))) + subframes + + @classmethod + def skip(cls, file): + """Seeks past an ID3v2 comment if found in the file stream. + + The stream must be seekable, obviously.""" + + if (file.read(3) == 'ID3'): + file.seek(0, 0) + #parse the header + h = cls.TAG_HEADER.parse_stream(file) + #seek to the end of its length + file.seek(h.length, 1) + #skip any null bytes after the ID3v2 tag + c = file.read(1) + while (c == '\x00'): + c = file.read(1) + file.seek(-1, 1) + else: + try: + file.seek(-3, 1) + except IOError: + pass + + @classmethod + def read_id3v2_comment(cls, filename): + """Given a filename, returns an ID3v22Comment or a subclass. + + For example, if the file is ID3v2.3 tagged, + this returns an ID3v23Comment. + """ + + import cStringIO + + f = file(filename, "rb") + + try: + f.seek(0, 0) + try: + header = ID3v2Comment.TAG_HEADER.parse_stream(f) + except Con.ConstError: + raise UnsupportedID3v2Version() + if (header.version_major == 0x04): + comment_class = ID3v24Comment + elif (header.version_major == 0x03): + comment_class = ID3v23Comment + elif (header.version_major == 0x02): + comment_class = ID3v22Comment + else: + raise UnsupportedID3v2Version() + + f.seek(0, 0) + return comment_class.parse(f) + finally: + f.close() + + +####################### +#ID3v2.3 +####################### + + +class ID3v23Frame(ID3v22Frame): + """A container for individual ID3v2.3 frames.""" + + FRAME = Con.Struct("id3v23_frame", + Con.Bytes("frame_id", 4), + Con.UBInt32("size"), + Con.Embed(Con.BitStruct("flags", + Con.Flag('tag_alter'), + Con.Flag('file_alter'), + Con.Flag('read_only'), + Con.Padding(5), + Con.Flag('compression'), + Con.Flag('encryption'), + Con.Flag('grouping'), + Con.Padding(5))), + Con.String("data", length=lambda ctx: ctx["size"])) + + def build(self, data=None): + """Returns a binary string of ID3v2.3 frame data.""" + + if (data is None): + data = self.data + + return self.FRAME.build(Con.Container(frame_id=self.id, + size=len(data), + tag_alter=False, + file_alter=False, + read_only=False, + compression=False, + encryption=False, + grouping=False, + data=data)) + + @classmethod + def parse(cls, container): + """Returns the appropriate ID3v23Frame subclass from a Container. + + Container is parsed from ID3v23Frame.FRAME + and contains "frame_id and "data" attributes. + """ + + if (container.frame_id.startswith('T')): + try: + encoding_byte = ord(container.data[0]) + return ID3v23TextFrame(container.frame_id, + encoding_byte, + container.data[1:].decode( + ID3v23TextFrame.ENCODING[encoding_byte])) + except IndexError: + return ID3v23TextFrame(container.frame_id, + 0, + u"") + elif (container.frame_id == 'APIC'): + frame_data = cStringIO.StringIO(container.data) + pic_header = ID3v23PicFrame.FRAME_HEADER.parse_stream(frame_data) + return ID3v23PicFrame( + frame_data.read(), + pic_header.mime_type, + pic_header.description, + pic_header.picture_type) + elif (container.frame_id == 'COMM'): + com_data = cStringIO.StringIO(container.data) + try: + com = ID3v23ComFrame.COMMENT_HEADER.parse_stream(com_data) + return ID3v23ComFrame( + com.encoding, + com.language, + com.short_description, + com_data.read().decode( + ID3v23TextFrame.ENCODING[com.encoding], 'replace')) + except Con.core.ArrayError: + return cls(frame_id=container.frame_id, data=container.data) + except Con.core.FieldError: + return cls(frame_id=container.frame_id, data=container.data) + else: + return cls(frame_id=container.frame_id, + data=container.data) + + def __unicode__(self): + if (self.id.startswith('W')): + return self.data.rstrip(chr(0)).decode('iso-8859-1', 'replace') + else: + if (len(self.data) <= 20): + return unicode(self.data.encode('hex').upper()) + else: + return (unicode(self.data[0:19].encode('hex').upper()) + + u"\u2026") + + +class ID3v23TextFrame(ID3v23Frame): + """A container for individual ID3v2.3 text frames.""" + + ENCODING = {0x00: "latin-1", + 0x01: "ucs2"} + + TEXT_TYPE = True + + def __init__(self, frame_id, encoding, s): + """frame_id is a 4 byte ID, encoding is 0/1, s is a unicode string.""" + + self.id = frame_id + self.encoding = encoding + self.string = s + + def __len__(self): + return len(self.string) + + def __eq__(self, o): + return __attrib_equals__(["id", "encoding", "string"], self, o) + + def __unicode__(self): + return self.string + + def __int__(self): + try: + return int(re.findall(r'\d+', self.string)[0]) + except IndexError: + return 0 + + def total(self): + """If the frame is number/total formatted, return the "total" int.""" + + try: + return int(re.findall(r'\d+/(\d+)', self.string)[0]) + except IndexError: + return 0 + + @classmethod + def from_unicode(cls, frame_id, s): + """Builds an ID3v23TextFrame from 4 byte frame_id and unicode s.""" + + if (frame_id == 'COMM'): + return ID3v23ComFrame.from_unicode(s) + + for encoding in 0x00, 0x01: + try: + s.encode(cls.ENCODING[encoding]) + return ID3v23TextFrame(frame_id, encoding, s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.3 frame data.""" + + return ID3v23Frame.build( + self, + chr(self.encoding) + \ + self.string.encode(self.ENCODING[self.encoding], + 'replace')) + + +class ID3v23PicFrame(ID3v23Frame, Image): + """A container for ID3v2.3 image (APIC) frames.""" + + FRAME_HEADER = Con.Struct('apic_frame', + Con.Byte('text_encoding'), + Con.CString('mime_type'), + Con.Byte('picture_type'), + Con.Switch("description", + lambda ctx: ctx.text_encoding, + {0x00: Con.CString( + "s", encoding='latin-1'), + 0x01: UCS2CString("s")})) + + def __init__(self, data, mime_type, description, pic_type): + """Fields are as follows: + + data - a binary string of raw image data + mime_type - a unicode string + description - a unicode string + pic_type - an integer + """ + + ID3v23Frame.__init__(self, 'APIC', None) + + try: + img = Image.new(data, u'', 0) + except InvalidImage: + img = Image(data=data, mime_type=u'', + width=0, height=0, color_depth=0, color_count=0, + description=u'', type=0) + + self.pic_type = pic_type + Image.__init__(self, + data=data, + mime_type=mime_type, + width=img.width, + height=img.height, + color_depth=img.color_depth, + color_count=img.color_count, + description=description, + type={3: 0, 4: 1, 5: 2, 6: 3}.get(pic_type, 4)) + + def __eq__(self, i): + return Image.__eq__(self, i) + + def __unicode__(self): + return u"%s (%d\u00D7%d,'%s')" % \ + (self.type_string(), + self.width, self.height, self.mime_type) + + def build(self): + """Returns a binary string of ID3v2.3 frame data.""" + + try: + self.description.encode('latin-1') + text_encoding = 0 + except UnicodeEncodeError: + text_encoding = 1 + + return ID3v23Frame.build(self, + self.FRAME_HEADER.build( + Con.Container(text_encoding=text_encoding, + picture_type=self.pic_type, + mime_type=self.mime_type, + description=self.description)) + self.data) + + @classmethod + def converted(cls, image): + """Given an Image object, returns an ID3v23PicFrame object.""" + + return cls(data=image.data, + mime_type=image.mime_type, + description=image.description, + pic_type={0: 3, 1: 4, 2: 5, 3: 6}.get(image.type, 0)) + + +class ID3v23ComFrame(ID3v23TextFrame): + """A container for ID3v2.3 comment (COMM) frames.""" + + COMMENT_HEADER = ID3v22ComFrame.COMMENT_HEADER + + TEXT_TYPE = True + + def __init__(self, encoding, language, short_description, content): + """Fields are as follows: + + encoding - a text encoding integer 0/1 + language - a 3 byte language field + short_description - a unicode string + contenxt - a unicode string + """ + + self.encoding = encoding + self.language = language + self.short_description = short_description + self.content = content + self.id = 'COMM' + + def __len__(self): + return len(self.content) + + def __eq__(self, o): + return __attrib_equals__(["encoding", "language", + "short_description", "content"], self, o) + + def __unicode__(self): + return self.content + + def __int__(self): + return 0 + + @classmethod + def from_unicode(cls, s): + """Builds an ID3v23ComFrame from a unicode string.""" + + for encoding in 0x00, 0x01: + try: + s.encode(cls.ENCODING[encoding]) + return cls(encoding, 'eng', u'', s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.3 frame data.""" + + return ID3v23Frame.build( + self, + self.COMMENT_HEADER.build(Con.Container( + encoding=self.encoding, + language=self.language, + short_description=self.short_description)) + \ + self.content.encode(self.ENCODING[self.encoding], 'replace')) + + +class ID3v23Comment(ID3v22Comment): + """A complete ID3v2.3 comment.""" + + Frame = ID3v23Frame + TextFrame = ID3v23TextFrame + PictureFrame = ID3v23PicFrame + + TAG_HEADER = Con.Struct("id3v23_header", + Con.Const(Con.Bytes("file_id", 3), 'ID3'), + Con.Byte("version_major"), + Con.Byte("version_minor"), + Con.Embed(Con.BitStruct("flags", + Con.Flag("unsync"), + Con.Flag("extended"), + Con.Flag("experimental"), + Con.Flag("footer"), + Con.Padding(4))), + Syncsafe32("length")) + + ATTRIBUTE_MAP = {'track_name': 'TIT2', + 'track_number': 'TRCK', + 'track_total': 'TRCK', + 'album_name': 'TALB', + 'artist_name': 'TPE1', + 'performer_name': 'TPE2', + 'composer_name': 'TCOM', + 'conductor_name': 'TPE3', + 'media': 'TMED', + 'ISRC': 'TSRC', + 'copyright': 'TCOP', + 'publisher': 'TPUB', + 'year': 'TYER', + 'date': 'TRDA', + 'album_number': 'TPOS', + 'album_total': 'TPOS', + 'comment': 'COMM'} + + INTEGER_ITEMS = ('TRCK', 'TPOS') + + KEY_ORDER = ('TIT2', 'TALB', 'TRCK', 'TPOS', 'TPE1', 'TPE2', 'TCOM', + 'TPE3', 'TPUB', 'TSRC', 'TMED', 'TYER', 'TRDA', 'TCOP', + None, 'COMM', 'APIC') + + ITUNES_COMPILATION = 'TCMP' + + def __comment_name__(self): + return u'ID3v2.3' + + def __comment_pairs__(self): + key_order = list(self.KEY_ORDER) + + def by_weight(keyval1, keyval2): + (key1, key2) = (keyval1[0], keyval2[0]) + + if (key1 in key_order): + order1 = key_order.index(key1) + else: + order1 = key_order.index(None) + + if (key2 in key_order): + order2 = key_order.index(key2) + else: + order2 = key_order.index(None) + + return cmp((order1, key1), (order2, key2)) + + pairs = [] + + for (key, values) in sorted(self.frames.items(), by_weight): + for value in values: + pairs.append((' ' + key, unicode(value))) + + return pairs + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + image = self.PictureFrame.converted(image) + self.frames.setdefault('APIC', []).append(image) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + del(self.frames['APIC'][self['APIC'].index(image)]) + + def images(self): + """Returns a list of embedded Image objects.""" + + if ('APIC' in self.frames.keys()): + return self.frames['APIC'][:] + else: + return [] + + def build(self): + """Returns an ID3v2.3 comment as a binary string.""" + + subframes = "".join(["".join([value.build() for value in values]) + for values in self.frames.values()]) + + return self.TAG_HEADER.build( + Con.Container(file_id='ID3', + version_major=0x03, + version_minor=0x00, + unsync=False, + extended=False, + experimental=False, + footer=False, + length=len(subframes))) + subframes + + +####################### +#ID3v2.4 +####################### + + +class ID3v24Frame(ID3v23Frame): + """A container for individual ID3v2.4 frames.""" + + FRAME = Con.Struct("id3v24_frame", + Con.Bytes("frame_id", 4), + Syncsafe32("size"), + Con.Embed(Con.BitStruct("flags", + Con.Padding(1), + Con.Flag('tag_alter'), + Con.Flag('file_alter'), + Con.Flag('read_only'), + Con.Padding(5), + Con.Flag('grouping'), + Con.Padding(2), + Con.Flag('compression'), + Con.Flag('encryption'), + Con.Flag('unsync'), + Con.Flag('data_length'))), + Con.String("data", length=lambda ctx: ctx["size"])) + + def build(self, data=None): + """Returns a binary string of ID3v2.4 frame data.""" + + if (data is None): + data = self.data + + return self.FRAME.build(Con.Container(frame_id=self.id, + size=len(data), + tag_alter=False, + file_alter=False, + read_only=False, + compression=False, + encryption=False, + grouping=False, + unsync=False, + data_length=False, + data=data)) + + @classmethod + def parse(cls, container): + """Returns the appropriate ID3v24Frame subclass from a Container. + + Container is parsed from ID3v24Frame.FRAME + and contains "frame_id and "data" attributes. + """ + + if (container.frame_id.startswith('T')): + try: + encoding_byte = ord(container.data[0]) + return ID3v24TextFrame(container.frame_id, + encoding_byte, + container.data[1:].decode( + ID3v24TextFrame.ENCODING[encoding_byte])) + except IndexError: + return ID3v24TextFrame(container.frame_id, + 0, + u"") + elif (container.frame_id == 'APIC'): + frame_data = cStringIO.StringIO(container.data) + pic_header = ID3v24PicFrame.FRAME_HEADER.parse_stream(frame_data) + return ID3v24PicFrame( + frame_data.read(), + pic_header.mime_type, + pic_header.description, + pic_header.picture_type) + elif (container.frame_id == 'COMM'): + com_data = cStringIO.StringIO(container.data) + try: + com = ID3v24ComFrame.COMMENT_HEADER.parse_stream(com_data) + return ID3v24ComFrame( + com.encoding, + com.language, + com.short_description, + com_data.read().decode( + ID3v24TextFrame.ENCODING[com.encoding], 'replace')) + except Con.core.ArrayError: + return cls(frame_id=container.frame_id, data=container.data) + except Con.core.FieldError: + return cls(frame_id=container.frame_id, data=container.data) + else: + return cls(frame_id=container.frame_id, + data=container.data) + + def __unicode__(self): + if (self.id.startswith('W')): + return self.data.rstrip(chr(0)).decode('iso-8859-1', 'replace') + else: + if (len(self.data) <= 20): + return unicode(self.data.encode('hex').upper()) + else: + return (unicode(self.data[0:19].encode('hex').upper()) + + u"\u2026") + + +class ID3v24TextFrame(ID3v24Frame): + """A container for individual ID3v2.4 text frames.""" + + ENCODING = {0x00: "latin-1", + 0x01: "utf-16", + 0x02: "utf-16be", + 0x03: "utf-8"} + + TEXT_TYPE = True + + #encoding is an encoding byte + #s is a unicode string + def __init__(self, frame_id, encoding, s): + """frame_id is a 4 byte ID, encoding is 0-3, s is a unicode string.""" + + self.id = frame_id + self.encoding = encoding + self.string = s + + def __eq__(self, o): + return __attrib_equals__(["id", "encoding", "string"], self, o) + + def __len__(self): + return len(self.string) + + def __unicode__(self): + return self.string + + def __int__(self): + try: + return int(re.findall(r'\d+', self.string)[0]) + except IndexError: + return 0 + + def total(self): + """If the frame is number/total formatted, return the "total" int.""" + + try: + return int(re.findall(r'\d+/(\d+)', self.string)[0]) + except IndexError: + return 0 + + @classmethod + def from_unicode(cls, frame_id, s): + """Builds an ID3v24TextFrame from 4 byte frame_id and unicode s.""" + + if (frame_id == 'COMM'): + return ID3v24ComFrame.from_unicode(s) + + for encoding in 0x00, 0x03, 0x01, 0x02: + try: + s.encode(cls.ENCODING[encoding]) + return ID3v24TextFrame(frame_id, encoding, s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.4 frame data.""" + + return ID3v24Frame.build( + self, + chr(self.encoding) + \ + self.string.encode(self.ENCODING[self.encoding], + 'replace')) + + +class ID3v24PicFrame(ID3v24Frame, Image): + """A container for ID3v2.4 image (APIC) frames.""" + + FRAME_HEADER = Con.Struct('apic_frame', + Con.Byte('text_encoding'), + Con.CString('mime_type'), + Con.Byte('picture_type'), + Con.Switch("description", + lambda ctx: ctx.text_encoding, + {0x00: Con.CString( + "s", encoding='latin-1'), + 0x01: UTF16CString("s"), + 0x02: UTF16BECString("s"), + 0x03: Con.CString( + "s", encoding='utf-8')})) + + def __init__(self, data, mime_type, description, pic_type): + """Fields are as follows: + + data - a binary string of raw image data + mime_type - a unicode string + description - a unicode string + pic_type - an integer + """ + + ID3v24Frame.__init__(self, 'APIC', None) + + try: + img = Image.new(data, u'', 0) + except InvalidImage: + img = Image(data=data, mime_type=u'', + width=0, height=0, color_depth=0, color_count=0, + description=u'', type=0) + + self.pic_type = pic_type + Image.__init__(self, + data=data, + mime_type=mime_type, + width=img.width, + height=img.height, + color_depth=img.color_depth, + color_count=img.color_count, + description=description, + type={3: 0, 4: 1, 5: 2, 6: 3}.get(pic_type, 4)) + + def __eq__(self, i): + return Image.__eq__(self, i) + + def __unicode__(self): + return u"%s (%d\u00D7%d,'%s')" % \ + (self.type_string(), + self.width, self.height, self.mime_type) + + def build(self): + """Returns a binary string of ID3v2.4 frame data.""" + + try: + self.description.encode('latin-1') + text_encoding = 0 + except UnicodeEncodeError: + text_encoding = 1 + + return ID3v24Frame.build(self, + self.FRAME_HEADER.build( + Con.Container(text_encoding=text_encoding, + picture_type=self.pic_type, + mime_type=self.mime_type, + description=self.description)) + self.data) + + @classmethod + def converted(cls, image): + """Given an Image object, returns an ID3v24PicFrame object.""" + + return cls(data=image.data, + mime_type=image.mime_type, + description=image.description, + pic_type={0: 3, 1: 4, 2: 5, 3: 6}.get(image.type, 0)) + + +class ID3v24ComFrame(ID3v24TextFrame): + """A container for ID3v2.4 comment (COMM) frames.""" + + COMMENT_HEADER = Con.Struct( + "com_frame", + Con.Byte("encoding"), + Con.String("language", 3), + Con.Switch("short_description", + lambda ctx: ctx.encoding, + {0x00: Con.CString("s", encoding='latin-1'), + 0x01: UTF16CString("s"), + 0x02: UTF16BECString("s"), + 0x03: Con.CString("s", encoding='utf-8')})) + + TEXT_TYPE = True + + def __init__(self, encoding, language, short_description, content): + """Fields are as follows: + + encoding - a text encoding integer 0-3 + language - a 3 byte language field + short_description - a unicode string + contenxt - a unicode string + """ + + self.encoding = encoding + self.language = language + self.short_description = short_description + self.content = content + self.id = 'COMM' + + def __eq__(self, o): + return __attrib_equals__(["encoding", "language", + "short_description", "content"], self, o) + + def __unicode__(self): + return self.content + + def __int__(self): + return 0 + + @classmethod + def from_unicode(cls, s): + """Builds an ID3v24ComFrame from a unicode string.""" + + for encoding in 0x00, 0x03, 0x01, 0x02: + try: + s.encode(cls.ENCODING[encoding]) + return cls(encoding, 'eng', u'', s) + except UnicodeEncodeError: + continue + + def build(self): + """Returns a binary string of ID3v2.4 frame data.""" + + return ID3v24Frame.build( + self, + self.COMMENT_HEADER.build(Con.Container( + encoding=self.encoding, + language=self.language, + short_description=self.short_description)) + \ + self.content.encode(self.ENCODING[self.encoding], 'replace')) + + +class ID3v24Comment(ID3v23Comment): + """A complete ID3v2.4 comment.""" + + Frame = ID3v24Frame + TextFrame = ID3v24TextFrame + PictureFrame = ID3v24PicFrame + + def __repr__(self): + return "ID3v24Comment(%s)" % (repr(self.__dict__["frames"])) + + def __comment_name__(self): + return u'ID3v2.4' + + def build(self): + """Returns an ID3v2.4 comment as a binary string.""" + + subframes = "".join(["".join([value.build() for value in values]) + for values in self.frames.values()]) + + return self.TAG_HEADER.build( + Con.Container(file_id='ID3', + version_major=0x04, + version_minor=0x00, + unsync=False, + extended=False, + experimental=False, + footer=False, + length=len(subframes))) + subframes + + +ID3v2Comment = ID3v22Comment + +from __id3v1__ import * + + +class ID3CommentPair(MetaData): + """A pair of ID3v2/ID3v1 comments. + + These can be manipulated as a set.""" + + def __init__(self, id3v2_comment, id3v1_comment): + """id3v2 and id3v1 are ID3v2Comment and ID3v1Comment objects or None. + + Values in ID3v2 take precendence over ID3v1, if present.""" + + self.__dict__['id3v2'] = id3v2_comment + self.__dict__['id3v1'] = id3v1_comment + + if (self.id3v2 is not None): + base_comment = self.id3v2 + elif (self.id3v1 is not None): + base_comment = self.id3v1 + else: + raise ValueError(_(u"ID3v2 and ID3v1 cannot both be blank")) + + def __getattr__(self, key): + if (key in self.__INTEGER_FIELDS__): + if ((self.id3v2 is not None) and + (getattr(self.id3v2, key) != 0)): + return getattr(self.id3v2, key) + if (self.id3v1 is not None): + return getattr(self.id3v1, key) + else: + raise ValueError(_(u"ID3v2 and ID3v1 cannot both be blank")) + elif (key in self.__FIELDS__): + if ((self.id3v2 is not None) and + (getattr(self.id3v2, key) != u'')): + return getattr(self.id3v2, key) + if (self.id3v1 is not None): + return getattr(self.id3v1, key) + else: + raise ValueError(_(u"ID3v2 and ID3v1 cannot both be blank")) + else: + raise AttributeError(key) + + def __setattr__(self, key, value): + self.__dict__[key] = value + + if (self.id3v2 is not None): + setattr(self.id3v2, key, value) + if (self.id3v1 is not None): + setattr(self.id3v1, key, value) + + def __delattr__(self, key): + if (self.id3v2 is not None): + delattr(self.id3v2, key) + if (self.id3v1 is not None): + delattr(self.id3v1, key) + + @classmethod + def converted(cls, metadata, + id3v2_class=ID3v23Comment, + id3v1_class=ID3v1Comment): + """Takes a MetaData object and returns an ID3CommentPair object.""" + + if ((metadata is None) or (isinstance(metadata, ID3CommentPair))): + return metadata + + if (isinstance(metadata, ID3v2Comment)): + return ID3CommentPair(metadata, + id3v1_class.converted(metadata)) + else: + return ID3CommentPair( + id3v2_class.converted(metadata), + id3v1_class.converted(metadata)) + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + self.id3v2.merge(metadata) + self.id3v1.merge(metadata) + + def __unicode__(self): + if ((self.id3v2 is not None) and (self.id3v1 is not None)): + #both comments present + return unicode(self.id3v2) + \ + (os.linesep * 2) + \ + unicode(self.id3v1) + elif (self.id3v2 is not None): + #only ID3v2 + return unicode(self.id3v2) + elif (self.id3v1 is not None): + #only ID3v1 + return unicode(self.id3v1) + else: + return u'' + + #ImageMetaData passthroughs + def images(self): + """Returns a list of embedded Image objects.""" + + if (self.id3v2 is not None): + return self.id3v2.images() + else: + return [] + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + if (self.id3v2 is not None): + self.id3v2.add_image(image) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + if (self.id3v2 is not None): + self.id3v2.delete_image(image) + + @classmethod + def supports_images(cls): + """Returns True.""" + + return True diff --git a/Melodia/resources/audiotools/__id3v1__.py b/Melodia/resources/audiotools/__id3v1__.py new file mode 100644 index 0000000..1787519 --- /dev/null +++ b/Melodia/resources/audiotools/__id3v1__.py @@ -0,0 +1,190 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import MetaData, Con, os + + +class ID3v1Comment(MetaData, list): + """A complete ID3v1 tag.""" + + ID3v1 = Con.Struct("id3v1", + Con.Const(Con.String("identifier", 3), 'TAG'), + Con.String("song_title", 30), + Con.String("artist", 30), + Con.String("album", 30), + Con.String("year", 4), + Con.String("comment", 28), + Con.Padding(1), + Con.Byte("track_number"), + Con.Byte("genre")) + + ID3v1_NO_TRACKNUMBER = Con.Struct("id3v1_notracknumber", + Con.Const(Con.String("identifier", 3), 'TAG'), + Con.String("song_title", 30), + Con.String("artist", 30), + Con.String("album", 30), + Con.String("year", 4), + Con.String("comment", 30), + Con.Byte("genre")) + + ATTRIBUTES = ['track_name', + 'artist_name', + 'album_name', + 'year', + 'comment', + 'track_number'] + + @classmethod + def read_id3v1_comment(cls, mp3filename): + """Reads a ID3v1Comment data from an MP3 filename. + + Returns a (song title, artist, album, year, comment, track number) + tuple. + If no ID3v1 tag is present, returns a tuple with those fields blank. + All text is in unicode. + If track number is -1, the id3v1 comment could not be found. + """ + + mp3file = file(mp3filename, "rb") + try: + mp3file.seek(-128, 2) + try: + id3v1 = ID3v1Comment.ID3v1.parse(mp3file.read()) + except Con.adapters.PaddingError: + mp3file.seek(-128, 2) + id3v1 = ID3v1Comment.ID3v1_NO_TRACKNUMBER.parse(mp3file.read()) + id3v1.track_number = 0 + except Con.ConstError: + return tuple([u""] * 5 + [-1]) + + field_list = (id3v1.song_title, + id3v1.artist, + id3v1.album, + id3v1.year, + id3v1.comment) + + return tuple(map(lambda t: + t.rstrip('\x00').decode('ascii', 'replace'), + field_list) + [id3v1.track_number]) + finally: + mp3file.close() + + @classmethod + def build_id3v1(cls, song_title, artist, album, year, comment, + track_number): + """Turns fields into a complete ID3v1 binary tag string. + + All fields are unicode except for track_number, an int.""" + + def __s_pad__(s, length): + if (len(s) < length): + return s + chr(0) * (length - len(s)) + else: + s = s[0:length].rstrip() + return s + chr(0) * (length - len(s)) + + c = Con.Container() + c.identifier = 'TAG' + c.song_title = __s_pad__(song_title.encode('ascii', 'replace'), 30) + c.artist = __s_pad__(artist.encode('ascii', 'replace'), 30) + c.album = __s_pad__(album.encode('ascii', 'replace'), 30) + c.year = __s_pad__(year.encode('ascii', 'replace'), 4) + c.comment = __s_pad__(comment.encode('ascii', 'replace'), 28) + c.track_number = int(track_number) + c.genre = 0 + + return ID3v1Comment.ID3v1.build(c) + + def __init__(self, metadata): + """Initialized with a read_id3v1_comment tuple. + + Fields are (title,artist,album,year,comment,tracknum)""" + + list.__init__(self, metadata) + + @classmethod + def supports_images(cls): + """Returns False.""" + + return False + + #if an attribute is updated (e.g. self.track_name) + #make sure to update the corresponding list item + def __setattr__(self, key, value): + if (key in self.ATTRIBUTES): + if (key != 'track_number'): + self[self.ATTRIBUTES.index(key)] = value + else: + self[self.ATTRIBUTES.index(key)] = int(value) + elif (key in MetaData.__FIELDS__): + pass + else: + self.__dict__[key] = value + + def __delattr__(self, key): + if (key == 'track_number'): + setattr(self, key, 0) + elif (key in self.ATTRIBUTES): + setattr(self, key, u"") + + def __getattr__(self, key): + if (key in self.ATTRIBUTES): + return self[self.ATTRIBUTES.index(key)] + elif (key in MetaData.__INTEGER_FIELDS__): + return 0 + elif (key in MetaData.__FIELDS__): + return u"" + else: + raise AttributeError(key) + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to an ID3v1Comment object.""" + + if ((metadata is None) or (isinstance(metadata, ID3v1Comment))): + return metadata + + return ID3v1Comment((metadata.track_name, + metadata.artist_name, + metadata.album_name, + metadata.year, + metadata.comment, + int(metadata.track_number))) + + def __comment_name__(self): + return u'ID3v1' + + def __comment_pairs__(self): + return zip(('Title', 'Artist', 'Album', 'Year', 'Comment', 'Tracknum'), + self) + + def build_tag(self): + """Returns a binary string of this tag's data.""" + + return self.build_id3v1(self.track_name, + self.artist_name, + self.album_name, + self.year, + self.comment, + self.track_number) + + def images(self): + """Returns an empty list of Image objects.""" + + return [] diff --git a/Melodia/resources/audiotools/__image__.py b/Melodia/resources/audiotools/__image__.py new file mode 100644 index 0000000..ff756e8 --- /dev/null +++ b/Melodia/resources/audiotools/__image__.py @@ -0,0 +1,538 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import Con +import imghdr +import cStringIO +import gettext + +gettext.install("audiotools", unicode=True) + + +def __jpeg__(h, f): + if (h[0:3] == "FFD8FF".decode('hex')): + return 'jpeg' + else: + return None + + +imghdr.tests.append(__jpeg__) + + +def image_metrics(file_data): + """Returns an ImageMetrics subclass from a string of file data. + + Raises InvalidImage if there is an error parsing the file + or its type is unknown.""" + + header = imghdr.what(None, file_data) + + file = cStringIO.StringIO(file_data) + try: + if (header == 'jpeg'): + return __JPEG__.parse(file) + elif (header == 'png'): + return __PNG__.parse(file) + elif (header == 'gif'): + return __GIF__.parse(file) + elif (header == 'bmp'): + return __BMP__.parse(file) + elif (header == 'tiff'): + return __TIFF__.parse(file) + else: + raise InvalidImage(_(u'Unknown image type')) + finally: + file.close() + + +####################### +#JPEG +####################### + + +class ImageMetrics: + """A container for image data.""" + + def __init__(self, width, height, bits_per_pixel, color_count, mime_type): + """Fields are as follows: + + width - image width as an integer number of pixels + height - image height as an integer number of pixels + bits_per_pixel - the number of bits per pixel as an integer + color_count - for palette-based images, the total number of colors + mime_type - the image's MIME type, as a string + + All of the ImageMetrics subclasses implement these fields. + In addition, they all implement a parse() classmethod + used to parse binary string data and return something + ImageMetrics compatible. + """ + + self.width = width + self.height = height + self.bits_per_pixel = bits_per_pixel + self.color_count = color_count + self.mime_type = mime_type + + def __repr__(self): + return "ImageMetrics(%s,%s,%s,%s,%s)" % \ + (repr(self.width), + repr(self.height), + repr(self.bits_per_pixel), + repr(self.color_count), + repr(self.mime_type)) + + +class InvalidImage(Exception): + """Raised if an image cannot be parsed correctly.""" + + def __init__(self, err): + self.err = unicode(err) + + def __unicode__(self): + return self.err + + +class InvalidJPEG(InvalidImage): + """Raised if a JPEG cannot be parsed correctly.""" + + pass + + +class __JPEG__(ImageMetrics): + SEGMENT_HEADER = Con.Struct('segment_header', + Con.Const(Con.Byte('header'), 0xFF), + Con.Byte('type'), + Con.If( + lambda ctx: ctx['type'] not in (0xD8, 0xD9), + Con.UBInt16('length'))) + + APP0 = Con.Struct('JFIF_segment_marker', + Con.String('identifier', 5), + Con.Byte('major_version'), + Con.Byte('minor_version'), + Con.Byte('density_units'), + Con.UBInt16('x_density'), + Con.UBInt16('y_density'), + Con.Byte('thumbnail_width'), + Con.Byte('thumbnail_height')) + + SOF = Con.Struct('start_of_frame', + Con.Byte('data_precision'), + Con.UBInt16('image_height'), + Con.UBInt16('image_width'), + Con.Byte('components')) + + def __init__(self, width, height, bits_per_pixel): + ImageMetrics.__init__(self, width, height, bits_per_pixel, + 0, u'image/jpeg') + + @classmethod + def parse(cls, file): + try: + header = cls.SEGMENT_HEADER.parse_stream(file) + if (header.type != 0xD8): + raise InvalidJPEG(_(u'Invalid JPEG header')) + + segment = cls.SEGMENT_HEADER.parse_stream(file) + while (segment.type != 0xD9): + if (segment.type == 0xDA): + break + + if (segment.type in (0xC0, 0xC1, 0xC2, 0xC3, + 0xC5, 0XC5, 0xC6, 0xC7, + 0xC9, 0xCA, 0xCB, 0xCD, + 0xCE, 0xCF)): # start of frame + segment_data = cStringIO.StringIO( + file.read(segment.length - 2)) + frame0 = cls.SOF.parse_stream(segment_data) + segment_data.close() + + return __JPEG__(width=frame0.image_width, + height=frame0.image_height, + bits_per_pixel=(frame0.data_precision * + frame0.components)) + else: + file.seek(segment.length - 2, 1) + + segment = cls.SEGMENT_HEADER.parse_stream(file) + + raise InvalidJPEG(_(u'Start of frame not found')) + except Con.ConstError: + raise InvalidJPEG(_(u"Invalid JPEG segment marker at 0x%X") % \ + (file.tell())) + + +####################### +#PNG +####################### + + +class InvalidPNG(InvalidImage): + """Raised if a PNG cannot be parsed correctly.""" + + pass + + +class __PNG__(ImageMetrics): + HEADER = Con.Const(Con.String('header', 8), + '89504e470d0a1a0a'.decode('hex')) + CHUNK_HEADER = Con.Struct('chunk', + Con.UBInt32('length'), + Con.String('type', 4)) + CHUNK_FOOTER = Con.Struct('crc32', + Con.UBInt32('crc')) + + IHDR = Con.Struct('IHDR', + Con.UBInt32('width'), + Con.UBInt32('height'), + Con.Byte('bit_depth'), + Con.Byte('color_type'), + Con.Byte('compression_method'), + Con.Byte('filter_method'), + Con.Byte('interlace_method')) + + def __init__(self, width, height, bits_per_pixel, color_count): + ImageMetrics.__init__(self, width, height, bits_per_pixel, color_count, + u'image/png') + + @classmethod + def parse(cls, file): + ihdr = None + plte = None + + try: + header = cls.HEADER.parse_stream(file) + + chunk_header = cls.CHUNK_HEADER.parse_stream(file) + data = file.read(chunk_header.length) + chunk_footer = cls.CHUNK_FOOTER.parse_stream(file) + while (chunk_header.type != 'IEND'): + if (chunk_header.type == 'IHDR'): + ihdr = cls.IHDR.parse(data) + elif (chunk_header.type == 'PLTE'): + plte = data + + chunk_header = cls.CHUNK_HEADER.parse_stream(file) + data = file.read(chunk_header.length) + chunk_footer = cls.CHUNK_FOOTER.parse_stream(file) + + if (ihdr.color_type == 0): # grayscale + bits_per_pixel = ihdr.bit_depth + color_count = 0 + elif (ihdr.color_type == 2): # RGB + bits_per_pixel = ihdr.bit_depth * 3 + color_count = 0 + elif (ihdr.color_type == 3): # palette + bits_per_pixel = 8 + if ((len(plte) % 3) != 0): + raise InvalidPNG(_(u'Invalid PLTE chunk length')) + else: + color_count = len(plte) / 3 + elif (ihdr.color_type == 4): # grayscale + alpha + bits_per_pixel = ihdr.bit_depth * 2 + color_count = 0 + elif (ihdr.color_type == 6): # RGB + alpha + bits_per_pixel = ihdr.bit_depth * 4 + color_count = 0 + + return __PNG__(ihdr.width, ihdr.height, bits_per_pixel, + color_count) + except Con.ConstError: + raise InvalidPNG(_(u'Invalid PNG')) + + +####################### +#BMP +####################### + + +class InvalidBMP(InvalidImage): + """Raised if a BMP cannot be parsed correctly.""" + + pass + + +class __BMP__(ImageMetrics): + HEADER = Con.Struct('bmp_header', + Con.Const(Con.String('magic_number', 2), 'BM'), + Con.ULInt32('file_size'), + Con.ULInt16('reserved1'), + Con.ULInt16('reserved2'), + Con.ULInt32('bitmap_data_offset')) + + INFORMATION = Con.Struct('bmp_information', + Con.ULInt32('header_size'), + Con.ULInt32('width'), + Con.ULInt32('height'), + Con.ULInt16('color_planes'), + Con.ULInt16('bits_per_pixel'), + Con.ULInt32('compression_method'), + Con.ULInt32('image_size'), + Con.ULInt32('horizontal_resolution'), + Con.ULInt32('vertical_resolution'), + Con.ULInt32('colors_used'), + Con.ULInt32('important_colors_used')) + + def __init__(self, width, height, bits_per_pixel, color_count): + ImageMetrics.__init__(self, width, height, bits_per_pixel, color_count, + u'image/x-ms-bmp') + + @classmethod + def parse(cls, file): + try: + header = cls.HEADER.parse_stream(file) + information = cls.INFORMATION.parse_stream(file) + + return __BMP__(information.width, information.height, + information.bits_per_pixel, + information.colors_used) + + except Con.ConstError: + raise InvalidBMP(_(u'Invalid BMP')) + + +####################### +#GIF +####################### + + +class InvalidGIF(InvalidImage): + """Raised if a GIF cannot be parsed correctly.""" + + pass + + +class __GIF__(ImageMetrics): + HEADER = Con.Struct('header', + Con.Const(Con.String('gif', 3), 'GIF'), + Con.String('version', 3)) + + SCREEN_DESCRIPTOR = Con.Struct('logical_screen_descriptor', + Con.ULInt16('width'), + Con.ULInt16('height'), + Con.Embed( + Con.BitStruct('packed_fields', + Con.Flag('global_color_table'), + Con.Bits('color_resolution', 3), + Con.Flag('sort'), + Con.Bits('global_color_table_size', 3))), + Con.Byte('background_color_index'), + Con.Byte('pixel_aspect_ratio')) + + def __init__(self, width, height, color_count): + ImageMetrics.__init__(self, width, height, 8, color_count, + u'image/gif') + + @classmethod + def parse(cls, file): + try: + header = cls.HEADER.parse_stream(file) + descriptor = cls.SCREEN_DESCRIPTOR.parse_stream(file) + + return __GIF__(descriptor.width, descriptor.height, + 2 ** (descriptor.global_color_table_size + 1)) + except Con.ConstError: + raise InvalidGIF(_(u'Invalid GIF')) + + +####################### +#TIFF +####################### + + +class InvalidTIFF(InvalidImage): + """Raised if a TIFF cannot be parsed correctly.""" + + pass + + +class __TIFF__(ImageMetrics): + HEADER = Con.Struct('header', + Con.String('byte_order', 2), + Con.Switch('order', + lambda ctx: ctx['byte_order'], + {"II": Con.Embed( + Con.Struct('little_endian', + Con.Const(Con.ULInt16('version'), 42), + Con.ULInt32('offset'))), + "MM": Con.Embed( + Con.Struct('big_endian', + Con.Const(Con.UBInt16('version'), 42), + Con.UBInt32('offset')))})) + + L_IFD = Con.Struct('ifd', + Con.PrefixedArray( + length_field=Con.ULInt16('length'), + subcon=Con.Struct('tags', + Con.ULInt16('id'), + Con.ULInt16('type'), + Con.ULInt32('count'), + Con.ULInt32('offset'))), + Con.ULInt32('next')) + + B_IFD = Con.Struct('ifd', + Con.PrefixedArray( + length_field=Con.UBInt16('length'), + subcon=Con.Struct('tags', + Con.UBInt16('id'), + Con.UBInt16('type'), + Con.UBInt32('count'), + Con.UBInt32('offset'))), + Con.UBInt32('next')) + + def __init__(self, width, height, bits_per_pixel, color_count): + ImageMetrics.__init__(self, width, height, + bits_per_pixel, color_count, + u'image/tiff') + + @classmethod + def b_tag_value(cls, file, tag): + subtype = {1: Con.Byte("data"), + 2: Con.CString("data"), + 3: Con.UBInt16("data"), + 4: Con.UBInt32("data"), + 5: Con.Struct("data", + Con.UBInt32("high"), + Con.UBInt32("low"))}[tag.type] + + data = Con.StrictRepeater(tag.count, + subtype) + if ((tag.type != 2) and (data.sizeof() <= 4)): + return tag.offset + else: + file.seek(tag.offset, 0) + return data.parse_stream(file) + + @classmethod + def l_tag_value(cls, file, tag): + subtype = {1: Con.Byte("data"), + 2: Con.CString("data"), + 3: Con.ULInt16("data"), + 4: Con.ULInt32("data"), + 5: Con.Struct("data", + Con.ULInt32("high"), + Con.ULInt32("low"))}[tag.type] + + data = Con.StrictRepeater(tag.count, + subtype) + if ((tag.type != 2) and (data.sizeof() <= 4)): + return tag.offset + else: + file.seek(tag.offset, 0) + return data.parse_stream(file) + + @classmethod + def parse(cls, file): + width = 0 + height = 0 + bits_per_sample = 0 + color_count = 0 + + try: + header = cls.HEADER.parse_stream(file) + if (header.byte_order == 'II'): + IFD = cls.L_IFD + tag_value = cls.l_tag_value + elif (header.byte_order == 'MM'): + IFD = cls.B_IFD + tag_value = cls.b_tag_value + else: + raise InvalidTIFF(_(u'Invalid byte order')) + + file.seek(header.offset, 0) + + ifd = IFD.parse_stream(file) + + while (True): + for tag in ifd.tags: + if (tag.id == 0x0100): + width = tag_value(file, tag) + elif (tag.id == 0x0101): + height = tag_value(file, tag) + elif (tag.id == 0x0102): + try: + bits_per_sample = sum(tag_value(file, tag)) + except TypeError: + bits_per_sample = tag_value(file, tag) + elif (tag.id == 0x0140): + color_count = tag.count / 3 + else: + pass + + if (ifd.next == 0x00): + break + else: + file.seek(ifd.next, 0) + ifd = IFD.parse_stream(file) + + return __TIFF__(width, height, bits_per_sample, color_count) + except Con.ConstError: + raise InvalidTIFF(_(u'Invalid TIFF')) + + +def can_thumbnail(): + """Returns True if we have the capability to thumbnail images.""" + + try: + import Image as PIL_Image + return True + except ImportError: + return False + + +def thumbnail_formats(): + """Returns a list of available thumbnail image formats.""" + + import Image as PIL_Image + import cStringIO + + #performing a dummy save seeds PIL_Image.SAVE with possible save types + PIL_Image.new("RGB", (1, 1)).save(cStringIO.StringIO(), "bmp") + + return PIL_Image.SAVE.keys() + + +def thumbnail_image(image_data, width, height, format): + """Generates a new, smaller image from a larger one. + + image_data is a binary string. + width and height are the requested maximum values. + format as a binary string, such as 'JPEG'. + """ + + import cStringIO + import Image as PIL_Image + import ImageFile as PIL_ImageFile + + PIL_ImageFile.MAXBLOCK = 0x100000 + + img = PIL_Image.open(cStringIO.StringIO(image_data)).convert('RGB') + img.thumbnail((width, height), PIL_Image.ANTIALIAS) + output = cStringIO.StringIO() + + if (format.upper() == 'JPEG'): + #PIL's default JPEG save quality isn't too great + #so it's best to add a couple of optimizing parameters + #since this is a common case + img.save(output, 'JPEG', quality=90, optimize=True) + else: + img.save(output, format) + + return output.getvalue() diff --git a/Melodia/resources/audiotools/__init__.py b/Melodia/resources/audiotools/__init__.py new file mode 100644 index 0000000..7982de3 --- /dev/null +++ b/Melodia/resources/audiotools/__init__.py @@ -0,0 +1,4591 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 + +"""The core Python Audio Tools module.""" + +import sys + +if (sys.version_info < (2, 5, 0, 'final', 0)): + print >> sys.stderr, "*** Python 2.5.0 or better required" + sys.exit(1) + +from . import construct as Con +from . import pcm as pcm +import subprocess +import re +import cStringIO +import os +import os.path +import ConfigParser +import optparse +import struct +from itertools import izip +import gettext +import unicodedata +import cPickle + +gettext.install("audiotools", unicode=True) + + +class RawConfigParser(ConfigParser.RawConfigParser): + """Extends RawConfigParser to provide additional methods.""" + + def get_default(self, section, option, default): + """Returns a default if option is not found in section.""" + + try: + return self.get(section, option) + except ConfigParser.NoSectionError: + return default + except ConfigParser.NoOptionError: + return default + + def getboolean_default(self, section, option, default): + """Returns a default if option is not found in section.""" + + try: + return self.getboolean(section, option) + except ConfigParser.NoSectionError: + return default + except ConfigParser.NoOptionError: + return default + + def set_default(self, section, option, value): + try: + self.set(section, option, value) + except ConfigParser.NoSectionError: + self.add_section(section) + self.set(section, option, value) + + def getint_default(self, section, option, default): + """Returns a default int if option is not found in section.""" + + try: + return self.getint(section, option) + except ConfigParser.NoSectionError: + return default + except ConfigParser.NoOptionError: + return default + +config = RawConfigParser() +config.read([os.path.join("/etc", "audiotools.cfg"), + os.path.join(sys.prefix, "etc", "audiotools.cfg"), + os.path.expanduser('~/.audiotools.cfg')]) + +BUFFER_SIZE = 0x100000 + + +class __system_binaries__: + def __init__(self, config): + self.config = config + + def __getitem__(self, command): + try: + return self.config.get("Binaries", command) + except ConfigParser.NoSectionError: + return command + except ConfigParser.NoOptionError: + return command + + def can_execute(self, command): + if (os.sep in command): + return os.access(command, os.X_OK) + else: + for path in os.environ.get('PATH', os.defpath).split(os.pathsep): + if (os.access(os.path.join(path, command), os.X_OK)): + return True + return False + +BIN = __system_binaries__(config) + +DEFAULT_CDROM = config.get_default("System", "cdrom", "/dev/cdrom") + +FREEDB_SERVER = config.get_default("FreeDB", "server", "us.freedb.org") +FREEDB_PORT = config.getint_default("FreeDB", "port", 80) +MUSICBRAINZ_SERVER = config.get_default("MusicBrainz", "server", + "musicbrainz.org") +MUSICBRAINZ_PORT = config.getint_default("MusicBrainz", "port", 80) + +THUMBNAIL_FORMAT = config.get_default("Thumbnail", "format", "jpeg") +THUMBNAIL_SIZE = config.getint_default("Thumbnail", "size", 150) + +VERSION = "2.17" + +FILENAME_FORMAT = config.get_default( + "Filenames", "format", + '%(track_number)2.2d - %(track_name)s.%(suffix)s') + +FS_ENCODING = config.get_default("System", "fs_encoding", + sys.getfilesystemencoding()) +if (FS_ENCODING is None): + FS_ENCODING = 'UTF-8' + +IO_ENCODING = config.get_default("System", "io_encoding", "UTF-8") + +VERBOSITY_LEVELS = ("quiet", "normal", "debug") +DEFAULT_VERBOSITY = config.get_default("Defaults", "verbosity", "normal") +if (DEFAULT_VERBOSITY not in VERBOSITY_LEVELS): + DEFAULT_VERBOSITY = "normal" + +DEFAULT_TYPE = config.get_default("System", "default_type", "wav") + + +def __default_quality__(audio_type): + quality = DEFAULT_QUALITY.get(audio_type, "") + try: + if (quality not in TYPE_MAP[audio_type].COMPRESSION_MODES): + return TYPE_MAP[audio_type].DEFAULT_COMPRESSION + else: + return quality + except KeyError: + return "" + +try: + import cpucount + MAX_CPUS = cpucount.cpucount() +except ImportError: + MAX_CPUS = 1 + +if (config.has_option("System", "maximum_jobs")): + MAX_JOBS = config.getint_default("System", "maximum_jobs", 1) +else: + MAX_JOBS = MAX_CPUS + +BIG_ENDIAN = sys.byteorder == 'big' + + +def get_umask(): + """Returns the current file creation umask as an integer. + + This is XORed with creation bits integers when used with + os.open to create new files. For example: + + >>> fd = os.open(filename, os.WRONLY | os.O_CREAT, 0666 ^ get_umask()) + """ + + mask = os.umask(0) + os.umask(mask) + return mask + + +####################### +#Output Messaging +####################### + + +class OptionParser(optparse.OptionParser): + """Extends OptionParser to use IO_ENCODING as text encoding. + + This ensures the encoding remains consistent if --help + output is piped to a pager vs. sent to a tty. + """ + + def _get_encoding(self, file): + return IO_ENCODING + +OptionGroup = optparse.OptionGroup + + +def Messenger(executable, options): + """Returns a Messenger object based on set verbosity level in options.""" + + if (not hasattr(options, "verbosity")): + return VerboseMessenger(executable) + elif ((options.verbosity == 'normal') or + (options.verbosity == 'debug')): + return VerboseMessenger(executable) + else: + return SilentMessenger(executable) + +__ANSI_SEQUENCE__ = re.compile(u"\u001B\[[0-9;]+.") +__CHAR_WIDTHS__ = {"Na": 1, + "A": 1, + "W": 2, + "F": 2, + "N": 1, + "H": 1} + + +def str_width(s): + """Returns the width of unicode string s, in characters. + + This accounts for multi-code Unicode characters + as well as embedded ANSI sequences. + """ + + return sum( + [__CHAR_WIDTHS__.get(unicodedata.east_asian_width(char), 1) for char in + unicodedata.normalize('NFC', __ANSI_SEQUENCE__.sub(u"", s))]) + + +class display_unicode: + """A class for abstracting unicode string truncation. + + This is necessary because not all Unicode characters are + the same length when displayed onscreen. + """ + + def __init__(self, unicode_string): + self.__string__ = unicodedata.normalize( + 'NFC', + __ANSI_SEQUENCE__.sub(u"", unicode(unicode_string))) + self.__char_widths__ = tuple( + [__CHAR_WIDTHS__.get(unicodedata.east_asian_width(char), 1) + for char in self.__string__]) + + def __unicode__(self): + return self.__string__ + + def __len__(self): + return sum(self.__char_widths__) + + def __repr__(self): + return "display_unicode(%s)" % (repr(self.__string__)) + + def __add__(self, unicode_string): + return display_unicode(self.__string__ + unicode(unicode_string)) + + def head(self, display_characters): + """returns a display_unicode object truncated to the given length + + Characters at the end of the string are removed as needed.""" + + output_chars = [] + for (char, width) in zip(self.__string__, self.__char_widths__): + if (width <= display_characters): + output_chars.append(char) + display_characters -= width + else: + break + return display_unicode(u"".join(output_chars)) + + def tail(self, display_characters): + """returns a display_unicode object truncated to the given length + + Characters at the beginning of the string are removed as needed.""" + + output_chars = [] + for (char, width) in zip(reversed(self.__string__), + reversed(self.__char_widths__)): + if (width <= display_characters): + output_chars.append(char) + display_characters -= width + else: + break + + output_chars.reverse() + return display_unicode(u"".join(output_chars)) + + def split(self, display_characters): + """returns a tuple of display_unicode objects + + The first is up to 'display_characters' in length. + The second contains the remainder of the string. + """ + + head_chars = [] + tail_chars = [] + for (char, width) in zip(self.__string__, self.__char_widths__): + if (width <= display_characters): + head_chars.append(char) + display_characters -= width + else: + tail_chars.append(char) + display_characters = -1 + + return (display_unicode(u"".join(head_chars)), + display_unicode(u"".join(tail_chars))) + + +class __MessengerRow__: + def __init__(self): + self.strings = [] # a list of unicode strings + self.alignments = [] # a list of booleans + # False if left-aligned, True if right-aligned + self.total_lengths = [] # a list of total length integers, + # to be set at print-time + + def add_string(self, string, left_aligned): + self.strings.append(string) + self.alignments.append(left_aligned) + self.total_lengths.append(str_width(string)) + + def lengths(self): + return map(str_width, self.strings) + + def set_total_lengths(self, total_lengths): + self.total_lengths = total_lengths + + def __unicode__(self): + output_string = [] + for (string, right_aligned, length) in zip(self.strings, + self.alignments, + self.total_lengths): + if (str_width(string) < length): + if (not right_aligned): + output_string.append(string) + output_string.append(u" " * (length - str_width(string))) + else: + output_string.append(u" " * (length - str_width(string))) + output_string.append(string) + else: + output_string.append(string) + return u"".join(output_string) + + +class __DividerRow__: + def __init__(self, dividers): + self.dividers = dividers + self.total_lengths = [] + + def lengths(self): + return [1 for x in self.dividers] + + def set_total_lengths(self, total_lengths): + self.total_lengths = total_lengths + + def __unicode__(self): + return u"".join([divider * length for (divider, length) in + zip(self.dividers, self.total_lengths)]) + + +class VerboseMessenger: + """This class is for displaying formatted output in a consistent way. + + It performs proper unicode string encoding based on IO_ENCODING, + but can also display tabular data and ANSI-escaped data + with less effort. + """ + + #a set of ANSI SGR codes + RESET = 0 + BOLD = 1 + FAINT = 2 + ITALIC = 3 + UNDERLINE = 4 + BLINK_SLOW = 5 + BLINK_FAST = 6 + REVERSE = 7 + STRIKEOUT = 9 + FG_BLACK = 30 + FG_RED = 31 + FG_GREEN = 32 + FG_YELLOW = 33 + FG_BLUE = 34 + FG_MAGENTA = 35 + FG_CYAN = 36 + FG_WHITE = 37 + BG_BLACK = 40 + BG_RED = 41 + BG_GREEN = 42 + BG_YELLOW = 43 + BG_BLUE = 44 + BG_MAGENTA = 45 + BG_CYAN = 46 + BG_WHITE = 47 + + def __init__(self, executable): + """executable is a plain string of what script is being run. + + This is typically for use by the usage() method.""" + + self.executable = executable + self.output_msg_rows = [] # a list of __MessengerRow__ objects + + def output(self, s): + """Displays an output message unicode string to stdout. + + This appends a newline to that message.""" + + sys.stdout.write(s.encode(IO_ENCODING, 'replace')) + sys.stdout.write(os.linesep) + + def partial_output(self, s): + """Displays a partial output message unicode string to stdout. + + This flushes output so that message is displayed""" + + sys.stdout.write(s.encode(IO_ENCODING, 'replace')) + sys.stdout.flush() + + def new_row(self): + """Sets up a new tabbed row for outputting aligned text. + + This must be called prior to calling output_column().""" + + self.output_msg_rows.append(__MessengerRow__()) + + def blank_row(self): + """Generates a completely blank row of aligned text. + + This cannot be the first row of aligned text.""" + + if (len(self.output_msg_rows) == 0): + raise ValueError("first output row cannot be blank") + else: + self.new_row() + for i in xrange(len(self.output_msg_rows[0].lengths())): + self.output_column(u"") + + def divider_row(self, dividers): + """Adds a row of unicode divider characters. + + There should be one character in dividers per output column. + For example: + >>> m = VerboseMessenger("audiotools") + >>> m.new_row() + >>> m.output_column(u'Foo') + >>> m.output_column(u' ') + >>> m.output_column(u'Bar') + >>> m.divider_row([u'-',u' ',u'-']) + >>> m.output_rows() + Foo Bar + --- --- + + """ + + self.output_msg_rows.append(__DividerRow__(dividers)) + + def output_column(self, string, right_aligned=False): + """Adds a column of aligned unicode data.""" + + if (len(self.output_msg_rows) > 0): + self.output_msg_rows[-1].add_string(string, right_aligned) + else: + raise ValueError( + "you must perform \"new_row\" before adding columns") + + def output_rows(self): + """Outputs all of our accumulated output rows as aligned output. + + This operates by calling our output() method. + Therefore, subclasses that have overridden output() to noops + (silent messengers) will also have silent output_rows() methods. + """ + + lengths = [row.lengths() for row in self.output_msg_rows] + if (len(lengths) == 0): + raise ValueError("you must generate at least one output row") + if (len(set(map(len, lengths))) != 1): + raise ValueError("all output rows must be the same length") + + max_lengths = [] + for i in xrange(len(lengths[0])): + max_lengths.append(max([length[i] for length in lengths])) + + for row in self.output_msg_rows: + row.set_total_lengths(max_lengths) + + for row in self.output_msg_rows: + self.output(unicode(row)) + self.output_msg_rows = [] + + def info(self, s): + """Displays an informative message unicode string to stderr. + + This appends a newline to that message.""" + + sys.stderr.write(s.encode(IO_ENCODING, 'replace')) + sys.stderr.write(os.linesep) + + def info_rows(self): + """Outputs all of our accumulated output rows as aligned info. + + This operates by calling our info() method. + Therefore, subclasses that have overridden info() to noops + (silent messengers) will also have silent info_rows() methods. + """ + + lengths = [row.lengths() for row in self.output_msg_rows] + if (len(lengths) == 0): + raise ValueError("you must generate at least one output row") + if (len(set(map(len, lengths))) != 1): + raise ValueError("all output rows must be the same length") + + max_lengths = [] + for i in xrange(len(lengths[0])): + max_lengths.append(max([length[i] for length in lengths])) + + for row in self.output_msg_rows: + row.set_total_lengths(max_lengths) + + for row in self.output_msg_rows: + self.info(unicode(row)) + self.output_msg_rows = [] + + def partial_info(self, s): + """Displays a partial informative message unicode string to stdout. + + This flushes output so that message is displayed""" + + sys.stderr.write(s.encode(IO_ENCODING, 'replace')) + sys.stderr.flush() + + #what's the difference between output() and info() ? + #output() is for a program's primary data + #info() is for incidental information + #for example, trackinfo(1) should use output() for what it displays + #since that output is its primary function + #but track2track should use info() for its lines of progress + #since its primary function is converting audio + #and tty output is purely incidental + + def error(self, s): + """Displays an error message unicode string to stderr. + + This appends a newline to that message.""" + + sys.stderr.write("*** Error: ") + sys.stderr.write(s.encode(IO_ENCODING, 'replace')) + sys.stderr.write(os.linesep) + + def os_error(self, oserror): + """Displays an properly formatted OSError exception to stderr. + + This appends a newline to that message.""" + + self.error(u"[Errno %d] %s: '%s'" % \ + (oserror.errno, + oserror.strerror.decode('utf-8', 'replace'), + self.filename(oserror.filename))) + + def warning(self, s): + """Displays a warning message unicode string to stderr. + + This appends a newline to that message.""" + + sys.stderr.write("*** Warning: ") + sys.stderr.write(s.encode(IO_ENCODING, 'replace')) + sys.stderr.write(os.linesep) + + def usage(self, s): + """Displays the program's usage unicode string to stderr. + + This appends a newline to that message.""" + + sys.stderr.write("*** Usage: ") + sys.stderr.write(self.executable.decode('ascii')) + sys.stderr.write(" ") + sys.stderr.write(s.encode(IO_ENCODING, 'replace')) + sys.stderr.write(os.linesep) + + def filename(self, s): + """Decodes a filename string to unicode. + + This uses the system's encoding to perform translation.""" + + return s.decode(FS_ENCODING, 'replace') + + def ansi(self, s, codes): + """Generates an ANSI code as a unicode string. + + Takes a unicode string to be escaped + and a list of ANSI SGR codes. + Returns an ANSI-escaped unicode terminal string + with those codes activated followed by the unescaped code + if the Messenger's stdout is to a tty terminal. + Otherwise, the string is returned unmodified. + + For example: + >>> VerboseMessenger("audiotools").ansi(u"foo", + ... [VerboseMessenger.BOLD]) + u'\\x1b[1mfoo\\x1b[0m' + """ + + if (sys.stdout.isatty()): + return u"\u001B[%sm%s\u001B[0m" % \ + (";".join(map(unicode, codes)), s) + else: + return s + + def ansi_clearline(self): + """Generates a set of clear line ANSI escape codes to stdout. + + This works only if stdout is a tty. Otherwise, it does nothing. + For example: + >>> msg = VerboseMessenger("audiotools") + >>> msg.partial_output(u"working") + >>> time.sleep(1) + >>> msg.ansi_clearline() + >>> msg.output(u"done") + """ + + if (sys.stdout.isatty()): + sys.stdout.write(( + # move cursor to column 0 + u"\u001B[0G" + + # clear everything after cursor + u"\u001B[0K").encode(IO_ENCODING)) + sys.stdout.flush() + + def ansi_uplines(self, lines): + """Moves the cursor up by the given number of lines.""" + + if (sys.stdout.isatty()): + sys.stdout.write(u"\u001B[%dA" % (lines)) + sys.stdout.flush() + + def ansi_cleardown(self): + """Clears the remainder of the screen from the cursor downward.""" + + if (sys.stdout.isatty()): + sys.stdout.write(u"\u001B[0J") + sys.stdout.flush() + + def ansi_err(self, s, codes): + """Generates an ANSI code as a unicode string. + + Takes a unicode string to be escaped + and a list of ANSI SGR codes. + Returns an ANSI-escaped unicode terminal string + with those codes activated followed by the unescapde code + if the Messenger's stderr is to a tty terminal. + Otherwise, the string is returned unmodified.""" + + if (sys.stderr.isatty()): + return u"\u001B[%sm%s\u001B[0m" % \ + (";".join(map(unicode, codes)), s) + else: + return s + + def terminal_size(self, fd): + """returns the current terminal size as (height, width)""" + + import fcntl + import termios + import struct + + #this isn't all that portable, but will have to do + return struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')) + + +class SilentMessenger(VerboseMessenger): + def output(self, s): + """Performs no output, resulting in silence.""" + + pass + + def partial_output(self, s): + """Performs no output, resulting in silence.""" + + pass + + def warning(self, s): + """Performs no output, resulting in silence.""" + + pass + + def info(self, s): + """Performs no output, resulting in silence.""" + + pass + + def partial_info(self, s): + """Performs no output, resulting in silence.""" + + pass + + def ansi_clearline(self): + """Performs no output, resulting in silence.""" + + pass + + def ansi_uplines(self, lines): + """Performs no output, resulting in silence.""" + + pass + + def ansi_cleardown(self): + """Performs no output, resulting in silence.""" + + pass + + +class ProgressDisplay: + """A class for displaying incremental progress updates to the screen.""" + + def __init__(self, messenger): + """Takes a Messenger object for displaying output.""" + + import time + + self.messenger = messenger + self.previous_output = [] + self.progress_rows = [] + self.last_output_time = 0.0 + self.time = time.time + + if (sys.stdout.isatty()): + self.add_row = self.add_row_tty + self.delete_row = self.delete_row_tty + self.update_row = self.update_row_tty + self.refresh = self.refresh_tty + self.clear = self.clear_tty + else: + self.add_row = self.add_row_nontty + self.delete_row = self.delete_row_nontty + self.update_row = self.update_row_nontty + self.refresh = self.refresh_nontty + self.clear = self.clear_nontty + + def add_row_tty(self, row_id, output_line): + """Adds a row of output to be displayed with progress indicated. + + row_id should be a unique identifier + output_line should be a unicode string""" + + new_row = ProgressRow(row_id, output_line) + if (None in self.progress_rows): + self.progress_rows[self.progress_rows.index(None)] = new_row + else: + self.progress_rows.append(new_row) + + def add_row_nontty(self, row_id, output_line): + """Adds a row of output to be displayed with progress indicated. + + row_id should be a unique identifier + output_line should be a unicode string""" + + pass + + def delete_row_tty(self, row_id): + """Removes the row with the given ID.""" + + row_index = None + for (i, row) in enumerate(self.progress_rows): + if ((row is not None) and (row.id == row_id)): + row_index = i + break + + if (row_index is not None): + self.progress_rows[row_index] = None + + def delete_row_nontty(self, row_id): + """Removes the row with the given ID.""" + + pass + + def update_row_tty(self, row_id, current, total): + """Updates the given row with a new current and total status.""" + + for row in self.progress_rows: + if ((row is not None) and (row.id == row_id)): + row.update(current, total) + self.refresh() + + def update_row_nontty(self, row_id, current, total): + """Updates the given row with a new current and total status.""" + + pass + + def refresh_tty(self): + """Refreshes the display of all status rows. + + This deletes and redraws output as necessary, + depending on whether output has changed since + previously displayed.""" + + now = self.time() + if ((now - self.last_output_time) < .25): + return + + screen_width = self.messenger.terminal_size(sys.stdout)[1] + new_output = [progress_row.unicode(screen_width) + for progress_row in self.progress_rows + if progress_row is not None] + if (new_output != self.previous_output): + self.clear() + for output in new_output: + self.messenger.output(output) + self.previous_output = new_output + self.last_output_time = now + + def refresh_nontty(self): + """Refreshes the display of all status rows. + + This deletes and redraws output as necessary, + depending on whether output has changed since + previously displayed.""" + + pass + + def clear_tty(self): + """Clears all previously displayed output.""" + + if (len(self.previous_output) > 0): + self.messenger.ansi_clearline() + self.messenger.ansi_uplines(len(self.previous_output)) + self.messenger.ansi_cleardown() + self.previous_output = [] + self.last_output_time = 0.0 + + def clear_nontty(self): + """Clears all previously displayed output.""" + + pass + + +class SingleProgressDisplay(ProgressDisplay): + """A specialized ProgressDisplay for handling a single line of output.""" + + def __init__(self, messenger, progress_text): + """Takes a Messenger class and unicode string for output.""" + + ProgressDisplay.__init__(self, messenger) + self.add_row(0, progress_text) + + def update(self, current, total): + """Updates the output line with new current and total values.""" + + self.update_row(0, current, total) + + +class ReplayGainProgressDisplay(ProgressDisplay): + """A specialized ProgressDisplay for handling ReplayGain application.""" + + def __init__(self, messenger, lossless_replay_gain): + """Takes a Messenger and whether ReplayGain is lossless or not.""" + + ProgressDisplay.__init__(self, messenger) + self.lossless_replay_gain = lossless_replay_gain + if (lossless_replay_gain): + self.add_row(0, _(u"Adding ReplayGain")) + else: + self.add_row(0, _(u"Applying ReplayGain")) + + if (sys.stdout.isatty()): + self.initial_message = self.initial_message_tty + self.update = self.update_tty + self.final_message = self.final_message_tty + self.replaygain_row = self.progress_rows[0] + else: + self.initial_message = self.initial_message_nontty + self.update = self.update_nontty + self.final_message = self.final_message_nontty + + def initial_message_tty(self): + """Displays a message that ReplayGain application has started.""" + + pass + + def initial_message_nontty(self): + """Displays a message that ReplayGain application has started.""" + + if (self.lossless_replay_gain): + self.messenger.info( + _(u"Adding ReplayGain metadata. This may take some time.")) + else: + self.messenger.info( + _(u"Applying ReplayGain. This may take some time.")) + + def update_tty(self, current, total): + """Updates the current status of ReplayGain application.""" + + self.replaygain_row.update(current, total) + self.refresh() + + def update_nontty(self, current, total): + """Updates the current status of ReplayGain application.""" + + pass + + def final_message_tty(self): + """Displays a message that ReplayGain application is complete.""" + + self.clear() + if (self.lossless_replay_gain): + self.messenger.info(_(u"ReplayGain added")) + else: + self.messenger.info(_(u"ReplayGain applied")) + + def final_message_nontty(self): + """Displays a message that ReplayGain application is complete.""" + + pass + + +class ProgressRow: + """A class for displaying a single row of progress output.""" + + def __init__(self, row_id, output_line): + """row_id is a unique identifier. output_line is a unicode string""" + + self.id = row_id + self.output_line = display_unicode(output_line) + self.current = 0 + self.total = 0 + + self.cached_split_point = -1 + self.cached_width = -1 + self.cached_unicode = u"" + self.ansi = VerboseMessenger("").ansi + + def update(self, current, total): + """updates our row with the current progress values""" + + self.current = current + self.total = total + + def unicode(self, width): + """returns a unicode string formatted to the given width""" + + try: + split_point = (width * self.current) / self.total + except ZeroDivisionError: + split_point = 0 + + if ((width == self.cached_width) and + (split_point == self.cached_split_point)): + return self.cached_unicode + else: + self.cached_width = width + self.cached_split_point = split_point + + if (len(self.output_line) < width): + output_line = self.output_line + else: + output_line = self.output_line.tail(width) + + output_line += u" " * (width - len(output_line)) + + (head, tail) = output_line.split(split_point) + output_line = (self.ansi(unicode(head), + [VerboseMessenger.FG_WHITE, + VerboseMessenger.BG_BLUE]) + + unicode(tail)) + + self.cached_unicode = output_line + return output_line + + +class UnsupportedFile(Exception): + """Raised by open() if the file can be opened but not identified.""" + + pass + + +class InvalidFile(Exception): + """Raised during initialization if the file is invalid in some way.""" + + pass + + +class InvalidFormat(Exception): + """Raised if an audio file cannot be created correctly from from_pcm() + due to having a PCM format unsupported by the output format.""" + + pass + + +class EncodingError(IOError): + """Raised if an audio file cannot be created correctly from from_pcm() + due to an error by the encoder.""" + + def __init__(self, error_message): + IOError.__init__(self) + self.error_message = error_message + + def __reduce__(self): + return (EncodingError, (self.error_message, )) + + def __str__(self): + if (isinstance(self.error_message, unicode)): + return self.error_message.encode('ascii', 'replace') + else: + return str(self.error_message) + + def __unicode__(self): + return unicode(self.error_message) + + +class UnsupportedChannelMask(EncodingError): + """Raised if the encoder does not support the file's channel mask.""" + + def __init__(self, filename, mask): + EncodingError.__init__( + self, + _(u"Unable to write \"%(target_filename)s\"" + + u" with channel assignment \"%(assignment)s\"") % + {"target_filename": VerboseMessenger(None).filename(filename), + "assignment": audiotools.ChannelMask(mask)}) + + +class UnsupportedChannelCount(EncodingError): + """Raised if the encoder does not support the file's channel count.""" + + def __init__(self, filename, count): + EncodingError.__init__( + self, + _(u"Unable to write \"%(target_filename)s\"" + + u" with %(channels)d channel input") % + {"target_filename": VerboseMessenger(None).filename(filename), + "channels": count}) + + +class UnsupportedBitsPerSample(EncodingError): + """Raised if the encoder does not support the file's bits-per-sample.""" + + def __init__(self, filename, bits_per_sample): + EncodingError.__init__( + self, + _(u"Unable to write \"%(target_filename)s\"" + + u" with %(bps)d bits per sample") % + {"target_filename": VerboseMessenger(None).filename(filename), + "bps": bits_per_sample}) + + +class DecodingError(IOError): + """Raised if the decoder exits with an error. + + Typically, a from_pcm() method will catch this error + and raise EncodingError.""" + + def __init__(self, error_message): + IOError.__init__(self) + self.error_message = error_message + + +def open(filename): + """Returns an AudioFile located at the given filename path. + + This works solely by examining the file's contents + after opening it. + Raises UnsupportedFile if it's not a file we support based on its headers. + Raises InvalidFile if the file appears to be something we support, + but has errors of some sort. + Raises IOError if some problem occurs attempting to open the file. + """ + + available_types = frozenset(TYPE_MAP.values()) + + f = file(filename, "rb") + try: + for audioclass in TYPE_MAP.values(): + f.seek(0, 0) + if (audioclass.is_type(f)): + return audioclass(filename) + else: + raise UnsupportedFile(filename) + + finally: + f.close() + + +#takes a list of filenames +#returns a list of AudioFile objects, sorted by track_number() +#any unsupported files are filtered out +def open_files(filename_list, sorted=True, messenger=None): + """Returns a list of AudioFile objects from a list of filenames. + + Files are sorted by album number then track number, by default. + Unsupported files are filtered out. + Error messages are sent to messenger, if given. + """ + + toreturn = [] + if (messenger is None): + messenger = Messenger("audiotools", None) + + for filename in filename_list: + try: + toreturn.append(open(filename)) + except UnsupportedFile: + pass + except IOError, err: + messenger.warning( + _(u"Unable to open \"%s\"" % (messenger.filename(filename)))) + except InvalidFile, err: + messenger.error(unicode(err)) + + if (sorted): + toreturn.sort(lambda x, y: cmp((x.album_number(), x.track_number()), + (y.album_number(), y.track_number()))) + return toreturn + + +#takes a root directory +#iterates recursively over any and all audio files in it +#optionally sorted by directory name and track_number() +#any unsupported files are filtered out +def open_directory(directory, sorted=True, messenger=None): + """Yields an AudioFile via a recursive search of directory. + + Files are sorted by album number/track number by default, + on a per-directory basis. + Any unsupported files are filtered out. + Error messages are sent to messenger, if given. + """ + + for (basedir, subdirs, filenames) in os.walk(directory): + if (sorted): + subdirs.sort() + for audiofile in open_files([os.path.join(basedir, filename) + for filename in filenames], + sorted=sorted, + messenger=messenger): + yield audiofile + + +def group_tracks(tracks): + """takes an iterable collection of tracks + + yields list of tracks grouped by album + where their album_name and album_number match, if possible""" + + collection = {} + for track in tracks: + metadata = track.get_metadata() + if (metadata is not None): + collection.setdefault((track.album_number(), + metadata.album_name), []).append(track) + else: + collection.setdefault((track.album_number(), + None), []).append(track) + for tracks in collection.values(): + yield tracks + + +class UnknownAudioType(Exception): + """Raised if filename_to_type finds no possibilities..""" + + def __init__(self, suffix): + self.suffix = suffix + + def error_msg(self, messenger): + messenger.error(_(u"Unsupported audio type \"%s\"") % (self.suffix)) + + +class AmbiguousAudioType(UnknownAudioType): + """Raised if filename_to_type finds more than one possibility.""" + + def __init__(self, suffix, type_list): + self.suffix = suffix + self.type_list = type_list + + def error_msg(self, messenger): + messenger.error(_(u"Ambiguious suffix type \"%s\"") % (self.suffix)) + messenger.info((_(u"Please use the -t option to specify %s") % + (u" or ".join([u"\"%s\"" % (t.NAME.decode('ascii')) + for t in self.type_list])))) + + +def filename_to_type(path): + """Given a path to a file, return its audio type based on suffix. + + For example: + >>> filename_to_type("/foo/file.flac") + + + Raises an UnknownAudioType exception if the type is unknown. + Raise AmbiguousAudioType exception if the type is ambiguous. + """ + + (path, ext) = os.path.splitext(path) + if (len(ext) > 0): + ext = ext[1:] # remove the "." + SUFFIX_MAP = {} + for audio_type in TYPE_MAP.values(): + SUFFIX_MAP.setdefault(audio_type.SUFFIX, []).append(audio_type) + if (ext in SUFFIX_MAP.keys()): + if (len(SUFFIX_MAP[ext]) == 1): + return SUFFIX_MAP[ext][0] + else: + raise AmbiguousAudioType(ext, SUFFIX_MAP[ext]) + else: + raise UnknownAudioType(ext) + else: + raise UnknownAudioType(ext) + + +class ChannelMask: + """An integer-like class that abstracts a PCMReader's channel assignments + + All channels in a FrameList will be in RIFF WAVE order + as a sensible convention. + But which channel corresponds to which speaker is decided by this mask. + For example, a 4 channel PCMReader with the channel mask 0x33 + corresponds to the bits 00110011 + reading those bits from right to left (least significant first) + the "front_left", "front_right", "back_left", "back_right" + speakers are set. + + Therefore, the PCMReader's 4 channel FrameLists are laid out as follows: + + channel 0 -> front_left + channel 1 -> front_right + channel 2 -> back_left + channel 3 -> back_right + + since the "front_center" and "low_frequency" bits are not set, + those channels are skipped in the returned FrameLists. + + Many formats store their channels internally in a different order. + Their PCMReaders will be expected to reorder channels + and set a ChannelMask matching this convention. + And, their from_pcm() functions will be expected to reverse the process. + + A ChannelMask of 0 is "undefined", + which means that channels aren't assigned to *any* speaker. + This is an ugly last resort for handling formats + where multi-channel assignments aren't properly defined. + In this case, a from_pcm() method is free to assign the undefined channels + any way it likes, and is under no obligation to keep them undefined + when passing back out to to_pcm() + """ + + SPEAKER_TO_MASK = {"front_left": 0x1, + "front_right": 0x2, + "front_center": 0x4, + "low_frequency": 0x8, + "back_left": 0x10, + "back_right": 0x20, + "front_left_of_center": 0x40, + "front_right_of_center": 0x80, + "back_center": 0x100, + "side_left": 0x200, + "side_right": 0x400, + "top_center": 0x800, + "top_front_left": 0x1000, + "top_front_center": 0x2000, + "top_front_right": 0x4000, + "top_back_left": 0x8000, + "top_back_center": 0x10000, + "top_back_right": 0x20000} + + MASK_TO_SPEAKER = dict(map(reversed, map(list, SPEAKER_TO_MASK.items()))) + + MASK_TO_NAME = {0x1: _(u"front left"), + 0x2: _(u"front right"), + 0x4: _(u"front center"), + 0x8: _(u"low frequency"), + 0x10: _(u"back left"), + 0x20: _(u"back right"), + 0x40: _(u"front right of center"), + 0x80: _(u"front left of center"), + 0x100: _(u"back center"), + 0x200: _(u"side left"), + 0x400: _(u"side right"), + 0x800: _(u"top center"), + 0x1000: _(u"top front left"), + 0x2000: _(u"top front center"), + 0x4000: _(u"top front right"), + 0x8000: _(u"top back left"), + 0x10000: _(u"top back center"), + 0x20000: _(u"top back right")} + + def __init__(self, mask): + """mask should be an integer channel mask value.""" + + mask = int(mask) + + for (speaker, speaker_mask) in self.SPEAKER_TO_MASK.items(): + setattr(self, speaker, (mask & speaker_mask) != 0) + + def __unicode__(self): + return u", ".join([self.MASK_TO_NAME[key] for key in + sorted(self.MASK_TO_SPEAKER.keys()) + if getattr(self, self.MASK_TO_SPEAKER[key])]) + + def __repr__(self): + return "ChannelMask(%s)" % \ + ",".join(["%s=%s" % (field, getattr(self, field)) + for field in self.SPEAKER_TO_MASK.keys() + if (getattr(self, field))]) + + def __int__(self): + import operator + + return reduce(operator.or_, + [self.SPEAKER_TO_MASK[field] for field in + self.SPEAKER_TO_MASK.keys() + if getattr(self, field)], + 0) + + def __eq__(self, v): + return int(self) == int(v) + + def __ne__(self, v): + return int(self) != int(v) + + def __len__(self): + return sum([1 for field in self.SPEAKER_TO_MASK.keys() + if getattr(self, field)]) + + def defined(self): + """Returns True if this ChannelMask is defined.""" + + return int(self) != 0 + + def undefined(self): + """Returns True if this ChannelMask is undefined.""" + + return int(self) == 0 + + def channels(self): + """Returns a list of speaker strings this mask contains. + + Returned in the order in which they should appear + in the PCM stream. + """ + + c = [] + for (mask, speaker) in sorted(self.MASK_TO_SPEAKER.items(), + lambda x, y: cmp(x[0], y[0])): + if (getattr(self, speaker)): + c.append(speaker) + + return c + + def index(self, channel_name): + """Returns the index of the given channel name within this mask. + + For example, given the mask 0xB (fL, fR, LFE, but no fC) + index("low_frequency") will return 2. + If the channel is not in this mask, raises ValueError.""" + + return self.channels().index(channel_name) + + @classmethod + def from_fields(cls, **fields): + """Given a set of channel arguments, returns a new ChannelMask. + + For example: + >>> ChannelMask.from_fields(front_left=True,front_right=True) + ChannelMask(front_right=True,front_left=True) + """ + + mask = cls(0) + + for (key, value) in fields.items(): + if (key in cls.SPEAKER_TO_MASK.keys()): + setattr(mask, key, bool(value)) + else: + raise KeyError(key) + + return mask + + @classmethod + def from_channels(cls, channel_count): + """Given a channel count, returns a new ChannelMask. + + This is only valid for channel counts 1 and 2. + All other values trigger a ValueError.""" + + if (channel_count == 2): + return cls(0x3) + elif (channel_count == 1): + return cls(0x4) + else: + raise ValueError("ambiguous channel assignment") + + +class PCMReader: + """A class that wraps around a file object and generates pcm.FrameLists""" + + def __init__(self, file, + sample_rate, channels, channel_mask, bits_per_sample, + process=None, signed=True, big_endian=False): + """Fields are as follows: + + file - a file-like object with read() and close() methods + sample_rate - an integer number of Hz + channels - an integer number of channels + channel_mask - an integer channel mask value + bits_per_sample - an integer number of bits per sample + process - an optional subprocess object + signed - True if the file's samples are signed integers + big_endian - True if the file's samples are stored big-endian + + The process, signed and big_endian arguments are optional. + PCMReader-compatible objects need only expose the + sample_rate, channels, channel_mask and bits_per_sample fields + along with the read() and close() methods. + """ + + self.file = file + self.sample_rate = sample_rate + self.channels = channels + self.channel_mask = channel_mask + self.bits_per_sample = bits_per_sample + self.process = process + self.signed = signed + self.big_endian = big_endian + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes". + + This is *not* guaranteed to read exactly that number of bytes. + It may return less (at the end of the stream, especially). + It may return more. + However, it must always return a non-empty FrameList until the + end of the PCM stream is reached. + + May raise IOError if unable to read the input file, + or ValueError if the input file has some sort of error. + """ + + bytes -= (bytes % (self.channels * self.bits_per_sample / 8)) + return pcm.FrameList(self.file.read(max( + bytes, self.channels * self.bits_per_sample / 8)), + self.channels, + self.bits_per_sample, + self.big_endian, + self.signed) + + def close(self): + """Closes the stream for reading. + + Any subprocess is waited for also so for proper cleanup. + May return DecodingError if a helper subprocess exits + with an error status.""" + + self.file.close() + + if (self.process is not None): + if (self.process.wait() != 0): + raise DecodingError(u"subprocess exited with error") + + +class PCMReaderError(PCMReader): + """A dummy PCMReader which automatically raises DecodingError. + + This is to be returned by an AudioFile's to_pcm() method + if some error occurs when initializing a decoder. + An encoder's from_pcm() method will then catch the DecodingError + at close()-time and propogate an EncodingError.""" + + def __init__(self, error_message, + sample_rate, channels, channel_mask, bits_per_sample): + PCMReader.__init__(self, None, sample_rate, channels, channel_mask, + bits_per_sample) + self.error_message = error_message + + def read(self, bytes): + """Always returns an empty framelist.""" + + return pcm.from_list([], + self.channels, + self.bits_per_sample, + True) + + def close(self): + """Always raises DecodingError.""" + + raise DecodingError(self.error_message) + + +def analyze_frames(pcmreader): + """Iterates over a PCMReader's analyze_frame() results.""" + + frame = pcmreader.analyze_frame() + while (frame is not None): + yield frame + frame = pcmreader.analyze_frame() + pcmreader.close() + + +def to_pcm_progress(audiofile, progress): + if (progress is None): + return audiofile.to_pcm() + else: + return PCMReaderProgress(audiofile.to_pcm(), + audiofile.total_frames(), + progress) + + +class PCMReaderProgress: + def __init__(self, pcmreader, total_frames, progress): + self.__read__ = pcmreader.read + self.__close__ = pcmreader.close + self.sample_rate = pcmreader.sample_rate + self.channels = pcmreader.channels + self.channel_mask = pcmreader.channel_mask + self.bits_per_sample = pcmreader.bits_per_sample + self.current_frames = 0 + self.total_frames = total_frames + self.progress = progress + + def read(self, bytes): + frame = self.__read__(bytes) + self.current_frames += frame.frames + self.progress(self.current_frames, self.total_frames) + return frame + + def close(self): + self.__close__() + + +class ReorderedPCMReader: + """A PCMReader wrapper which reorders its output channels.""" + + def __init__(self, pcmreader, channel_order): + """Initialized with a PCMReader and list of channel number integers. + + For example, to swap the channels of a stereo stream: + >>> ReorderedPCMReader(reader,[1,0]) + """ + + self.pcmreader = pcmreader + self.sample_rate = pcmreader.sample_rate + self.channels = pcmreader.channels + self.channel_mask = pcmreader.channel_mask + self.bits_per_sample = pcmreader.bits_per_sample + self.channel_order = channel_order + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + framelist = self.pcmreader.read(bytes) + + return pcm.from_channels([framelist.channel(channel) + for channel in self.channel_order]) + + def close(self): + """Closes the stream.""" + + self.pcmreader.close() + + +def transfer_data(from_function, to_function): + """Sends BUFFER_SIZE strings from from_function to to_function. + + This continues until an empty string is returned from from_function.""" + + try: + s = from_function(BUFFER_SIZE) + while (len(s) > 0): + to_function(s) + s = from_function(BUFFER_SIZE) + except IOError: + #this usually means a broken pipe, so we can only hope + #the data reader is closing down correctly + pass + + +def transfer_framelist_data(pcmreader, to_function, + signed=True, big_endian=False): + """Sends pcm.FrameLists from pcmreader to to_function. + + FrameLists are converted to strings using the signed and big_endian + arguments. This continues until an empty FrameLists is returned + from pcmreader. + """ + + f = pcmreader.read(BUFFER_SIZE) + while (len(f) > 0): + to_function(f.to_bytes(big_endian, signed)) + f = pcmreader.read(BUFFER_SIZE) + + +def threaded_transfer_framelist_data(pcmreader, to_function, + signed=True, big_endian=False): + """Sends pcm.FrameLists from pcmreader to to_function via threads. + + FrameLists are converted to strings using the signed and big_endian + arguments. This continues until an empty FrameLists is returned + from pcmreader. It operates by splitting reading and writing + into threads in the hopes that an intermittant reader + will not disrupt the writer. + """ + + import threading + import Queue + + def send_data(pcmreader, queue): + try: + s = pcmreader.read(BUFFER_SIZE) + while (len(s) > 0): + queue.put(s) + s = pcmreader.read(BUFFER_SIZE) + queue.put(None) + except (IOError, ValueError): + queue.put(None) + + data_queue = Queue.Queue(10) + #thread.start_new_thread(send_data,(from_function,data_queue)) + thread = threading.Thread(target=send_data, + args=(pcmreader, data_queue)) + thread.setDaemon(True) + thread.start() + s = data_queue.get() + while (s is not None): + to_function(s) + s = data_queue.get() + + +class __capped_stream_reader__: + #allows a maximum number of bytes "length" to + #be read from file-like object "stream" + #(used for reading IFF chunks, among others) + def __init__(self, stream, length): + self.stream = stream + self.remaining = length + + def read(self, bytes): + data = self.stream.read(min(bytes, self.remaining)) + self.remaining -= len(data) + return data + + def close(self): + self.stream.close() + + +def pcm_cmp(pcmreader1, pcmreader2): + """Returns True if the PCM data in pcmreader1 equals pcmreader2. + + The readers must be closed separately. + """ + + if ((pcmreader1.sample_rate != pcmreader2.sample_rate) or + (pcmreader1.channels != pcmreader2.channels) or + (pcmreader1.bits_per_sample != pcmreader2.bits_per_sample)): + return False + + reader1 = BufferedPCMReader(pcmreader1) + reader2 = BufferedPCMReader(pcmreader2) + + s1 = reader1.read(BUFFER_SIZE) + s2 = reader2.read(BUFFER_SIZE) + + while ((len(s1) > 0) and (len(s2) > 0)): + if (s1 != s2): + transfer_data(reader1.read, lambda x: x) + transfer_data(reader2.read, lambda x: x) + return False + else: + s1 = reader1.read(BUFFER_SIZE) + s2 = reader2.read(BUFFER_SIZE) + + return True + + +def stripped_pcm_cmp(pcmreader1, pcmreader2): + """Returns True if the stripped PCM data of pcmreader1 equals pcmreader2. + + This operates by reading each PCM streams entirely to memory, + performing strip() on their output and comparing checksums + (which permits us to store just one big blob of memory at a time). + """ + + if ((pcmreader1.sample_rate != pcmreader2.sample_rate) or + (pcmreader1.channels != pcmreader2.channels) or + (pcmreader1.bits_per_sample != pcmreader2.bits_per_sample)): + return False + + try: + from hashlib import sha1 as sha + except ImportError: + from sha import new as sha + + data = cStringIO.StringIO() + transfer_framelist_data(pcmreader1, data.write) + sum1 = sha(data.getvalue().strip(chr(0x00))) + + data = cStringIO.StringIO() + transfer_framelist_data(pcmreader2, data.write) + sum2 = sha(data.getvalue().strip(chr(0x00))) + + del(data) + + return sum1.digest() == sum2.digest() + + +def pcm_frame_cmp(pcmreader1, pcmreader2): + """Returns the PCM Frame number of the first mismatch. + + If the two streams match completely, returns None. + May raise IOError or ValueError if problems occur + when reading PCM streams.""" + + if ((pcmreader1.sample_rate != pcmreader2.sample_rate) or + (pcmreader1.channels != pcmreader2.channels) or + (pcmreader1.bits_per_sample != pcmreader2.bits_per_sample)): + return 0 + + if ((pcmreader1.channel_mask != 0) and + (pcmreader2.channel_mask != 0) and + (pcmreader1.channel_mask != pcmreader2.channel_mask)): + return 0 + + frame_number = 0 + reader1 = BufferedPCMReader(pcmreader1) + reader2 = BufferedPCMReader(pcmreader2) + + framelist1 = reader1.read(BUFFER_SIZE) + framelist2 = reader2.read(BUFFER_SIZE) + + while ((len(framelist1) > 0) and (len(framelist2) > 0)): + if (framelist1 != framelist2): + for i in xrange(min(framelist1.frames, framelist2.frames)): + if (framelist1.frame(i) != framelist2.frame(i)): + return frame_number + i + else: + return frame_number + i + else: + frame_number += framelist1.frames + framelist1 = reader1.read(BUFFER_SIZE) + framelist2 = reader2.read(BUFFER_SIZE) + + return None + + +class PCMCat(PCMReader): + """A PCMReader for concatenating several PCMReaders.""" + + def __init__(self, pcmreaders): + """pcmreaders is an iterator of PCMReader objects. + + Note that this currently does no error checking + to ensure reads have the same sample_rate, channels, + bits_per_sample or channel mask! + One must perform that check prior to building a PCMCat. + """ + + self.reader_queue = pcmreaders + + try: + self.first = self.reader_queue.next() + except StopIteration: + raise ValueError(_(u"You must have at least 1 PCMReader")) + + self.sample_rate = self.first.sample_rate + self.channels = self.first.channels + self.channel_mask = self.first.channel_mask + self.bits_per_sample = self.first.bits_per_sample + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + try: + s = self.first.read(bytes) + if (len(s) > 0): + return s + else: + self.first.close() + self.first = self.reader_queue.next() + return self.read(bytes) + except StopIteration: + return pcm.from_list([], + self.channels, + self.bits_per_sample, + True) + + def close(self): + """Closes the stream for reading.""" + + pass + + +class __buffer__: + def __init__(self, channels, bits_per_sample, framelists=None): + if (framelists is None): + self.buffer = [] + else: + self.buffer = framelists + self.end_frame = pcm.from_list([], channels, bits_per_sample, True) + self.bytes_per_sample = bits_per_sample / 8 + + #returns the length of the entire buffer in bytes + def __len__(self): + if (len(self.buffer) > 0): + return sum(map(len, self.buffer)) * self.bytes_per_sample + else: + return 0 + + def framelist(self): + import operator + + return reduce(operator.concat, self.buffer, self.end_frame) + + def push(self, s): + self.buffer.append(s) + + def pop(self): + return self.buffer.pop(0) + + def unpop(self, s): + self.buffer.insert(0, s) + + +class BufferedPCMReader: + """A PCMReader which reads exact counts of bytes.""" + + def __init__(self, pcmreader): + """pcmreader is a regular PCMReader object.""" + + self.pcmreader = pcmreader + self.sample_rate = pcmreader.sample_rate + self.channels = pcmreader.channels + self.channel_mask = pcmreader.channel_mask + self.bits_per_sample = pcmreader.bits_per_sample + self.buffer = __buffer__(self.channels, self.bits_per_sample) + self.reader_finished = False + + def close(self): + """Closes the sub-pcmreader and frees our internal buffer.""" + + del(self.buffer) + self.pcmreader.close() + + def read(self, bytes): + """Reads as close to "bytes" number of bytes without going over. + + This uses an internal buffer to ensure reading the proper + number of bytes on each call. + """ + + #fill our buffer to at least "bytes", possibly more + self.__fill__(bytes) + output_framelist = self.buffer.framelist() + (output, remainder) = output_framelist.split( + output_framelist.frame_count(bytes)) + self.buffer.buffer = [remainder] + return output + + #try to fill our internal buffer to at least "bytes" + def __fill__(self, bytes): + while ((len(self.buffer) < bytes) and + (not self.reader_finished)): + s = self.pcmreader.read(BUFFER_SIZE) + if (len(s) > 0): + self.buffer.push(s) + else: + self.reader_finished = True + + +class LimitedPCMReader: + def __init__(self, buffered_pcmreader, total_pcm_frames): + """buffered_pcmreader should be a BufferedPCMReader + + which ensures we won't pull more frames off the reader + than necessary upon calls to read()""" + + self.pcmreader = buffered_pcmreader + self.total_pcm_frames = total_pcm_frames + self.sample_rate = self.pcmreader.sample_rate + self.channels = self.pcmreader.channels + self.channel_mask = self.pcmreader.channel_mask + self.bits_per_sample = self.pcmreader.bits_per_sample + self.bytes_per_frame = self.channels * (self.bits_per_sample / 8) + + def read(self, bytes): + if (self.total_pcm_frames > 0): + frame = self.pcmreader.read( + min(bytes, + self.total_pcm_frames * self.bytes_per_frame)) + self.total_pcm_frames -= frame.frames + return frame + else: + return pcm.FrameList("", self.channels, self.bits_per_sample, + False, True) + + def close(self): + self.total_pcm_frames = 0 + + +def pcm_split(reader, pcm_lengths): + """Yields a PCMReader object from reader for each pcm_length (in frames). + + Each sub-reader is pcm_length PCM frames long with the same + channels, bits_per_sample, sample_rate and channel_mask + as the full stream. reader is closed upon completion. + """ + + import tempfile + + def chunk_sizes(total_size, chunk_size): + while (total_size > chunk_size): + total_size -= chunk_size + yield chunk_size + yield total_size + + full_data = BufferedPCMReader(reader) + + for byte_length in [i * reader.channels * reader.bits_per_sample / 8 + for i in pcm_lengths]: + if (byte_length > (BUFFER_SIZE * 10)): + #if the sub-file length is somewhat large, use a temporary file + sub_file = tempfile.TemporaryFile() + for size in chunk_sizes(byte_length, BUFFER_SIZE): + sub_file.write(full_data.read(size).to_bytes(False, True)) + sub_file.seek(0, 0) + else: + #if the sub-file length is very small, use StringIO + sub_file = cStringIO.StringIO( + full_data.read(byte_length).to_bytes(False, True)) + + yield PCMReader(sub_file, + reader.sample_rate, + reader.channels, + reader.channel_mask, + reader.bits_per_sample) + + full_data.close() + + +#going from many channels to less channels +class __channel_remover__: + def __init__(self, old_channel_mask, new_channel_mask): + old_channels = ChannelMask(old_channel_mask).channels() + self.channels_to_keep = [] + for new_channel in ChannelMask(new_channel_mask).channels(): + if (new_channel in old_channels): + self.channels_to_keep.append(old_channels.index(new_channel)) + + def convert(self, frame_list): + return pcm.from_channels( + [frame_list.channel(i) for i in self.channels_to_keep]) + + +class __channel_adder__: + def __init__(self, channels): + self.channels = channels + + def convert(self, frame_list): + current_channels = [frame_list.channel(i) + for i in xrange(frame_list.channels)] + while (len(current_channels) < self.channels): + current_channels.append(current_channels[0]) + + return pcm.from_channels(current_channels) + + +class __stereo_to_mono__: + def __init__(self): + pass + + def convert(self, frame_list): + return pcm.from_list( + [(l + r) / 2 for l, r in izip(frame_list.channel(0), + frame_list.channel(1))], + 1, frame_list.bits_per_sample, True) + + +#going from many channels to 2 +class __downmixer__: + def __init__(self, old_channel_mask, old_channel_count): + #grab the front_left, front_right, front_center, + #back_left and back_right channels from old frame_list, if possible + #missing channels are replaced with 0-sample channels + #excess channels are dropped entirely + #side_left and side_right may be substituted for back_left/right + #but back channels take precedence + + if (int(old_channel_mask) == 0): + #if the old_channel_mask is undefined + #invent a channel mask based on the channel count + old_channel_mask = {1: ChannelMask.from_fields(front_center=True), + 2: ChannelMask.from_fields(front_left=True, + front_right=True), + 3: ChannelMask.from_fields(front_left=True, + front_right=True, + front_center=True), + 4: ChannelMask.from_fields(front_left=True, + front_right=True, + back_left=True, + back_right=True), + 5: ChannelMask.from_fields(front_left=True, + front_right=True, + front_center=True, + back_left=True, + back_right=True)}[ + min(old_channel_count, 5)] + else: + old_channel_mask = ChannelMask(old_channel_mask) + + #channels_to_keep is an array of channel offsets + #where the index is: + #0 - front_left + #1 - front_right + #2 - front_center + #3 - back/side_left + #4 - back/side_right + #if -1, the channel is blank + self.channels_to_keep = [] + for channel in ["front_left", "front_right", "front_center"]: + if (getattr(old_channel_mask, channel)): + self.channels_to_keep.append(old_channel_mask.index(channel)) + else: + self.channels_to_keep.append(-1) + + if (old_channel_mask.back_left): + self.channels_to_keep.append(old_channel_mask.index("back_left")) + elif (old_channel_mask.side_left): + self.channels_to_keep.append(old_channel_mask.index("side_left")) + else: + self.channels_to_keep.append(-1) + + if (old_channel_mask.back_right): + self.channels_to_keep.append(old_channel_mask.index("back_right")) + elif (old_channel_mask.side_right): + self.channels_to_keep.append(old_channel_mask.index("side_right")) + else: + self.channels_to_keep.append(-1) + + self.has_empty_channels = (-1 in self.channels_to_keep) + + def convert(self, frame_list): + REAR_GAIN = 0.6 + CENTER_GAIN = 0.7 + + if (self.has_empty_channels): + empty_channel = pcm.from_list([0] * frame_list.frames, + 1, + frame_list.bits_per_sample, + True) + + if (self.channels_to_keep[0] != -1): + Lf = frame_list.channel(self.channels_to_keep[0]) + else: + Lf = empty_channel + + if (self.channels_to_keep[1] != -1): + Rf = frame_list.channel(self.channels_to_keep[1]) + else: + Rf = empty_channel + + if (self.channels_to_keep[2] != -1): + C = frame_list.channel(self.channels_to_keep[2]) + else: + C = empty_channel + + if (self.channels_to_keep[3] != -1): + Lr = frame_list.channel(self.channels_to_keep[3]) + else: + Lr = empty_channel + + if (self.channels_to_keep[4] != -1): + Rr = frame_list.channel(self.channels_to_keep[4]) + else: + Rr = empty_channel + + mono_rear = [0.7 * (Lr_i + Rr_i) for Lr_i, Rr_i in izip(Lr, Rr)] + + converter = lambda x: int(round(x)) + + left_channel = pcm.from_list( + [converter(Lf_i + + (REAR_GAIN * mono_rear_i) + + (CENTER_GAIN * C_i)) + for Lf_i, mono_rear_i, C_i in izip(Lf, mono_rear, C)], + 1, + frame_list.bits_per_sample, + True) + + right_channel = pcm.from_list( + [converter(Rf_i - + (REAR_GAIN * mono_rear_i) + + (CENTER_GAIN * C_i)) + for Rf_i, mono_rear_i, C_i in izip(Rf, mono_rear, C)], + 1, + frame_list.bits_per_sample, + True) + + return pcm.from_channels([left_channel, right_channel]) + + +#going from many channels to 1 +class __downmix_to_mono__: + def __init__(self, old_channel_mask, old_channel_count): + self.downmix = __downmixer__(old_channel_mask, old_channel_count) + self.mono = __stereo_to_mono__() + + def convert(self, frame_list): + return self.mono.convert(self.downmix.convert(frame_list)) + + +class __convert_sample_rate__: + def __init__(self, old_sample_rate, new_sample_rate, + channels, bits_per_sample): + from . import resample + + self.resampler = resample.Resampler( + channels, + float(new_sample_rate) / float(old_sample_rate), + 0) + self.unresampled = pcm.FloatFrameList([], channels) + self.bits_per_sample = bits_per_sample + + def convert(self, frame_list): + #FIXME - The floating-point output from resampler.process() + #should be normalized rather than just chopping off + #excessively high or low samples (above 1.0 or below -1.0) + #during conversion to PCM. + #Unfortunately, that'll require building a second pass + #into the conversion process which will complicate PCMConverter + #a lot. + (output, self.unresampled) = self.resampler.process( + self.unresampled + frame_list.to_float(), + (len(frame_list) == 0) and (len(self.unresampled) == 0)) + + return output.to_int(self.bits_per_sample) + + +class __convert_sample_rate_and_bits_per_sample__(__convert_sample_rate__): + def convert(self, frame_list): + (output, self.unresampled) = self.resampler.process( + self.unresampled + frame_list.to_float(), + (len(frame_list) == 0) and (len(self.unresampled) == 0)) + + return __add_dither__(output.to_int(self.bits_per_sample)) + + +class __convert_bits_per_sample__: + def __init__(self, bits_per_sample): + self.bits_per_sample = bits_per_sample + + def convert(self, frame_list): + return __add_dither__( + frame_list.to_float().to_int(self.bits_per_sample)) + + +def __add_dither__(frame_list): + if (frame_list.bits_per_sample >= 16): + random_bytes = map(ord, os.urandom((len(frame_list) / 8) + 1)) + white_noise = [(random_bytes[i / 8] & (1 << (i % 8))) >> (i % 8) + for i in xrange(len(frame_list))] + else: + white_noise = [0] * len(frame_list) + + return pcm.from_list([i ^ w for (i, w) in izip(frame_list, + white_noise)], + frame_list.channels, + frame_list.bits_per_sample, + True) + + +class PCMConverter: + """A PCMReader wrapper for converting attributes. + + For example, this can be used to alter sample_rate, bits_per_sample, + channel_mask, channel count, or any combination of those + attributes. It resamples, downsamples, etc. to achieve the proper + output. + """ + + def __init__(self, pcmreader, + sample_rate, + channels, + channel_mask, + bits_per_sample): + """Takes a PCMReader input and the attributes of the new stream.""" + + self.sample_rate = sample_rate + self.channels = channels + self.bits_per_sample = bits_per_sample + self.channel_mask = channel_mask + self.reader = pcmreader + + self.conversions = [] + if (self.reader.channels != self.channels): + if (self.channels == 1): + self.conversions.append( + __downmix_to_mono__(pcmreader.channel_mask, + pcmreader.channels)) + elif (self.channels == 2): + self.conversions.append( + __downmixer__(pcmreader.channel_mask, + pcmreader.channels)) + elif (self.channels < pcmreader.channels): + self.conversions.append( + __channel_remover__(pcmreader.channel_mask, + channel_mask)) + elif (self.channels > pcmreader.channels): + self.conversions.append( + __channel_adder__(self.channels)) + + if (self.reader.sample_rate != self.sample_rate): + #if we're converting sample rate and bits-per-sample + #at the same time, short-circuit the conversion to do both at once + #which can be sped up somewhat + if (self.reader.bits_per_sample != self.bits_per_sample): + self.conversions.append( + __convert_sample_rate_and_bits_per_sample__( + self.reader.sample_rate, + self.sample_rate, + self.channels, + self.bits_per_sample)) + else: + self.conversions.append( + __convert_sample_rate__( + self.reader.sample_rate, + self.sample_rate, + self.channels, + self.bits_per_sample)) + + else: + if (self.reader.bits_per_sample != self.bits_per_sample): + self.conversions.append( + __convert_bits_per_sample__( + self.bits_per_sample)) + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + frame_list = self.reader.read(bytes) + + for converter in self.conversions: + frame_list = converter.convert(frame_list) + + return frame_list + + def close(self): + """Closes the stream for reading.""" + + self.reader.close() + + +class ReplayGainReader: + """A PCMReader which applies ReplayGain on its output.""" + + def __init__(self, pcmreader, replaygain, peak): + """Fields are: + + pcmreader - a PCMReader object + replaygain - a floating point dB value + peak - the maximum absolute value PCM sample, as a float + + The latter two are typically stored with the file, + split into album gain and track gain pairs + which the user can apply based on preference. + """ + + self.reader = pcmreader + self.sample_rate = pcmreader.sample_rate + self.channels = pcmreader.channels + self.channel_mask = pcmreader.channel_mask + self.bits_per_sample = pcmreader.bits_per_sample + + self.replaygain = replaygain + self.peak = peak + self.bytes_per_sample = self.bits_per_sample / 8 + self.multiplier = 10 ** (replaygain / 20) + + #if we're increasing the volume (multipler is positive) + #and that increases the peak beyond 1.0 (which causes clipping) + #reduce the multiplier so that the peak doesn't go beyond 1.0 + if ((self.multiplier * self.peak) > 1.0): + self.multiplier = 1.0 / self.peak + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + multiplier = self.multiplier + samples = self.reader.read(bytes) + + if (self.bits_per_sample >= 16): + random_bytes = map(ord, os.urandom((len(samples) / 8) + 1)) + white_noise = [(random_bytes[i / 8] & (1 << (i % 8))) >> (i % 8) + for i in xrange(len(samples))] + else: + white_noise = [0] * len(samples) + + return pcm.from_list( + [(int(round(s * multiplier)) ^ w) for (s, w) in + izip(samples, white_noise)], + samples.channels, + samples.bits_per_sample, + True) + + def close(self): + """Closes the stream for reading.""" + + self.reader.close() + + +def applicable_replay_gain(tracks): + """Returns True if ReplayGain can be applied to a list of AudioFiles. + + This checks their sample rate and channel count to determine + applicability.""" + + sample_rates = set([track.sample_rate() for track in tracks]) + if ((len(sample_rates) > 1) or + (list(sample_rates)[0] not in (48000, 44100, 32000, 24000, 22050, + 16000, 12000, 11025, 8000, + 18900, 37800, 56000, 64000, + 88200, 96000, 112000, 128000, + 144000, 176400, 192000))): + return False + + channels = set([track.channels() for track in tracks]) + if ((len(channels) > 1) or + (list(channels)[0] not in (1, 2))): + return False + + return True + + +def calculate_replay_gain(tracks, progress=None): + """Yields (track, track_gain, track_peak, album_gain, album_peak) + for each AudioFile in the list of tracks. + + Raises ValueError if a problem occurs during calculation.""" + + from . import replaygain as replaygain + + sample_rate = set([track.sample_rate() for track in tracks]) + if (len(sample_rate) != 1): + raise ValueError(("at least one track is required " + + "and all must have the same sample rate")) + total_frames = sum([track.total_frames() for track in tracks]) + processed_frames = 0 + + rg = replaygain.ReplayGain(list(sample_rate)[0]) + gains = [] + for track in tracks: + pcm = track.to_pcm() + frame = pcm.read(BUFFER_SIZE) + while (len(frame) > 0): + rg.update(frame) + processed_frames += frame.frames + if (progress is not None): + progress(processed_frames, total_frames) + frame = pcm.read(BUFFER_SIZE) + pcm.close() + (track_gain, track_peak) = rg.title_gain() + gains.append((track, track_gain, track_peak)) + (album_gain, album_peak) = rg.album_gain() + for (track, track_gain, track_peak) in gains: + yield (track, track_gain, track_peak, album_gain, album_peak) + + +class InterruptableReader(PCMReader): + """A PCMReader meant for audio recording. + + It runs read() in a separate thread and stops recording + when SIGINT is caught. + """ + + def __init__(self, pcmreader, verbose=True): + """Takes PCMReader object and verbosity flag.""" + + #FIXME - update this for Messenger support + + import threading + import Queue + import signal + + PCMReader.__init__(self, pcmreader, + sample_rate=pcmreader.sample_rate, + channels=pcmreader.channels, + channel_mask=pcmreader.channel_mask, + bits_per_sample=pcmreader.bits_per_sample) + + self.stop_reading = False + self.data_queue = Queue.Queue() + + self.old_sigint = signal.signal(signal.SIGINT, self.stop) + + thread = threading.Thread(target=self.send_data) + thread.setDaemon(True) + thread.start() + + self.verbose = verbose + + def stop(self, *args): + """The SIGINT signal handler which stops recording.""" + + import signal + + self.stop_reading = True + signal.signal(signal.SIGINT, self.old_sigint) + + if (self.verbose): + print "Stopping..." + + def send_data(self): + """The thread for outputting PCM data from reader.""" + + #try to use a half second long buffer + BUFFER_SIZE = self.sample_rate * (self.bits_per_sample / 8) * \ + self.channels / 2 + + s = self.file.read(BUFFER_SIZE) + while ((len(s) > 0) and (not self.stop_reading)): + self.data_queue.put(s) + s = self.file.read(BUFFER_SIZE) + + self.data_queue.put("") + + def read(self, length): + """Try to read a pcm.FrameList of size "bytes".""" + + return self.data_queue.get() + + +def ignore_sigint(): + """Sets the SIGINT signal to SIG_IGN. + + Some encoder executables require this in order for + InterruptableReader to work correctly since we + want to catch SIGINT ourselves in that case and perform + a proper shutdown.""" + + import signal + + signal.signal(signal.SIGINT, signal.SIG_IGN) + + +def make_dirs(destination_path): + """Ensures all directories leading to destination_path are created. + + Raises OSError if a problem occurs during directory creation. + """ + + dirname = os.path.dirname(destination_path) + if ((dirname != '') and (not os.path.isdir(dirname))): + os.makedirs(dirname) + + +####################### +#Generic MetaData +####################### + + +class MetaData: + """The base class for storing textual AudioFile metadata. + + This includes things like track name, track number, album name + and so forth. It also includes embedded images, if present. + + Fields are stored with the same name they are initialized with. + Except for images, they can all be manipulated directly + (images have dedicated set/get/delete methods instead). + Subclasses are expected to override getattr/setattr + so that updating attributes will adjust the low-level attributes + accordingly. + """ + + __FIELDS__ = ("track_name", "track_number", "track_total", + "album_name", "artist_name", + "performer_name", "composer_name", "conductor_name", + "media", "ISRC", "catalog", "copyright", + "publisher", "year", "date", "album_number", "album_total", + "comment") + + __INTEGER_FIELDS__ = ("track_number", "track_total", + "album_number", "album_total") + + def __init__(self, + track_name=u"", + track_number=0, + track_total=0, + album_name=u"", + artist_name=u"", + performer_name=u"", + composer_name=u"", + conductor_name=u"", + media=u"", + ISRC=u"", + catalog=u"", + copyright=u"", + publisher=u"", + year=u"", + date=u"", + album_number=0, + album_total=0, + comment=u"", + images=None): + """Fields are as follows: + + track_name - the name of this individual track + track_number - the number of this track + track_total - the total number of tracks + album_name - the name of this track's album + artist_name - the song's original creator/composer + performer_name - the song's performing artist + composer_name - the song's composer name + conductor_name - the song's conductor's name + media - the album's media type (CD,tape,etc.) + ISRC - the song's ISRC + catalog - the album's catalog number + copyright - the song's copyright information + publisher - the song's publisher + year - the album's release year + date - the original recording date + album_number - the disc's volume number, if any + album_total - the total number of discs, if any + comment - the track's comment string + images - a list of Image objects + + track_number, track_total, album_number and album_total are ints. + images is an optional list of Image objects. + The rest are unicode strings. + """ + + #we're avoiding self.foo = foo because + #__setattr__ might need to be redefined + #which could lead to unwelcome side-effects + self.__dict__['track_name'] = track_name + self.__dict__['track_number'] = track_number + self.__dict__['track_total'] = track_total + self.__dict__['album_name'] = album_name + self.__dict__['artist_name'] = artist_name + self.__dict__['performer_name'] = performer_name + self.__dict__['composer_name'] = composer_name + self.__dict__['conductor_name'] = conductor_name + self.__dict__['media'] = media + self.__dict__['ISRC'] = ISRC + self.__dict__['catalog'] = catalog + self.__dict__['copyright'] = copyright + self.__dict__['publisher'] = publisher + self.__dict__['year'] = year + self.__dict__['date'] = date + self.__dict__['album_number'] = album_number + self.__dict__['album_total'] = album_total + self.__dict__['comment'] = comment + + if (images is not None): + self.__dict__['__images__'] = list(images) + else: + self.__dict__['__images__'] = list() + + def __repr__(self): + return ("MetaData(%s)" % ( + ",".join(["%s"] * (len(MetaData.__FIELDS__))))) % \ + tuple(["%s=%s" % (field, repr(getattr(self, field))) + for field in MetaData.__FIELDS__]) + + def __delattr__(self, field): + if (field in self.__FIELDS__): + if (field in self.__INTEGER_FIELDS__): + self.__dict__[field] = 0 + else: + self.__dict__[field] = u"" + else: + try: + del(self.__dict__[field]) + except KeyError: + raise AttributeError(field) + + #returns the type of comment this is, as a unicode string + def __comment_name__(self): + return u'MetaData' + + #returns a list of (key,value) tuples + def __comment_pairs__(self): + return zip(("Title", "Artist", "Performer", "Composer", "Conductor", + "Album", "Catalog", + "Track Number", "Track Total", + "Volume Number", "Volume Total", + "ISRC", "Publisher", "Media", "Year", "Date", "Copyright", + "Comment"), + (self.track_name, + self.artist_name, + self.performer_name, + self.composer_name, + self.conductor_name, + self.album_name, + self.catalog, + str(self.track_number), + str(self.track_total), + str(self.album_number), + str(self.album_total), + self.ISRC, + self.publisher, + self.media, + self.year, + self.date, + self.copyright, + self.comment)) + + def __unicode__(self): + comment_pairs = self.__comment_pairs__() + if (len(comment_pairs) > 0): + max_key_length = max([len(pair[0]) for pair in comment_pairs]) + line_template = u"%%(key)%(length)d.%(length)ds : %%(value)s" % \ + {"length": max_key_length} + + base_comment = unicode(os.linesep.join( + [_(u"%s Comment:") % (self.__comment_name__())] + \ + [line_template % {"key": key, "value": value} for + (key, value) in comment_pairs])) + else: + base_comment = u"" + + if (len(self.images()) > 0): + return u"%s%s%s" % \ + (base_comment, + os.linesep * 2, + os.linesep.join([unicode(p) for p in self.images()])) + else: + return base_comment + + def __eq__(self, metadata): + if (metadata is not None): + return set([(getattr(self, attr) == getattr(metadata, attr)) + for attr in MetaData.__FIELDS__]) == set([True]) + else: + return False + + def __ne__(self, metadata): + return not self.__eq__(metadata) + + @classmethod + def converted(cls, metadata): + """Converts metadata from another class to this one, if necessary. + + Takes a MetaData-compatible object (or None) + and returns a new MetaData subclass with the data fields converted + or None if metadata is None or conversion isn't possible. + For instance, VorbisComment.converted() returns a VorbisComment + class. This way, AudioFiles can offload metadata conversions. + """ + + if (metadata is not None): + fields = dict([(field, getattr(metadata, field)) + for field in cls.__FIELDS__]) + fields["images"] = metadata.images() + return MetaData(**fields) + else: + return None + + @classmethod + def supports_images(cls): + """Returns True if this MetaData class supports embedded images.""" + + return True + + def images(self): + """Returns a list of embedded Image objects.""" + + #must return a copy of our internal array + #otherwise this will likely not act as expected when deleting + return self.__images__[:] + + def front_covers(self): + """Returns a subset of images() which are front covers.""" + + return [i for i in self.images() if i.type == 0] + + def back_covers(self): + """Returns a subset of images() which are back covers.""" + + return [i for i in self.images() if i.type == 1] + + def leaflet_pages(self): + """Returns a subset of images() which are leaflet pages.""" + + return [i for i in self.images() if i.type == 2] + + def media_images(self): + """Returns a subset of images() which are media images.""" + + return [i for i in self.images() if i.type == 3] + + def other_images(self): + """Returns a subset of images() which are other images.""" + + return [i for i in self.images() if i.type == 4] + + def add_image(self, image): + """Embeds an Image object in this metadata. + + Implementations of this method should also affect + the underlying metadata value + (e.g. adding a new Image to FlacMetaData should add another + METADATA_BLOCK_PICTURE block to the metadata). + """ + + if (self.supports_images()): + self.__images__.append(image) + else: + raise ValueError(_(u"This MetaData type does not support images")) + + def delete_image(self, image): + """Deletes an Image object from this metadata. + + Implementations of this method should also affect + the underlying metadata value + (e.g. removing an existing Image from FlacMetaData should + remove that same METADATA_BLOCK_PICTURE block from the metadata). + """ + + if (self.supports_images()): + self.__images__.pop(self.__images__.index(image)) + else: + raise ValueError(_(u"This MetaData type does not support images")) + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values. + + >>> m = MetaData(track_name=u"Track 1",artist_name=u"Artist") + >>> m2 = MetaData(track_name=u"Track 2",album_name=u"Album") + >>> m.merge(m2) + >>> m.track_name + u'Track 1' + >>> m.artist_name + u'Artist' + >>> m.album_name + u'Album' + + Subclasses of MetaData should implement this method + to handle any empty fields their format supports. + """ + + if (metadata is None): + return + + fields = {} + for field in self.__FIELDS__: + if (field not in self.__INTEGER_FIELDS__): + if (len(getattr(self, field)) == 0): + setattr(self, field, getattr(metadata, field)) + else: + if (getattr(self, field) == 0): + setattr(self, field, getattr(metadata, field)) + + if ((len(self.images()) == 0) and self.supports_images()): + for img in metadata.images(): + self.add_image(img) + + +class AlbumMetaData(dict): + """A container for several MetaData objects. + + They can be retrieved by track number.""" + + def __init__(self, metadata_iter): + """metadata_iter is an iterator of MetaData objects.""" + + dict.__init__(self, + dict([(m.track_number, m) for m in metadata_iter])) + + def metadata(self): + """Returns a single MetaData object of all consistent fields. + + For example, if album_name is the same in all MetaData objects, + the returned object will have that album_name value. + If track_name differs, the returned object will not + have a track_name field. + """ + + return MetaData(**dict([(field, list(items)[0]) + for (field, items) in + [(field, + set([getattr(track, field) for track + in self.values()])) + for field in MetaData.__FIELDS__] + if (len(items) == 1)])) + + +class MetaDataFileException(Exception): + """A superclass of XMCDException and MBXMLException. + + This allows one to handle any sort of metadata file exception + consistently.""" + + def __unicode__(self): + return _(u"Invalid XMCD or MusicBrainz XML file") + + +class AlbumMetaDataFile: + """A base class for MetaData containing files. + + This includes FreeDB's XMCD files + and MusicBrainz's XML files.""" + + def __init__(self, album_name, artist_name, year, catalog, + extra, track_metadata): + """track_metadata is a list of tuples. The rest are unicode.""" + + self.album_name = album_name + self.artist_name = artist_name + self.year = year + self.catalog = catalog + self.extra = extra + self.track_metadata = track_metadata + + def __len__(self): + return len(self.track_metadata) + + def to_string(self): + """Returns this object as a plain string of data.""" + + raise NotImplementedError() + + @classmethod + def from_string(cls, string): + """Given a plain string, returns an object of this class. + + Raises MetaDataFileException if a parsing error occurs.""" + + raise NotImplementedError() + + def get_track(self, index): + """Given a track index (from 0), returns (name, artist, extra). + + name, artist and extra are unicode strings. + Raises IndexError if out-of-bounds.""" + + return self.track_metadata[i] + + def set_track(self, index, name, artist, extra): + """Sets the track at the given index (from 0) to the given values. + + Raises IndexError if out-of-bounds.""" + + self.track_metadata[i] = (name, artist, extra) + + @classmethod + def from_tracks(cls, tracks): + """Given a list of AudioFile objects, returns an AlbumMetaDataFile. + + All files are presumed to be from the same album.""" + + raise NotImplementedError() + + @classmethod + def from_cuesheet(cls, cuesheet, total_frames, sample_rate, metadata=None): + """Returns an AlbumMetaDataFile from a cuesheet. + + This must also include a total_frames and sample_rate integer. + This works by generating a set of empty tracks and calling + the from_tracks() method to build a MetaData file with + the proper placeholders. + metadata, if present, is applied to all tracks.""" + + if (metadata is None): + metadata = MetaData() + + return cls.from_tracks([DummyAudioFile( + length=(pcm_frames * 75) / sample_rate, + metadata=metadata, + track_number=i + 1) for (i, pcm_frames) in enumerate( + cuesheet.pcm_lengths(total_frames))]) + + def track_metadata(self, track_number): + """Given a track_number (from 1), returns a MetaData object. + + Raises IndexError if out-of-bounds or None if track_number is 0.""" + + if (track_number == 0): + return None + + (track_name, + track_artist, + track_extra) = self.get_track(track_number - 1) + + if (len(track_artist) == 0): + track_artist = self.artist_name + + return MetaData(track_name=track_name, + track_number=track_number, + track_total=len(self), + album_name=self.album_name, + artist_name=track_artist, + catalog=self.catalog, + year=self.year) + + def get(self, track_index, default): + try: + return self.track_metadata(track_index) + except IndexError: + return default + + def track_metadatas(self): + """Iterates over all the MetaData objects in this file.""" + + for i in xrange(len(self)): + yield self.track_metadata(i + 1) + + def metadata(self): + """Returns a single MetaData object of all consistent fields. + + For example, if album_name is the same in all MetaData objects, + the returned object will have that album_name value. + If track_name differs, the returned object will not + have a track_name field. + """ + + return MetaData(**dict([(field, list(items)[0]) + for (field, items) in + [(field, + set([getattr(track, field) for track + in self.track_metadatas()])) + for field in MetaData.__FIELDS__] + if (len(items) == 1)])) + +####################### +#Image MetaData +####################### + + +class Image: + """An image data container.""" + + def __init__(self, data, mime_type, width, height, + color_depth, color_count, description, type): + """Fields are as follows: + + data - plain string of the actual binary image data + mime_type - unicode string of the image's MIME type + width - width of image, as integer number of pixels + height - height of image, as integer number of pixels + color_depth - color depth of image (24 for JPEG, 8 for GIF, etc.) + color_count - number of palette colors, or 0 + description - a unicode string + type - an integer type whose values are: + 0 - front cover + 1 - back cover + 2 - leaflet page + 3 - media + 4 - other + """ + + self.data = data + self.mime_type = mime_type + self.width = width + self.height = height + self.color_depth = color_depth + self.color_count = color_count + self.description = description + self.type = type + + def suffix(self): + """Returns the image's recommended suffix as a plain string. + + For example, an image with mime_type "image/jpeg" return "jpg". + """ + + return {"image/jpeg": "jpg", + "image/jpg": "jpg", + "image/gif": "gif", + "image/png": "png", + "image/x-ms-bmp": "bmp", + "image/tiff": "tiff"}.get(self.mime_type, "bin") + + def type_string(self): + """Returns the image's type as a human readable plain string. + + For example, an image of type 0 returns "Front Cover". + """ + + return {0: "Front Cover", + 1: "Back Cover", + 2: "Leaflet Page", + 3: "Media", + 4: "Other"}.get(self.type, "Other") + + def __repr__(self): + return ("Image(mime_type=%s,width=%s,height=%s,color_depth=%s," + + "color_count=%s,description=%s,type=%s,...)") % \ + (repr(self.mime_type), repr(self.width), repr(self.height), + repr(self.color_depth), repr(self.color_count), + repr(self.description), repr(self.type)) + + def __unicode__(self): + return u"Picture : %s (%d\u00D7%d,'%s')" % \ + (self.type_string(), + self.width, self.height, self.mime_type) + + @classmethod + def new(cls, image_data, description, type): + """Builds a new Image object from raw data. + + image_data is a plain string of binary image data. + description is a unicode string. + type as an image type integer. + + The width, height, color_depth and color_count fields + are determined by parsing the binary image data. + Raises InvalidImage if some error occurs during parsing. + """ + + img = image_metrics(image_data) + + return Image(data=image_data, + mime_type=img.mime_type, + width=img.width, + height=img.height, + color_depth=img.bits_per_pixel, + color_count=img.color_count, + description=description, + type=type) + + def thumbnail(self, width, height, format): + """Returns a new Image object with the given attributes. + + width and height are integers. + format is a string such as "JPEG". + """ + + return Image.new(thumbnail_image(self.data, width, height, format), + self.description, self.type) + + def __eq__(self, image): + if (image is not None): + return set([(getattr(self, attr) == getattr(image, attr)) + for attr in + ("data", "mime_type", "width", "height", + "color_depth", "color_count", "description", + "type")]) == set([True]) + else: + return False + + def __ne__(self, image): + return not self.__eq__(image) + +####################### +#ReplayGain Metadata +####################### + + +class ReplayGain: + """A container for ReplayGain data.""" + + def __init__(self, track_gain, track_peak, album_gain, album_peak): + """Values are: + + track_gain - a dB float value + track_peak - the highest absolute value PCM sample, as a float + album_gain - a dB float value + album_peak - the highest absolute value PCM sample, as a float + + They are also attributes. + """ + + self.track_gain = float(track_gain) + self.track_peak = float(track_peak) + self.album_gain = float(album_gain) + self.album_peak = float(album_peak) + + def __repr__(self): + return "ReplayGain(%s,%s,%s,%s)" % \ + (self.track_gain, self.track_peak, + self.album_gain, self.album_peak) + + def __eq__(self, rg): + return ((self.track_gain == rg.track_gain) and + (self.track_peak == rg.track_peak) and + (self.album_gain == rg.album_gain) and + (self.album_peak == rg.album_peak)) + + def __ne__(self, rg): + return not self.__eq__(rg) + + +####################### +#Generic Audio File +####################### + +class UnsupportedTracknameField(Exception): + """Raised by AudioFile.track_name() + if its format string contains unknown fields.""" + + def __init__(self, field): + self.field = field + + def error_msg(self, messenger): + messenger.error(_(u"Unknown field \"%s\" in file format") % \ + (self.field)) + messenger.info(_(u"Supported fields are:")) + for field in sorted(MetaData.__FIELDS__ + \ + ("album_track_number", "suffix")): + if (field == 'track_number'): + messenger.info(u"%(track_number)2.2d") + else: + messenger.info(u"%%(%s)s" % (field)) + + messenger.info(u"%(basename)s") + + +class AudioFile: + """An abstract class representing audio files on disk. + + This class should be extended to handle different audio + file formats.""" + + SUFFIX = "" + NAME = "" + DEFAULT_COMPRESSION = "" + COMPRESSION_MODES = ("",) + COMPRESSION_DESCRIPTIONS = {} + BINARIES = tuple() + REPLAYGAIN_BINARIES = tuple() + + def __init__(self, filename): + """filename is a plain string. + + Raises InvalidFile or subclass if the file is invalid in some way.""" + + self.filename = filename + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + return False + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + raise NotImplementedError() + + def channels(self): + """Returns an integer number of channels this track contains.""" + + raise NotImplementedError() + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + #WARNING - This only returns valid masks for 1 and 2 channel audio + #anything over 2 channels raises a ValueError + #since there isn't any standard on what those channels should be. + #AudioFiles that support more than 2 channels should override + #this method with one that returns the proper mask. + return ChannelMask.from_channels(self.channels()) + + def lossless(self): + """Returns True if this track's data is stored losslessly.""" + + raise NotImplementedError() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + pass + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + return None + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + pass + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + raise NotImplementedError() + + def cd_frames(self): + """Returns the total length of the track in CD frames. + + Each CD frame is 1/75th of a second.""" + + try: + return (self.total_frames() * 75) / self.sample_rate() + except ZeroDivisionError: + return 0 + + def seconds_length(self): + """Returns the length of the track as a Decimal number of seconds.""" + + import decimal + + try: + return (decimal.Decimal(self.total_frames()) / + decimal.Decimal(self.sample_rate())) + except decimal.DivisionByZero: + return decimal.Decimal(0) + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + raise NotImplementedError() + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data. + + If an error occurs initializing a decoder, this should + return a PCMReaderError with an appropriate error message.""" + + #if a subclass implements to_wave(), + #this doesn't need to be implemented + #if a subclass implements to_pcm(), + #to_wave() doesn't need to be implemented + #or, one can implement both + + raise NotImplementedError() + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new AudioFile-compatible object. + + For example, to encode the FlacAudio file "file.flac" from "file.wav" + at compression level "5": + + >>> flac = FlacAudio.from_pcm("file.flac", + ... WaveAudio("file.wav").to_pcm(), + ... "5") + + May raise EncodingError if some problem occurs when + encoding the input file. This includes an error + in the input stream, a problem writing the output file, + or even an EncodingError subclass such as + "UnsupportedBitsPerSample" if the input stream + is formatted in a way this class is unable to support. + """ + + raise NotImplementedError() + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + @classmethod + def __unlink__(cls, filename): + try: + os.unlink(filename) + except OSError: + pass + + def track_number(self): + """Returns this track's number as an integer. + + This first checks MetaData and then makes a guess from the filename. + If neither yields a good result, returns 0.""" + + metadata = self.get_metadata() + if ((metadata is not None) and (metadata.track_number > 0)): + return metadata.track_number + else: + try: + return int(re.findall( + r'\d{2,3}', + os.path.basename(self.filename))[0]) % 100 + except IndexError: + return 0 + + def album_number(self): + """Returns this track's album number as an integer. + + This first checks MetaData and then makes a guess from the filename. + If neither yields a good result, returns 0.""" + + metadata = self.get_metadata() + if ((metadata is not None) and (metadata.album_number > 0)): + return metadata.album_number + elif ((metadata is not None) and (metadata.track_number > 0)): + return 0 + else: + try: + long_track_number = int(re.findall( + r'\d{3}', + os.path.basename(self.filename))[0]) + return long_track_number / 100 + except IndexError: + return 0 + + @classmethod + def track_name(cls, file_path, track_metadata=None, format=None, + suffix=None): + """Constructs a new filename string. + + Given a plain string to an existing path, + a MetaData-compatible object (or None), + a UTF-8-encoded Python format string + and an ASCII-encoded suffix string (such as "mp3") + returns a plain string of a new filename with format's + fields filled-in and encoded as FS_ENCODING. + Raises UnsupportedTracknameField if the format string + contains invalid template fields.""" + + if (format is None): + format = FILENAME_FORMAT + if (suffix is None): + suffix = cls.SUFFIX + try: + #prefer a track number from MetaData, if available + if ((track_metadata is not None) and + (track_metadata.track_number > 0)): + track_number = track_metadata.track_number + else: + try: + track_number = int(re.findall( + r'\d{2,4}', + os.path.basename(file_path))[0]) % 100 + except IndexError: + track_number = 0 + + #prefer an album_number from MetaData, if available + if ((track_metadata is not None) and + (track_metadata.album_number > 0)): + album_number = track_metadata.album_number + else: + try: + album_number = int(re.findall( + r'\d{2,4}', + os.path.basename(file_path))[0]) / 100 + except IndexError: + album_number = 0 + + if (track_metadata is not None): + track_total = track_metadata.track_total + album_total = track_metadata.album_total + else: + track_total = 0 + album_total = 0 + + format_dict = {u"track_number": track_number, + u"album_number": album_number, + u"track_total": track_total, + u"album_total": album_total, + u"suffix": suffix.decode('ascii')} + + if (album_number == 0): + format_dict[u"album_track_number"] = u"%2.2d" % (track_number) + else: + album_digits = len(str(album_total)) + + format_dict[u"album_track_number"] = ( + u"%%%(album_digits)d.%(album_digits)dd%%2.2d" % + {"album_digits": album_digits} % + (album_number, track_number)) + + if (track_metadata is not None): + for field in track_metadata.__FIELDS__: + if ((field != "suffix") and + (field not in MetaData.__INTEGER_FIELDS__)): + format_dict[field.decode('ascii')] = getattr( + track_metadata, + field).replace(u'/', u'-').replace(unichr(0), u' ') + else: + for field in MetaData.__FIELDS__: + if (field not in MetaData.__INTEGER_FIELDS__): + format_dict[field.decode('ascii')] = u"" + + format_dict[u"basename"] = os.path.splitext( + os.path.basename(file_path))[0].decode(FS_ENCODING, + 'replace') + + return (format.decode('utf-8', 'replace') % format_dict).encode( + FS_ENCODING, 'replace') + except KeyError, error: + raise UnsupportedTracknameField(unicode(error.args[0])) + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + track_names = [track.filename for track in + open_files(filenames) if + isinstance(track, cls)] + + @classmethod + def can_add_replay_gain(cls): + """Returns True if we have the necessary binaries to add ReplayGain.""" + + return False + + @classmethod + def lossless_replay_gain(cls): + """Returns True of applying ReplayGain is a lossless process. + + For example, if it is applied by adding metadata tags + rather than altering the file's data itself.""" + + return True + + def replay_gain(self): + """Returns a ReplayGain object of our ReplayGain values. + + Returns None if we have no values. + Note that if applying ReplayGain is a lossy process, + this will typically also return None.""" + + return None + + def set_cuesheet(self, cuesheet): + """Imports cuesheet data from a Cuesheet-compatible object. + + This are objects with catalog(), ISRCs(), indexes(), and pcm_lengths() + methods. Raises IOError if an error occurs setting the cuesheet.""" + + pass + + def get_cuesheet(self): + """Returns the embedded Cuesheet-compatible object, or None. + + Raises IOError if a problem occurs when reading the file.""" + + return None + + def __eq__(self, audiofile): + if (isinstance(audiofile, AudioFile)): + p1 = self.to_pcm() + p2 = audiofile.to_pcm() + try: + return pcm_cmp(p1, p2) + finally: + p1.close() + p2.close() + else: + return False + + def __ne__(self, audiofile): + return not self.__eq__(audiofile) + + def verify(self, progress=None): + """Verifies the current file for correctness. + + Returns True if the file is okay. + Raises an InvalidFile with an error message if there is + some problem with the file.""" + + total_frames = self.total_frames() + decoder = self.to_pcm() + pcm_frame_count = 0 + try: + framelist = decoder.read(BUFFER_SIZE) + while (len(framelist) > 0): + pcm_frame_count += framelist.frames + if (progress is not None): + progress(pcm_frame_count, total_frames) + framelist = decoder.read(BUFFER_SIZE) + except (IOError, ValueError), err: + raise InvalidFile(str(err)) + + try: + decoder.close() + except DecodingError, err: + raise InvalidFile(err.error_message) + + if (pcm_frame_count == total_frames): + return True + else: + raise InvalidFile("incorrect PCM frame count") + + @classmethod + def has_binaries(cls, system_binaries): + """Returns True if all the required binaries can be found. + + Checks the __system_binaries__ class for which path to check.""" + + return set([True] + \ + [system_binaries.can_execute(system_binaries[command]) + for command in cls.BINARIES]) == set([True]) + + +class WaveContainer(AudioFile): + """An audio type which supports storing foreign RIFF chunks. + + These chunks must be preserved during a round-trip: + + >>> WaveContainer("file", "input.wav").to_wave("output.wav") + """ + + def to_wave(self, wave_filename, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + pcmreader = to_pcm_progress(self, progress) + WaveAudio.from_pcm(wave_filename, pcmreader) + pcmreader.close() + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new AudioFile compatible object. + + For example, to encode FlacAudio file "flac.flac" from "file.wav" + at compression level "5": + + >>> flac = FlacAudio.from_wave("file.flac","file.wav","5") + """ + + return cls.from_pcm(filename, + to_pcm_progress(WaveAudio(wave_filename), + progress), + compression) + + def has_foreign_riff_chunks(self): + """Returns True if the audio file contains non-audio RIFF chunks. + + During transcoding, if the source audio file has foreign RIFF chunks + and the target audio format supports foreign RIFF chunks, + conversion should be routed through .wav conversion + to avoid losing those chunks.""" + + return False + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + import tempfile + + if (target_class == WaveAudio): + self.to_wave(target_path, progress=progress) + return WaveAudio(target_path) + elif (self.has_foreign_riff_chunks() and + hasattr(target_class, "from_wave")): + temp_wave = tempfile.NamedTemporaryFile(suffix=".wav") + try: + #we'll only log the second leg of conversion, + #since that's likely to be the slower portion + self.to_wave(temp_wave.name) + return target_class.from_wave(target_path, + temp_wave.name, + compression, + progress=progress) + finally: + temp_wave.close() + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + +class AiffContainer(AudioFile): + """An audio type which supports storing foreign AIFF chunks. + + These chunks must be preserved during a round-trip: + + >>> AiffContainer("file", "input.aiff").to_aiff("output.aiff") + """ + + def to_aiff(self, aiff_filename, progress=None): + """Writes the contents of this file to the given .aiff filename string. + + Raises EncodingError if some error occurs during decoding.""" + + pcmreader = to_pcm_progress(self, progress) + AiffAudio.from_pcm(aiff_filename, pcmreader) + pcmreader.close() + + @classmethod + def from_aiff(cls, filename, aiff_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .aiff file. + + Takes a filename string, aiff_filename string + of an existing AiffAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new AudioFile compatible object. + + For example, to encode FlacAudio file "flac.flac" from "file.aiff" + at compression level "5": + + >>> flac = FlacAudio.from_wave("file.flac","file.aiff","5") + """ + + return cls.from_pcm(filename, + to_pcm_progress(AiffAudio(wave_filename)), + compression) + + def has_foreign_aiff_chunks(self): + """Returns True if the audio file contains non-audio AIFF chunks. + + During transcoding, if the source audio file has foreign AIFF chunks + and the target audio format supports foreign AIFF chunks, + conversion should be routed through .aiff conversion + to avoid losing those chunks.""" + + return False + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + if (target_class == AiffAudio): + self.to_aiff(target_path) + return AiffAudio(target_path) + elif (self.has_foreign_aiff_chunks() and + hasattr(target_class, "from_aiff")): + temp_aiff = tempfile.NamedTemporaryFile(suffix=".aiff") + try: + self.to_aiff(temp_aiff.name) + return target_class.from_aiff(target_path, + temp_aiff.name, + compression) + finally: + temp_aiff.close() + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + +class DummyAudioFile(AudioFile): + """A placeholder AudioFile object with external data.""" + + def __init__(self, length, metadata, track_number=0): + """Fields are as follows: + + length - the dummy track's length, in CD frames + metadata - a MetaData object + track_number - the track's number on CD, starting from 1 + """ + + self.__length__ = length + self.__metadata__ = metadata + self.__track_number__ = track_number + + AudioFile.__init__(self, "") + + def get_metadata(self): + """Returns a MetaData object, or None.""" + + return self.__metadata__ + + def cd_frames(self): + """Returns the total length of the track in CD frames. + + Each CD frame is 1/75th of a second.""" + + return self.__length__ + + def track_number(self): + """Returns this track's number as an integer.""" + + return self.__track_number__ + + def sample_rate(self): + """Returns 44100.""" + + return 44100 + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return (self.cd_frames() * self.sample_rate()) / 75 + +########################### +#Cuesheet/TOC file handling +########################### + +#Cuesheets and TOC files are bundled into a unified Sheet interface + + +class SheetException(ValueError): + """A parent exception for CueException and TOCException.""" + + pass + + +def read_sheet(filename): + """Returns a TOCFile or Cuesheet object from filename. + + May raise a SheetException if the file cannot be parsed correctly.""" + + import toc + import cue + + try: + #try TOC first, since its CD_DA header makes it easier to spot + return toc.read_tocfile(filename) + except SheetException: + return cue.read_cuesheet(filename) + + +def parse_timestamp(s): + """Parses a timestamp string into an integer. + + This presumes the stamp is stored: "hours:minutes:frames" + where each CD frame is 1/75th of a second. + Or, if the stamp is a plain integer, it is returned directly. + This does no error checking. Presumably a regex will ensure + the stamp is formatted correctly before parsing it to an int. + """ + + if (":" in s): + (m, s, f) = map(int, s.split(":")) + return (m * 60 * 75) + (s * 75) + f + else: + return int(s) + + +def build_timestamp(i): + """Returns a timestamp string from an integer number of CD frames. + + Each CD frame is 1/75th of a second. + """ + + return "%2.2d:%2.2d:%2.2d" % ((i / 75) / 60, (i / 75) % 60, i % 75) + + +def sheet_to_unicode(sheet, total_frames): + """Returns formatted unicode from a cuesheet object and total PCM frames. + + Its output is pretty-printed for eventual display by trackinfo. + """ + + #FIXME? - This (and pcm_lengths() in general) assumes all cuesheets + #have a sample rate of 44100Hz. + #It's difficult to envision a scenario + #in which this assumption doesn't hold + #The point of cuesheets is to manage disc-based data as + #"solid" archives which can be rewritten identically to the original + #yet this only works for CD audio, which must always be 44100Hz. + #DVD-Audio is encoded into AOB files which cannot be mapped to cuesheets + #and SACD's DSD format is beyond the scope of these PCM-centric tools. + + ISRCs = sheet.ISRCs() + + tracks = unicode(os.linesep).join( + [" Track %2.2d - %2.2d:%2.2d%s" % \ + (i + 1, + length / 44100 / 60, + length / 44100 % 60, + (" (ISRC %s)" % (ISRCs[i + 1].decode('ascii', 'replace'))) if + ((i + 1) in ISRCs.keys()) else u"") + for (i, length) in enumerate(sheet.pcm_lengths(total_frames))]) + + if ((sheet.catalog() is not None) and + (len(sheet.catalog()) > 0)): + return u" Catalog - %s%s%s" % \ + (sheet.catalog().decode('ascii', 'replace'), + os.linesep, tracks) + else: + return tracks + + +def at_a_time(total, per): + """Yields "per" integers from "total" until exhausted. + + For example: + >>> list(at_a_time(10, 3)) + [3, 3, 3, 1] + """ + + for i in xrange(total / per): + yield per + yield total % per + + +from __image__ import * + +from __wav__ import * + +from __au__ import * +from __vorbiscomment__ import * +from __id3__ import * +from __aiff__ import * +from __flac__ import * + +from __ape__ import * +from __mp3__ import * +from __vorbis__ import * +from __m4a__ import * +from __wavpack__ import * +from __musepack__ import * +from __speex__ import * +from __shn__ import * + +from __dvda__ import * + + +####################### +#CD data +####################### + +#keep in mind the whole of CD reading isn't remotely thread-safe +#due to the linear nature of CD access, +#reading from more than one track of a given CD at the same time +#is something code should avoid at all costs! +#there's simply no way to accomplish that cleanly + +class CDDA: + """A CDDA device which contains CDTrackReader objects.""" + + def __init__(self, device_name, speed=None, perform_logging=True): + """device_name is a string, speed is an optional int.""" + + import cdio + + cdrom_type = cdio.identify_cdrom(device_name) + if (cdrom_type & cdio.CD_IMAGE): + self.cdda = cdio.CDImage(device_name, cdrom_type) + self.perform_logging = False + else: + self.cdda = cdio.CDDA(device_name) + if (speed is not None): + self.cdda.set_speed(speed) + self.perform_logging = perform_logging + + self.total_tracks = len([track_type for track_type in + map(self.cdda.track_type, + xrange(1, self.cdda.total_tracks() + 1)) + if (track_type == 0)]) + + def __len__(self): + return self.total_tracks + + def __getitem__(self, key): + if ((key < 1) or (key > self.total_tracks)): + raise IndexError(key) + else: + try: + sample_offset = int(config.get_default("System", + "cdrom_read_offset", + "0")) + except ValueError: + sample_offset = 0 + + reader = CDTrackReader(self.cdda, int(key), self.perform_logging) + + if (sample_offset == 0): + return reader + elif (sample_offset > 0): + import math + + pcm_frames = reader.length() * 588 + + #adjust start and end sectors to account for the offset + reader.start += (sample_offset / 588) + reader.end += int(math.ceil(sample_offset / 588.0)) + reader.end = min(reader.end, self.last_sector()) + + #then wrap the reader in a window to fine-tune the offset + reader = PCMReaderWindow(reader, sample_offset, pcm_frames) + reader.track_number = reader.pcmreader.track_number + reader.rip_log = reader.pcmreader.rip_log + reader.length = reader.pcmreader.length + reader.offset = reader.pcmreader.offset + return reader + elif (sample_offset < 0): + import math + + pcm_frames = reader.length() * 588 + + #adjust start and end sectors to account for the offset + reader.start += sample_offset / 588 + reader.end += int(math.ceil(sample_offset / 588.0)) + + #then wrap the reader in a window to fine-tune the offset + if (reader.start >= self.first_sector()): + reader = PCMReaderWindow( + reader, + sample_offset + (-(sample_offset / 588) * 588), + pcm_frames) + else: + reader.start = self.first_sector() + reader = PCMReaderWindow(reader, sample_offset, pcm_frames) + reader.track_number = reader.pcmreader.track_number + reader.rip_log = reader.pcmreader.rip_log + reader.length = reader.pcmreader.length + reader.offset = reader.pcmreader.offset + return reader + + def __iter__(self): + for i in range(1, self.total_tracks + 1): + yield self[i] + + def length(self): + """Returns the length of the CD in CD frames.""" + + #lead-in should always be 150 + return self.last_sector() + 150 + 1 + + def close(self): + """Closes the CDDA device.""" + + pass + + def first_sector(self): + """Returns the first sector's location, in CD frames.""" + + return self.cdda.first_sector() + + def last_sector(self): + """Returns the last sector's location, in CD frames.""" + + return self.cdda.last_sector() + + +class PCMReaderWindow: + """A class for cropping a PCMReader to a specific window of frames""" + + def __init__(self, pcmreader, initial_offset, pcm_frames): + """initial_offset is how many frames to crop, and may be negative + pcm_frames is the total length of the window + + If the window is outside the PCMReader's data + (that is, initial_offset is negative, or + pcm_frames is longer than the total stream) + those samples are padded with 0s.""" + + self.pcmreader = pcmreader + self.sample_rate = pcmreader.sample_rate + self.channels = pcmreader.channels + self.channel_mask = pcmreader.channel_mask + self.bits_per_sample = pcmreader.bits_per_sample + + self.initial_offset = initial_offset + self.pcm_frames = pcm_frames + + def read(self, bytes): + if (self.pcm_frames > 0): + if (self.initial_offset == 0): + #once the initial offset is accounted for, + #read a framelist from the pcmreader + + framelist = self.pcmreader.read(bytes) + if (framelist.frames <= self.pcm_frames): + if (framelist.frames > 0): + #return framelist if it has data + #and is smaller than remaining frames + self.pcm_frames -= framelist.frames + return framelist + else: + #otherwise, pad remaining data with 0s + framelist = pcm.from_list([0] * + (self.pcm_frames) * + self.channels, + self.channels, + self.bits_per_sample, + True) + self.pcm_frames = 0 + return framelist + else: + #crop framelist to be smaller + #if its data is larger than what remains to be read + framelist = framelist.split(self.pcm_frames)[0] + self.pcm_frames = 0 + return framelist + + elif (self.initial_offset > 0): + #remove frames if initial offset is positive + + #if initial_offset is large, read as many framelists as needed + framelist = self.pcmreader.read(bytes) + while (self.initial_offset > framelist.frames): + self.initial_offset -= framelist.frames + framelist = self.pcmreader.read(bytes) + + (removed, framelist) = framelist.split(self.initial_offset) + self.initial_offset -= removed.frames + if (framelist.frames > 0): + self.pcm_frames -= framelist.frames + return framelist + else: + #if the entire framelist is cropped, + #return another one entirely + return self.read(bytes) + elif (self.initial_offset < 0): + #pad framelist with 0s if initial offset is negative + framelist = pcm.from_list([0] * + (-self.initial_offset) * + self.channels, + self.channels, + self.bits_per_sample, + True) + self.initial_offset = 0 + self.pcm_frames -= framelist.frames + return framelist + else: + #once all frames have been sent, return empty framelists + return pcm.FrameList("", self.channels, self.bits_per_sample, + False, True) + + def close(self): + self.pcmreader.close() + + +class CDTrackLog(dict): + """A container for CD reading log information, implemented as a dict.""" + + #PARANOIA_CB_READ Read off adjust ??? + #PARANOIA_CB_VERIFY Verifying jitter + #PARANOIA_CB_FIXUP_EDGE Fixed edge jitter + #PARANOIA_CB_FIXUP_ATOM Fixed atom jitter + #PARANOIA_CB_SCRATCH Unsupported + #PARANOIA_CB_REPAIR Unsupported + #PARANOIA_CB_SKIP Skip exhausted retry + #PARANOIA_CB_DRIFT Skip exhausted retry + #PARANOIA_CB_BACKOFF Unsupported + #PARANOIA_CB_OVERLAP Dynamic overlap adjust + #PARANOIA_CB_FIXUP_DROPPED Fixed dropped bytes + #PARANOIA_CB_FIXUP_DUPED Fixed duplicate bytes + #PARANOIA_CB_READERR Hard read error + + #log format is similar to cdda2wav's + def __str__(self): + return ", ".join(["%%(%s)d %s" % (field, field) + for field in + ("rderr", "skip", "atom", "edge", + "drop", "dup", "drift")]) % \ + {"edge": self.get(2, 0), + "atom": self.get(3, 0), + "skip": self.get(6, 0), + "drift": self.get(7, 0), + "drop": self.get(10, 0), + "dup": self.get(11, 0), + "rderr": self.get(12, 0)} + + +class CDTrackReader(PCMReader): + """A PCMReader-compatible object which reads from CDDA.""" + + def __init__(self, cdda, track_number, perform_logging=True): + """cdda is a cdio.CDDA object. track_number is offset from 1.""" + + PCMReader.__init__( + self, None, + sample_rate=44100, + channels=2, + channel_mask=int(ChannelMask.from_fields(front_left=True, + front_right=True)), + bits_per_sample=16) + + self.cdda = cdda + self.track_number = track_number + + (self.start, self.end) = cdda.track_offsets(track_number) + + self.position = self.start + self.cursor_placed = False + + self.perform_logging = perform_logging + self.rip_log = CDTrackLog() + + def offset(self): + """Returns this track's CD offset, in CD frames.""" + + return self.start + 150 + + def length(self): + """Returns this track's length, in CD frames.""" + + return self.end - self.start + 1 + + def log(self, i, v): + """Adds a log entry to the track's rip_log. + + This is meant to be called from CD reading callbacks.""" + + if v in self.rip_log: + self.rip_log[v] += 1 + else: + self.rip_log[v] = 1 + + def __read_sectors__(self, sectors): + #if we haven't moved CDDA to the track start yet, do it now + if (not self.cursor_placed): + self.cdda.seek(self.start) + if (self.perform_logging): + cdio.set_read_callback(self.log) + + self.position = self.start + self.cursor_placed = True + + if (self.position <= self.end): + s = self.cdda.read_sectors(min( + sectors, self.end - self.position + 1)) + self.position += sectors + return s + else: + return pcm.from_list([], 2, 16, True) + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes". + + For CD reading, this will be a sector-aligned number.""" + + #returns a sector-aligned number of bytes + #(divisible by 2352 bytes, basically) + #or at least 1 sector's worth, if "bytes" is too small + return self.__read_sectors__(max(bytes / 2352, 1)) + + def close(self): + """Closes the CD track for reading.""" + + self.position = self.start + self.cursor_placed = False + + +#returns the value in item_list which occurs most often +def __most_numerous__(item_list): + counts = {} + + if (len(item_list) == 0): + return "" + + for item in item_list: + counts.setdefault(item, []).append(item) + + return sorted([(item, len(counts[item])) for item in counts.keys()], + lambda x, y: cmp(x[1], y[1]))[-1][0] + + +from __freedb__ import * +from __musicbrainz__ import * + + +def read_metadata_file(filename): + """Returns an AlbumMetaDataFile-compatible file from a filename string. + + Raises a MetaDataFileException exception if an error occurs + during reading. + """ + + try: + data = file(filename, 'rb').read() + except IOError, msg: + raise MetaDataFileException(str(msg)) + + #try XMCD first + try: + return XMCD.from_string(data) + except XMCDException: + pass + + #then try MusicBrainz + try: + return MusicBrainzReleaseXML.from_string(data) + except MBXMLException: + pass + + #otherwise, throw exception + raise MetaDataFileException(filename) + + +####################### +#Multiple Jobs Handling +####################### + + +class ExecQueue: + """A class for running multiple jobs in parallel.""" + + def __init__(self): + self.todo = [] + self.return_values = set([]) + + def execute(self, function, args, kwargs=None): + """Queues the given function with argument list and kwargs dict.""" + + self.todo.append((function, args, kwargs)) + + def __run__(self, function, args, kwargs): + pid = os.fork() + if (pid > 0): # parent + return pid + else: # child + if (kwargs is not None): + function(*args, **kwargs) + else: + function(*args) + sys.exit(0) + + def run(self, max_processes=1): + """Performs the queued functions in separate subprocesses. + + This runs "max_processes" number of functions at a time. + It works by spawning a new child process for each function, + executing it and spawning a new child as each one exits. + Therefore, any side effects beyond altering files on + disk do not propogate back to the parent.""" + + max_processes = max(max_processes, 1) + + process_pool = set([]) + + #fill the process_pool to the limit + while ((len(self.todo) > 0) and (len(process_pool) < max_processes)): + (function, args, kwargs) = self.todo.pop(0) + process_pool.add(self.__run__(function, args, kwargs)) + #print "Filling %s" % (repr(process_pool)) + + #as processes end, keep adding new ones to the pool + #until we run out of queued jobs + + while (len(self.todo) > 0): + try: + (pid, return_value) = os.waitpid(0, 0) + process_pool.remove(pid) + self.return_values.add(return_value) + (function, args, kwargs) = self.todo.pop(0) + process_pool.add(self.__run__(function, args, kwargs)) + #print "Resuming %s" % (repr(process_pool)) + except KeyError: + continue + + #finally, wait for the running jobs to finish + while (len(process_pool) > 0): + try: + (pid, return_value) = os.waitpid(0, 0) + process_pool.remove(pid) + self.return_values.add(return_value) + #print "Emptying %s" % (repr(process_pool)) + except KeyError: + continue + + +class ExecQueue2: + """A class for running multiple jobs and accumulating results.""" + + def __init__(self): + self.todo = [] + self.return_values = set([]) + + #a dict of reader->pid values as returned by __run__() + self.process_pool = {} + + def execute(self, function, args, kwargs=None): + + self.todo.append((function, args, kwargs)) + + def __run__(self, function, args, kwargs): + """executes the given function and arguments in a child job + + returns a (pid, reader) tuple where pid is an int of the child job + and reader is a file object containing its piped data""" + + (pipe_read, pipe_write) = os.pipe() + pid = os.fork() + if (pid > 0): # parent + os.close(pipe_write) + reader = os.fdopen(pipe_read, 'r') + return (pid, reader) + else: # child + os.close(pipe_read) + writer = os.fdopen(pipe_write, 'w') + if (kwargs is not None): + cPickle.dump(function(*args, **kwargs), writer) + else: + cPickle.dump(function(*args), writer) + sys.exit(0) + + def __add_job__(self): + """removes a queued function and adds it to our running pool""" + + (function, args, kwargs) = self.todo.pop(0) + (pid, file_pointer) = self.__run__(function, args, kwargs) + self.process_pool[file_pointer] = pid + + def __await_jobs__(self): + """yields a reader file object per finished job + + If the child job exited properly, that reader will have + the pickled contents of the completed Python function + and it can be used to find the child's PID to be waited for + via the process pool. + In addition, the returned values of finished child processes + are added to our "return_values" attribute.""" + + import select + + (readable, + writeable, + exceptional) = select.select(list(self.process_pool.keys()), [], []) + for reader in readable: + try: + result = cPickle.load(reader) + except EOFError: + result = None + (pid, return_value) = os.waitpid(self.process_pool[reader], 0) + self.return_values.add(return_value) + yield (reader, result) + + def run(self, max_processes=1): + """execute all queued functions + + Yields the result of each executed function as they complete.""" + + max_processes = max(max_processes, 1) + + #fill the process pool to the limit + while ((len(self.todo) > 0) and + (len(self.process_pool) < max_processes)): + self.__add_job__() + + #as processes end, keep adding new ones to the pool + #until we run out of queued jobs + while (len(self.todo) > 0): + for (reader, result) in self.__await_jobs__(): + del(self.process_pool[reader]) + if (len(self.todo) > 0): + self.__add_job__() + yield result + + #finally, wait for the running jobs to finish + while (len(self.process_pool) > 0): + for (reader, result) in self.__await_jobs__(): + del(self.process_pool[reader]) + yield result + + +class ProgressJobQueueComplete(Exception): + pass + + +class ExecProgressQueue: + """A class for running multiple jobs in parallel with progress updates.""" + + def __init__(self, progress_display): + """Takes a ProgressDisplay object.""" + + self.progress_display = progress_display + self.queued_jobs = [] + self.max_job_id = 0 + self.running_job_pool = {} + self.results = {} + self.cached_exception = None + + def execute(self, function, + progress_text=None, completion_output=None, + *args, **kwargs): + """Queues the given function and arguments to be run in parallel. + + progress_text should be a unicode string to be displayed while running + + completion_output is either a unicode string, + or a function which takes the result of the queued function + and returns a unicode string for display + once the queued function is complete + """ + + self.queued_jobs.append((self.max_job_id, + progress_text, + completion_output, + function, + args, + kwargs)) + self.max_job_id += 1 + + def execute_next_job(self): + """Executes the next queued job.""" + + #pull job off queue + (job_id, + progress_text, + completion_output, + function, + args, + kwargs) = self.queued_jobs.pop(0) + + #add job to progress display + if (progress_text is not None): + self.progress_display.add_row(job_id, progress_text) + + #spawn subprocess and add it to pool + self.running_job_pool[job_id] = __ExecProgressQueueJob__.spawn( + job_id, + completion_output, + function, + args, + kwargs) + + def completed(self, job_id, result): + """Handles the completion of the given job and its result.""" + + #remove job from progress display, if present + self.progress_display.delete_row(job_id) + self.progress_display.clear() + + #add result to results + self.results[job_id] = result + + #clean up job from pool + self.running_job_pool[job_id].join() + + #display output text, if any + completion_output = self.running_job_pool[job_id].completion_output + if (completion_output is not None): + if (callable(completion_output)): + self.progress_display.messenger.info( + unicode(completion_output(result))) + else: + self.progress_display.messenger.info( + unicode(completion_output)) + + #remove job from pool + del(self.running_job_pool[job_id]) + + if (len(self.queued_jobs) > 0): + #if there are jobs in the queue, run another one + self.execute_next_job() + elif (len(self.running_job_pool) == 0): + #otherwise, raise ProgressJobQueueComplete to signal completion + raise ProgressJobQueueComplete() + + def exception(self, job_id, exception): + """Handles an exception caused by the given job.""" + + #clean up job that raised exception + self.running_job_pool[job_id].join() + del(self.running_job_pool[job_id]) + + #clean out job queue + while (len(self.queued_jobs) > 0): + self.queued_jobs.pop(0) + + #and raise exception which will bubble-up through run() + raise exception + + def progress(self, job_id, current, total): + """Updates the progress display of the given job.""" + + self.progress_display.update_row(job_id, current, total) + + def run(self, max_processes=1): + """Runs all the queued jobs in parallel.""" + + import select + + if (len(self.queued_jobs) == 0): + return + + for i in xrange(min(max_processes, len(self.queued_jobs))): + self.execute_next_job() + + try: + while (True): + (rlist, + wlist, + xlist) = select.select([job.output for job + in self.running_job_pool.values()], + [], []) + for reader in rlist: + (command, args) = cPickle.load(reader) + getattr(self, command)(*args) + except ProgressJobQueueComplete: + if (self.cached_exception is not None): + raise self.cached_exception + else: + return + + +class __ExecProgressQueueJob__: + def __init__(self, pid, output, completion_output): + self.pid = pid + self.output = output + self.completion_output = completion_output + + def join(self): + self.output.close() + return os.waitpid(self.pid, 0) + + @classmethod + def spawn(cls, job_id, completion_output, function, args, kwargs): + (read_end, write_end) = os.pipe() + pid = os.fork() + if (pid > 0): + os.close(write_end) + return cls(pid, os.fdopen(read_end, 'rb'), completion_output) + else: + os.close(read_end) + output = os.fdopen(write_end, 'wb') + try: + try: + result = function( + *args, + progress=__JobProgress__(job_id, output).progress, + **kwargs) + cPickle.dump(("completed", [job_id, result]), + output, + cPickle.HIGHEST_PROTOCOL) + except Exception, e: + cPickle.dump(("exception", [job_id, e]), + output, + cPickle.HIGHEST_PROTOCOL) + finally: + sys.exit(0) + + +class __JobProgress__: + def __init__(self, job_id, output): + self.job_id = job_id + self.output = output + + def progress(self, current, total): + cPickle.dump(("progress", [self.job_id, current, total]), + self.output) + self.output.flush() + + +#***ApeAudio temporarily removed*** +#Without a legal alternative to mac-port, I shall have to re-implement +#Monkey's Audio with my own code in order to make it available again. +#Yet another reason to avoid that unpleasant file format... + +AVAILABLE_TYPES = (FlacAudio, + OggFlacAudio, + MP3Audio, + MP2Audio, + WaveAudio, + VorbisAudio, + SpeexAudio, + AiffAudio, + AuAudio, + M4AAudio, + AACAudio, + ALACAudio, + WavPackAudio, + ShortenAudio) + +TYPE_MAP = dict([(track_type.NAME, track_type) + for track_type in AVAILABLE_TYPES + if track_type.has_binaries(BIN)]) + +DEFAULT_QUALITY = dict([(track_type.NAME, + config.get_default("Quality", + track_type.NAME, + track_type.DEFAULT_COMPRESSION)) + for track_type in AVAILABLE_TYPES + if (len(track_type.COMPRESSION_MODES) > 1)]) + +if (DEFAULT_TYPE not in TYPE_MAP.keys()): + DEFAULT_TYPE = "wav" diff --git a/Melodia/resources/audiotools/__m4a__.py b/Melodia/resources/audiotools/__m4a__.py new file mode 100644 index 0000000..c8db893 --- /dev/null +++ b/Melodia/resources/audiotools/__m4a__.py @@ -0,0 +1,1942 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, PCMReader, PCMConverter, + Con, transfer_data, transfer_framelist_data, + subprocess, BIN, cStringIO, MetaData, os, + Image, InvalidImage, ignore_sigint, InvalidFormat, + open, open_files, EncodingError, DecodingError, + WaveAudio, TempWaveReader, + ChannelMask, UnsupportedBitsPerSample, + BufferedPCMReader, to_pcm_progress, + at_a_time, VERSION, PCMReaderError, + __default_quality__) +from __m4a_atoms__ import * +import gettext + +gettext.install("audiotools", unicode=True) + + +####################### +#M4A File +####################### + + +class InvalidM4A(InvalidFile): + pass + + +#M4A files are made up of QuickTime Atoms +#some of those Atoms are containers for sub-Atoms +class __Qt_Atom__: + CONTAINERS = frozenset( + ['dinf', 'edts', 'imag', 'imap', 'mdia', 'mdra', 'minf', + 'moov', 'rmra', 'stbl', 'trak', 'tref', 'udta', 'vnrp']) + + STRUCT = Con.Struct("qt_atom", + Con.UBInt32("size"), + Con.String("type", 4)) + + def __init__(self, type, data, offset): + self.type = type + self.data = data + self.offset = offset + + def __repr__(self): + return "__Qt_Atom__(%s,%s,%s)" % \ + (repr(self.type), + repr(self.data), + repr(self.offset)) + + def __eq__(self, o): + if (hasattr(o, "type") and + hasattr(o, "data")): + return ((self.type == o.type) and + (self.data == o.data)) + else: + return False + + #takes an 8 byte string + #returns an Atom's (type,size) as a tuple + @classmethod + def parse(cls, header_data): + header = cls.STRUCT.parse(header_data) + return (header.type, header.size) + + def build(self): + return __build_qt_atom__(self.type, self.data) + + #performs a search of all sub-atoms to find the one + #with the given type, or None if one cannot be found + def get_atom(self, type): + if (self.type == type): + return self + elif (self.is_container()): + for atom in self: + returned_atom = atom.get_atom(type) + if (returned_atom is not None): + return returned_atom + + return None + + #returns True if the Atom is a container, False if not + def is_container(self): + return self.type in self.CONTAINERS + + def __iter__(self): + for atom in __parse_qt_atoms__(cStringIO.StringIO(self.data), + __Qt_Atom__): + yield atom + + def __len__(self): + count = 0 + for atom in self: + count += 1 + return count + + def __getitem__(self, type): + for atom in self: + if (atom.type == type): + return atom + raise KeyError(type) + + def keys(self): + return [atom.type for atom in self] + + +#a stream of __Qt_Atom__ objects +#though it is an Atom-like container, it has no type of its own +class __Qt_Atom_Stream__(__Qt_Atom__): + def __init__(self, stream): + self.stream = stream + self.atom_class = __Qt_Atom__ + + __Qt_Atom__.__init__(self, None, None, 0) + + def is_container(self): + return True + + def __iter__(self): + self.stream.seek(0, 0) + + for atom in __parse_qt_atoms__(self.stream, + self.atom_class, + self.offset): + yield atom + + +Qt_Atom_Stream = __Qt_Atom_Stream__ + + +#takes a stream object with a read() method +#iterates over all of the atoms it contains and yields +#a series of qt_class objects, which defaults to __Qt_Atom__ +def __parse_qt_atoms__(stream, qt_class=__Qt_Atom__, base_offset=0): + h = stream.read(8) + while (len(h) == 8): + (header_type, header_size) = qt_class.parse(h) + if (header_size == 0): + yield qt_class(header_type, + stream.read(), + base_offset) + else: + yield qt_class(header_type, + stream.read(header_size - 8), + base_offset) + base_offset += header_size + + h = stream.read(8) + + +def __build_qt_atom__(atom_type, atom_data): + con = Con.Container() + con.type = atom_type + con.size = len(atom_data) + __Qt_Atom__.STRUCT.sizeof() + return __Qt_Atom__.STRUCT.build(con) + atom_data + + +#takes an existing __Qt_Atom__ object (possibly a container) +#and a __Qt_Atom__ to replace +#finds all sub-atoms with the same type as new_atom and replaces them +#returns a string +def __replace_qt_atom__(qt_atom, new_atom): + if (qt_atom.type is None): + return "".join( + [__replace_qt_atom__(a, new_atom) for a in qt_atom]) + elif (qt_atom.type == new_atom.type): + #if we've found the atom to replace, + #build a new atom string from new_atom's data + return __build_qt_atom__(new_atom.type, new_atom.data) + else: + #if we're still looking for the atom to replace + if (not qt_atom.is_container()): + #build the old atom string from qt_atom's data + #if it is not a container + return __build_qt_atom__(qt_atom.type, qt_atom.data) + else: + #recursively build the old atom's data + #with values from __replace_qt_atom__ + return __build_qt_atom__(qt_atom.type, + "".join( + [__replace_qt_atom__(a, new_atom) for a in qt_atom])) + + +def __remove_qt_atom__(qt_atom, atom_name): + if (qt_atom.type is None): + return "".join( + [__remove_qt_atom__(a, atom_name) for a in qt_atom]) + elif (qt_atom.type == atom_name): + return "" + else: + if (not qt_atom.is_container()): + return __build_qt_atom__(qt_atom.type, qt_atom.data) + else: + return __build_qt_atom__(qt_atom.type, + "".join( + [__remove_qt_atom__(a, atom_name) for a in qt_atom])) + + +class M4AAudio_faac(AudioFile): + """An M4A audio file using faac/faad binaries for I/O.""" + + SUFFIX = "m4a" + NAME = SUFFIX + DEFAULT_COMPRESSION = "100" + COMPRESSION_MODES = tuple(["10"] + map(str, range(50, 500, 25)) + ["500"]) + BINARIES = ("faac", "faad") + + MP4A_ATOM = Con.Struct("mp4a", + Con.UBInt32("length"), + Con.String("type", 4), + Con.String("reserved", 6), + Con.UBInt16("reference_index"), + Con.UBInt16("version"), + Con.UBInt16("revision_level"), + Con.String("vendor", 4), + Con.UBInt16("channels"), + Con.UBInt16("bits_per_sample")) + + MDHD_ATOM = Con.Struct("mdhd", + Con.Byte("version"), + Con.Bytes("flags", 3), + Con.UBInt32("creation_date"), + Con.UBInt32("modification_date"), + Con.UBInt32("sample_rate"), + Con.UBInt32("track_length")) + + def __init__(self, filename): + """filename is a plain string.""" + + self.filename = filename + try: + self.qt_stream = __Qt_Atom_Stream__(file(self.filename, "rb")) + except IOError, msg: + raise InvalidM4A(str(msg)) + + try: + mp4a = M4AAudio.MP4A_ATOM.parse( + self.qt_stream['moov']['trak']['mdia']['minf']['stbl'][ + 'stsd'].data[8:]) + + self.__channels__ = mp4a.channels + self.__bits_per_sample__ = mp4a.bits_per_sample + + mdhd = M4AAudio.MDHD_ATOM.parse( + self.qt_stream['moov']['trak']['mdia']['mdhd'].data) + + self.__sample_rate__ = mdhd.sample_rate + self.__length__ = mdhd.track_length + except KeyError: + raise InvalidM4A(_(u'Required moov atom not found')) + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + #M4A seems to use the same channel assignment + #as old-style RIFF WAVE/FLAC + if (self.channels() == 1): + return ChannelMask.from_fields( + front_center=True) + elif (self.channels() == 2): + return ChannelMask.from_fields( + front_left=True, front_right=True) + elif (self.channels() == 3): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True) + elif (self.channels() == 4): + return ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.channels() == 5): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True) + elif (self.channels() == 6): + return ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True, + back_left=True, back_right=True, + low_frequency=True) + else: + return ChannelMask(0) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(12) + + if ((header[4:8] == 'ftyp') and + (header[8:12] in ('mp41', 'mp42', 'M4A ', 'M4B '))): + file.seek(0, 0) + atoms = __Qt_Atom_Stream__(file) + try: + return (ATOM_STSD.parse(atoms['moov']['trak']['mdia']['minf']['stbl']['stsd'].data).descriptions[0].type == 'mp4a') + except (Con.ConstError, Con.FieldError, Con.ArrayError, KeyError, + IndexError): + return False + else: + return False + + def lossless(self): + """Returns False.""" + + return False + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bits_per_sample__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + def cd_frames(self): + """Returns the total length of the track in CD frames. + + Each CD frame is 1/75th of a second.""" + + return (self.__length__ - 1024) / self.__sample_rate__ * 75 + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__length__ - 1024 + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + f = file(self.filename, 'rb') + try: + qt_stream = __Qt_Atom_Stream__(f) + try: + meta_atom = ATOM_META.parse( + qt_stream['moov']['udta']['meta'].data) + except KeyError: + return None + + for atom in meta_atom.atoms: + if (atom.type == 'ilst'): + return M4AMetaData([ + ILST_Atom( + type=ilst_atom.type, + sub_atoms=[__Qt_Atom__(type=sub_atom.type, + data=sub_atom.data, + offset=0) + for sub_atom in ilst_atom.data]) + for ilst_atom in ATOM_ILST.parse(atom.data)]) + else: + return None + finally: + f.close() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + metadata = M4AMetaData.converted(metadata) + if (metadata is None): + return + + old_metadata = self.get_metadata() + if (old_metadata is not None): + if ('----' in old_metadata.keys()): + metadata['----'] = old_metadata['----'] + if ('=A9too'.decode('quopri') in old_metadata.keys()): + metadata['=A9too'.decode('quopri')] = \ + old_metadata['=A9too'.decode('quopri')] + + new_meta = metadata.to_atom(self.qt_stream['moov']['udta']['meta']) + + #first, attempt to replace the meta atom by resizing free + + #check to ensure our file is laid out correctly for that purpose + if (self.qt_stream.keys() == ['ftyp', 'moov', 'free', 'mdat']): + old_pre_mdat_size = sum([len(self.qt_stream[atom].data) + 8 + for atom in 'ftyp', 'moov', 'free']) + + #if so, replace moov's old meta atom with our new one + new_moov = __replace_qt_atom__(self.qt_stream['moov'], + new_meta) + + #and see if we can shrink the free atom enough to fit + new_pre_mdat_size = (len(self.qt_stream['ftyp'].data) + 8 + + len(new_moov) + 8) + + if (new_pre_mdat_size <= old_pre_mdat_size): + #if we can, replace the start of the file with a new set of + #ftyp, moov, free atoms while leaving mdat alone + f = file(self.filename, 'r+b') + f.write(self.qt_stream['ftyp'].build()) + f.write(new_moov) + f.write(__build_qt_atom__('free', + chr(0) * (old_pre_mdat_size - + new_pre_mdat_size))) + f.close() + + f = file(self.filename, "rb") + self.qt_stream = __Qt_Atom_Stream__(f) + else: + self.__set_meta_atom__(new_meta) + else: + #otherwise, run a traditional full file replacement + self.__set_meta_atom__(new_meta) + + #this updates our old 'meta' atom with a new 'meta' atom + #where meta_atom is a __Qt_Atom__ object + def __set_meta_atom__(self, meta_atom): + #this is a two-pass operation + #first we replace the contents of the moov->udta->meta atom + #with our new 'meta' atom + #this may move the 'mdat' atom, so we must go back + #and update the contents of + #moov->trak->mdia->minf->stbl->stco + #with new offset information + + stco = ATOM_STCO.parse( + self.qt_stream['moov']['trak']['mdia']['minf']['stbl']['stco'].data) + + mdat_offset = stco.offset[0] - self.qt_stream['mdat'].offset + + new_file = __Qt_Atom_Stream__(cStringIO.StringIO( + __replace_qt_atom__(self.qt_stream, meta_atom))) + + mdat_offset = new_file['mdat'].offset + mdat_offset + + stco.offset = [x - stco.offset[0] + mdat_offset + for x in stco.offset] + + new_file = __replace_qt_atom__(new_file, + __Qt_Atom__('stco', + ATOM_STCO.build(stco), + 0)) + + f = file(self.filename, "wb") + f.write(new_file) + f.close() + + f = file(self.filename, "rb") + self.qt_stream = __Qt_Atom_Stream__(f) + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + self.set_metadata(MetaData()) + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + devnull = file(os.devnull, "ab") + + sub = subprocess.Popen([BIN['faad'], "-f", str(2), "-w", + self.filename], + stdout=subprocess.PIPE, + stderr=devnull) + return PCMReader( + sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample(), + process=sub) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new M4AAudio object.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if (pcmreader.channels > 2): + pcmreader = PCMConverter(pcmreader, + sample_rate=pcmreader.sample_rate, + channels=2, + channel_mask=ChannelMask.from_channels(2), + bits_per_sample=pcmreader.bits_per_sample) + + #faac requires files to end with .m4a for some reason + if (not filename.endswith(".m4a")): + import tempfile + actual_filename = filename + tempfile = tempfile.NamedTemporaryFile(suffix=".m4a") + filename = tempfile.name + else: + actual_filename = tempfile = None + + devnull = file(os.devnull, "ab") + + sub = subprocess.Popen([BIN['faac'], + "-q", compression, + "-P", + "-R", str(pcmreader.sample_rate), + "-B", str(pcmreader.bits_per_sample), + "-C", str(pcmreader.channels), + "-X", + "-o", filename, + "-"], + stdin=subprocess.PIPE, + stderr=devnull, + stdout=devnull, + preexec_fn=ignore_sigint) + #Note: faac handles SIGINT on its own, + #so trying to ignore it doesn't work like on most other encoders. + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (ValueError, IOError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + sub.stdin.close() + + if (sub.wait() == 0): + if (tempfile is not None): + filename = actual_filename + f = file(filename, 'wb') + tempfile.seek(0, 0) + transfer_data(tempfile.read, f.write) + f.close() + tempfile.close() + + return M4AAudio(filename) + else: + if (tempfile is not None): + tempfile.close() + raise EncodingError(u"unable to write file with faac") + + @classmethod + def can_add_replay_gain(cls): + """Returns False.""" + + return False + + @classmethod + def lossless_replay_gain(cls): + """Returns False.""" + + return False + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + track_names = [track.filename for track in + open_files(filenames) if + isinstance(track, cls)] + + if (progress is not None): + progress(0, 1) + + #helpfully, aacgain is flag-for-flag compatible with mp3gain + if ((len(track_names) > 0) and (BIN.can_execute(BIN['aacgain']))): + devnull = file(os.devnull, 'ab') + sub = subprocess.Popen([BIN['aacgain'], '-k', '-q', '-r'] + \ + track_names, + stdout=devnull, + stderr=devnull) + sub.wait() + + devnull.close() + + if (progress is not None): + progress(1, 1) + + +class M4AAudio_nero(M4AAudio_faac): + """An M4A audio file using neroAacEnc/neroAacDec binaries for I/O.""" + + DEFAULT_COMPRESSION = "0.5" + COMPRESSION_MODES = ("0.0", "0.1", "0.2", "0.3", "0.4", "0.5", + "0.6", "0.7", "0.8", "0.9", "1.0") + COMPRESSION_DESCRIPTIONS = {"0.0": _(u"lowest quality, " + + u"corresponds to neroAacEnc -q 0"), + "1.0": _(u"highest quality, " + + u"corresponds to neroAacEnc -q 1")} + BINARIES = ("neroAacDec", "neroAacEnc") + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new M4AAudio object.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + import tempfile + tempwavefile = tempfile.NamedTemporaryFile(suffix=".wav") + try: + if (pcmreader.sample_rate > 96000): + tempwave = WaveAudio.from_pcm( + tempwavefile.name, + PCMConverter(pcmreader, + sample_rate=96000, + channels=pcmreader.channels, + channel_mask=pcmreader.channel_mask, + bits_per_sample=pcmreader.bits_per_sample)) + else: + tempwave = WaveAudio.from_pcm( + tempwavefile.name, + pcmreader) + + cls.__from_wave__(filename, tempwave.filename, compression) + return cls(filename) + finally: + if (os.path.isfile(tempwavefile.name)): + tempwavefile.close() + else: + tempwavefile.close_called = True + + def to_pcm(self): + import tempfile + f = tempfile.NamedTemporaryFile(suffix=".wav") + try: + self.to_wave(f.name) + f.seek(0, 0) + return TempWaveReader(f) + except EncodingError, err: + return PCMReaderError(error_message=err.error_message, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample()) + + def to_wave(self, wave_file, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + devnull = file(os.devnull, "w") + try: + sub = subprocess.Popen([BIN["neroAacDec"], + "-if", self.filename, + "-of", wave_file], + stdout=devnull, + stderr=devnull) + if (sub.wait() != 0): + raise EncodingError(u"unable to write file with neroAacDec") + finally: + devnull.close() + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new M4AAudio object.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + try: + wave = WaveAudio(wave_filename) + wave.verify() + except InvalidFile: + raise EncodingError(u"invalid wave file") + + if (wave.sample_rate > 96000): + #convert through PCMConverter if sample rate is too high + import tempfile + tempwavefile = tempfile.NamedTemporaryFile(suffix=".wav") + try: + tempwave = WaveAudio.from_pcm( + tempwavefile.name, + PCMConverter(to_pcm_progress(wave, progress), + sample_rate=96000, + channels=wave.channels(), + channel_mask=wave.channel_mask(), + bits_per_sample=wave.bits_per_sample())) + return cls.__from_wave__(filename, tempwave.filename, + compression) + finally: + if (os.path.isfile(tempwavefile.name)): + tempwavefile.close() + else: + tempwavefile.close_called = True + else: + return cls.__from_wave__(filename, wave_filename, compression) + + @classmethod + def __from_wave__(cls, filename, wave_filename, compression): + devnull = file(os.devnull, "w") + try: + sub = subprocess.Popen([BIN["neroAacEnc"], + "-q", compression, + "-if", wave_filename, + "-of", filename], + stdout=devnull, + stderr=devnull) + + if (sub.wait() != 0): + raise EncodingError(u"neroAacEnc unable to write file") + else: + return cls(filename) + finally: + devnull.close() + +if (BIN.can_execute(BIN["neroAacEnc"]) and + BIN.can_execute(BIN["neroAacDec"])): + M4AAudio = M4AAudio_nero +else: + M4AAudio = M4AAudio_faac + + +class ILST_Atom: + """An ILST sub-atom, which itself is a container for other atoms. + + For human-readable fields, those will contain a single DATA sub-atom + containing the data itself. + For instance: + + 'ilst' atom + | + +-'\xa9nam' atom + | + +-'data' atom + | + +-'\x00\x00\x00\x01\x00\x00\x00\x00Track Name' data + """ + + #type is a string + #sub_atoms is a list of __Qt_Atom__-compatible sub-atom objects + def __init__(self, type, sub_atoms): + self.type = type + self.data = sub_atoms + + def __eq__(self, o): + if (hasattr(o, "type") and + hasattr(o, "data")): + return ((self.type == o.type) and + (self.data == o.data)) + else: + return False + + def __len__(self): + return len(self.data) + + def __repr__(self): + return "ILST_Atom(%s,%s)" % (repr(self.type), + repr(self.data)) + + def __unicode__(self): + for atom in self.data: + if (atom.type == 'data'): + if (atom.data.startswith('0000000100000000'.decode('hex'))): + return atom.data[8:].decode('utf-8') + elif (self.type == 'trkn'): + trkn = ATOM_TRKN.parse(atom.data[8:]) + if (trkn.total_tracks > 0): + return u"%d/%d" % (trkn.track_number, + trkn.total_tracks) + else: + return unicode(trkn.track_number) + elif (self.type == 'disk'): + disk = ATOM_DISK.parse(atom.data[8:]) + if (disk.total_disks > 0): + return u"%d/%d" % (disk.disk_number, + disk.total_disks) + else: + return unicode(disk.disk_number) + else: + if (len(atom.data) > 28): + return unicode( + atom.data[8:20].encode('hex').upper()) + u"\u2026" + else: + return unicode(atom.data[8:].encode('hex')) + else: + return u"" + + def __str__(self): + for atom in self.data: + if (atom.type == 'data'): + return atom.data + else: + return "" + + +class M4AMetaData(MetaData, dict): + """meta atoms are typically laid out like: + + meta + |-hdlr + |-ilst + | |- nam + | | \-data + | \-trkn + | \-data + \-free + + where the stuff we're interested in is in ilst + and its data grandchild atoms. + """ + # iTunes ID: + ATTRIBUTE_MAP = { + 'track_name': '=A9nam'.decode('quopri'), # Name + 'artist_name': '=A9ART'.decode('quopri'), # Artist + 'year': '=A9day'.decode('quopri'), # Year + 'track_number': 'trkn', # Track Number + 'track_total': 'trkn', + 'album_name': '=A9alb'.decode('quopri'), # Album + 'album_number': 'disk', # Disc Number + 'album_total': 'disk', + 'composer_name': '=A9wrt'.decode('quopri'), # Composer + 'comment': '=A9cmt'.decode('quopri'), # Comments + 'copyright': 'cprt'} # (not listed) + + def __init__(self, ilst_atoms): + dict.__init__(self) + for ilst_atom in ilst_atoms: + self.setdefault(ilst_atom.type, []).append(ilst_atom) + + @classmethod + def binary_atom(cls, key, value): + """Generates a binary ILST_Atom list from key and value strings. + + The returned list is suitable for adding to our internal dict.""" + + return [ILST_Atom(key, + [__Qt_Atom__( + "data", + value, + 0)])] + + @classmethod + def text_atom(cls, key, text): + """Generates a text ILST_Atom list from key and text values. + + key is a binary string, text is a unicode string. + The returned list is suitable for adding to our internal dict.""" + + return cls.binary_atom(key, '0000000100000000'.decode('hex') + \ + text.encode('utf-8')) + + @classmethod + def trkn_atom(cls, track_number, track_total): + """Generates a trkn ILST_Atom list from integer values.""" + + return cls.binary_atom('trkn', + '0000000000000000'.decode('hex') + \ + ATOM_TRKN.build( + Con.Container( + track_number=track_number, + total_tracks=track_total))) + + @classmethod + def disk_atom(cls, disk_number, disk_total): + """Generates a disk ILST_Atom list from integer values.""" + + return cls.binary_atom('disk', + '0000000000000000'.decode('hex') + \ + ATOM_DISK.build( + Con.Container( + disk_number=disk_number, + total_disks=disk_total))) + + @classmethod + def covr_atom(cls, image_data): + """Generates a covr ILST_Atom list from raw image binary data.""" + + return cls.binary_atom('covr', + '0000000000000000'.decode('hex') + \ + image_data) + + #if an attribute is updated (e.g. self.track_name) + #make sure to update the corresponding dict pair + def __setattr__(self, key, value): + if (key in self.ATTRIBUTE_MAP.keys()): + if (key not in MetaData.__INTEGER_FIELDS__): + self[self.ATTRIBUTE_MAP[key]] = self.__class__.text_atom( + self.ATTRIBUTE_MAP[key], + value) + + elif (key == 'track_number'): + self[self.ATTRIBUTE_MAP[key]] = self.__class__.trkn_atom( + int(value), self.track_total) + + elif (key == 'track_total'): + self[self.ATTRIBUTE_MAP[key]] = self.__class__.trkn_atom( + self.track_number, int(value)) + + elif (key == 'album_number'): + self[self.ATTRIBUTE_MAP[key]] = self.__class__.disk_atom( + int(value), self.album_total) + + elif (key == 'album_total'): + self[self.ATTRIBUTE_MAP[key]] = self.__class__.disk_atom( + self.album_number, int(value)) + + def __getattr__(self, key): + if (key == 'track_number'): + return ATOM_TRKN.parse( + str(self.get('trkn', [chr(0) * 16])[0])[8:]).track_number + elif (key == 'track_total'): + return ATOM_TRKN.parse( + str(self.get('trkn', [chr(0) * 16])[0])[8:]).total_tracks + elif (key == 'album_number'): + return ATOM_DISK.parse( + str(self.get('disk', [chr(0) * 14])[0])[8:]).disk_number + elif (key == 'album_total'): + return ATOM_DISK.parse( + str(self.get('disk', [chr(0) * 14])[0])[8:]).total_disks + elif (key in self.ATTRIBUTE_MAP): + return unicode(self.get(self.ATTRIBUTE_MAP[key], [u''])[0]) + elif (key in MetaData.__FIELDS__): + return u'' + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __delattr__(self, key): + if (key == 'track_number'): + setattr(self, 'track_number', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self['trkn']) + elif (key == 'track_total'): + setattr(self, 'track_total', 0) + if ((self.track_number == 0) and (self.track_total == 0)): + del(self['trkn']) + elif (key == 'album_number'): + setattr(self, 'album_number', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self['disk']) + elif (key == 'album_total'): + setattr(self, 'album_total', 0) + if ((self.album_number == 0) and (self.album_total == 0)): + del(self['disk']) + elif (key in self.ATTRIBUTE_MAP): + if (self.ATTRIBUTE_MAP[key] in self): + del(self[self.ATTRIBUTE_MAP[key]]) + elif (key in MetaData.__FIELDS__): + pass + else: + try: + del(self.__dict__[key]) + except KeyError: + raise AttributeError(key) + + def images(self): + """Returns a list of embedded Image objects.""" + + try: + return [M4ACovr(str(i)[8:]) for i in self['covr'] + if (len(str(i)) > 8)] + except KeyError: + return list() + + def add_image(self, image): + """Embeds an Image object in this metadata.""" + + if (image.type == 0): + self.setdefault('covr', []).append(self.__class__.covr_atom( + image.data)[0]) + + def delete_image(self, image): + """Deletes an Image object from this metadata.""" + + i = 0 + for image_atom in self.get('covr', []): + if (str(image_atom)[8:] == image.data): + del(self['covr'][i]) + break + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to a M4AMetaData object.""" + + if ((metadata is None) or (isinstance(metadata, M4AMetaData))): + return metadata + + m4a = M4AMetaData([]) + + for (field, key) in cls.ATTRIBUTE_MAP.items(): + value = getattr(metadata, field) + if (field not in cls.__INTEGER_FIELDS__): + if (value != u''): + m4a[key] = cls.text_atom(key, value) + + if ((metadata.track_number != 0) or + (metadata.track_total != 0)): + m4a['trkn'] = cls.trkn_atom(metadata.track_number, + metadata.track_total) + + if ((metadata.album_number != 0) or + (metadata.album_total != 0)): + m4a['disk'] = cls.disk_atom(metadata.album_number, + metadata.album_total) + + if (len(metadata.front_covers()) > 0): + m4a['covr'] = [cls.covr_atom(i.data)[0] + for i in metadata.front_covers()] + + m4a['cpil'] = cls.binary_atom( + 'cpil', + '0000001500000000'.decode('hex') + chr(1)) + + return m4a + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + metadata = self.__class__.converted(metadata) + if (metadata is None): + return + + for (key, values) in metadata.items(): + if ((key not in 'trkn', 'disk') and + (len(values) > 0) and + (len(self.get(key, [])) == 0)): + self[key] = values + for attr in ("track_number", "track_total", + "album_number", "album_total"): + if ((getattr(self, attr) == 0) and + (getattr(metadata, attr) != 0)): + setattr(self, attr, getattr(metadata, attr)) + + def to_atom(self, previous_meta): + """Returns a 'meta' __Qt_Atom__ object from this M4AMetaData.""" + + previous_meta = ATOM_META.parse(previous_meta.data) + + new_meta = Con.Container(version=previous_meta.version, + flags=previous_meta.flags, + atoms=[]) + + ilst = [] + for values in self.values(): + for ilst_atom in values: + ilst.append(Con.Container(type=ilst_atom.type, + data=[ + Con.Container(type=sub_atom.type, + data=sub_atom.data) + for sub_atom in ilst_atom.data])) + + #port the non-ilst atoms from old atom to new atom directly + # + for sub_atom in previous_meta.atoms: + if (sub_atom.type == 'ilst'): + new_meta.atoms.append(Con.Container( + type='ilst', + data=ATOM_ILST.build(ilst))) + else: + new_meta.atoms.append(sub_atom) + + return __Qt_Atom__( + 'meta', + ATOM_META.build(new_meta), + 0) + + def __comment_name__(self): + return u'M4A' + + @classmethod + def supports_images(self): + """Returns True.""" + + return True + + @classmethod + def __by_pair__(cls, pair1, pair2): + KEY_MAP = {" nam": 1, + " ART": 6, + " com": 5, + " alb": 2, + "trkn": 3, + "disk": 4, + "----": 8} + + return cmp((KEY_MAP.get(pair1[0], 7), pair1[0], pair1[1]), + (KEY_MAP.get(pair2[0], 7), pair2[0], pair2[1])) + + def __comment_pairs__(self): + pairs = [] + for (key, values) in self.items(): + for value in values: + pairs.append((key.replace(chr(0xA9), ' '), unicode(value))) + pairs.sort(M4AMetaData.__by_pair__) + return pairs + + +class M4ACovr(Image): + """A subclass of Image to store M4A 'covr' atoms.""" + + def __init__(self, image_data): + self.image_data = image_data + + img = Image.new(image_data, u'', 0) + + Image.__init__(self, + data=image_data, + mime_type=img.mime_type, + width=img.width, + height=img.height, + color_depth=img.color_depth, + color_count=img.color_count, + description=img.description, + type=img.type) + + @classmethod + def converted(cls, image): + """Given an Image object, returns an M4ACovr object.""" + + return M4ACovr(image.data) + + +class __counter__: + def __init__(self): + self.val = 0 + + def incr(self): + self.val += 1 + + def __int__(self): + return self.val + + +class InvalidALAC(InvalidFile): + pass + + +class ALACAudio(M4AAudio_faac): + """An Apple Lossless audio file.""" + + SUFFIX = "m4a" + NAME = "alac" + DEFAULT_COMPRESSION = "" + COMPRESSION_MODES = ("",) + BINARIES = tuple() + + ALAC_ATOM = Con.Struct("stsd_alac", + Con.String("reserved", 6), + Con.UBInt16("reference_index"), + Con.UBInt16("version"), + Con.UBInt16("revision_level"), + Con.String("vendor", 4), + Con.UBInt16("channels"), + Con.UBInt16("bits_per_sample"), + Con.UBInt16("compression_id"), + Con.UBInt16("audio_packet_size"), + #this sample rate always seems to be 0xAC440000 + #no matter what the other sample rate fields are + Con.Bytes("sample_rate", 4), + Con.Struct("alac", + Con.UBInt32("length"), + Con.Const(Con.String("type", 4), + 'alac'), + Con.Padding(4), + Con.UBInt32("max_samples_per_frame"), + Con.Padding(1), + Con.UBInt8("sample_size"), + Con.UBInt8("history_multiplier"), + Con.UBInt8("initial_history"), + Con.UBInt8("maximum_k"), + Con.UBInt8("channels"), + Con.UBInt16("unknown"), + Con.UBInt32("max_coded_frame_size"), + Con.UBInt32("bitrate"), + Con.UBInt32("sample_rate"))) + + ALAC_FTYP = AtomWrapper("ftyp", ATOM_FTYP) + + ALAC_MOOV = AtomWrapper( + "moov", Con.Struct( + "moov", + AtomWrapper("mvhd", ATOM_MVHD), + AtomWrapper("trak", Con.Struct( + "trak", + AtomWrapper("tkhd", ATOM_TKHD), + AtomWrapper("mdia", Con.Struct( + "mdia", + AtomWrapper("mdhd", ATOM_MDHD), + AtomWrapper("hdlr", ATOM_HDLR), + AtomWrapper("minf", Con.Struct( + "minf", + AtomWrapper("smhd", ATOM_SMHD), + AtomWrapper("dinf", Con.Struct( + "dinf", + AtomWrapper("dref", ATOM_DREF))), + AtomWrapper("stbl", Con.Struct( + "stbl", + AtomWrapper("stsd", ATOM_STSD), + AtomWrapper("stts", ATOM_STTS), + AtomWrapper("stsc", ATOM_STSC), + AtomWrapper("stsz", ATOM_STSZ), + AtomWrapper("stco", ATOM_STCO))))))))), + AtomWrapper("udta", Con.Struct( + "udta", + AtomWrapper("meta", ATOM_META))))) + + BLOCK_SIZE = 4096 + INITIAL_HISTORY = 10 + HISTORY_MULTIPLIER = 40 + MAXIMUM_K = 14 + + def __init__(self, filename): + """filename is a plain string.""" + + self.filename = filename + try: + self.qt_stream = __Qt_Atom_Stream__(file(self.filename, "rb")) + except IOError, msg: + raise InvalidALAC(str(msg)) + + try: + alac = ALACAudio.ALAC_ATOM.parse( + ATOM_STSD.parse(self.qt_stream['moov']['trak']['mdia'][ + 'minf']['stbl']['stsd'].data).descriptions[0].data) + + self.__channels__ = alac.alac.channels + self.__bits_per_sample__ = alac.bits_per_sample + self.__sample_rate__ = alac.alac.sample_rate + + mdhd = M4AAudio.MDHD_ATOM.parse( + self.qt_stream['moov']['trak']['mdia']['mdhd'].data) + + self.__length__ = mdhd.track_length + except KeyError: + raise InvalidALAC(_(u'Required moov atom not found')) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(12) + + if ((header[4:8] == 'ftyp') and + (header[8:12] in ('mp41', 'mp42', 'M4A ', 'M4B '))): + file.seek(0, 0) + atoms = __Qt_Atom_Stream__(file) + try: + return (ATOM_STSD.parse(atoms['moov']['trak']['mdia']['minf']['stbl']['stsd'].data).descriptions[0].type == 'alac') + except (Con.ConstError, Con.FieldError, Con.ArrayError, KeyError, + IndexError): + return False + else: + return False + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__length__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + try: + #FIXME - see if it's possible to find an actual channel mask + #for multichannel ALAC audio + return ChannelMask.from_channels(self.channels()) + except ValueError: + return ChannelMask(0) + + def cd_frames(self): + """Returns the total length of the track in CD frames. + + Each CD frame is 1/75th of a second.""" + + try: + return (self.total_frames() * 75) / self.sample_rate() + except ZeroDivisionError: + return 0 + + def lossless(self): + """Returns True.""" + + return True + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + import audiotools.decoders + + try: + f = file(self.filename, 'rb') + qt = __Qt_Atom_Stream__(f) + alac = ALACAudio.ALAC_ATOM.parse( + ATOM_STSD.parse( + qt['moov']['trak']['mdia']['minf']['stbl'][ + 'stsd'].data).descriptions[0].data).alac + f.close() + + return audiotools.decoders.ALACDecoder( + filename=self.filename, + sample_rate=alac.sample_rate, + channels=alac.channels, + channel_mask=self.channel_mask(), + bits_per_sample=alac.sample_size, + total_frames=self.total_frames(), + max_samples_per_frame=alac.max_samples_per_frame, + history_multiplier=alac.history_multiplier, + initial_history=alac.initial_history, + maximum_k=alac.maximum_k) + except (Con.FieldError, Con.ArrayError, IOError, ValueError), msg: + return PCMReaderError(error_message=str(msg), + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample()) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None, + block_size=4096): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new ALACAudio object.""" + + if (pcmreader.bits_per_sample not in (16, 24)): + raise UnsupportedBitsPerSample(filename, pcmreader.bits_per_sample) + + from . import encoders + import time + import tempfile + + mdat_file = tempfile.TemporaryFile() + + #perform encode_alac() on pcmreader to our output file + #which returns a tuple of output values: + #(framelist, - a list of (frame_samples,frame_size,frame_offset) tuples + # various fields for the "alac" atom) + try: + (frame_sample_sizes, + frame_byte_sizes, + frame_file_offsets, + mdat_size) = encoders.encode_alac( + file=mdat_file, + pcmreader=BufferedPCMReader(pcmreader), + block_size=block_size, + initial_history=cls.INITIAL_HISTORY, + history_multiplier=cls.HISTORY_MULTIPLIER, + maximum_k=cls.MAXIMUM_K) + except (IOError, ValueError), err: + raise EncodingError(str(err)) + + #use the fields from encode_alac() to populate our ALAC atoms + create_date = long(time.time()) + 2082844800 + total_pcm_frames = sum(frame_sample_sizes) + + stts_frame_counts = {} + for sample_size in frame_sample_sizes: + stts_frame_counts.setdefault(sample_size, __counter__()).incr() + + offsets = frame_file_offsets[:] + chunks = [] + for frames in at_a_time(len(frame_file_offsets), 5): + if (frames > 0): + chunks.append(offsets[0:frames]) + offsets = offsets[frames:] + del(offsets) + + #add the size of ftyp + moov + free to our absolute file offsets + pre_mdat_size = (len(cls.__build_ftyp_atom__()) + + len(cls.__build_moov_atom__(pcmreader, + create_date, + mdat_size, + total_pcm_frames, + frame_sample_sizes, + stts_frame_counts, + chunks, + frame_byte_sizes)) + + len(cls.__build_free_atom__(0x1000))) + chunks = [[chunk + pre_mdat_size for chunk in chunk_list] + for chunk_list in chunks] + + #then regenerate our live ftyp, moov and free atoms + #with actual data + ftyp = cls.__build_ftyp_atom__() + + moov = cls.__build_moov_atom__(pcmreader, + create_date, + mdat_size, + total_pcm_frames, + frame_sample_sizes, + stts_frame_counts, + chunks, + frame_byte_sizes) + + free = cls.__build_free_atom__(0x1000) + + #build our complete output file + try: + f = file(filename, 'wb') + + mdat_file.seek(0, 0) + f.write(ftyp) + f.write(moov) + f.write(free) + transfer_data(mdat_file.read, f.write) + f.close() + mdat_file.close() + except (IOError), err: + mdat_file.close() + raise EncodingError(str(err)) + + return cls(filename) + + @classmethod + def __build_ftyp_atom__(cls): + return cls.ALAC_FTYP.build( + Con.Container(major_brand='M4A ', + major_brand_version=0, + compatible_brands=['M4A ', + 'mp42', + 'isom', + chr(0) * 4])) + + @classmethod + def __build_moov_atom__(cls, pcmreader, + create_date, + mdat_size, + total_pcm_frames, + frame_sample_sizes, + stts_frame_counts, + chunks, + frame_byte_sizes): + version = (chr(0) * 3) + chr(1) + (chr(0) * 4) + ( + "Python Audio Tools %s" % (VERSION)) + + tool = Con.Struct('tool', + Con.UBInt32('size'), + Con.String('type', 4), + Con.Struct('data', + Con.UBInt32('size'), + Con.String('type', 4), + Con.String( + 'data', + lambda ctx: ctx["size"] - 8))).build( + Con.Container(size=len(version) + 16, + type=chr(0xa9) + 'too', + data=Con.Container(size=len(version) + 8, + type='data', + data=version))) + + return cls.ALAC_MOOV.build( + Con.Container( + mvhd=Con.Container(version=0, + flags=chr(0) * 3, + created_mac_UTC_date=create_date, + modified_mac_UTC_date=create_date, + time_scale=pcmreader.sample_rate, + duration=total_pcm_frames, + playback_speed=0x10000, + user_volume=0x100, + windows=Con.Container( + geometry_matrix_a=0x10000, + geometry_matrix_b=0, + geometry_matrix_u=0, + geometry_matrix_c=0, + geometry_matrix_d=0x10000, + geometry_matrix_v=0, + geometry_matrix_x=0, + geometry_matrix_y=0, + geometry_matrix_w=0x40000000), + quicktime_preview=0, + quicktime_still_poster=0, + quicktime_selection_time=0, + quicktime_current_time=0, + next_track_id=2), + trak=Con.Container( + tkhd=Con.Container(version=0, + flags=Con.Container( + TrackInPoster=0, + TrackInPreview=1, + TrackInMovie=1, + TrackEnabled=1), + created_mac_UTC_date=create_date, + modified_mac_UTC_date=create_date, + track_id=1, + duration=total_pcm_frames, + video_layer=0, + quicktime_alternate=0, + volume=0x100, + video=Con.Container( + geometry_matrix_a=0x10000, + geometry_matrix_b=0, + geometry_matrix_u=0, + geometry_matrix_c=0, + geometry_matrix_d=0x10000, + geometry_matrix_v=0, + geometry_matrix_x=0, + geometry_matrix_y=0, + geometry_matrix_w=0x40000000), + video_width=0, + video_height=0), + mdia=Con.Container( + mdhd=Con.Container(version=0, + flags=chr(0) * 3, + created_mac_UTC_date=create_date, + modified_mac_UTC_date=create_date, + time_scale=pcmreader.sample_rate, + duration=total_pcm_frames, + languages=Con.Container( + language=[0x15, 0x0E, 0x04]), + quicktime_quality=0), + hdlr=Con.Container( + version=0, + flags=chr(0) * 3, + quicktime_type=chr(0) * 4, + subtype='soun', + quicktime_manufacturer=chr(0) * 4, + quicktime_component_reserved_flags=0, + quicktime_component_reserved_flags_mask=0, + component_name=""), + minf=Con.Container( + smhd=Con.Container(version=0, + flags=chr(0) * 3, + audio_balance=chr(0) * 2), + dinf=Con.Container(dref=Con.Container( + version=0, + flags=chr(0) * 3, + references=[Con.Container( + size=12, + type='url ', + data="\x00\x00\x00\x01")])), + stbl=Con.Container(stsd=Con.Container( + version=0, + flags=chr(0) * 3, + descriptions=[Con.Container( + type="alac", + data=cls.ALAC_ATOM.build( + Con.Container( + reserved=chr(0) * 6, + reference_index=1, + version=0, + revision_level=0, + vendor=chr(0) * 4, + channels=pcmreader.channels, + bits_per_sample=pcmreader.bits_per_sample, + compression_id=0, + audio_packet_size=0, + sample_rate=chr(0xAC) + chr(0x44) + chr(0x00) + chr(0x00), + alac=Con.Container( + length=36, + type='alac', + max_samples_per_frame=max(frame_sample_sizes), + sample_size=pcmreader.bits_per_sample, + history_multiplier=cls.HISTORY_MULTIPLIER, + initial_history=cls.INITIAL_HISTORY, + maximum_k=cls.MAXIMUM_K, + channels=pcmreader.channels, + unknown=0x00FF, + max_coded_frame_size=max(frame_byte_sizes), + bitrate=((mdat_size * 8 * pcmreader.sample_rate) / sum(frame_sample_sizes)), + sample_rate=pcmreader.sample_rate))))]), + + stts=Con.Container( + version=0, + flags=chr(0) * 3, + frame_size_counts=[ + Con.Container( + frame_count=int(stts_frame_counts[samples]), + duration=samples) + for samples in + reversed(sorted(stts_frame_counts.keys()))]), + + stsc=Con.Container( + version=0, + flags=chr(0) * 3, + block=[Con.Container( + first_chunk=i + 1, + samples_per_chunk=current, + sample_description_index=1) + for (i, (current, previous)) + in enumerate(zip(map(len, chunks), + [0] + map(len, chunks))) + if (current != previous)]), + + stsz=Con.Container( + version=0, + flags=chr(0) * 3, + block_byte_size=0, + block_byte_sizes=frame_byte_sizes), + + stco=Con.Container( + version=0, + flags=chr(0) * 3, + offset=[chunk[0] for chunk in chunks]))))), + udta=Con.Container( + meta=Con.Container( + version=0, + flags=chr(0) * 3, + atoms=[Con.Container( + type='hdlr', + data=ATOM_HDLR.build( + Con.Container( + version=0, + flags=chr(0) * 3, + quicktime_type=chr(0) * 4, + subtype='mdir', + quicktime_manufacturer='appl', + quicktime_component_reserved_flags=0, + quicktime_component_reserved_flags_mask=0, + component_name=""))), + Con.Container( + type='ilst', + data=tool), + Con.Container( + type='free', + data=chr(0) * 1024)])))) + + @classmethod + def __build_free_atom__(cls, size): + return Atom('free').build(Con.Container( + type='free', + data=chr(0) * size)) + +####################### +#AAC File +####################### + + +class InvalidAAC(InvalidFile): + """Raised if some error occurs parsing AAC audio files.""" + + pass + + +class AACAudio(AudioFile): + """An AAC audio file. + + This is AAC data inside an ADTS container.""" + + SUFFIX = "aac" + NAME = SUFFIX + DEFAULT_COMPRESSION = "100" + COMPRESSION_MODES = tuple(["10"] + map(str, range(50, 500, 25)) + ["500"]) + BINARIES = ("faac", "faad") + + AAC_FRAME_HEADER = Con.BitStruct("aac_header", + Con.Const(Con.Bits("sync", 12), + 0xFFF), + Con.Bits("mpeg_id", 1), + Con.Bits("mpeg_layer", 2), + Con.Flag("protection_absent"), + Con.Bits("profile", 2), + Con.Bits("sampling_frequency_index", 4), + Con.Flag("private"), + Con.Bits("channel_configuration", 3), + Con.Bits("original", 1), + Con.Bits("home", 1), + Con.Bits("copyright_identification_bit", 1), + Con.Bits("copyright_identification_start", 1), + Con.Bits("aac_frame_length", 13), + Con.Bits("adts_buffer_fullness", 11), + Con.Bits("no_raw_data_blocks_in_frame", 2), + Con.If( + lambda ctx: ctx["protection_absent"] == False, + Con.Bits("crc_check", 16))) + + SAMPLE_RATES = [96000, 88200, 64000, 48000, + 44100, 32000, 24000, 22050, + 16000, 12000, 11025, 8000] + + def __init__(self, filename): + """filename is a plain string.""" + + self.filename = filename + + try: + f = file(self.filename, "rb") + except IOError, msg: + raise InvalidAAC(str(msg)) + try: + try: + header = AACAudio.AAC_FRAME_HEADER.parse_stream(f) + except Con.FieldError: + raise InvalidAAC(_(u"Invalid ADTS frame header")) + except Con.ConstError: + raise InvalidAAC(_(u"Invalid ADTS frame header")) + f.seek(0, 0) + self.__channels__ = header.channel_configuration + self.__bits_per_sample__ = 16 # floating point samples + self.__sample_rate__ = AACAudio.SAMPLE_RATES[ + header.sampling_frequency_index] + self.__frame_count__ = AACAudio.aac_frame_count(f) + finally: + f.close() + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + try: + header = AACAudio.AAC_FRAME_HEADER.parse_stream(file) + return ((header.sync == 0xFFF) and + (header.mpeg_id == 1) and + (header.mpeg_layer == 0)) + except: + return False + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bits_per_sample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def lossless(self): + """Returns False.""" + + return False + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__frame_count__ * 1024 + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + devnull = file(os.devnull, "ab") + + sub = subprocess.Popen([BIN['faad'], "-t", "-f", str(2), "-w", + self.filename], + stdout=subprocess.PIPE, + stderr=devnull) + return PCMReader(sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample(), + process=sub) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new AACAudio object.""" + + import bisect + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if (pcmreader.sample_rate not in AACAudio.SAMPLE_RATES): + sample_rates = list(sorted(AACAudio.SAMPLE_RATES)) + + pcmreader = PCMConverter( + pcmreader, + sample_rate=([sample_rates[0]] + sample_rates)[ + bisect.bisect(sample_rates, pcmreader.sample_rate)], + channels=max(pcmreader.channels, 2), + channel_mask=ChannelMask.from_channels( + max(pcmreader.channels, 2)), + bits_per_sample=pcmreader.bits_per_sample) + elif (pcmreader.channels > 2): + pcmreader = PCMConverter( + pcmreader, + sample_rate=pcmreader.sample_rate, + channels=2, + channel_mask=ChannelMask.from_channels(2), + bits_per_sample=pcmreader.bits_per_sample) + + #faac requires files to end with .aac for some reason + if (not filename.endswith(".aac")): + import tempfile + actual_filename = filename + tempfile = tempfile.NamedTemporaryFile(suffix=".aac") + filename = tempfile.name + else: + actual_filename = tempfile = None + + devnull = file(os.devnull, "ab") + + sub = subprocess.Popen([BIN['faac'], + "-q", compression, + "-P", + "-R", str(pcmreader.sample_rate), + "-B", str(pcmreader.bits_per_sample), + "-C", str(pcmreader.channels), + "-X", + "-o", filename, + "-"], + stdin=subprocess.PIPE, + stderr=devnull, + preexec_fn=ignore_sigint) + #Note: faac handles SIGINT on its own, + #so trying to ignore it doesn't work like on most other encoders. + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (IOError, ValueError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + sub.stdin.close() + + if (sub.wait() == 0): + if (tempfile is not None): + filename = actual_filename + f = file(filename, 'wb') + tempfile.seek(0, 0) + transfer_data(tempfile.read, f.write) + f.close() + tempfile.close() + + return AACAudio(filename) + else: + if (tempfile is not None): + tempfile.close() + raise EncodingError(u"error writing file with faac") + + @classmethod + def aac_frames(cls, stream): + """Takes an open file stream and yields (header, data) tuples. + + header is a Container parsed from AACAudio.AAC_FRAME_HEADER. + data is a binary string of frame data.""" + + while (True): + try: + header = AACAudio.AAC_FRAME_HEADER.parse_stream(stream) + except Con.FieldError: + break + + if (header.sync != 0xFFF): + raise InvalidAAC(_(u"Invalid frame sync")) + + if (header.protection_absent): + yield (header, stream.read(header.aac_frame_length - 7)) + else: + yield (header, stream.read(header.aac_frame_length - 9)) + + @classmethod + def aac_frame_count(cls, stream): + """Takes an open file stream and returns the total ADTS frames.""" + + import sys + total = 0 + while (True): + try: + header = AACAudio.AAC_FRAME_HEADER.parse_stream(stream) + except Con.FieldError: + break + + if (header.sync != 0xFFF): + break + + total += 1 + + if (header.protection_absent): + stream.seek(header.aac_frame_length - 7, 1) + else: + stream.seek(header.aac_frame_length - 9, 1) + + return total diff --git a/Melodia/resources/audiotools/__m4a_atoms__.py b/Melodia/resources/audiotools/__m4a_atoms__.py new file mode 100644 index 0000000..91d0442 --- /dev/null +++ b/Melodia/resources/audiotools/__m4a_atoms__.py @@ -0,0 +1,387 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import Con + +#M4A atoms are typically laid on in the file as follows: +# ftyp +# mdat +# moov/ +# +mvhd +# +iods +# +trak/ +# +-tkhd +# +-mdia/ +# +--mdhd +# +--hdlr +# +--minf/ +# +---smhd +# +---dinf/ +# +----dref +# +---stbl/ +# +----stsd +# +----stts +# +----stsz +# +----stsc +# +----stco +# +----ctts +# +udta/ +# +-meta +# +#Where atoms ending in / are container atoms and the rest are leaf atoms. +#'mdat' is where the file's audio stream is stored +#the rest are various bits of metadata + + +def VersionLength(name): + """A struct for 32 or 64 bit fields, depending on version field.""" + + return Con.IfThenElse(name, + lambda ctx: ctx["version"] == 0, + Con.UBInt32(None), + Con.UBInt64(None)) + + +class AtomAdapter(Con.Adapter): + """An adapter which manages a proper size field.""" + + def _encode(self, obj, context): + obj.size = len(obj.data) + 8 + return obj + + def _decode(self, obj, context): + del(obj.size) + return obj + + +def Atom(name): + """A basic QuickTime atom struct.""" + + return AtomAdapter(Con.Struct( + name, + Con.UBInt32("size"), + Con.String("type", 4), + Con.String("data", lambda ctx: ctx["size"] - 8))) + + +class AtomListAdapter(Con.Adapter): + """An adapter for turning an Atom into a list of atoms. + + This works by parsing its data contents with Atom.""" + + ATOM_LIST = Con.GreedyRepeater(Atom("atoms")) + + def _encode(self, obj, context): + obj.data = self.ATOM_LIST.build(obj.data) + return obj + + def _decode(self, obj, context): + obj.data = self.ATOM_LIST.parse(obj.data) + return obj + + +def AtomContainer(name): + """An instantiation of AtomListAdapter.""" + + return AtomListAdapter(Atom(name)) + + +class AtomWrapper(Con.Struct): + """Wraps around an existing sub_atom and automatically handles headers.""" + + def __init__(self, atom_name, sub_atom): + Con.Struct.__init__(self, atom_name) + self.atom_name = atom_name + self.sub_atom = sub_atom + self.header = Con.Struct(atom_name, + Con.UBInt32("size"), + Con.Const(Con.String("type", 4), atom_name)) + + def _parse(self, stream, context): + header = self.header.parse_stream(stream) + return self.sub_atom.parse_stream(stream) + + def _build(self, obj, stream, context): + data = self.sub_atom.build(obj) + stream.write(self.header.build(Con.Container(type=self.atom_name, + size=len(data) + 8))) + stream.write(data) + + def _sizeof(self, context): + return self.sub_atom.sizeof(context) + 8 + + +ATOM_FTYP = Con.Struct( + "ftyp", + Con.String("major_brand", 4), + Con.UBInt32("major_brand_version"), + Con.GreedyRepeater(Con.String("compatible_brands", 4))) + +ATOM_MVHD = Con.Struct( + "mvhd", + Con.Byte("version"), + Con.String("flags", 3), + VersionLength("created_mac_UTC_date"), + VersionLength("modified_mac_UTC_date"), + Con.UBInt32("time_scale"), + VersionLength("duration"), + Con.UBInt32("playback_speed"), + Con.UBInt16("user_volume"), + Con.Padding(10), + Con.Struct("windows", + Con.UBInt32("geometry_matrix_a"), + Con.UBInt32("geometry_matrix_b"), + Con.UBInt32("geometry_matrix_u"), + Con.UBInt32("geometry_matrix_c"), + Con.UBInt32("geometry_matrix_d"), + Con.UBInt32("geometry_matrix_v"), + Con.UBInt32("geometry_matrix_x"), + Con.UBInt32("geometry_matrix_y"), + Con.UBInt32("geometry_matrix_w")), + Con.UBInt64("quicktime_preview"), + Con.UBInt32("quicktime_still_poster"), + Con.UBInt64("quicktime_selection_time"), + Con.UBInt32("quicktime_current_time"), + Con.UBInt32("next_track_id")) + +ATOM_IODS = Con.Struct( + "iods", + Con.Byte("version"), + Con.String("flags", 3), + Con.Byte("type_tag"), + Con.Switch("descriptor", + lambda ctx: ctx.type_tag, + {0x10: Con.Struct( + None, + Con.StrictRepeater(3, Con.Byte("extended_descriptor_type")), + Con.Byte("descriptor_type_length"), + Con.UBInt16("OD_ID"), + Con.Byte("OD_profile"), + Con.Byte("scene_profile"), + Con.Byte("audio_profile"), + Con.Byte("video_profile"), + Con.Byte("graphics_profile")), + 0x0E: Con.Struct( + None, + Con.StrictRepeater(3, Con.Byte("extended_descriptor_type")), + Con.Byte("descriptor_type_length"), + Con.String("track_id", 4))})) + +ATOM_TKHD = Con.Struct( + "tkhd", + Con.Byte("version"), + Con.BitStruct("flags", + Con.Padding(20), + Con.Flag("TrackInPoster"), + Con.Flag("TrackInPreview"), + Con.Flag("TrackInMovie"), + Con.Flag("TrackEnabled")), + VersionLength("created_mac_UTC_date"), + VersionLength("modified_mac_UTC_date"), + Con.UBInt32("track_id"), + Con.Padding(4), + VersionLength("duration"), + Con.Padding(8), + Con.UBInt16("video_layer"), + Con.UBInt16("quicktime_alternate"), + Con.UBInt16("volume"), + Con.Padding(2), + Con.Struct("video", + Con.UBInt32("geometry_matrix_a"), + Con.UBInt32("geometry_matrix_b"), + Con.UBInt32("geometry_matrix_u"), + Con.UBInt32("geometry_matrix_c"), + Con.UBInt32("geometry_matrix_d"), + Con.UBInt32("geometry_matrix_v"), + Con.UBInt32("geometry_matrix_x"), + Con.UBInt32("geometry_matrix_y"), + Con.UBInt32("geometry_matrix_w")), + Con.UBInt32("video_width"), + Con.UBInt32("video_height")) + +ATOM_MDHD = Con.Struct( + "mdhd", + Con.Byte("version"), + Con.String("flags", 3), + VersionLength("created_mac_UTC_date"), + VersionLength("modified_mac_UTC_date"), + Con.UBInt32("time_scale"), + VersionLength("duration"), + Con.BitStruct("languages", + Con.Padding(1), + Con.StrictRepeater(3, + Con.Bits("language", 5))), + Con.UBInt16("quicktime_quality")) + + +ATOM_HDLR = Con.Struct( + "hdlr", + Con.Byte("version"), + Con.String("flags", 3), + Con.String("quicktime_type", 4), + Con.String("subtype", 4), + Con.String("quicktime_manufacturer", 4), + Con.UBInt32("quicktime_component_reserved_flags"), + Con.UBInt32("quicktime_component_reserved_flags_mask"), + Con.PascalString("component_name"), + Con.Padding(1)) + +ATOM_SMHD = Con.Struct( + 'smhd', + Con.Byte("version"), + Con.String("flags", 3), + Con.String("audio_balance", 2), + Con.Padding(2)) + +ATOM_DREF = Con.Struct( + 'dref', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray( + length_field=Con.UBInt32("num_references"), + subcon=Atom("references"))) + + +ATOM_STSD = Con.Struct( + 'stsd', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray( + length_field=Con.UBInt32("num_descriptions"), + subcon=Atom("descriptions"))) + +ATOM_MP4A = Con.Struct( + "mp4a", + Con.Padding(6), + Con.UBInt16("reference_index"), + Con.UBInt16("quicktime_audio_encoding_version"), + Con.UBInt16("quicktime_audio_encoding_revision"), + Con.String("quicktime_audio_encoding_vendor", 4), + Con.UBInt16("channels"), + Con.UBInt16("sample_size"), + Con.UBInt16("audio_compression_id"), + Con.UBInt16("quicktime_audio_packet_size"), + Con.String("sample_rate", 4)) + +#out of all this mess, the only interesting bits are the _bit_rate fields +#and (maybe) the buffer_size +#everything else is a constant of some kind as far as I can tell +ATOM_ESDS = Con.Struct( + "esds", + Con.Byte("version"), + Con.String("flags", 3), + Con.Byte("ES_descriptor_type"), + Con.StrictRepeater( + 3, Con.Byte("extended_descriptor_type_tag")), + Con.Byte("descriptor_type_length"), + Con.UBInt16("ES_ID"), + Con.Byte("stream_priority"), + Con.Byte("decoder_config_descriptor_type"), + Con.StrictRepeater( + 3, Con.Byte("extended_descriptor_type_tag2")), + Con.Byte("descriptor_type_length2"), + Con.Byte("object_ID"), + Con.Embed( + Con.BitStruct(None, Con.Bits("stream_type", 6), + Con.Flag("upstream_flag"), + Con.Flag("reserved_flag"), + Con.Bits("buffer_size", 24))), + Con.UBInt32("maximum_bit_rate"), + Con.UBInt32("average_bit_rate"), + Con.Byte('decoder_specific_descriptor_type3'), + Con.StrictRepeater( + 3, Con.Byte("extended_descriptor_type_tag2")), + Con.PrefixedArray( + length_field=Con.Byte("ES_header_length"), + subcon=Con.Byte("ES_header_start_codes")), + Con.Byte("SL_config_descriptor_type"), + Con.StrictRepeater( + 3, Con.Byte("extended_descriptor_type_tag3")), + Con.Byte("descriptor_type_length3"), + Con.Byte("SL_value")) + + +ATOM_STTS = Con.Struct( + 'stts', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray(length_field=Con.UBInt32("total_counts"), + subcon=Con.Struct("frame_size_counts", + Con.UBInt32("frame_count"), + Con.UBInt32("duration")))) + + +ATOM_STSZ = Con.Struct( + 'stsz', + Con.Byte("version"), + Con.String("flags", 3), + Con.UBInt32("block_byte_size"), + Con.PrefixedArray(length_field=Con.UBInt32("total_sizes"), + subcon=Con.UBInt32("block_byte_sizes"))) + + +ATOM_STSC = Con.Struct( + 'stsc', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray( + length_field=Con.UBInt32("entry_count"), + subcon=Con.Struct("block", + Con.UBInt32("first_chunk"), + Con.UBInt32("samples_per_chunk"), + Con.UBInt32("sample_description_index")))) + +ATOM_STCO = Con.Struct( + 'stco', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray( + length_field=Con.UBInt32("total_offsets"), + subcon=Con.UBInt32("offset"))) + +ATOM_CTTS = Con.Struct( + 'ctts', + Con.Byte("version"), + Con.String("flags", 3), + Con.PrefixedArray( + length_field=Con.UBInt32("entry_count"), + subcon=Con.Struct("sample", + Con.UBInt32("sample_count"), + Con.UBInt32("sample_offset")))) + +ATOM_META = Con.Struct( + 'meta', + Con.Byte("version"), + Con.String("flags", 3), + Con.GreedyRepeater(Atom("atoms"))) + +ATOM_ILST = Con.GreedyRepeater(AtomContainer('ilst')) + +ATOM_TRKN = Con.Struct( + 'trkn', + Con.Padding(2), + Con.UBInt16('track_number'), + Con.UBInt16('total_tracks'), + Con.Padding(2)) + +ATOM_DISK = Con.Struct( + 'disk', + Con.Padding(2), + Con.UBInt16('disk_number'), + Con.UBInt16('total_disks')) diff --git a/Melodia/resources/audiotools/__mp3__.py b/Melodia/resources/audiotools/__mp3__.py new file mode 100644 index 0000000..36f12c0 --- /dev/null +++ b/Melodia/resources/audiotools/__mp3__.py @@ -0,0 +1,973 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, PCMReader, PCMConverter, + Con, transfer_data, transfer_framelist_data, + subprocess, BIN, BIG_ENDIAN, ApeTag, ReplayGain, + ignore_sigint, open_files, EncodingError, + DecodingError, PCMReaderError, ChannelMask, + __default_quality__, config) +from __id3__ import * +import gettext + +gettext.install("audiotools", unicode=True) + + +####################### +#MP3 +####################### + + +class MPEG_Frame_Header(Con.Adapter): + #mpeg_version->sample_rate bits->Hz + SAMPLE_RATE = [[11025, 12000, 8000, None], + [None, None, None, None], + [22050, 24000, 16000, None], + [44100, 48000, 32000, None]] + + #(mpeg_version, layer)->bitrate bits->bits per second + BIT_RATE = {(3, 3): [0, 32000, 64000, 96000, + 128000, 160000, 192000, 224000, + 256000, 288000, 320000, 352000, + 384000, 416000, 448000, None], + (3, 2): [0, 32000, 48000, 56000, + 64000, 80000, 96000, 112000, + 128000, 160000, 192000, 224000, + 256000, 320000, 384000, None], + (3, 1): [0, 32000, 40000, 48000, + 56000, 64000, 80000, 96000, + 112000, 128000, 160000, 192000, + 224000, 256000, 320000, None], + (2, 3): [0, 32000, 48000, 56000, + 64000, 80000, 96000, 112000, + 128000, 144000, 160000, 176000, + 192000, 224000, 256000, None], + (2, 2): [0, 8000, 16000, 24000, + 32000, 40000, 48000, 56000, + 64000, 80000, 96000, 112000, + 128000, 144000, 160000, None]} + + #mpeg_version->Hz->sample_rate bits + SAMPLE_RATE_REVERSE = {0: {11025: 0, + 12000: 1, + 8000: 2}, + 1: {None: 0}, + 2: {22050: 0, + 24000: 1, + 16000: 2, + None: 3}, + 3: {44100: 0, + 48000: 1, + 32000: 2, + None: 3}} + + BIT_RATE_REVERSE = dict([(key, dict([(rate, i) for (i, rate) in + enumerate(values)])) + for (key, values) in BIT_RATE.items()]) + + def __init__(self, name): + Con.Adapter.__init__( + self, + Con.BitStruct("mp3_header", + Con.Const(Con.Bits("sync", 11), 0x7FF), + Con.Bits("mpeg_version", 2), + Con.Bits("layer", 2), + Con.Flag("no_crc16", 1), + Con.Bits("bitrate", 4), + Con.Bits("sample_rate", 2), + Con.Bits("pad", 1), + Con.Bits("private", 1), + Con.Bits("channel", 2), + Con.Bits("mode_extension", 2), + Con.Flag("copyright", 1), + Con.Flag("original", 1), + Con.Bits("emphasis", 2))) + + def _encode(self, obj, content): + obj.sample_rate = self.SAMPLE_RATE_REVERSE[obj.mpeg_version][ + obj.sample_rate] + obj.bitrate = self.BIT_RATE_REVERSE[(obj.mpeg_version, obj.layer)][ + obj.bitrate] + return obj + + def _decode(self, obj, content): + obj.sample_rate = self.SAMPLE_RATE[obj.mpeg_version][obj.sample_rate] + obj.channel_count = [2, 2, 2, 1][obj.channel] + obj.bitrate = self.BIT_RATE[(obj.mpeg_version, obj.layer)][obj.bitrate] + + if (obj.layer == 3): + obj.byte_length = (((12 * obj.bitrate) / obj.sample_rate) + + obj.pad) * 4 + else: + obj.byte_length = ((144 * obj.bitrate) / obj.sample_rate) + obj.pad + + return obj + + +def MPEG_crc16(data, total_bits): + def crc16_val(value, crc, total_bits): + value <<= 8 + for i in xrange(total_bits): + value <<= 1 + crc <<= 1 + + if (((crc ^ value) & 0x10000)): + crc ^= 0x8005 + + return crc & 0xFFFF + + checksum = 0xFFFF + data = map(ord, data) + while (total_bits >= 8): + checksum = crc16_val(data.pop(0), checksum, 8) + total_bits -= 8 + + if (total_bits > 0): + return crc16_val(data.pop(0), checksum, total_bits) + else: + return checksum + + +class InvalidMP3(InvalidFile): + """Raised by invalid files during MP3 initialization.""" + + pass + + +class MP3Audio(AudioFile): + """An MP3 audio file.""" + + SUFFIX = "mp3" + NAME = SUFFIX + DEFAULT_COMPRESSION = "2" + #0 is better quality/lower compression + #9 is worse quality/higher compression + COMPRESSION_MODES = ("0", "1", "2", "3", "4", "5", "6", + "medium", "standard", "extreme", "insane") + COMPRESSION_DESCRIPTIONS = {"0": _(u"high quality, larger files, " + + u"corresponds to lame's -V0"), + "6": _(u"lower quality, smaller files, " + + u"corresponds to lame's -V6"), + "medium": _(u"corresponds to lame's " + + u"--preset medium"), + "standard": _(u"corresponds to lame's " + + u"--preset standard"), + "extreme": _(u"corresponds to lame's " + + u"--preset extreme"), + "insane": _(u"corresponds to lame's " + + u"--preset insane")} + BINARIES = ("lame",) + REPLAYGAIN_BINARIES = ("mp3gain", ) + + #MPEG1, Layer 1 + #MPEG1, Layer 2, + #MPEG1, Layer 3, + #MPEG2, Layer 1, + #MPEG2, Layer 2, + #MPEG2, Layer 3 + MP3_BITRATE = ((None, None, None, None, None, None), + (32, 32, 32, 32, 8, 8), + (64, 48, 40, 48, 16, 16), + (96, 56, 48, 56, 24, 24), + (128, 64, 56, 64, 32, 32), + (160, 80, 64, 80, 40, 40), + (192, 96, 80, 96, 48, 48), + (224, 112, 96, 112, 56, 56), + (256, 128, 112, 128, 64, 64), + (288, 160, 128, 144, 80, 80), + (320, 192, 160, 160, 96, 96), + (352, 224, 192, 176, 112, 112), + (384, 256, 224, 192, 128, 128), + (416, 320, 256, 224, 144, 144), + (448, 384, 320, 256, 160, 160)) + + #MPEG1, MPEG2, MPEG2.5 + MP3_SAMPLERATE = ((44100, 22050, 11025), + (48000, 24000, 12000), + (32000, 16000, 8000)) + + MP3_FRAME_HEADER = Con.BitStruct("mp3_header", + Con.Const(Con.Bits("sync", 11), 0x7FF), + Con.Bits("mpeg_version", 2), + Con.Bits("layer", 2), + Con.Flag("protection", 1), + Con.Bits("bitrate", 4), + Con.Bits("sampling_rate", 2), + Con.Bits("padding", 1), + Con.Bits("private", 1), + Con.Bits("channel", 2), + Con.Bits("mode_extension", 2), + Con.Flag("copyright", 1), + Con.Flag("original", 1), + Con.Bits("emphasis", 2)) + + XING_HEADER = Con.Struct("xing_header", + Con.Bytes("header_id", 4), + Con.Bytes("flags", 4), + Con.UBInt32("num_frames"), + Con.UBInt32("bytes"), + Con.StrictRepeater(100, Con.Byte("toc_entries")), + Con.UBInt32("quality")) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + + try: + mp3file = file(filename, "rb") + except IOError, msg: + raise InvalidMP3(str(msg)) + + try: + try: + MP3Audio.__find_next_mp3_frame__(mp3file) + except ValueError: + raise InvalidMP3(_(u"MP3 frame not found")) + fr = MP3Audio.MP3_FRAME_HEADER.parse(mp3file.read(4)) + self.__samplerate__ = MP3Audio.__get_mp3_frame_sample_rate__(fr) + self.__channels__ = MP3Audio.__get_mp3_frame_channels__(fr) + self.__framelength__ = self.__length__() + finally: + mp3file.close() + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + ID3v2Comment.skip(file) + + try: + frame = cls.MP3_FRAME_HEADER.parse_stream(file) + if ((frame.sync == 0x07FF) and + (frame.mpeg_version in (0x03, 0x02, 0x00)) and + (frame.layer in (0x01, 0x03))): + return True + else: + #oddly, MP3s sometimes turn up in RIFF containers + #this isn't a good idea, but can be supported nonetheless + file.seek(-cls.MP3_FRAME_HEADER.sizeof(), 1) + header = file.read(12) + if ((header[0:4] == 'RIFF') and + (header[8:12] == 'RMP3')): + return True + else: + return False + except: + return False + + def lossless(self): + """Returns False.""" + + return False + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + #if mpg123 is available, use that for decoding + if (BIN.can_execute(BIN["mpg123"])): + sub = subprocess.Popen([BIN["mpg123"], "-qs", self.filename], + stdout=subprocess.PIPE, + stderr=file(os.devnull, "a")) + return PCMReader(sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + bits_per_sample=16, + channel_mask=int(ChannelMask.from_channels( + self.channels())), + process=sub, + big_endian=BIG_ENDIAN) + else: + #if not, use LAME for decoding + if (self.filename.endswith("." + self.SUFFIX)): + if (BIG_ENDIAN): + endian = ['-x'] + else: + endian = [] + + sub = subprocess.Popen([BIN['lame']] + endian + \ + ["--decode", "-t", "--quiet", + self.filename, "-"], + stdout=subprocess.PIPE) + return PCMReader( + sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + bits_per_sample=16, + channel_mask=int(self.channel_mask()), + process=sub) + else: + import tempfile + from audiotools import TempWaveReader + #copy our file to one that ends with .mp3 + tempmp3 = tempfile.NamedTemporaryFile(suffix='.' + self.SUFFIX) + f = open(self.filename, 'rb') + transfer_data(f.read, tempmp3.write) + f.close() + tempmp3.flush() + + #decode the mp3 file to a WAVE file + wave = tempfile.NamedTemporaryFile(suffix='.wav') + returnval = subprocess.call([BIN['lame'], "--decode", + "--quiet", + tempmp3.name, wave.name]) + tempmp3.close() + + if (returnval == 0): + #return WAVE file as a stream + wave.seek(0, 0) + return TempWaveReader(wave) + else: + return PCMReaderError( + error_message=u"lame exited with error", + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=16) + + @classmethod + def __help_output__(cls): + import cStringIO + help_data = cStringIO.StringIO() + sub = subprocess.Popen([BIN['lame'], '--help'], + stdout=subprocess.PIPE) + transfer_data(sub.stdout.read, help_data.write) + sub.wait() + return help_data.getvalue() + + @classmethod + def __lame_version__(cls): + try: + version = re.findall(r'version \d+\.\d+', + cls.__help_output__())[0] + return tuple(map(int, version[len('version '):].split("."))) + except IndexError: + return (0, 0) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new MP3Audio object.""" + + import decimal + import bisect + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if ((pcmreader.channels > 2) or + (pcmreader.sample_rate not in (32000, 48000, 44100))): + pcmreader = PCMConverter( + pcmreader, + sample_rate=[32000, 32000, 44100, 48000][bisect.bisect( + [32000, 44100, 48000], pcmreader.sample_rate)], + channels=min(pcmreader.channels, 2), + channel_mask=ChannelMask.from_channels( + min(pcmreader.channels, 2)), + bits_per_sample=16) + + if (pcmreader.channels > 1): + mode = "j" + else: + mode = "m" + + #FIXME - not sure if all LAME versions support "--little-endian" + # #LAME 3.98 (and up, presumably) handle the byteswap correctly + # #LAME 3.97 always uses -x + # if (BIG_ENDIAN or (cls.__lame_version__() < (3,98))): + # endian = ['-x'] + # else: + # endian = [] + + devnull = file(os.devnull, 'ab') + + if (str(compression) in map(str, range(0, 10))): + compression = ["-V" + str(compression)] + else: + compression = ["--preset", str(compression)] + + sub = subprocess.Popen([ + BIN['lame'], "--quiet", + "-r", + "-s", str(decimal.Decimal(pcmreader.sample_rate) / 1000), + "--bitwidth", str(pcmreader.bits_per_sample), + "--signed", "--little-endian", + "-m", mode] + compression + ["-", filename], + stdin=subprocess.PIPE, + stdout=devnull, + stderr=devnull, + preexec_fn=ignore_sigint) + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (IOError, ValueError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + cls.__unlink__(filename) + raise EncodingError(err.error_message) + sub.stdin.close() + + devnull.close() + + if (sub.wait() == 0): + return MP3Audio(filename) + else: + cls.__unlink__(filename) + raise EncodingError(u"error encoding file with lame") + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return 16 + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplerate__ + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + f = file(self.filename, "rb") + try: + if (f.read(3) != "ID3"): # no ID3v2 tag, try ID3v1 + id3v1 = ID3v1Comment.read_id3v1_comment(self.filename) + if (id3v1[-1] == -1): # no ID3v1 either + return None + else: + return ID3v1Comment(id3v1) + else: + id3v2 = ID3v2Comment.read_id3v2_comment(self.filename) + + id3v1 = ID3v1Comment.read_id3v1_comment(self.filename) + if (id3v1[-1] == -1): # only ID3v2, no ID3v1 + return id3v2 + else: # both ID3v2 and ID3v1 + return ID3CommentPair( + id3v2, + ID3v1Comment(id3v1)) + finally: + f.close() + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + if (metadata is None): + return + + if ((not isinstance(metadata, ID3v2Comment)) and + (not isinstance(metadata, ID3v1Comment))): + DEFAULT_ID3V2 = "id3v2.3" + DEFAULT_ID3V1 = "id3v1.1" + + id3v2_class = {"id3v2.2": ID3v22Comment, + "id3v2.3": ID3v23Comment, + "id3v2.4": ID3v24Comment, + "none": None}.get(config.get_default("ID3", + "id3v2", + DEFAULT_ID3V2), + DEFAULT_ID3V2) + id3v1_class = {"id3v1.1": ID3v1Comment, + "none": None}.get(config.get_default("ID3", + "id3v1", + DEFAULT_ID3V1)) + if ((id3v2_class is not None) and (id3v1_class is not None)): + metadata = ID3CommentPair.converted(metadata, + id3v2_class=id3v2_class, + id3v1_class=id3v1_class) + elif (id3v2_class is not None): + metadata = id3v2_class.converted(metadata) + elif (id3v1_class is not None): + metadata = id3v1_class.converted(metadata) + else: + return + + #get the original MP3 data + f = file(self.filename, "rb") + MP3Audio.__find_mp3_start__(f) + data_start = f.tell() + MP3Audio.__find_last_mp3_frame__(f) + data_end = f.tell() + f.seek(data_start, 0) + mp3_data = f.read(data_end - data_start) + f.close() + + if (isinstance(metadata, ID3CommentPair)): + id3v2 = metadata.id3v2.build() + id3v1 = metadata.id3v1.build_tag() + elif (isinstance(metadata, ID3v2Comment)): + id3v2 = metadata.build() + id3v1 = "" + elif (isinstance(metadata, ID3v1Comment)): + id3v2 = "" + id3v1 = metadata.build_tag() + + #write id3v2 + data + id3v1 to file + f = file(self.filename, "wb") + f.write(id3v2) + f.write(mp3_data) + f.write(id3v1) + f.close() + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + #get the original MP3 data + f = file(self.filename, "rb") + MP3Audio.__find_mp3_start__(f) + data_start = f.tell() + MP3Audio.__find_last_mp3_frame__(f) + data_end = f.tell() + f.seek(data_start, 0) + mp3_data = f.read(data_end - data_start) + f.close() + + #write data to file + f = file(self.filename, "wb") + f.write(mp3_data) + f.close() + + #places mp3file at the position of the next MP3 frame's start + @classmethod + def __find_next_mp3_frame__(cls, mp3file): + #if we're starting at an ID3v2 header, skip it to save a bunch of time + ID3v2Comment.skip(mp3file) + + #then find the next mp3 frame + (b1, b2) = mp3file.read(2) + while ((b1 != chr(0xFF)) or ((ord(b2) & 0xE0) != 0xE0)): + mp3file.seek(-1, 1) + (b1, b2) = mp3file.read(2) + mp3file.seek(-2, 1) + + #places mp3file at the position of the MP3 file's start + #either at the next frame (most commonly) + #or at the "RIFF????RMP3" header + @classmethod + def __find_mp3_start__(cls, mp3file): + #if we're starting at an ID3v2 header, skip it to save a bunch of time + ID3v2Comment.skip(mp3file) + + while (True): + byte = mp3file.read(1) + while ((byte != chr(0xFF)) and (byte != 'R') and (len(byte) > 0)): + byte = mp3file.read(1) + + if (byte == chr(0xFF)): # possibly a frame sync + mp3file.seek(-1, 1) + try: + header = cls.MP3_FRAME_HEADER.parse_stream(mp3file) + if ((header.sync == 0x07FF) and + (header.mpeg_version in (0x03, 0x02, 0x00)) and + (header.layer in (0x01, 0x02, 0x03))): + mp3file.seek(-4, 1) + return + else: + mp3file.seek(-3, 1) + except: + continue + elif (byte == 'R'): # possibly a 'RIFF????RMP3' header + header = mp3file.read(11) + if ((header[0:3] == 'IFF') and + (header[7:11] == 'RMP3')): + mp3file.seek(-12, 1) + return + else: + mp3file.seek(-11, 1) + elif (len(byte) == 0): # we've run out of MP3 file + return + + #places mp3file at the position of the last MP3 frame's end + #(either the last byte in the file or just before the ID3v1 tag) + #this may not be strictly accurate if ReplayGain data is present, + #since APEv2 tags came before the ID3v1 tag, + #but we're not planning to change that tag anyway + @classmethod + def __find_last_mp3_frame__(cls, mp3file): + mp3file.seek(-128, 2) + if (mp3file.read(3) == 'TAG'): + mp3file.seek(-128, 2) + return + else: + mp3file.seek(0, 2) + return + + #header is a Construct parsed from 4 bytes sent to MP3_FRAME_HEADER + #returns the total length of the frame, including the header + #(subtract 4 when doing a seek or read to the next one) + @classmethod + def __mp3_frame_length__(cls, header): + layer = 4 - header.layer # layer 1, 2 or 3 + + bit_rate = MP3Audio.__get_mp3_frame_bitrate__(header) + if (bit_rate is None): + raise InvalidMP3(_(u"Invalid bit rate")) + + sample_rate = MP3Audio.__get_mp3_frame_sample_rate__(header) + + if (layer == 1): + return (12 * (bit_rate * 1000) / sample_rate + header.padding) * 4 + else: + return 144 * (bit_rate * 1000) / sample_rate + header.padding + + #takes a parsed MP3_FRAME_HEADER + #returns the mp3's sample rate based on that information + #(typically 44100) + @classmethod + def __get_mp3_frame_sample_rate__(cls, frame): + try: + if (frame.mpeg_version == 0x00): # MPEG 2.5 + return MP3Audio.MP3_SAMPLERATE[frame.sampling_rate][2] + elif (frame.mpeg_version == 0x02): # MPEG 2 + return MP3Audio.MP3_SAMPLERATE[frame.sampling_rate][1] + else: # MPEG 1 + return MP3Audio.MP3_SAMPLERATE[frame.sampling_rate][0] + except IndexError: + raise InvalidMP3(_(u"Invalid sampling rate")) + + @classmethod + def __get_mp3_frame_channels__(cls, frame): + if (frame.channel == 0x03): + return 1 + else: + return 2 + + @classmethod + def __get_mp3_frame_bitrate__(cls, frame): + layer = 4 - frame.layer # layer 1, 2 or 3 + + try: + if (frame.mpeg_version == 0x00): # MPEG 2.5 + return MP3Audio.MP3_BITRATE[frame.bitrate][layer + 2] + elif (frame.mpeg_version == 0x02): # MPEG 2 + return MP3Audio.MP3_BITRATE[frame.bitrate][layer + 2] + elif (frame.mpeg_version == 0x03): # MPEG 1 + return MP3Audio.MP3_BITRATE[frame.bitrate][layer - 1] + else: + return 0 + except IndexError: + raise InvalidMP3(_(u"Invalid bit rate")) + + def cd_frames(self): + """Returns the total length of the track in CD frames. + + Each CD frame is 1/75th of a second.""" + + #calculate length at create-time so that we can + #throw InvalidMP3 as soon as possible + return self.__framelength__ + + #returns the length of this file in CD frame + #raises InvalidMP3 if any portion of the frame is invalid + def __length__(self): + mp3file = file(self.filename, "rb") + + try: + MP3Audio.__find_next_mp3_frame__(mp3file) + + start_position = mp3file.tell() + + fr = MP3Audio.MP3_FRAME_HEADER.parse(mp3file.read(4)) + + first_frame = mp3file.read(MP3Audio.__mp3_frame_length__(fr) - 4) + + sample_rate = MP3Audio.__get_mp3_frame_sample_rate__(fr) + + if (fr.mpeg_version == 0x00): # MPEG 2.5 + version = 3 + elif (fr.mpeg_version == 0x02): # MPEG 2 + version = 3 + else: # MPEG 1 + version = 0 + + try: + if (fr.layer == 0x03): # layer 1 + frames_per_sample = 384 + bit_rate = MP3Audio.MP3_BITRATE[fr.bitrate][version] + elif (fr.layer == 0x02): # layer 2 + frames_per_sample = 1152 + bit_rate = MP3Audio.MP3_BITRATE[fr.bitrate][version + 1] + elif (fr.layer == 0x01): # layer 3 + frames_per_sample = 1152 + bit_rate = MP3Audio.MP3_BITRATE[fr.bitrate][version + 2] + else: + raise InvalidMP3(_(u"Unsupported MPEG layer")) + except IndexError: + raise InvalidMP3(_(u"Invalid bit rate")) + + if ('Xing' in first_frame): + #the first frame has a Xing header, + #use that to calculate the mp3's length + xing_header = MP3Audio.XING_HEADER.parse( + first_frame[first_frame.index('Xing'):]) + + return (xing_header.num_frames * frames_per_sample * 75 / + sample_rate) + else: + #no Xing header, + #assume a constant bitrate file + mp3file.seek(-128, 2) + if (mp3file.read(3) == "TAG"): + end_position = mp3file.tell() - 3 + else: + mp3file.seek(0, 2) + end_position = mp3file.tell() + + return ((end_position - start_position) * 75 * 8 / + (bit_rate * 1000)) + finally: + mp3file.close() + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.cd_frames() * self.sample_rate() / 75 + + @classmethod + def can_add_replay_gain(cls): + """Returns True if we have the necessary binaries to add ReplayGain.""" + + return BIN.can_execute(BIN['mp3gain']) + + @classmethod + def lossless_replay_gain(cls): + """Returns False.""" + + return False + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + track_names = [track.filename for track in + open_files(filenames) if + isinstance(track, cls)] + + if (progress is not None): + progress(0, 1) + + if ((len(track_names) > 0) and (BIN.can_execute(BIN['mp3gain']))): + devnull = file(os.devnull, 'ab') + sub = subprocess.Popen([BIN['mp3gain'], '-f', '-k', '-q', '-r'] + \ + track_names, + stdout=devnull, + stderr=devnull) + sub.wait() + + devnull.close() + + if (progress is not None): + progress(1, 1) + + def mpeg_frames(self): + """Yields (header, data) tuples of the file's contents. + + header is an MPEG_Frame_Header Construct. + data is a string of MP3 data.""" + + header_struct = MPEG_Frame_Header("header") + f = open(self.filename, 'rb') + try: + #FIXME - this won't handle RIFF RMP3 well + #perhaps I should use tracklint to clean those up + MP3Audio.__find_last_mp3_frame__(f) + stop_position = f.tell() + f.seek(0, 0) + MP3Audio.__find_mp3_start__(f) + while (f.tell() < stop_position): + header = header_struct.parse_stream(f) + data = f.read(header.byte_length - 4) + yield (header, data) + finally: + f.close() + + def verify(self, progress=None): + from . import verify + try: + f = open(self.filename, 'rb') + except IOError, err: + raise InvalidMP3(str(err)) + + #MP3 verification is likely to be so fast + #that individual calls to progress() are + #a waste of time. + if (progress is not None): + progress(0, 1) + + try: + try: + #skip ID3v2/ID3v1 tags during verification + self.__find_mp3_start__(f) + start = f.tell() + self.__find_last_mp3_frame__(f) + end = f.tell() + f.seek(start, 0) + + verify.mpeg(f, start, end) + if (progress is not None): + progress(1, 1) + + return True + except (IOError, ValueError), err: + raise InvalidMP3(str(err)) + finally: + f.close() + + +####################### +#MP2 AUDIO +####################### + +class MP2Audio(MP3Audio): + """An MP2 audio file.""" + + SUFFIX = "mp2" + NAME = SUFFIX + DEFAULT_COMPRESSION = str(192) + COMPRESSION_MODES = tuple(map(str, (64, 96, 112, 128, 160, 192, + 224, 256, 320, 384))) + COMPRESSION_DESCRIPTIONS = {"64": _(u"total bitrate of 64kbps"), + "384": _(u"total bitrate of 384kbps")} + BINARIES = ("lame", "twolame") + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + ID3v2Comment.skip(file) + + try: + frame = cls.MP3_FRAME_HEADER.parse_stream(file) + + return ((frame.sync == 0x07FF) and + (frame.mpeg_version in (0x03, 0x02, 0x00)) and + (frame.layer == 0x02)) + except: + return False + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new MP2Audio object.""" + + import decimal + import bisect + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if ((pcmreader.channels > 2) or + (pcmreader.sample_rate not in (32000, 48000, 44100)) or + (pcmreader.bits_per_sample != 16)): + pcmreader = PCMConverter( + pcmreader, + sample_rate=[32000, 32000, 44100, 48000][bisect.bisect( + [32000, 44100, 48000], pcmreader.sample_rate)], + channels=min(pcmreader.channels, 2), + channel_mask=pcmreader.channel_mask, + bits_per_sample=16) + + devnull = file(os.devnull, 'ab') + + sub = subprocess.Popen([BIN['twolame'], "--quiet", + "-r", + "-s", str(pcmreader.sample_rate), + "--samplesize", str(pcmreader.bits_per_sample), + "-N", str(pcmreader.channels), + "-m", "a", + "-b", compression, + "-", + filename], + stdin=subprocess.PIPE, + stdout=devnull, + stderr=devnull, + preexec_fn=ignore_sigint) + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (ValueError, IOError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + cls.__unlink__(filename) + raise EncodingError(err.error_message) + + sub.stdin.close() + devnull.close() + + if (sub.wait() == 0): + return MP2Audio(filename) + else: + cls.__unlink__(filename) + raise EncodingError(u"twolame exited with error") diff --git a/Melodia/resources/audiotools/__musepack__.py b/Melodia/resources/audiotools/__musepack__.py new file mode 100644 index 0000000..d4fae48 --- /dev/null +++ b/Melodia/resources/audiotools/__musepack__.py @@ -0,0 +1,332 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, InvalidFormat, PCMReader, + PCMConverter, Con, subprocess, BIN, ApeTaggedAudio, + os, TempWaveReader, ignore_sigint, transfer_data, + EncodingError, DecodingError) +from __wav__ import WaveAudio +import gettext + +gettext.install("audiotools", unicode=True) + +####################### +#Musepack Audio +####################### + + +class NutValue(Con.Adapter): + """A construct for Musepack Nut-encoded integer fields.""" + + def __init__(self, name): + Con.Adapter.__init__( + self, + Con.RepeatUntil(lambda obj, ctx: (obj & 0x80) == 0x00, + Con.UBInt8(name))) + + def _encode(self, value, context): + data = [value & 0x7F] + value = value >> 7 + + while (value != 0): + data.append(0x80 | (value & 0x7F)) + value = value >> 7 + + data.reverse() + return data + + def _decode(self, obj, context): + i = 0 + for x in obj: + i = (i << 7) | (x & 0x7F) + return i + + +class Musepack8StreamReader: + """An object for parsing Musepack SV8 streams.""" + + NUT_HEADER = Con.Struct('nut_header', + Con.String('key', 2), + NutValue('length')) + + def __init__(self, stream): + """Initialized with a file object.""" + + self.stream = stream + + def packets(self): + """Yields a set of (key, data) tuples.""" + + import string + + UPPERCASE = frozenset(string.ascii_uppercase) + + while (True): + try: + frame_header = self.NUT_HEADER.parse_stream(self.stream) + except Con.core.FieldError: + break + + if (not frozenset(frame_header.key).issubset(UPPERCASE)): + break + + yield (frame_header.key, + self.stream.read(frame_header.length - + len(self.NUT_HEADER.build(frame_header)))) + + +class MusepackAudio(ApeTaggedAudio, AudioFile): + """A Musepack audio file.""" + + SUFFIX = "mpc" + NAME = SUFFIX + DEFAULT_COMPRESSION = "standard" + COMPRESSION_MODES = ("thumb", "radio", "standard", "extreme", "insane") + + ###Musepack SV7### + #BINARIES = ('mppdec','mppenc') + + ###Musepack SV8### + BINARIES = ('mpcdec', 'mpcenc') + + MUSEPACK8_HEADER = Con.Struct('musepack8_header', + Con.UBInt32('crc32'), + Con.Byte('bitstream_version'), + NutValue('sample_count'), + NutValue('beginning_silence'), + Con.Embed(Con.BitStruct( + 'flags', + Con.Bits('sample_frequency', 3), + Con.Bits('max_used_bands', 5), + Con.Bits('channel_count', 4), + Con.Flag('mid_side_used'), + Con.Bits('audio_block_frames', 3)))) + + #not sure about some of the flag locations + #Musepack 7's header is very unusual + MUSEPACK7_HEADER = Con.Struct('musepack7_header', + Con.Const(Con.String('signature', 3), 'MP+'), + Con.Byte('version'), + Con.ULInt32('frame_count'), + Con.ULInt16('max_level'), + Con.Embed( + Con.BitStruct('flags', + Con.Bits('profile', 4), + Con.Bits('link', 2), + Con.Bits('sample_frequency', 2), + Con.Flag('intensity_stereo'), + Con.Flag('midside_stereo'), + Con.Bits('maxband', 6))), + Con.ULInt16('title_gain'), + Con.ULInt16('title_peak'), + Con.ULInt16('album_gain'), + Con.ULInt16('album_peak'), + Con.Embed( + Con.BitStruct('more_flags', + Con.Bits('unused1', 16), + Con.Bits('last_frame_length_low', 4), + Con.Flag('true_gapless'), + Con.Bits('unused2', 3), + Con.Flag('fast_seeking'), + Con.Bits('last_frame_length_high', 7))), + Con.Bytes('unknown', 3), + Con.Byte('encoder_version')) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + f = file(filename, 'rb') + try: + if (f.read(4) == 'MPCK'): # a Musepack 8 stream + for (key, packet) in Musepack8StreamReader(f).packets(): + if (key == 'SH'): + header = MusepackAudio.MUSEPACK8_HEADER.parse(packet) + + self.__sample_rate__ = (44100, 48000, + 37800, 32000)[ + header.sample_frequency] + + self.__total_frames__ = header.sample_count + self.__channels__ = header.channel_count + 1 + + break + elif (key == 'SE'): + raise InvalidFile(_(u'No Musepack header found')) + + else: # a Musepack 7 stream + f.seek(0, 0) + + try: + header = MusepackAudio.MUSEPACK7_HEADER.parse_stream(f) + except Con.ConstError: + raise InvalidFile(_(u'Musepack signature incorrect')) + + header.last_frame_length = \ + (header.last_frame_length_high << 4) | \ + header.last_frame_length_low + + self.__sample_rate__ = (44100, 48000, + 37800, 32000)[header.sample_frequency] + self.__total_frames__ = (((header.frame_count - 1) * 1152) + + header.last_frame_length) + + self.__channels__ = 2 + finally: + f.close() + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new MusepackAudio object.""" + + import tempfile + import bisect + + if (str(compression) not in cls.COMPRESSION_MODES): + compression = cls.DEFAULT_COMPRESSION + + if ((pcmreader.channels > 2) or + (pcmreader.sample_rate not in (44100, 48000, 37800, 32000)) or + (pcmreader.bits_per_sample != 16)): + pcmreader = PCMConverter( + pcmreader, + sample_rate=[32000, 32000, 37800, 44100, 48000][bisect.bisect( + [32000, 37800, 44100, 48000], pcmreader.sample_rate)], + channels=min(pcmreader.channels, 2), + bits_per_sample=16) + + f = tempfile.NamedTemporaryFile(suffix=".wav") + w = WaveAudio.from_pcm(f.name, pcmreader) + try: + return cls.__from_wave__(filename, f.name, compression) + finally: + del(w) + f.close() + + #While Musepack needs to pipe things through WAVE, + #not all WAVEs are acceptable. + #Use the *_pcm() methods first. + def __to_wave__(self, wave_filename): + devnull = file(os.devnull, "wb") + try: + sub = subprocess.Popen([BIN['mpcdec'], + self.filename, + wave_filename], + stdout=devnull, + stderr=devnull) + + #FIXME - small files (~5 seconds) result in an error by mpcdec, + #even if they decode correctly. + #Not much we can do except try to workaround its bugs. + if (sub.wait() not in [0, 250]): + raise DecodingError() + finally: + devnull.close() + + @classmethod + def __from_wave__(cls, filename, wave_filename, compression=None): + if (str(compression) not in cls.COMPRESSION_MODES): + compression = cls.DEFAULT_COMPRESSION + + #mppenc requires files to end with .mpc for some reason + if (not filename.endswith(".mpc")): + import tempfile + actual_filename = filename + tempfile = tempfile.NamedTemporaryFile(suffix=".mpc") + filename = tempfile.name + else: + actual_filename = tempfile = None + + ###Musepack SV7### + #sub = subprocess.Popen([BIN['mppenc'], + # "--silent", + # "--overwrite", + # "--%s" % (compression), + # wave_filename, + # filename], + # preexec_fn=ignore_sigint) + + ###Musepack SV8### + sub = subprocess.Popen([BIN['mpcenc'], + "--silent", + "--overwrite", + "--%s" % (compression), + wave_filename, + filename]) + + if (sub.wait() == 0): + if (tempfile is not None): + filename = actual_filename + f = file(filename, 'wb') + tempfile.seek(0, 0) + transfer_data(tempfile.read, f.write) + f.close() + tempfile.close() + + return MusepackAudio(filename) + else: + if (tempfile is not None): + tempfile.close() + raise EncodingError(u"error encoding file with mpcenc") + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(4) + + ###Musepack SV7### + #return header == 'MP+\x07' + + ###Musepack SV8### + return (header == 'MP+\x07') or (header == 'MPCK') + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_frames__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return 16 + + def lossless(self): + """Returns False.""" + + return False diff --git a/Melodia/resources/audiotools/__musicbrainz__.py b/Melodia/resources/audiotools/__musicbrainz__.py new file mode 100644 index 0000000..a616595 --- /dev/null +++ b/Melodia/resources/audiotools/__musicbrainz__.py @@ -0,0 +1,638 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (MetaData, AlbumMetaData, AlbumMetaDataFile, + MetaDataFileException, + __most_numerous__, DummyAudioFile, sys) +import urllib +import gettext + +gettext.install("audiotools", unicode=True) + + +def get_xml_nodes(parent, child_tag): + """A helper routine for returning all children with the given XML tag.""" + + return [node for node in parent.childNodes + if (hasattr(node, "tagName") and + (node.tagName == child_tag))] + + +def walk_xml_tree(parent, *child_tags): + """A helper routine for walking through several children.""" + + if (len(child_tags) == 0): + return parent + else: + base_tag = child_tags[0] + remaining_tags = child_tags[1:] + for node in parent.childNodes: + if (hasattr(node, "tagName") and + (node.tagName == base_tag)): + return walk_xml_tree(node, *remaining_tags) + else: + return None + + +def walk_xml_tree_build(dom, parent, *child_tags): + + if (len(child_tags) == 0): + return parent + else: + base_tag = child_tags[0] + remaining_tags = child_tags[1:] + for node in parent.childNodes: + if (hasattr(node, "tagName") and + (node.tagName == base_tag)): + return walk_xml_tree_build(dom, node, *remaining_tags) + else: + new_child = dom.createElement(base_tag) + parent.appendChild(new_child) + return walk_xml_tree_build(dom, new_child, *remaining_tags) + + +def get_xml_text_node(parent, child_tag): + """A helper routine for returning the first text child XML node.""" + + try: + return get_xml_nodes(parent, child_tag)[0].childNodes[0].data.strip() + except IndexError: + return u'' + + +def reorder_xml_children(parent, child_order): + """Given an XML element with childNodes, reorders them to child_order. + + child_order should be a list of unicode tag strings. + """ + + if (parent.childNodes is None): + return + + child_tags = {} + leftovers = [] + for child in parent.childNodes: + if (hasattr(child, "tagName")): + child_tags.setdefault(child.tagName, []).append(child) + else: + leftovers.append(child) + + #remove all the old childen from parent + for child in parent.childNodes: + parent.removeChild(child) + + #re-add the childen in child_order + for tagName in child_order: + if (tagName in child_tags): + for child in child_tags[tagName]: + parent.appendChild(child) + del(child_tags[tagName]) + + #re-add any leftover children tags or non-tags + for child_tags in child_tags.values(): + for child in child_tags: + parent.appendChild(child) + + for child in leftovers: + parent.appendChild(child) + + +class MBDiscID: + """A MusicBrainz disc ID.""" + + def __init__(self, tracks=[], offsets=None, length=None, lead_in=150, + first_track_number=None, last_track_number=None, + lead_out_track_offset=None): + """Fields are as follows: + + tracks - a list of track lengths in CD frames + offsets - a list of track offsets in CD frames + length - the length of the entire disc in CD frames + lead_in - the location of the first track on the CD, in frames + + first_track_number, last_track_number and lead_out_track_offset + are integer values. + + All fields are optional. + One will presumably fill them with data later in that event. + """ + + self.tracks = tracks + self.__offsets__ = offsets + self.__length__ = length + self.__lead_in__ = lead_in + self.first_track_number = first_track_number + self.last_track_number = last_track_number + self.lead_out_track_offset = lead_out_track_offset + + @classmethod + def from_cdda(cls, cdda): + """Given a CDDA object, returns a populated MBDiscID + + May raise ValueError if there are no audio tracks on the CD.""" + + tracks = list(cdda) + if (len(tracks) < 1): + raise ValueError(_(u"no audio tracks in CDDA object")) + + return cls( + tracks=[t.length() for t in tracks], + offsets=[t.offset() for t in tracks], + length=cdda.length(), + lead_in=tracks[0].offset(), + lead_out_track_offset=cdda.last_sector() + 150 + 1) + + def offsets(self): + """Returns a list of calculated offset integers, from track lengths.""" + + if (self.__offsets__ is None): + offsets = [self.__lead_in__] + + for track in self.tracks[0:-1]: + offsets.append(track + offsets[-1]) + + return offsets + else: + return self.__offsets__ + + def __repr__(self): + return ("MBDiscID(tracks=%s,offsets=%s,length=%s,lead_in=%s," + + "first_track_number=%s,last_track_number=%s," + + "lead_out_track_offset=%s)") % \ + (repr(self.tracks), + repr(self.__offsets__), + repr(self.__length__), + repr(self.__lead_in__), + repr(self.first_track_number), + repr(self.last_track_number), + repr(self.lead_out_track_offset)) + + #returns a MusicBrainz DiscID value as a string + def __str__(self): + from hashlib import sha1 + + if (self.lead_out_track_offset is None): + if (self.__length__ is None): + lead_out_track_offset = sum(self.tracks) + self.__lead_in__ + else: + lead_out_track_offset = self.__length__ + self.__lead_in__ + else: + lead_out_track_offset = self.lead_out_track_offset + + if (self.first_track_number is None): + first_track_number = 1 + else: + first_track_number = self.first_track_number + + if (self.last_track_number is None): + last_track_number = len(self.tracks) + else: + last_track_number = self.last_track_number + + digest = sha1("%02X%02X%s" % \ + (first_track_number, + last_track_number, + "".join(["%08X" % (i) for i in + [lead_out_track_offset] + + self.offsets() + + ([0] * (99 - len(self.offsets())))]))) + + return "".join([{'=': '-', '+': '.', '/': '_'}.get(c, c) for c in + digest.digest().encode('base64').rstrip('\n')]) + + def toxml(self, output): + """Writes an XML file to the output file object.""" + + output.write(MusicBrainzReleaseXML.from_tracks( + [DummyAudioFile(length, None, i + 1) + for (i, length) in enumerate(self.tracks)]).to_string()) + + +class MusicBrainz: + """A class for performing queries on a MusicBrainz or compatible server.""" + + def __init__(self, server, port, messenger): + self.server = server + self.port = port + self.connection = None + self.messenger = messenger + + def connect(self): + """Performs the initial connection.""" + + import httplib + + self.connection = httplib.HTTPConnection(self.server, self.port) + + def close(self): + """Closes an open connection.""" + + if (self.connection is not None): + self.connection.close() + + def read_data(self, disc_id, output): + """Returns a (matches,dom) tuple from a MBDiscID object. + + matches is an integer + and dom is a minidom Document object or None.""" + + from xml.dom.minidom import parseString + from xml.parsers.expat import ExpatError + + self.connection.request( + "GET", + "%s?%s" % ("/ws/1/release", + urllib.urlencode({"type": "xml", + "discid": str(disc_id)}))) + + response = self.connection.getresponse() + #FIXME - check for errors in the HTTP response + + data = response.read() + + try: + dom = parseString(data) + return (len(dom.getElementsByTagName(u'release')), dom) + except ExpatError: + return (0, None) + + +class MBXMLException(MetaDataFileException): + """Raised if MusicBrainzReleaseXML.read() encounters an error.""" + + def __unicode__(self): + return _(u"Invalid MusicBrainz XML file") + + +class MusicBrainzReleaseXML(AlbumMetaDataFile): + """An XML file as returned by MusicBrainz.""" + + TAG_ORDER = {u"release": [u"title", + u"text-representation", + u"asin", + u"artist", + u"release-group", + u"release-event-list", + u"disc-list", + u"puid-list", + u"track-list", + u"relation-list", + u"tag-list", + u"user-tag-list", + u"rating", + u"user-rating"], + u"artist": [u"name", + u"sort-name", + u"disambiguation", + u"life-span", + u"alias-list", + u"release-list", + u"release-group-list", + u"relation-list", + u"tag-list", + u"user-tag-list", + u"rating"], + u"track": [u"title", + u"duration", + u"isrc-list", + u"artist", + u"release-list", + u"puid-list", + u"relation-list", + u"tag-list", + u"user-tag-list", + u"rating", + u"user-rating"]} + + def __init__(self, dom): + self.dom = dom + + def __getattr__(self, key): + if (key == 'album_name'): + try: + return get_xml_text_node( + walk_xml_tree(self.dom, + u'metadata', u'release-list', u'release'), + u'title') + except AttributeError: + return u"" + elif (key == 'artist_name'): + try: + return get_xml_text_node( + walk_xml_tree(self.dom, + u'metadata', u'release-list', u'release', + u'artist'), + u'name') + except AttributeError: + return u"" + elif (key == 'year'): + try: + return walk_xml_tree( + self.dom, u'metadata', u'release-list', u'release', + u'release-event-list', + u'event').getAttribute('date')[0:4] + except (IndexError, AttributeError): + return u"" + elif (key == 'catalog'): + try: + return walk_xml_tree( + self.dom, u'metadata', u'release-list', u'release', + u'release-event-list', + u'event').getAttribute('catalog-number') + except (IndexError, AttributeError): + return u"" + elif (key == 'extra'): + return u"" + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __setattr__(self, key, value): + #FIXME - create nodes if they don't exist + if (key == 'album_name'): + title = walk_xml_tree(self.dom, u'metadata', u'release-list', + u'release', u'title') + if (len(title.childNodes) > 0): + title.replaceChild(self.dom.createTextNode(value), + title.firstChild) + else: + title.appendChild(self.dom.createTextNode(value)) + elif (key == 'artist_name'): + name = walk_xml_tree(self.dom, u'metadata', u'release-list', + u'release', u'artist', u'name') + if (len(name.childNodes) > 0): + name.replaceChild(self.dom.createTextNode(value), + name.firstChild) + else: + name.appendChild(self.dom.createTextNode(value)) + elif (key == 'year'): + walk_xml_tree_build(self.dom, self.dom, + u'metadata', u'release-list', + u'release', u'release-event-list', + u'event').setAttribute(u"date", value) + elif (key == 'catalog'): + walk_xml_tree_build(self.dom, self.dom, + u'metadata', u'release-list', + u'release', u'release-event-list', + u'event').setAttribute(u"catalog-number", + value) + elif (key == 'extra'): + pass + else: + self.__dict__[key] = value + + def __len__(self): + return len(self.dom.getElementsByTagName(u'track')) + + def to_string(self): + for (tag, order) in MusicBrainzReleaseXML.TAG_ORDER.items(): + for parent in self.dom.getElementsByTagName(tag): + reorder_xml_children(parent, order) + + return self.dom.toxml(encoding='utf-8') + + @classmethod + def from_string(cls, string): + from xml.dom.minidom import parseString + from xml.parsers.expat import ExpatError + + try: + return cls(parseString(string)) + except ExpatError: + raise MBXMLException("") + + def get_track(self, index): + track_node = self.dom.getElementsByTagName(u'track')[index] + track_name = get_xml_text_node(track_node, u'title') + artist_node = walk_xml_tree(track_node, u'artist') + if (artist_node is not None): + artist_name = get_xml_text_node(artist_node, u'name') + if (len(artist_name) == 0): + artist_name = u"" + else: + artist_name = u"" + return (track_name, artist_name, u"") + + def set_track(self, index, name, artist, extra): + track_node = self.dom.getElementsByTagName(u'track')[index] + title = walk_xml_tree(track_node, 'title') + if (len(title.childNodes) > 0): + title.replaceChild(self.dom.createTextNode(name), + title.firstChild) + else: + title.appendChild(self.dom.createTextNode(name)) + if (len(artist) > 0): + artist_node = walk_xml_tree_build(self.dom, + track_node, + u'artist', u'name') + if (artist_node.hasChildNodes()): + artist_node.replaceChild(self.dom.createTextNode(artist), + artist_node.firstChild) + else: + artist_node.appendChild(self.dom.createTextNode(artist)) + + @classmethod + def from_tracks(cls, tracks): + """Returns a MusicBrainzReleaseXML from a list of AudioFile objects. + + These objects are presumably from the same album. + If not, these heuristics may generate something unexpected. + """ + + from xml.dom.minidom import parseString + + def make_text_node(document, tagname, text): + node = document.createElement(tagname) + node.appendChild(document.createTextNode(text)) + return node + + tracks.sort(lambda x, y: cmp(x.track_number(), y.track_number())) + + #our base DOM to start with + dom = parseString('' + + '') + + release = dom.createElement(u'release') + + track_metadata = [t.get_metadata() for t in tracks + if (t.get_metadata() is not None)] + + #add album title + release.appendChild(make_text_node( + dom, u'title', unicode(__most_numerous__( + [m.album_name for m in track_metadata])))) + + #add album artist + if (len(set([m.artist_name for m in track_metadata])) < + len(track_metadata)): + artist = dom.createElement(u'artist') + album_artist = unicode(__most_numerous__( + [m.artist_name for m in track_metadata])) + artist.appendChild(make_text_node(dom, u'name', album_artist)) + release.appendChild(artist) + else: + album_artist = u'' # all track artist names differ + artist = dom.createElement(u'artist') + artist.appendChild(make_text_node(dom, u'name', album_artist)) + release.appendChild(artist) + + #add release info (catalog number, release date, media, etc.) + event_list = dom.createElement(u'release-event-list') + event = dom.createElement(u'event') + + year = unicode(__most_numerous__( + [m.year for m in track_metadata])) + if (year != u""): + event.setAttribute(u'date', year) + + catalog_number = unicode(__most_numerous__( + [m.catalog for m in track_metadata])) + if (catalog_number != u""): + event.setAttribute(u'catalog-number', catalog_number) + + media = unicode(__most_numerous__( + [m.media for m in track_metadata])) + if (media != u""): + event.setAttribute(u'format', media) + + event_list.appendChild(event) + release.appendChild(event_list) + + #add tracks + track_list = dom.createElement(u'track-list') + + for track in tracks: + node = dom.createElement(u'track') + track_metadata = track.get_metadata() + if (track_metadata is not None): + node.appendChild(make_text_node( + dom, u'title', track_metadata.track_name)) + else: + node.appendChild(make_text_node( + dom, u'title', u'')) + + node.appendChild(make_text_node( + dom, u'duration', + unicode((track.total_frames() * 1000) / + track.sample_rate()))) + + if (track_metadata is not None): + #add track artist, if different from album artist + if (track_metadata.artist_name != album_artist): + artist = dom.createElement(u'artist') + artist.appendChild(make_text_node( + dom, u'name', track_metadata.artist_name)) + node.appendChild(artist) + + track_list.appendChild(node) + + release.appendChild(track_list) + + release_list = dom.createElement(u'release-list') + release_list.appendChild(release) + dom.getElementsByTagName(u'metadata')[0].appendChild(release_list) + + return cls(dom) + + +#takes a Document containing multiple tags +#and a Messenger object to query for output +#returns a modified Document containing only one +def __select_match__(dom, messenger): + messenger.info(_(u"Please Select the Closest Match:")) + matches = dom.getElementsByTagName(u'release') + selected = 0 + while ((selected < 1) or (selected > len(matches))): + for i in range(len(matches)): + messenger.info(_(u"%(choice)s) %(name)s") % \ + {"choice": i + 1, + "name": get_xml_text_node(matches[i], + u'title')}) + try: + messenger.partial_info(_(u"Your Selection [1-%s]:") % \ + (len(matches))) + selected = int(sys.stdin.readline().strip()) + except ValueError: + selected = 0 + + for (i, release) in enumerate(dom.getElementsByTagName(u'release')): + if (i != (selected - 1)): + release.parentNode.removeChild(release) + + return dom + + +#takes a Document containing multiple tags +#and a default selection integer +#returns a modified Document containing only one +def __select_default_match__(dom, selection): + for (i, release) in enumerate(dom.getElementsByTagName(u'release')): + if (i != selection): + release.parentNode.removeChild(release) + + return dom + + +def get_mbxml(disc_id, output, musicbrainz_server, musicbrainz_port, + messenger, default_selection=None): + """Runs through the entire MusicBrainz querying sequence. + + Fields are as follows: + disc_id - an MBDiscID object + output - an open file object for writing + musicbrainz_server - a server name string + musicbrainz_port - a server port int + messenger - a Messenger object + default_selection - if given, the default match to choose + """ + + mb = MusicBrainz(musicbrainz_server, musicbrainz_port, messenger) + + mb.connect() + messenger.info( + _(u"Sending Disc ID \"%(disc_id)s\" to server \"%(server)s\"") % \ + {"disc_id": str(disc_id).decode('ascii'), + "server": musicbrainz_server.decode('ascii', 'replace')}) + + (matches, dom) = mb.read_data(disc_id, output) + mb.close() + + if (matches == 1): + messenger.info(_(u"1 match found")) + else: + messenger.info(_(u"%s matches found") % (matches)) + + if (matches > 1): + if (default_selection is None): + output.write(__select_match__( + dom, messenger).toxml(encoding='utf-8')) + else: + output.write(__select_default_match__( + dom, default_selection).toxml(encoding='utf-8')) + + output.flush() + elif (matches == 1): + output.write(dom.toxml(encoding='utf-8')) + output.flush() + else: + return matches diff --git a/Melodia/resources/audiotools/__shn__.py b/Melodia/resources/audiotools/__shn__.py new file mode 100644 index 0000000..305e3c4 --- /dev/null +++ b/Melodia/resources/audiotools/__shn__.py @@ -0,0 +1,507 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, ChannelMask, PCMReader, + transfer_framelist_data, WaveAudio, + AiffAudio, cStringIO, EncodingError, + UnsupportedBitsPerSample, InvalidFile, + PCMReaderError, + WaveContainer, AiffContainer, to_pcm_progress) + +import audiotools.decoders +import os.path + + +class InvalidShorten(InvalidFile): + pass + + +class ShortenAudio(WaveContainer, AiffContainer): + """A Shorten audio file.""" + + SUFFIX = "shn" + NAME = SUFFIX + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + try: + f = open(filename, 'rb') + except IOError, msg: + raise InvalidShorten(str(msg)) + try: + if (not ShortenAudio.is_type(f)): + raise InvalidShorten(_(u'Shorten header not detected')) + finally: + f.close() + + #Why not call __populate_metadata__ here and raise InvalidShorten + #if it errors out? + #The problem is that __populate_metadata__ needs to walk + #through the *entire* file in order to calculate total PCM frames + #and so on. + #That's an expensive operation to perform at init-time + #so it's better to postpone it to an on-demand fetch. + + def __populate_metadata__(self): + #set up some default values + self.__bits_per_sample__ = 16 + self.__channels__ = 2 + self.__channel_mask__ = 0x3 + self.__sample_rate__ = 44100 + self.__total_frames__ = 0 + self.__blocks__ = [] + self.__format__ = None + + #grab a few pieces of technical metadata from the Shorten file itself + #which requires a dry-run through the decoder + try: + decoder = audiotools.decoders.SHNDecoder(self.filename) + try: + + self.__bits_per_sample__ = decoder.bits_per_sample + self.__channels__ = decoder.channels + (self.__total_frames__, + self.__blocks__) = decoder.metadata() + finally: + decoder.close() + + try: + self.__channel_mask__ = ChannelMask.from_channels( + self.__channels__) + except ValueError: + self.__channel_mask__ = 0 + except (ValueError, IOError): + #if we hit an error in SHNDecoder while reading + #technical metadata, the default values will have to do + return + + #the remainder requires parsing the file's VERBATIM blocks + #which may contain Wave, AIFF or Sun AU info + if (self.__blocks__[0] is not None): + header = cStringIO.StringIO(self.__blocks__[0]) + for format in WaveAudio, AiffAudio: + header.seek(0, 0) + if (format.is_type(header)): + self.__format__ = format + break + if (self.__format__ is WaveAudio): + for (chunk_id, chunk_data) in self.__wave_chunks__(): + if (chunk_id == 'fmt '): + fmt_chunk = WaveAudio.FMT_CHUNK.parse(chunk_data) + self.__sample_rate__ = fmt_chunk.sample_rate + if (fmt_chunk.compression == 0xFFFE): + self.__channel_mask__ = \ + WaveAudio.fmt_chunk_to_channel_mask( + fmt_chunk.channel_mask) + elif (self.__format__ is AiffAudio): + for (chunk_id, chunk_data) in self.__aiff_chunks__(): + if (chunk_id == 'COMM'): + comm_chunk = AiffAudio.COMM_CHUNK.parse(chunk_data) + self.__sample_rate__ = comm_chunk.sample_rate + + def __wave_chunks__(self): + total_size = sum([len(block) for block in self.__blocks__ + if block is not None]) + wave_data = cStringIO.StringIO("".join([block for block in + self.__blocks__ + if block is not None])) + + wave_data.read(12) # skip the RIFFxxxxWAVE header data + total_size -= 12 + + #iterate over all the non-data chunks + while (total_size > 0): + header = WaveAudio.CHUNK_HEADER.parse_stream(wave_data) + total_size -= 8 + if (header.chunk_id != 'data'): + yield (header.chunk_id, wave_data.read(header.chunk_length)) + total_size -= header.chunk_length + else: + continue + + def __aiff_chunks__(self): + total_size = sum([len(block) for block in self.__blocks__ + if block is not None]) + aiff_data = cStringIO.StringIO("".join([block for block in + self.__blocks__ + if block is not None])) + + aiff_data.read(12) # skip the FORMxxxxAIFF header data + total_size -= 12 + + #iterate over all the chunks + while (total_size > 0): + header = AiffAudio.CHUNK_HEADER.parse_stream(aiff_data) + total_size -= 8 + if (header.chunk_id != 'SSND'): + yield (header.chunk_id, aiff_data.read(header.chunk_length)) + total_size -= header.chunk_length + else: + #This presumes that audiotools encoded + #the Shorten file from an AIFF source. + #The reference encoder places the 8 alignment + #bytes in the PCM stream itself, which is wrong. + yield (header.chunk_id, aiff_data.read(8)) + total_size -= 8 + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + return (file.read(4) == 'ajkg') and (ord(file.read(1)) == 2) + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + if (not hasattr(self, "__bits_per_sample__")): + self.__populate_metadata__() + return self.__bits_per_sample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + if (not hasattr(self, "__channels__")): + self.__populate_metadata__() + return self.__channels__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if (not hasattr(self, "__channel_mask__")): + self.__populate_metadata__() + return self.__channel_mask__ + + def lossless(self): + """Returns True.""" + + return True + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + if (not hasattr(self, "__total_frames__")): + self.__populate_metadata__() + return self.__total_frames__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + if (not hasattr(self, "__sample_rate__")): + self.__populate_metadata__() + return self.__sample_rate__ + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + try: + sample_rate = self.sample_rate() + channels = self.channels() + channel_mask = int(self.channel_mask()) + bits_per_sample = self.bits_per_sample() + + decoder = audiotools.decoders.SHNDecoder(self.filename) + decoder.sample_rate = sample_rate + decoder.channel_mask = channel_mask + return decoder + except (IOError, ValueError), msg: + #these may not be accurate if the Shorten file is broken + #but if it is broken, there'll be no way to + #cross-check the results anyway + return PCMReaderError(error_message=str(msg), + sample_rate=44100, + channels=2, + channel_mask=0x3, + bits_per_sample=16) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None, + block_size=256): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new ShortenAudio object.""" + + if (pcmreader.bits_per_sample not in (8, 16)): + raise UnsupportedBitsPerSample(filename, pcmreader.bits_per_sample) + + import tempfile + + f = tempfile.NamedTemporaryFile(suffix=".wav") + try: + w = WaveAudio.from_pcm(f.name, pcmreader) + return cls.from_wave(filename, f.name, compression, block_size) + finally: + if (os.path.isfile(f.name)): + f.close() + else: + f.close_called = True + + def to_wave(self, wave_filename, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + if (not hasattr(self, "__format__")): + try: + self.__populate_metadata__() + except IOError, msg: + raise EncodingError(str(msg)) + + if (self.__format__ is WaveAudio): + try: + f = open(wave_filename, 'wb') + except IOError, msg: + raise EncodingError(str(msg)) + for block in self.__blocks__: + if (block is not None): + f.write(block) + else: + try: + total_frames = self.total_frames() + current_frames = 0 + decoder = audiotools.decoders.SHNDecoder(self.filename) + frame = decoder.read(4096) + while (len(frame) > 0): + f.write(frame.to_bytes(False, True)) + current_frames += frame.frames + if (progress is not None): + progress(current_frames, total_frames) + frame = decoder.read(4096) + except IOError, msg: + raise EncodingError(str(msg)) + else: + WaveAudio.from_pcm(wave_filename, to_pcm_progress(self, progress)) + + def to_aiff(self, aiff_filename, progress=None): + """Writes the contents of this file to the given .aiff filename string. + + Raises EncodingError if some error occurs during decoding.""" + + if (not hasattr(self, "__format__")): + try: + self.__populate_metadata__() + except IOError, msg: + raise EncodingError(str(msg)) + + if (self.__format__ is AiffAudio): + try: + f = open(aiff_filename, 'wb') + except IOError, msg: + raise EncodingError(str(msg)) + for block in self.__blocks__: + if (block is not None): + f.write(block) + else: + try: + total_frames = self.total_frames() + current_frames = 0 + decoder = audiotools.decoders.SHNDecoder(self.filename) + frame = decoder.read(4096) + while (len(frame) > 0): + f.write(frame.to_bytes(True, True)) + current_frames += frame.frames + if (progress is not None): + progress(current_frames, total_frames) + frame = decoder.read(4096) + except IOError, msg: + raise EncodingError(str(msg)) + else: + AiffAudio.from_pcm(aiff_filename, to_pcm_progress(self, progress)) + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + block_size=256, progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new ShortenAudio object.""" + + wave = WaveAudio(wave_filename) + + if (wave.bits_per_sample() not in (8, 16)): + raise UnsupportedBitsPerSample(filename, wave.bits_per_sample()) + + (head, tail) = wave.pcm_split() + if (len(tail) > 0): + blocks = [head, None, tail] + else: + blocks = [head, None] + + import audiotools.encoders + + try: + audiotools.encoders.encode_shn( + filename=filename, + pcmreader=to_pcm_progress(wave, progress), + block_size=block_size, + file_type={8: 2, + 16: 5}[wave.bits_per_sample()], + verbatim_chunks=blocks) + + return cls(filename) + except IOError, err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + + @classmethod + def from_aiff(cls, filename, aiff_filename, compression=None, + block_size=256, progress=None): + """Encodes a new AudioFile from an existing .aiff file. + + Takes a filename string, aiff_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the aiff's data + at the given filename with the specified compression level + and returns a new ShortenAudio object.""" + + aiff = AiffAudio(aiff_filename) + + if (aiff.bits_per_sample() not in (8, 16)): + raise UnsupportedBitsPerSample(filename, aiff.bits_per_sample()) + + (head, tail) = aiff.pcm_split() + if (len(tail) > 0): + blocks = [head, None, tail] + else: + blocks = [head, None] + + import audiotools.encoders + + try: + audiotools.encoders.encode_shn( + filename=filename, + pcmreader=to_pcm_progress(aiff, progress), + block_size=block_size, + file_type={8: 1, # 8-bit AIFF seems to be signed + 16: 3}[aiff.bits_per_sample()], + verbatim_chunks=blocks) + + return cls(filename) + except IOError, err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + Metadata is not copied during conversion, but embedded + RIFF chunks are (if any). + May raise EncodingError if some problem occurs during encoding.""" + + #Note that a Shorten file cannot contain + #both RIFF chunks and AIFF chunks at the same time. + + import tempfile + + if (target_class == WaveAudio): + self.to_wave(target_path, progress=progress) + return WaveAudio(target_path) + elif (target_class == AiffAudio): + self.to_aiff(target_path, progress=progress) + return AiffAudio(target_path) + elif (self.has_foreign_riff_chunks() and + hasattr(target_class, "from_wave")): + temp_wave = tempfile.NamedTemporaryFile(suffix=".wav") + try: + #we'll only log the second leg of conversion, + #since that's likely to be the slower portion + self.to_wave(temp_wave.name) + return target_class.from_wave(target_path, + temp_wave.name, + compression, + progress=progress) + finally: + temp_wave.close() + elif (self.has_foreign_aiff_chunks() and + hasattr(target_class, "from_aiff")): + temp_aiff = tempfile.NamedTemporaryFile(suffix=".aiff") + try: + self.to_aiff(temp_aiff.name) + return target_class.from_aiff(target_path, + temp_aiff.name, + compression, + progress=progress) + finally: + temp_aiff.close() + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + def has_foreign_riff_chunks(self): + """Returns True if the audio file contains non-audio RIFF chunks. + + During transcoding, if the source audio file has foreign RIFF chunks + and the target audio format supports foreign RIFF chunks, + conversion should be routed through .wav conversion + to avoid losing those chunks.""" + + if (not hasattr(self, "__format__")): + self.__populate_metadata__() + + if (self.__format__ is WaveAudio): + for (chunk_id, chunk_data) in self.__wave_chunks__(): + if (chunk_id != 'fmt '): + return True + else: + return False + else: + return False + + def has_foreign_aiff_chunks(self): + """Returns True if the audio file contains non-audio AIFF chunks. + + During transcoding, if the source audio file has foreign AIFF chunks + and the target audio format supports foreign AIFF chunks, + conversion should be routed through .aiff conversion + to avoid losing those chunks.""" + + if (not hasattr(self, "__format__")): + self.__populate_metadata__() + + if (self.__format__ is AiffAudio): + for (chunk_id, chunk_data) in self.__aiff_chunks__(): + if ((chunk_id != 'COMM') and (chunk_id != 'SSND')): + return True + else: + return False + else: + return False diff --git a/Melodia/resources/audiotools/__speex__.py b/Melodia/resources/audiotools/__speex__.py new file mode 100644 index 0000000..8638bf0 --- /dev/null +++ b/Melodia/resources/audiotools/__speex__.py @@ -0,0 +1,268 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, PCMReader, PCMConverter, + Con, transfer_data, transfer_framelist_data, + subprocess, BIN, cStringIO, os, ignore_sigint, + EncodingError, DecodingError, ChannelMask, + __default_quality__) +from __vorbis__ import * + +####################### +#Speex File +####################### + + +class InvalidSpeex(InvalidFile): + pass + + +class UnframedVorbisComment(VorbisComment): + """An implementation of VorbisComment without the framing bit.""" + + VORBIS_COMMENT = Con.Struct("vorbis_comment", + Con.PascalString( + "vendor_string", + length_field=Con.ULInt32("length")), + Con.PrefixedArray( + length_field=Con.ULInt32("length"), + subcon=Con.PascalString("value", + length_field=Con.ULInt32("length")))) + + +class SpeexAudio(VorbisAudio): + """An Ogg Speex audio file.""" + + SUFFIX = "spx" + NAME = SUFFIX + DEFAULT_COMPRESSION = "8" + COMPRESSION_MODES = tuple([str(i) for i in range(0, 11)]) + COMPRESSION_DESCRIPTIONS = {"0": + _(u"corresponds to speexenc --quality 0"), + "10": + _(u"corresponds to speexenc --quality 10")} + BINARIES = ("speexenc", "speexdec") + REPLAYGAIN_BINARIES = tuple() + + SPEEX_HEADER = Con.Struct('speex_header', + Con.String('speex_string', 8), + Con.String('speex_version', 20), + Con.ULInt32('speex_version_id'), + Con.ULInt32('header_size'), + Con.ULInt32('sampling_rate'), + Con.ULInt32('mode'), + Con.ULInt32('mode_bitstream_version'), + Con.ULInt32('channels'), + Con.ULInt32('bitrate'), + Con.ULInt32('frame_size'), + Con.ULInt32('vbr'), + Con.ULInt32('frame_per_packet'), + Con.ULInt32('extra_headers'), + Con.ULInt32('reserved1'), + Con.ULInt32('reserved2')) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + try: + self.__read_metadata__() + except IOError, msg: + raise InvalidSpeex(str(msg)) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(0x23) + + return (header.startswith('OggS') and + header[0x1C:0x23] == 'Speex ') + + def __read_metadata__(self): + f = OggStreamReader(file(self.filename, "rb")) + packets = f.packets() + try: + #first read the Header packet + try: + header = SpeexAudio.SPEEX_HEADER.parse(packets.next()) + except StopIteration: + raise InvalidSpeex(_(u"Header packet not found")) + + self.__sample_rate__ = header.sampling_rate + self.__channels__ = header.channels + + #the read the Comment packet + comment_packet = packets.next() + + self.comment = UnframedVorbisComment.VORBIS_COMMENT.parse( + comment_packet) + finally: + del(packets) + f.close() + del(f) + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + devnull = file(os.devnull, 'ab') + sub = subprocess.Popen([BIN['speexdec'], self.filename, '-'], + stdout=subprocess.PIPE, + stderr=devnull) + return PCMReader( + sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(ChannelMask.from_channels(self.channels())), + bits_per_sample=self.bits_per_sample(), + process=sub) + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new SpeexAudio object.""" + + import bisect + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + if ((pcmreader.bits_per_sample not in (8, 16)) or + (pcmreader.channels > 2) or + (pcmreader.sample_rate not in (8000, 16000, 32000, 44100))): + pcmreader = PCMConverter( + pcmreader, + sample_rate=[8000, 8000, 16000, 32000, 44100][bisect.bisect( + [8000, 16000, 32000, 44100], pcmreader.sample_rate)], + channels=min(pcmreader.channels, 2), + channel_mask=ChannelMask.from_channels( + min(pcmreader.channels, 2)), + bits_per_sample=min(pcmreader.bits_per_sample, 16)) + + BITS_PER_SAMPLE = {8: ['--8bit'], + 16: ['--16bit']}[pcmreader.bits_per_sample] + + CHANNELS = {1: [], 2: ['--stereo']}[pcmreader.channels] + + devnull = file(os.devnull, "ab") + + sub = subprocess.Popen([BIN['speexenc'], + '--quality', str(compression), + '--rate', str(pcmreader.sample_rate), + '--le'] + \ + BITS_PER_SAMPLE + \ + CHANNELS + \ + ['-', filename], + stdin=subprocess.PIPE, + stderr=devnull, + preexec_fn=ignore_sigint) + + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (IOError, ValueError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + sub.stdin.close() + result = sub.wait() + devnull.close() + + if (result == 0): + return SpeexAudio(filename) + else: + raise EncodingError(u"unable to encode file with speexenc") + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + comment = VorbisComment.converted(metadata) + + if (comment is None): + return + + reader = OggStreamReader(file(self.filename, 'rb')) + new_file = cStringIO.StringIO() + writer = OggStreamWriter(new_file) + + pages = reader.pages() + + #transfer our old header + (header_page, header_data) = pages.next() + writer.write_page(header_page, header_data) + + #skip the existing comment packet + (page, data) = pages.next() + while (page.segment_lengths[-1] == 255): + (page, data) = pages.next() + + #write the pages for our new comment packet + comment_pages = OggStreamWriter.build_pages( + 0, + header_page.bitstream_serial_number, + header_page.page_sequence_number + 1, + comment.build()) + + for (page, data) in comment_pages: + writer.write_page(page, data) + + #write the rest of the pages, re-sequenced and re-checksummed + sequence_number = comment_pages[-1][0].page_sequence_number + 1 + for (i, (page, data)) in enumerate(pages): + page.page_sequence_number = i + sequence_number + page.checksum = OggStreamReader.calculate_ogg_checksum(page, data) + writer.write_page(page, data) + + reader.close() + + #re-write the file with our new data in "new_file" + f = file(self.filename, "wb") + f.write(new_file.getvalue()) + f.close() + writer.close() + + self.__read_metadata__() + + @classmethod + def can_add_replay_gain(cls): + """Returns False.""" + + return False diff --git a/Melodia/resources/audiotools/__vorbis__.py b/Melodia/resources/audiotools/__vorbis__.py new file mode 100644 index 0000000..e4c72f2 --- /dev/null +++ b/Melodia/resources/audiotools/__vorbis__.py @@ -0,0 +1,842 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, PCMReader, + ReorderedPCMReader, Con, transfer_data, + transfer_framelist_data, subprocess, BIN, + cStringIO, open_files, os, ReplayGain, + ignore_sigint, EncodingError, DecodingError, + ChannelMask, UnsupportedChannelMask, + __default_quality__) +from __vorbiscomment__ import * +import gettext + +gettext.install("audiotools", unicode=True) + + +class InvalidVorbis(InvalidFile): + pass + + +def verify_ogg_stream(stream): + """Verifies an Ogg stream file object. + + This file must be rewound to the start of a page. + Returns True if the file is valid. + Raises IOError or ValueError if there is some problem with the file. + """ + + from . import verify + verify.ogg(stream) + return True + + +class OggStreamReader: + """A class for walking through an Ogg stream.""" + + OGGS = Con.Struct( + "oggs", + Con.Const(Con.String("magic_number", 4), "OggS"), + Con.Byte("version"), + Con.Byte("header_type"), + Con.SLInt64("granule_position"), + Con.ULInt32("bitstream_serial_number"), + Con.ULInt32("page_sequence_number"), + Con.ULInt32("checksum"), + Con.Byte("segments"), + Con.MetaRepeater(lambda ctx: ctx["segments"], + Con.Byte("segment_lengths"))) + + def __init__(self, stream): + """stream is a file-like object with read() and close() methods.""" + + self.stream = stream + + def close(self): + """Closes the sub-stream.""" + + self.stream.close() + + def packets(self, from_beginning=True): + """Yields one fully reassembled Ogg packet per pass. + + Packets are returned as binary strings.""" + + if (from_beginning): + self.stream.seek(0, 0) + + segment = cStringIO.StringIO() + + while (True): + try: + page = OggStreamReader.OGGS.parse_stream(self.stream) + + for length in page.segment_lengths: + if (length == 255): + segment.write(self.stream.read(length)) + else: + segment.write(self.stream.read(length)) + yield segment.getvalue() + segment = cStringIO.StringIO() + + except Con.core.FieldError: + break + except Con.ConstError: + break + + def pages(self, from_beginning=True): + """Yields a (Container,string) tuple per pass. + + Container is parsed from OggStreamReader.OGGS. + string is a binary string of combined segments + (which may not be a complete packet).""" + + if (from_beginning): + self.stream.seek(0, 0) + + while (True): + try: + page = OggStreamReader.OGGS.parse_stream(self.stream) + yield (page, self.stream.read(sum(page.segment_lengths))) + except Con.core.FieldError: + break + except Con.ConstError: + break + + @classmethod + def pages_to_packet(cls, pages_iter): + """Returns a complete packet as a list of (Container,string) tuples. + + pages_iter should be an iterator of (Container,string) tuples + as returned from the pages() method. + """ + + packet = [pages_iter.next()] + while (packet[-1][0].segment_lengths[-1] == 255): + packet.append(pages_iter.next()) + return packet + + CRC_LOOKUP = (0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, + 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, + 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, + 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, + 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, + 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, + 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, + 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, + 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, + 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, + 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, + 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, + 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, + 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, + 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, + 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, + 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, + 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, + 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, + 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, + 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, + 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, + 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, + 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, + 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, + 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, + 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, + 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, + 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, + 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, + 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, + 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, + 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, + 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, + 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, + 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, + 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, + 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, + 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, + 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, + 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, + 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, + 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, + 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, + 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, + 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, + 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, + 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, + 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4) + + @classmethod + def calculate_ogg_checksum(cls, page_header, page_data): + """Calculates an Ogg checksum integer. + + page_header is a Container object parsed through OGGS. + page_data is a string of data contained by the page. + """ + + old_checksum = page_header.checksum + try: + page_header.checksum = 0 + sum = 0 + for c in cls.OGGS.build(page_header) + page_data: + sum = ((sum << 8) ^ \ + cls.CRC_LOOKUP[((sum >> 24) & 0xFF) ^ ord(c)]) \ + & 0xFFFFFFFF + return sum + finally: + page_header.checksum = old_checksum + + +class OggStreamWriter: + """A class for building an Ogg stream.""" + + def __init__(self, stream): + """stream is a file-like object with read() and close() methods.""" + + self.stream = stream + + def close(self): + """Closes the sub-stream.""" + + self.stream.close() + + def write_page(self, page_header, page_data): + """Writes a complete Ogg page to the stream. + + page_header is an OGGS-generated Container with all of the + fields properly set. + page_data is a string containing all of the page's segment data. + """ + + self.stream.write(OggStreamReader.OGGS.build(page_header)) + self.stream.write(page_data) + + @classmethod + def build_pages(cls, granule_position, serial_number, + starting_sequence_number, packet_data, + header_type=0): + """Constructs an Ogg packet for page data. + + takes serial_number, granule_position and starting_sequence_number + integers and a packet_data string. + Returns a list of (page_header,page_data) tuples containing + all of the Ogg pages necessary to contain the packet. + """ + + page = Con.Container(magic_number='OggS', + version=0, + header_type=header_type, + granule_position=granule_position, + bitstream_serial_number=serial_number, + page_sequence_number=starting_sequence_number, + checksum=0) + + if (len(packet_data) == 0): + #an empty Ogg page, but possibly a continuation + + page.segments = 0 + page.segment_lengths = [] + page.checksum = OggStreamReader.calculate_ogg_checksum( + page, packet_data) + return [(page, "")] + if (len(packet_data) > (255 * 255)): + #if we need more than one Ogg page to store the packet, + #handle that case recursively + + page.segments = 255 + page.segment_lengths = [255] * 255 + page.checksum = OggStreamReader.calculate_ogg_checksum( + page, packet_data[0:255 * 255]) + + return [(page, packet_data[0:255 * 255])] + \ + cls.build_pages(granule_position, + serial_number, + starting_sequence_number + 1, + packet_data[255 * 255:], + header_type) + elif (len(packet_data) == (255 * 255)): + #we need two Ogg pages, one of which is empty + + return cls.build_pages(granule_position, + serial_number, + starting_sequence_number, + packet_data, + header_type) + \ + cls.build_pages(granule_position, + serial_number, + starting_sequence_number + 1, + "", + header_type) + else: + #we just need one Ogg page + + page.segments = len(packet_data) / 255 + if ((len(packet_data) % 255) > 0): + page.segments += 1 + + page.segment_lengths = [255] * (len(packet_data) / 255) + if ((len(packet_data) % 255) > 0): + page.segment_lengths += [len(packet_data) % 255] + + page.checksum = OggStreamReader.calculate_ogg_checksum( + page, packet_data) + return [(page, packet_data)] + + +####################### +#Vorbis File +####################### + +class VorbisAudio(AudioFile): + """An Ogg Vorbis file.""" + + SUFFIX = "ogg" + NAME = SUFFIX + DEFAULT_COMPRESSION = "3" + COMPRESSION_MODES = tuple([str(i) for i in range(0, 11)]) + COMPRESSION_DESCRIPTIONS = {"0": _(u"very low quality, " + + u"corresponds to oggenc -q 0"), + "10": _(u"very high quality, " + + u"corresponds to oggenc -q 10")} + BINARIES = ("oggenc", "oggdec") + REPLAYGAIN_BINARIES = ("vorbisgain", ) + + OGG_IDENTIFICATION = Con.Struct( + "ogg_id", + Con.ULInt32("vorbis_version"), + Con.Byte("channels"), + Con.ULInt32("sample_rate"), + Con.ULInt32("bitrate_maximum"), + Con.ULInt32("bitrate_nominal"), + Con.ULInt32("bitrate_minimum"), + Con.Embed(Con.BitStruct("flags", + Con.Bits("blocksize_0", 4), + Con.Bits("blocksize_1", 4))), + Con.Byte("framing")) + + COMMENT_HEADER = Con.Struct( + "comment_header", + Con.Byte("packet_type"), + Con.String("vorbis", 6)) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + try: + self.__read_metadata__() + except IOError, msg: + raise InvalidVorbis(str(msg)) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(0x23) + + return (header.startswith('OggS') and + header[0x1C:0x23] == '\x01vorbis') + + def __read_metadata__(self): + f = OggStreamReader(file(self.filename, "rb")) + packets = f.packets() + + try: + #we'll assume this Vorbis file isn't interleaved + #with any other Ogg stream + + #the Identification packet comes first + try: + id_packet = packets.next() + except StopIteration: + raise InvalidVorbis("Vorbis identification packet not found") + + header = VorbisAudio.COMMENT_HEADER.parse( + id_packet[0:VorbisAudio.COMMENT_HEADER.sizeof()]) + if ((header.packet_type == 0x01) and + (header.vorbis == 'vorbis')): + identification = VorbisAudio.OGG_IDENTIFICATION.parse( + id_packet[VorbisAudio.COMMENT_HEADER.sizeof():]) + self.__sample_rate__ = identification.sample_rate + self.__channels__ = identification.channels + else: + raise InvalidVorbis(_(u'First packet is not Vorbis')) + + #the Comment packet comes next + comment_packet = packets.next() + header = VorbisAudio.COMMENT_HEADER.parse( + comment_packet[0:VorbisAudio.COMMENT_HEADER.sizeof()]) + if ((header.packet_type == 0x03) and + (header.vorbis == 'vorbis')): + self.comment = VorbisComment.VORBIS_COMMENT.parse( + comment_packet[VorbisAudio.COMMENT_HEADER.sizeof():]) + + finally: + del(packets) + f.close() + del(f) + + def lossless(self): + """Returns False.""" + + return False + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return 16 + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if (self.channels() == 1): + return ChannelMask.from_fields( + front_center=True) + elif (self.channels() == 2): + return ChannelMask.from_fields( + front_left=True, front_right=True) + elif (self.channels() == 3): + return ChannelMask.from_fields( + front_left=True, front_right=True, + front_center=True) + elif (self.channels() == 4): + return ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.channels() == 5): + return ChannelMask.from_fields( + front_left=True, front_right=True, + front_center=True, + back_left=True, back_right=True) + elif (self.channels() == 6): + return ChannelMask.from_fields( + front_left=True, front_right=True, + front_center=True, + back_left=True, back_right=True, + low_frequency=True) + elif (self.channels() == 7): + return ChannelMask.from_fields( + front_left=True, front_right=True, + front_center=True, + side_left=True, side_right=True, + back_center=True, low_frequency=True) + elif (self.channels() == 8): + return ChannelMask.from_fields( + front_left=True, front_right=True, + side_left=True, side_right=True, + back_left=True, back_right=True, + front_center=True, low_frequency=True) + else: + return ChannelMask(0) + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + pcm_samples = 0 + f = file(self.filename, "rb") + try: + while (True): + try: + page = OggStreamReader.OGGS.parse_stream(f) + pcm_samples = page.granule_position + f.seek(sum(page.segment_lengths), 1) + except Con.core.FieldError: + break + except Con.ConstError: + break + + return pcm_samples + finally: + f.close() + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__sample_rate__ + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + sub = subprocess.Popen([BIN['oggdec'], '-Q', + '-b', str(16), + '-e', str(0), + '-s', str(1), + '-R', + '-o', '-', + self.filename], + stdout=subprocess.PIPE, + stderr=file(os.devnull, "a")) + + pcmreader = PCMReader(sub.stdout, + sample_rate=self.sample_rate(), + channels=self.channels(), + channel_mask=int(self.channel_mask()), + bits_per_sample=self.bits_per_sample(), + process=sub) + + if (self.channels() <= 2): + return pcmreader + elif (self.channels() <= 8): + #these mappings transform Vorbis order into ChannelMask order + standard_channel_mask = self.channel_mask() + vorbis_channel_mask = VorbisChannelMask(self.channel_mask()) + return ReorderedPCMReader( + pcmreader, + [vorbis_channel_mask.channels().index(channel) for channel in + standard_channel_mask.channels()]) + else: + return pcmreader + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Returns a PCMReader object containing the track's PCM data.""" + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + devnull = file(os.devnull, 'ab') + + sub = subprocess.Popen([BIN['oggenc'], '-Q', + '-r', + '-B', str(pcmreader.bits_per_sample), + '-C', str(pcmreader.channels), + '-R', str(pcmreader.sample_rate), + '--raw-endianness', str(0), + '-q', compression, + '-o', filename, '-'], + stdin=subprocess.PIPE, + stdout=devnull, + stderr=devnull, + preexec_fn=ignore_sigint) + + if ((pcmreader.channels <= 2) or (int(pcmreader.channel_mask) == 0)): + try: + transfer_framelist_data(pcmreader, sub.stdin.write) + except (IOError, ValueError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + elif (pcmreader.channels <= 8): + if (int(pcmreader.channel_mask) in + (0x7, # FR, FC, FL + 0x33, # FR, FL, BR, BL + 0x37, # FR, FC, FL, BL, BR + 0x3f, # FR, FC, FL, BL, BR, LFE + 0x70f, # FL, FC, FR, SL, SR, BC, LFE + 0x63f)): # FL, FC, FR, SL, SR, BL, BR, LFE + + standard_channel_mask = ChannelMask(pcmreader.channel_mask) + vorbis_channel_mask = VorbisChannelMask(standard_channel_mask) + else: + raise UnsupportedChannelMask(filename, + int(pcmreader.channel_mask)) + + try: + transfer_framelist_data(ReorderedPCMReader( + pcmreader, + [standard_channel_mask.channels().index(channel) + for channel in vorbis_channel_mask.channels()]), + sub.stdin.write) + except (IOError, ValueError), err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + sub.stdin.close() + sub.wait() + cls.__unlink__(filename) + raise err + + else: + raise UnsupportedChannelMask(filename, + int(pcmreader.channel_mask)) + + try: + pcmreader.close() + except DecodingError, err: + raise EncodingError(err.error_message) + + sub.stdin.close() + devnull.close() + + if (sub.wait() == 0): + return VorbisAudio(filename) + else: + raise EncodingError(u"unable to encode file with oggenc") + + def set_metadata(self, metadata): + """Takes a MetaData object and sets this track's metadata. + + This metadata includes track name, album name, and so on. + Raises IOError if unable to write the file.""" + + metadata = VorbisComment.converted(metadata) + + if (metadata is None): + return + + reader = OggStreamReader(file(self.filename, 'rb')) + new_file = cStringIO.StringIO() + writer = OggStreamWriter(new_file) + current_sequence_number = 0 + + pages = reader.pages() + + #transfer our old header + #this must always be the first packet and the first page + (header_page, header_data) = pages.next() + writer.write_page(header_page, header_data) + current_sequence_number += 1 + + #grab the current "comment" and "setup headers" packets + #these may take one or more pages, + #but will always end on a page boundary + del(pages) + packets = reader.packets(from_beginning=False) + + comment_packet = packets.next() + headers_packet = packets.next() + + #write the pages for our new "comment" packet + for (page, data) in OggStreamWriter.build_pages( + 0, + header_page.bitstream_serial_number, + current_sequence_number, + VorbisAudio.COMMENT_HEADER.build(Con.Container( + packet_type=3, + vorbis='vorbis')) + metadata.build()): + writer.write_page(page, data) + current_sequence_number += 1 + + #write the pages for the old "setup headers" packet + for (page, data) in OggStreamWriter.build_pages( + 0, + header_page.bitstream_serial_number, + current_sequence_number, + headers_packet): + writer.write_page(page, data) + current_sequence_number += 1 + + #write the rest of the pages, re-sequenced and re-checksummed + del(packets) + pages = reader.pages(from_beginning=False) + + for (i, (page, data)) in enumerate(pages): + page.page_sequence_number = i + current_sequence_number + page.checksum = OggStreamReader.calculate_ogg_checksum(page, data) + writer.write_page(page, data) + + reader.close() + + #re-write the file with our new data in "new_file" + f = file(self.filename, "wb") + f.write(new_file.getvalue()) + f.close() + writer.close() + + self.__read_metadata__() + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + self.__read_metadata__() + data = {} + for pair in self.comment.value: + try: + (key, value) = pair.split('=', 1) + data.setdefault(key, []).append(value.decode('utf-8')) + except ValueError: + continue + + return VorbisComment(data) + + def delete_metadata(self): + """Deletes the track's MetaData. + + This removes or unsets tags as necessary in order to remove all data. + Raises IOError if unable to write the file.""" + + self.set_metadata(MetaData()) + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + track_names = [track.filename for track in + open_files(filenames) if + isinstance(track, cls)] + + if (progress is not None): + progress(0, 1) + + if ((len(track_names) > 0) and + BIN.can_execute(BIN['vorbisgain'])): + devnull = file(os.devnull, 'ab') + + sub = subprocess.Popen([BIN['vorbisgain'], + '-q', '-a'] + track_names, + stdout=devnull, + stderr=devnull) + sub.wait() + devnull.close() + + if (progress is not None): + progress(1, 1) + + @classmethod + def can_add_replay_gain(cls): + """Returns True if we have the necessary binaries to add ReplayGain.""" + + return BIN.can_execute(BIN['vorbisgain']) + + @classmethod + def lossless_replay_gain(cls): + """Returns True.""" + + return True + + def replay_gain(self): + """Returns a ReplayGain object of our ReplayGain values. + + Returns None if we have no values.""" + + vorbis_metadata = self.get_metadata() + + if (set(['REPLAYGAIN_TRACK_PEAK', 'REPLAYGAIN_TRACK_GAIN', + 'REPLAYGAIN_ALBUM_PEAK', 'REPLAYGAIN_ALBUM_GAIN']).issubset( + vorbis_metadata.keys())): # we have ReplayGain data + try: + return ReplayGain( + vorbis_metadata['REPLAYGAIN_TRACK_GAIN'][0][0:-len(" dB")], + vorbis_metadata['REPLAYGAIN_TRACK_PEAK'][0], + vorbis_metadata['REPLAYGAIN_ALBUM_GAIN'][0][0:-len(" dB")], + vorbis_metadata['REPLAYGAIN_ALBUM_PEAK'][0]) + except ValueError: + return None + else: + return None + + def verify(self, progress=None): + """Verifies the current file for correctness. + + Returns True if the file is okay. + Raises an InvalidFile with an error message if there is + some problem with the file.""" + + #Ogg stream verification is likely to be so fast + #that individual calls to progress() are + #a waste of time. + if (progress is not None): + progress(0, 1) + + try: + f = open(self.filename, 'rb') + except IOError, err: + raise InvalidVorbis(str(err)) + try: + try: + result = verify_ogg_stream(f) + if (progress is not None): + progress(1, 1) + return result + except (IOError, ValueError), err: + raise InvalidVorbis(str(err)) + finally: + f.close() + + +class VorbisChannelMask(ChannelMask): + """The Vorbis-specific channel mapping.""" + + def __repr__(self): + return "VorbisChannelMask(%s)" % \ + ",".join(["%s=%s" % (field, getattr(self, field)) + for field in self.SPEAKER_TO_MASK.keys() + if (getattr(self, field))]) + + def channels(self): + """Returns a list of speaker strings this mask contains. + + Returned in the order in which they should appear + in the PCM stream. + """ + + count = len(self) + if (count == 1): + return ["front_center"] + elif (count == 2): + return ["front_left", "front_right"] + elif (count == 3): + return ["front_left", "front_center", "front_right"] + elif (count == 4): + return ["front_left", "front_right", + "back_left", "back_right"] + elif (count == 5): + return ["front_left", "front_center", "front_right", + "back_left", "back_right"] + elif (count == 6): + return ["front_left", "front_center", "front_right", + "back_left", "back_right", "low_frequency"] + elif (count == 7): + return ["front_left", "front_center", "front_right", + "side_left", "side_right", "back_center", + "low_frequency"] + elif (count == 8): + return ["front_left", "front_center", "front_right", + "side_left", "side_right", + "back_left", "back_right", "low_frequency"] + else: + return [] diff --git a/Melodia/resources/audiotools/__vorbiscomment__.py b/Melodia/resources/audiotools/__vorbiscomment__.py new file mode 100644 index 0000000..09d50a4 --- /dev/null +++ b/Melodia/resources/audiotools/__vorbiscomment__.py @@ -0,0 +1,294 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import MetaData, Con, VERSION, re + + +class VorbisComment(MetaData, dict): + """A complete Vorbis Comment tag.""" + + VORBIS_COMMENT = Con.Struct( + "vorbis_comment", + Con.PascalString("vendor_string", + length_field=Con.ULInt32("length")), + Con.PrefixedArray( + length_field=Con.ULInt32("length"), + subcon=Con.PascalString("value", + length_field=Con.ULInt32("length"))), + Con.Const(Con.Byte("framing"), 1)) + + ATTRIBUTE_MAP = {'track_name': 'TITLE', + 'track_number': 'TRACKNUMBER', + 'track_total': 'TRACKTOTAL', + 'album_name': 'ALBUM', + 'artist_name': 'ARTIST', + 'performer_name': 'PERFORMER', + 'composer_name': 'COMPOSER', + 'conductor_name': 'CONDUCTOR', + 'media': 'SOURCE MEDIUM', + 'ISRC': 'ISRC', + 'catalog': 'CATALOG', + 'copyright': 'COPYRIGHT', + 'publisher': 'PUBLISHER', + 'year': 'DATE', + 'album_number': 'DISCNUMBER', + 'album_total': 'DISCTOTAL', + 'comment': 'COMMENT'} + + ITEM_MAP = dict(map(reversed, ATTRIBUTE_MAP.items())) + + def __init__(self, vorbis_data, vendor_string=u""): + """Initialized with a key->[value1,value2] dict. + + keys are generally upper case. + values are unicode string. + vendor_string is an optional unicode string.""" + + dict.__init__(self, [(key.upper(), values) + for (key, values) in vorbis_data.items()]) + self.vendor_string = vendor_string + + def __setitem__(self, key, value): + dict.__setitem__(self, key.upper(), value) + + def __getattr__(self, key): + if (key == 'track_number'): + match = re.match(r'^\d+$', + self.get('TRACKNUMBER', [u''])[0]) + if (match): + return int(match.group(0)) + else: + match = re.match('^(\d+)/\d+$', + self.get('TRACKNUMBER', [u''])[0]) + if (match): + return int(match.group(1)) + else: + return 0 + elif (key == 'track_total'): + match = re.match(r'^\d+$', + self.get('TRACKTOTAL', [u''])[0]) + if (match): + return int(match.group(0)) + else: + match = re.match('^\d+/(\d+)$', + self.get('TRACKNUMBER', [u''])[0]) + if (match): + return int(match.group(1)) + else: + return 0 + elif (key == 'album_number'): + match = re.match(r'^\d+$', + self.get('DISCNUMBER', [u''])[0]) + if (match): + return int(match.group(0)) + else: + match = re.match('^(\d+)/\d+$', + self.get('DISCNUMBER', [u''])[0]) + if (match): + return int(match.group(1)) + else: + return 0 + elif (key == 'album_total'): + match = re.match(r'^\d+$', + self.get('DISCTOTAL', [u''])[0]) + if (match): + return int(match.group(0)) + else: + match = re.match('^\d+/(\d+)$', + self.get('DISCNUMBER', [u''])[0]) + if (match): + return int(match.group(1)) + else: + return 0 + elif (key in self.ATTRIBUTE_MAP): + return self.get(self.ATTRIBUTE_MAP[key], [u''])[0] + elif (key in MetaData.__FIELDS__): + return u'' + else: + try: + return self.__dict__[key] + except KeyError: + raise AttributeError(key) + + def __delattr__(self, key): + if (key == 'track_number'): + track_number = self.get('TRACKNUMBER', [u''])[0] + if (re.match(r'^\d+$', track_number)): + del(self['TRACKNUMBER']) + elif (re.match('^\d+/(\d+)$', track_number)): + self['TRACKNUMBER'] = u"0/%s" % ( + re.match('^\d+/(\d+)$', track_number).group(1)) + elif (key == 'track_total'): + track_number = self.get('TRACKNUMBER', [u''])[0] + if (re.match('^(\d+)/\d+$', track_number)): + self['TRACKNUMBER'] = u"%s" % ( + re.match('^(\d+)/\d+$', track_number).group(1)) + if ('TRACKTOTAL' in self): + del(self['TRACKTOTAL']) + elif (key == 'album_number'): + album_number = self.get('DISCNUMBER', [u''])[0] + if (re.match(r'^\d+$', album_number)): + del(self['DISCNUMBER']) + elif (re.match('^\d+/(\d+)$', album_number)): + self['DISCNUMBER'] = u"0/%s" % ( + re.match('^\d+/(\d+)$', album_number).group(1)) + elif (key == 'album_total'): + album_number = self.get('DISCNUMBER', [u''])[0] + if (re.match('^(\d+)/\d+$', album_number)): + self['DISCNUMBER'] = u"%s" % ( + re.match('^(\d+)/\d+$', album_number).group(1)) + if ('DISCTOTAL' in self): + del(self['DISCTOTAL']) + elif (key in self.ATTRIBUTE_MAP): + if (self.ATTRIBUTE_MAP[key] in self): + del(self[self.ATTRIBUTE_MAP[key]]) + elif (key in MetaData.__FIELDS__): + pass + else: + try: + del(self.__dict__[key]) + except KeyError: + raise AttributeError(key) + + @classmethod + def supports_images(cls): + """Returns False.""" + + #There's actually a (proposed?) standard to add embedded covers + #to Vorbis Comments by base64 encoding them. + #This strikes me as messy and convoluted. + #In addition, I'd have to perform a special case of + #image extraction and re-insertion whenever converting + #to FlacMetaData. The whole thought gives me a headache. + + return False + + def images(self): + """Returns an empty list of Image objects.""" + + return list() + + #if an attribute is updated (e.g. self.track_name) + #make sure to update the corresponding dict pair + def __setattr__(self, key, value): + if (key in self.ATTRIBUTE_MAP): + if (key not in MetaData.__INTEGER_FIELDS__): + self[self.ATTRIBUTE_MAP[key]] = [value] + else: + self[self.ATTRIBUTE_MAP[key]] = [unicode(value)] + else: + self.__dict__[key] = value + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to a VorbisComment object.""" + + if ((metadata is None) or (isinstance(metadata, VorbisComment))): + return metadata + elif (metadata.__class__.__name__ == 'FlacMetaData'): + return cls(vorbis_data=dict(metadata.vorbis_comment.items()), + vendor_string=metadata.vorbis_comment.vendor_string) + else: + values = {} + for key in cls.ATTRIBUTE_MAP.keys(): + if (key in cls.__INTEGER_FIELDS__): + if (getattr(metadata, key) != 0): + values[cls.ATTRIBUTE_MAP[key]] = \ + [unicode(getattr(metadata, key))] + elif (getattr(metadata, key) != u""): + values[cls.ATTRIBUTE_MAP[key]] = \ + [unicode(getattr(metadata, key))] + + return VorbisComment(values) + + def merge(self, metadata): + """Updates any currently empty entries from metadata's values.""" + + metadata = self.__class__.converted(metadata) + if (metadata is None): + return + + for (key, values) in metadata.items(): + if ((len(values) > 0) and + (len(self.get(key, [])) == 0)): + self[key] = values + + def __comment_name__(self): + return u'Vorbis' + + #takes two (key,value) vorbiscomment pairs + #returns cmp on the weighted set of them + #(title first, then artist, album, tracknumber, ... , replaygain) + @classmethod + def __by_pair__(cls, pair1, pair2): + KEY_MAP = {"TITLE": 1, + "ALBUM": 2, + "TRACKNUMBER": 3, + "TRACKTOTAL": 4, + "DISCNUMBER": 5, + "DISCTOTAL": 6, + "ARTIST": 7, + "PERFORMER": 8, + "COMPOSER": 9, + "CONDUCTOR": 10, + "CATALOG": 11, + "PUBLISHER": 12, + "ISRC": 13, + "SOURCE MEDIUM": 14, + #"YEAR": 15, + "DATE": 16, + "COPYRIGHT": 17, + "REPLAYGAIN_ALBUM_GAIN": 19, + "REPLAYGAIN_ALBUM_PEAK": 19, + "REPLAYGAIN_TRACK_GAIN": 19, + "REPLAYGAIN_TRACK_PEAK": 19, + "REPLAYGAIN_REFERENCE_LOUDNESS": 20} + return cmp((KEY_MAP.get(pair1[0].upper(), 18), + pair1[0].upper(), + pair1[1]), + (KEY_MAP.get(pair2[0].upper(), 18), + pair2[0].upper(), + pair2[1])) + + def __comment_pairs__(self): + pairs = [] + for (key, values) in self.items(): + for value in values: + pairs.append((key, value)) + + pairs.sort(VorbisComment.__by_pair__) + return pairs + + def build(self): + """Returns this VorbisComment as a binary string.""" + + comment = Con.Container(vendor_string=self.vendor_string, + framing=1, + value=[]) + + for (key, values) in self.items(): + for value in values: + if ((value != u"") and not + ((key in ("TRACKNUMBER", "TRACKTOTAL", + "DISCNUMBER", "DISCTOTAL")) and + (value == u"0"))): + comment.value.append("%s=%s" % (key, + value.encode('utf-8'))) + return self.VORBIS_COMMENT.build(comment) diff --git a/Melodia/resources/audiotools/__wav__.py b/Melodia/resources/audiotools/__wav__.py new file mode 100644 index 0000000..ce5bf29 --- /dev/null +++ b/Melodia/resources/audiotools/__wav__.py @@ -0,0 +1,1023 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, ChannelMask, PCMReader, + Con, BUFFER_SIZE, transfer_data, + transfer_framelist_data, + __capped_stream_reader__, FILENAME_FORMAT, + BIN, open_files, os, subprocess, cStringIO, + EncodingError, DecodingError, UnsupportedChannelMask, + WaveContainer, to_pcm_progress) +import os.path +import gettext +from . import pcm + +gettext.install("audiotools", unicode=True) + +####################### +#RIFF WAVE +####################### + + +class WaveReader(PCMReader): + """A subclass of PCMReader for reading wave file contents.""" + + def __init__(self, wave_file, + sample_rate, channels, channel_mask, bits_per_sample, + process=None): + """wave_file should be a file-like stream of wave data. + + sample_rate, channels, channel_mask and bits_per_sample are ints. + If present, process is waited for when close() is called. + """ + + self.file = wave_file + self.sample_rate = sample_rate + self.channels = channels + self.bits_per_sample = bits_per_sample + self.channel_mask = channel_mask + + self.process = process + + #build a capped reader for the data chunk + try: + header = WaveAudio.WAVE_HEADER.parse_stream(self.file) + except Con.ConstError: + raise InvalidWave(_(u'Invalid WAVE file')) + except Con.core.FieldError: + raise InvalidWave(_(u'Invalid WAVE file')) + + #this won't be pretty for a WAVE file missing a 'data' chunk + #but those are seriously invalid anyway + chunk_header = WaveAudio.CHUNK_HEADER.parse_stream(self.file) + while (chunk_header.chunk_id != 'data'): + #self.file.seek(chunk_header.chunk_length,1) + self.file.read(chunk_header.chunk_length) + chunk_header = WaveAudio.CHUNK_HEADER.parse_stream(self.file) + + #build a reader which reads no further than the 'data' chunk + self.wave = __capped_stream_reader__(self.file, + chunk_header.chunk_length) + self.data_chunk_length = chunk_header.chunk_length + + def read(self, bytes): + """Try to read a pcm.FrameList of size "bytes".""" + + #align bytes downward if an odd number is read in + bytes -= (bytes % (self.channels * self.bits_per_sample / 8)) + bytes = max(bytes, self.channels * self.bits_per_sample / 8) + pcm_data = self.wave.read(bytes) + if ((len(pcm_data) == 0) and (self.data_chunk_length > 0)): + raise IOError("data chunk ends prematurely") + else: + self.data_chunk_length -= len(pcm_data) + + try: + return pcm.FrameList(pcm_data, + self.channels, + self.bits_per_sample, + False, + self.bits_per_sample != 8) + except ValueError: + raise IOError("data chunk ends prematurely") + + def close(self): + """Closes the stream for reading. + + Any subprocess is waited for also so for proper cleanup.""" + + self.wave.close() + if (self.process is not None): + if (self.process.wait() != 0): + raise DecodingError() + + +class TempWaveReader(WaveReader): + """A subclass of WaveReader for reading wave data from temporary files.""" + + def __init__(self, tempfile): + """tempfile should be a NamedTemporaryFile. + + Its contents are used to populate the rest of the fields.""" + + wave = WaveAudio(tempfile.name) + WaveReader.__init__(self, + tempfile, + sample_rate=wave.sample_rate(), + channels=wave.channels(), + channel_mask=int(wave.channel_mask()), + bits_per_sample=wave.bits_per_sample()) + self.tempfile = tempfile + + def close(self): + """Closes the input stream and temporary file.""" + + WaveReader.close(self) + self.tempfile.close() + + +class InvalidWave(InvalidFile): + """Raises during initialization time if a wave file is invalid.""" + + pass + + +def __blank_channel_mask__(): + c = Con.Container(undefined=0, undefined2=0) + + for attr in ('front_right_of_center', + 'front_left_of_center', + 'rear_right', + 'rear_left', + 'LFE', + 'front_center', + 'front_right', + 'front_left', + 'top_back_left', + 'top_front_right', + 'top_front_center', + 'top_front_left', + 'top_center', + 'side_right', + 'side_left', + 'rear_center', + 'top_back_right', + 'top_back_center'): + setattr(c, attr, False) + + return c + + +def __channel_mask__(filename, mask, channel_count): + mask = ChannelMask(mask) + c = __blank_channel_mask__() + + if (mask.defined()): + attr_map = {"front_left": 'front_left', + "front_right": 'front_right', + "front_center": 'front_center', + "low_frequency": 'LFE', + "back_left": 'rear_left', + "back_right": 'rear_right', + "front_left_of_center": 'front_left_of_center', + "front_right_of_center": 'front_right_of_center', + "back_center": 'rear_center', + "side_left": 'side_left', + "side_right": 'side_right', + "top_center": 'top_center', + "top_front_left": 'top_front_left', + "top_front_center": 'top_front_center', + "top_front_right": 'top_front_right', + "top_back_left": 'top_back_left', + "top_back_center": 'top_back_center', + "top_back_right": 'top_back_right'} + + for channel in mask.channels(): + setattr(c, attr_map[channel], True) + else: + attr_map = ['front_left', + 'front_right', + 'front_center', + 'LFE', + 'rear_left', + 'rear_right', + 'front_left_of_center', + 'front_right_of_center', + 'rear_center', + 'side_left', + 'side_right', + 'top_center', + 'top_front_left', + 'top_front_center', + 'top_front_right', + 'top_back_left', + 'top_back_center', + 'top_back_right'] + if (channel_count <= len(attr_map)): + for channel in attr_map[0:channel_count]: + setattr(c, channel, True) + else: + raise UnsupportedChannelMask(filename, mask) + + return c + + +class __ASCII_String__(Con.Validator): + """Validates that its data string is printable ASCII.""" + + PRINTABLE_ASCII = set([chr(i) for i in xrange(0x20, 0x7E + 1)]) + + def _validate(self, obj, context): + return set(obj).issubset(self.PRINTABLE_ASCII) + + +class WaveAudio(WaveContainer): + """A waveform audio file.""" + + SUFFIX = "wav" + NAME = SUFFIX + + WAVE_HEADER = Con.Struct("wave_header", + Con.Const(Con.Bytes("wave_id", 4), 'RIFF'), + Con.ULInt32("wave_size"), + Con.Const(Con.Bytes("riff_type", 4), 'WAVE')) + + CHUNK_HEADER = Con.Struct("chunk_header", + __ASCII_String__(Con.Bytes("chunk_id", 4)), + Con.ULInt32("chunk_length")) + + FMT_CHUNK = Con.Struct("fmt_chunk", + Con.ULInt16("compression"), + Con.ULInt16("channels"), + Con.ULInt32("sample_rate"), + Con.ULInt32("bytes_per_second"), + Con.ULInt16("block_align"), + Con.ULInt16("bits_per_sample"), + Con.If(lambda ctx: ctx['compression'] == 0xFFFE, + Con.Embed( + Con.Struct('extensible', + Con.ULInt16('cb_size'), + Con.ULInt16('valid_bits_per_sample'), + Con.BitStruct('channel_mask', + #0x80 + Con.Flag('front_right_of_center'), + + #0x40 + Con.Flag('front_left_of_center'), + + #0x20 + Con.Flag('rear_right'), + + #0x10 + Con.Flag('rear_left'), + + #0x8 + Con.Flag('LFE'), + + #0x4 + Con.Flag('front_center'), + + #0x2 + Con.Flag('front_right'), + + #0x1 + Con.Flag('front_left'), + + #0x8000 + Con.Flag('top_back_left'), + + #0x4000 + Con.Flag('top_front_right'), + + #0x2000 + Con.Flag('top_front_center'), + + #0x1000 + Con.Flag('top_front_left'), + + #0x800 + Con.Flag('top_center'), + + #0x400 + Con.Flag('side_right'), + + #0x200 + Con.Flag('side_left'), + + #0x100 + Con.Flag('rear_center'), + + #0x800000 + #0x400000 + #0x200000 + #0x100000 + #0x80000 + #0x40000 + Con.Bits('undefined', 6), + + #0x20000 + Con.Flag('top_back_right'), + + #0x10000 + Con.Flag('top_back_center'), + + Con.Bits('undefined2', 8)), + Con.String('sub_format', 16))))) + + def __init__(self, filename): + """filename is a plain string.""" + + AudioFile.__init__(self, filename) + + self.__wavtype__ = 0 + self.__channels__ = 0 + self.__samplespersec__ = 0 + self.__bytespersec__ = 0 + self.__blockalign__ = 0 + self.__bitspersample__ = 0 + self.__data_size__ = 0 + self.__channel_mask__ = 0 + + self.__chunk_ids__ = [] + + try: + self.__read_chunks__() + except Con.ValidationError: + raise InvalidFile + except InvalidWave, msg: + raise InvalidFile(str(msg)) + except IOError, msg: + raise InvalidFile(str(msg)) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + header = file.read(12) + return ((header[0:4] == 'RIFF') and + (header[8:12] == 'WAVE')) + + def lossless(self): + """Returns True.""" + + return True + + def has_foreign_riff_chunks(self): + """Returns True if the audio file contains non-audio RIFF chunks. + + During transcoding, if the source audio file has foreign RIFF chunks + and the target audio format supports foreign RIFF chunks, + conversion should be routed through .wav conversion + to avoid losing those chunks.""" + + return set(['fmt ', 'data']) != set(self.__chunk_ids__) + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + return self.__channel_mask__ + + #Returns the PCMReader object for this WAV's data + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + return WaveReader(file(self.filename, 'rb'), + sample_rate=self.sample_rate(), + channels=self.channels(), + bits_per_sample=self.bits_per_sample(), + channel_mask=int(self.channel_mask())) + + #Takes a filename and PCMReader containing WAV data + #builds a WAV from that data and returns a new WaveAudio object + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new WaveAudio object.""" + + try: + f = file(filename, "wb") + except IOError, err: + raise EncodingError(str(err)) + + try: + header = Con.Container() + header.wave_id = 'RIFF' + header.riff_type = 'WAVE' + header.wave_size = 0 + + fmt_header = Con.Container() + fmt_header.chunk_id = 'fmt ' + + fmt = Con.Container() + + if ((pcmreader.channels <= 2) and + (pcmreader.bits_per_sample <= 16)): + fmt_header.chunk_length = 16 + fmt.compression = 1 + else: + fmt_header.chunk_length = 40 + fmt.compression = 0xFFFE + + fmt.channels = pcmreader.channels + fmt.sample_rate = pcmreader.sample_rate + fmt.bytes_per_second = \ + pcmreader.sample_rate * \ + pcmreader.channels * \ + (pcmreader.bits_per_sample / 8) + fmt.block_align = \ + pcmreader.channels * \ + (pcmreader.bits_per_sample / 8) + fmt.bits_per_sample = pcmreader.bits_per_sample + + #these fields only apply to WAVEFORMATEXTENSIBLE Waves + fmt.cb_size = 22 + fmt.valid_bits_per_sample = pcmreader.bits_per_sample + fmt.sub_format = "0100000000001000800000aa00389b71".decode('hex') + if (fmt.compression == 0xFFFE): + fmt.channel_mask = __channel_mask__(filename, + pcmreader.channel_mask, + pcmreader.channels) + else: + fmt.channel_mask = __blank_channel_mask__() + + data_header = Con.Container() + data_header.chunk_id = 'data' + data_header.chunk_length = 0 + + #write out the basic headers first + #we'll be back later to clean up the sizes + f.write(WaveAudio.WAVE_HEADER.build(header)) + f.write(WaveAudio.CHUNK_HEADER.build(fmt_header)) + f.write(WaveAudio.FMT_CHUNK.build(fmt)) + f.write(WaveAudio.CHUNK_HEADER.build(data_header)) + + #dump pcmreader's FrameLists into the file as little-endian + try: + framelist = pcmreader.read(BUFFER_SIZE) + while (len(framelist) > 0): + if (framelist.bits_per_sample > 8): + bytes = framelist.to_bytes(False, True) + else: + bytes = framelist.to_bytes(False, False) + + f.write(bytes) + data_header.chunk_length += len(bytes) + framelist = pcmreader.read(BUFFER_SIZE) + except (IOError, ValueError), err: + cls.__unlink__(filename) + raise EncodingError(str(err)) + except Exception, err: + cls.__unlink__(filename) + raise err + + #close up the PCM reader and flush our output + try: + pcmreader.close() + except DecodingError, err: + cls.__unlink__(filename) + raise EncodingError(err.error_message) + f.flush() + + #go back to the beginning the re-write the header + f.seek(0, 0) + header.wave_size = 4 + \ + WaveAudio.CHUNK_HEADER.sizeof() + \ + fmt_header.chunk_length + \ + WaveAudio.CHUNK_HEADER.sizeof() + \ + data_header.chunk_length + + f.write(WaveAudio.WAVE_HEADER.build(header)) + f.write(WaveAudio.CHUNK_HEADER.build(fmt_header)) + f.write(WaveAudio.FMT_CHUNK.build(fmt)) + f.write(WaveAudio.CHUNK_HEADER.build(data_header)) + + finally: + f.close() + + return WaveAudio(filename) + + def to_wave(self, wave_filename, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + try: + self.verify() + except InvalidWave, err: + raise EncodingError(str(err)) + + try: + output = file(wave_filename, 'wb') + input = file(self.filename, 'rb') + except IOError, msg: + raise EncodingError(str(msg)) + try: + transfer_data(input.read, output.write) + finally: + input.close() + output.close() + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new WaveAudio object.""" + + try: + cls(wave_filename).verify() + except InvalidWave, err: + raise EncodingError(unicode(err)) + + try: + input = file(wave_filename, 'rb') + output = file(filename, 'wb') + except IOError, err: + raise EncodingError(str(err)) + try: + total_bytes = os.path.getsize(wave_filename) + current_bytes = 0 + s = input.read(4096) + while (len(s) > 0): + current_bytes += len(s) + output.write(s) + if (progress is not None): + progress(current_bytes, total_bytes) + s = input.read(4096) + output.flush() + try: + return WaveAudio(filename) + except InvalidFile: + cls.__unlink__(filename) + raise EncodingError(u"invalid RIFF WAVE source file") + finally: + input.close() + output.close() + + def convert(self, target_path, target_class, compression=None, + progress=None): + """Encodes a new AudioFile from existing AudioFile. + + Take a filename string, target class and optional compression string. + Encodes a new AudioFile in the target class and returns + the resulting object. + May raise EncodingError if some problem occurs during encoding.""" + + if (hasattr(target_class, "from_wave")): + return target_class.from_wave(target_path, + self.filename, + compression=compression, + progress=progress) + else: + return target_class.from_pcm(target_path, + to_pcm_progress(self, progress), + compression) + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__data_size__ / (self.__bitspersample__ / 8) / \ + self.__channels__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplespersec__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bitspersample__ + + @classmethod + def can_add_replay_gain(cls): + """Returns True if we have the necessary binaries to add ReplayGain.""" + + return True + + @classmethod + def lossless_replay_gain(cls): + """Returns False.""" + + return False + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + from audiotools.replaygain import ReplayGain, ReplayGainReader + import tempfile + + wave_files = [track for track in open_files(filenames) if + isinstance(track, cls)] + + track_gains = [] + total_frames = sum([track.total_frames() for track in wave_files]) * 2 + processed_frames = 0 + + #first, calculate the Gain and Peak values from our files + for original_wave in wave_files: + try: + rg = ReplayGain(original_wave.sample_rate()) + except ValueError: + track_gains.append((None, None)) + pcm = original_wave.to_pcm() + try: + try: + frame = pcm.read(BUFFER_SIZE) + while (len(frame) > 0): + processed_frames += frame.frames + if (progress is not None): + progress(processed_frames, total_frames) + rg.update(frame) + frame = pcm.read(BUFFER_SIZE) + track_gains.append(rg.title_gain()) + except ValueError: + track_gains.append((None, None)) + finally: + pcm.close() + + #then, apply those Gain and Peak values to our files + #rewriting the originals in the process + for (original_wave, (gain, peak)) in zip(wave_files, track_gains): + if (gain is None): + continue + + temp_wav_file = tempfile.NamedTemporaryFile(suffix=".wav") + try: + (header, footer) = original_wave.pcm_split() + temp_wav_file.write(header) + replaygain_pcm = ReplayGainReader(original_wave.to_pcm(), + gain, peak) + frame = replaygain_pcm.read(BUFFER_SIZE) + while (len(frame) > 0): + processed_frames += frame.frames + if (progress is not None): + progress(processed_frames, total_frames) + temp_wav_file.write(frame.to_bytes( + False, + original_wave.bits_per_sample() > 8)) + frame = replaygain_pcm.read(BUFFER_SIZE) + + temp_wav_file.write(footer) + temp_wav_file.seek(0, 0) + new_wave = open(original_wave.filename, 'wb') + transfer_data(temp_wav_file.read, new_wave.write) + new_wave.close() + finally: + temp_wav_file.close() + + @classmethod + def track_name(cls, file_path, track_metadata=None, format=None): + """Constructs a new filename string. + + Given a plain string to an existing path, + a MetaData-compatible object (or None), + a UTF-8-encoded Python format string + and an ASCII-encoded suffix string (such as "mp3") + returns a plain string of a new filename with format's + fields filled-in and encoded as FS_ENCODING. + Raises UnsupportedTracknameField if the format string + contains invalid template fields.""" + + if (format is None): + format = "track%(track_number)2.2d.wav" + return AudioFile.track_name(file_path, track_metadata, format, + suffix=cls.SUFFIX) + + def __read_chunks__(self): + wave_file = file(self.filename, "rb") + + __chunklist__ = [] + + totalsize = self.__read_wave_header__(wave_file) - 4 + + while (totalsize > 0): + (chunk_format, chunk_size) = self.__read_chunk_header__(wave_file) + self.__chunk_ids__.append(chunk_format) + + __chunklist__.append(chunk_format) + #Fix odd-sized chunk sizes to be even + if ((chunk_size & 1) == 1): + chunk_size += 1 + + if (chunk_format == "fmt "): + self.__read_format_chunk__(wave_file, chunk_size) + elif (chunk_format == "data"): + self.__read_data_chunk__(wave_file, chunk_size) + else: + wave_file.seek(chunk_size, 1) + totalsize -= (chunk_size + 8) + + def __read_wave_header__(self, wave_file): + try: + header = WaveAudio.WAVE_HEADER.parse(wave_file.read(12)) + return header.wave_size + except Con.ConstError: + raise InvalidWave(_(u"Not a RIFF WAVE file")) + except Con.core.FieldError: + raise InvalidWave(_(u"Invalid RIFF WAVE file")) + + def __read_chunk_header__(self, wave_file): + try: + chunk = WaveAudio.CHUNK_HEADER.parse(wave_file.read(8)) + return (chunk.chunk_id, chunk.chunk_length) + except Con.core.FieldError: + raise InvalidWave(_(u"Invalid RIFF WAVE file")) + + @classmethod + def fmt_chunk_to_channel_mask(cls, fmt_channel_mask): + """Builds a ChannelMask object from Container data. + + The Container is parsed from fmt_chunk.channel_mask.""" + + channel_mask = ChannelMask(0) + attr_map = {'front_left': "front_left", + 'front_right': "front_right", + 'front_center': "front_center", + 'LFE': "low_frequency", + 'rear_left': "back_left", + 'rear_right': "back_right", + 'front_left_of_center': "front_left_of_center", + 'front_right_of_center': "front_right_of_center", + 'rear_center': "back_center", + 'side_left': "side_left", + 'side_right': "side_right", + 'top_center': "top_center", + 'top_front_left': "top_front_left", + 'top_front_center': "top_front_center", + 'top_front_right': "top_front_right", + 'top_back_left': "top_back_left", + 'top_back_center': "top_back_center", + 'top_back_right': "top_back_right"} + for (key, value) in attr_map.items(): + if (getattr(fmt_channel_mask, key)): + setattr(channel_mask, value, True) + else: + setattr(channel_mask, value, False) + + return channel_mask + + def __read_format_chunk__(self, wave_file, chunk_size): + if (chunk_size < 16): + raise InvalidWave(_(u"fmt chunk is too short")) + + try: + fmt = WaveAudio.FMT_CHUNK.parse(wave_file.read(chunk_size)) + except Con.FieldError: + raise InvalidWave(_(u"fmt chunk is too short")) + + self.__wavtype__ = fmt.compression + self.__channels__ = fmt.channels + self.__samplespersec__ = fmt.sample_rate + self.__bytespersec__ = fmt.bytes_per_second + self.__blockalign__ = fmt.block_align + self.__bitspersample__ = fmt.bits_per_sample + + if (self.__wavtype__ == 0xFFFE): + self.__channel_mask__ = WaveAudio.fmt_chunk_to_channel_mask( + fmt.channel_mask) + else: + if (self.__channels__ == 1): + self.__channel_mask__ = ChannelMask.from_fields( + front_center=True) + elif (self.__channels__ == 2): + self.__channel_mask__ = ChannelMask.from_fields( + front_left=True, front_right=True) + #if we have a multi-channel WAVE file + #that's not WAVEFORMATEXTENSIBLE, + #assume the channels follow SMPTE/ITU-R recommendations + #and hope for the best + elif (self.__channels__ == 3): + self.__channel_mask__ = ChannelMask.from_fields( + front_left=True, front_right=True, front_center=True) + elif (self.__channels__ == 4): + self.__channel_mask__ = ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True) + elif (self.__channels__ == 5): + self.__channel_mask__ = ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True, + front_center=True) + elif (self.__channels__ == 6): + self.__channel_mask__ = ChannelMask.from_fields( + front_left=True, front_right=True, + back_left=True, back_right=True, + front_center=True, low_frequency=True) + else: + self.__channel_mask__ = ChannelMask(0) + + if ((self.__wavtype__ != 1) and (self.__wavtype__ != 0xFFFE)): + raise InvalidWave(_(u"No support for compressed WAVE files")) + + def __read_data_chunk__(self, wave_file, chunk_size): + self.__data_size__ = chunk_size + wave_file.seek(chunk_size, 1) + + def chunk_ids(self): + """Returns a list of RIFF WAVE chunk ID strings.""" + + return self.__chunk_ids__[:] + + def chunks(self): + """Yields (chunk_id, chunk_data) tuples. + + chunk_id and chunk_data are both binary strings.""" + + wave_file = file(self.filename, 'rb') + total_size = self.__read_wave_header__(wave_file) - 4 + + while (total_size > 0): + (chunk_id, chunk_size) = self.__read_chunk_header__(wave_file) + + #Fix odd-sized chunks to have 16-bit boundaries + if ((chunk_size & 1) == 1): + chunk_size += 1 + + yield (chunk_id, wave_file.read(chunk_size)) + + total_size -= (chunk_size + 8) + + @classmethod + def wave_from_chunks(cls, filename, chunk_iter): + """Builds a new RIFF WAVE file from a chunk data iterator. + + filename is the path to the wave file to build. + chunk_iter should yield (chunk_id, chunk_data) tuples. + """ + + f = file(filename, 'wb') + + header = Con.Container() + header.wave_id = 'RIFF' + header.riff_type = 'WAVE' + header.wave_size = 4 + + #write an unfinished header with an invalid size (for now) + f.write(cls.WAVE_HEADER.build(header)) + + for (chunk_id, chunk_data) in chunk_iter: + + #fix odd-sized chunks to fall on 16-bit boundaries + if ((len(chunk_data) & 1) == 1): + chunk_data += chr(0) + + chunk_header = cls.CHUNK_HEADER.build( + Con.Container(chunk_id=chunk_id, + chunk_length=len(chunk_data))) + f.write(chunk_header) + header.wave_size += len(chunk_header) + + f.write(chunk_data) + header.wave_size += len(chunk_data) + + #now that the chunks are done, go back and re-write the header + f.seek(0, 0) + f.write(cls.WAVE_HEADER.build(header)) + f.close() + + def pcm_split(self): + """Returns a pair of data strings before and after PCM data. + + The first contains all data before the PCM content of the data chunk. + The second containing all data after the data chunk. + For example: + + >>> w = audiotools.open("input.wav") + >>> (head,tail) = w.pcm_split() + >>> f = open("output.wav","wb") + >>> f.write(head) + >>> audiotools.transfer_framelist_data(w.to_pcm(),f.write) + >>> f.write(tail) + >>> f.close() + + should result in "output.wav" being identical to "input.wav". + """ + + head = cStringIO.StringIO() + tail = cStringIO.StringIO() + current_block = head + + wave_file = open(self.filename, 'rb') + try: + try: + #transfer the 12-byte "RIFFsizeWAVE" header to head + header = WaveAudio.WAVE_HEADER.parse(wave_file.read(12)) + total_size = header.wave_size - 4 + current_block.write(WaveAudio.WAVE_HEADER.build(header)) + except Con.ConstError: + raise InvalidWave(_(u"Not a RIFF WAVE file")) + except Con.core.FieldError: + raise InvalidWave(_(u"Invalid RIFF WAVE file")) + + while (total_size > 0): + try: + #transfer each chunk header + chunk_header = WaveAudio.CHUNK_HEADER.parse( + wave_file.read(8)) + current_block.write(WaveAudio.CHUNK_HEADER.build( + chunk_header)) + total_size -= 8 + except Con.core.FieldError: + raise InvalidWave(_(u"Invalid RIFF WAVE file")) + + #and transfer the full content of non-data chunks + if (chunk_header.chunk_id != "data"): + current_block.write( + wave_file.read(chunk_header.chunk_length)) + else: + wave_file.seek(chunk_header.chunk_length, os.SEEK_CUR) + current_block = tail + + total_size -= chunk_header.chunk_length + + return (head.getvalue(), tail.getvalue()) + finally: + wave_file.close() + + def verify(self, progress=None): + """Verifies the current file for correctness. + + Returns True if the file is okay. + Raises an InvalidFile with an error message if there is + some problem with the file.""" + + #RIFF WAVE chunk verification is likely to be so fast + #that individual calls to progress() are + #a waste of time. + if (progress is not None): + progress(0, 1) + + try: + f = open(self.filename, 'rb') + except IOError, msg: + raise InvalidWave(str(msg)) + + try: + #check the RIFF WAVE header is correct + try: + wave_header = self.WAVE_HEADER.parse_stream(f) + except (Con.ConstError, Con.FieldError): + raise InvalidWave(u"error parsing RIFF WAVE header") + + if (os.path.getsize(self.filename) != (wave_header.wave_size + 8)): + raise InvalidWave(u"wave file appears truncated") + + bytes_remaining = wave_header.wave_size - 4 + + fmt_chunk_found = data_chunk_found = False + + #bounce through all the chunks + while (bytes_remaining > 0): + try: + chunk_header = self.CHUNK_HEADER.parse_stream(f) + except (Con.FieldError, Con.ValidationError): + raise InvalidWave(u"error parsing chunk header") + bytes_remaining -= 8 + + if (chunk_header.chunk_id == 'fmt '): + #verify the fmt chunk is sane + try: + fmt_chunk = self.FMT_CHUNK.parse_stream(f) + fmt_chunk_found = True + fmt_chunk_size = len(self.FMT_CHUNK.build(fmt_chunk)) + bytes_remaining -= fmt_chunk_size + except Con.FieldError: + raise InvalidWave(u"invalid fmt chunk") + else: + if (chunk_header.chunk_id == 'data'): + data_chunk_found = True + #verify all other chunks are the correct size + f.seek(chunk_header.chunk_length, 1) + bytes_remaining -= chunk_header.chunk_length + + if (fmt_chunk_found and data_chunk_found): + if (progress is not None): + progress(1, 1) + + return True + elif (not fmt_chunk_found): + raise InvalidWave(u"fmt chunk not found") + else: + raise InvalidWave(u"data chunk not found") + finally: + f.close() diff --git a/Melodia/resources/audiotools/__wavpack__.py b/Melodia/resources/audiotools/__wavpack__.py new file mode 100644 index 0000000..63fa696 --- /dev/null +++ b/Melodia/resources/audiotools/__wavpack__.py @@ -0,0 +1,661 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 audiotools import (AudioFile, InvalidFile, Con, subprocess, BIN, + open_files, os, ReplayGain, ignore_sigint, + transfer_data, transfer_framelist_data, + BufferedPCMReader, Image, MetaData, sheet_to_unicode, + calculate_replay_gain, ApeTagItem, + EncodingError, DecodingError, PCMReaderError, + PCMReader, ChannelMask, + InvalidWave, __default_quality__, + WaveContainer, to_pcm_progress) +from __wav__ import WaveAudio, WaveReader +from __ape__ import ApeTaggedAudio, ApeTag, __number_pair__ +import gettext + +gettext.install("audiotools", unicode=True) + + +class InvalidWavPack(InvalidFile): + pass + + +class __24BitsLE__(Con.Adapter): + def _encode(self, value, context): + return chr(value & 0x0000FF) + \ + chr((value & 0x00FF00) >> 8) + \ + chr((value & 0xFF0000) >> 16) + + def _decode(self, obj, context): + return (ord(obj[2]) << 16) | (ord(obj[1]) << 8) | ord(obj[0]) + + +def ULInt24(name): + return __24BitsLE__(Con.Bytes(name, 3)) + + +def __riff_chunk_ids__(data): + import cStringIO + + total_size = len(data) + data = cStringIO.StringIO(data) + header = WaveAudio.WAVE_HEADER.parse_stream(data) + + while (data.tell() < total_size): + chunk_header = WaveAudio.CHUNK_HEADER.parse_stream(data) + chunk_size = chunk_header.chunk_length + if ((chunk_size & 1) == 1): + chunk_size += 1 + data.seek(chunk_size, 1) + yield chunk_header.chunk_id + + +####################### +#WavPack APEv2 +####################### + + +class WavPackAPEv2(ApeTag): + """A WavPack-specific APEv2 implementation with minor differences.""" + + def __init__(self, tags, tag_length=None, frame_count=0): + """Constructs an ApeTag from a list of ApeTagItem objects. + + tag_length is an optional total length integer. + frame_count is an optional number of PCM frames + to be used by cuesheets.""" + + ApeTag.__init__(self, tags=tags, tag_length=tag_length) + self.frame_count = frame_count + + def __comment_pairs__(self): + return filter(lambda pair: pair[0] != 'Cuesheet', + ApeTag.__comment_pairs__(self)) + + def __unicode__(self): + if ('Cuesheet' not in self.keys()): + return ApeTag.__unicode__(self) + else: + import cue + + try: + return u"%s%sCuesheet:\n%s" % \ + (MetaData.__unicode__(self), + os.linesep * 2, + sheet_to_unicode( + cue.parse( + cue.tokens(unicode(self['Cuesheet']).encode( + 'ascii', 'replace'))), + self.frame_count)) + except cue.CueException: + return ApeTag.__unicode__(self) + + @classmethod + def converted(cls, metadata): + """Converts a MetaData object to a WavPackAPEv2 object.""" + + if ((metadata is None) or (isinstance(metadata, WavPackAPEv2))): + return metadata + elif (isinstance(metadata, ApeTag)): + return WavPackAPEv2(metadata.tags) + else: + return WavPackAPEv2(ApeTag.converted(metadata).tags) + +WavePackAPEv2 = WavPackAPEv2 + +####################### +#WavPack +####################### + + +class WavPackAudio(ApeTaggedAudio, WaveContainer): + """A WavPack audio file.""" + + SUFFIX = "wv" + NAME = SUFFIX + DEFAULT_COMPRESSION = "standard" + COMPRESSION_MODES = ("veryfast", "fast", "standard", "high", "veryhigh") + COMPRESSION_DESCRIPTIONS = {"veryfast": _(u"fastest encode/decode, " + + u"worst compression"), + "veryhigh": _(u"slowest encode/decode, " + + u"best compression")} + + APE_TAG_CLASS = WavPackAPEv2 + + HEADER = Con.Struct("wavpackheader", + Con.Const(Con.String("id", 4), 'wvpk'), + Con.ULInt32("block_size"), + Con.ULInt16("version"), + Con.ULInt8("track_number"), + Con.ULInt8("index_number"), + Con.ULInt32("total_samples"), + Con.ULInt32("block_index"), + Con.ULInt32("block_samples"), + Con.Embed( + Con.BitStruct("flags", + Con.Flag("floating_point_data"), + Con.Flag("hybrid_noise_shaping"), + Con.Flag("cross_channel_decorrelation"), + Con.Flag("joint_stereo"), + Con.Flag("hybrid_mode"), + Con.Flag("mono_output"), + Con.Bits("bits_per_sample", 2), + + Con.Bits("left_shift_data_low", 3), + Con.Flag("final_block_in_sequence"), + Con.Flag("initial_block_in_sequence"), + Con.Flag("hybrid_noise_balanced"), + Con.Flag("hybrid_mode_control_bitrate"), + Con.Flag("extended_size_integers"), + + Con.Bit("sampling_rate_low"), + Con.Bits("maximum_magnitude", 5), + Con.Bits("left_shift_data_high", 2), + + Con.Flag("reserved2"), + Con.Flag("false_stereo"), + Con.Flag("use_IIR"), + Con.Bits("reserved1", 2), + Con.Bits("sampling_rate_high", 3))), + Con.ULInt32("crc")) + + SUB_HEADER = Con.Struct("wavpacksubheader", + Con.Embed( + Con.BitStruct("flags", + Con.Flag("large_block"), + Con.Flag("actual_size_1_less"), + Con.Flag("nondecoder_data"), + Con.Bits("metadata_function", 5))), + Con.IfThenElse('size', + lambda ctx: ctx['large_block'], + ULInt24('s'), + Con.Byte('s'))) + + BITS_PER_SAMPLE = (8, 16, 24, 32) + SAMPLING_RATE = (6000, 8000, 9600, 11025, + 12000, 16000, 22050, 24000, + 32000, 44100, 48000, 64000, + 88200, 96000, 192000, 0) + + __options__ = {"veryfast": {"block_size": 44100, + "joint_stereo": True, + "false_stereo": True, + "wasted_bits": True, + "decorrelation_passes": 1}, + "fast": {"block_size": 44100, + "joint_stereo": True, + "false_stereo": True, + "wasted_bits": True, + "decorrelation_passes": 2}, + "standard": {"block_size": 44100, + "joint_stereo": True, + "false_stereo": True, + "wasted_bits": True, + "decorrelation_passes": 5}, + "high": {"block_size": 44100, + "joint_stereo": True, + "false_stereo": True, + "wasted_bits": True, + "decorrelation_passes": 10}, + "veryhigh": {"block_size": 44100, + "joint_stereo": True, + "false_stereo": True, + "wasted_bits": True, + "decorrelation_passes": 16}} + + def __init__(self, filename): + """filename is a plain string.""" + + self.filename = filename + self.__samplerate__ = 0 + self.__channels__ = 0 + self.__bitspersample__ = 0 + self.__total_frames__ = 0 + + try: + self.__read_info__() + except IOError, msg: + raise InvalidWavPack(str(msg)) + + @classmethod + def is_type(cls, file): + """Returns True if the given file object describes this format. + + Takes a seekable file pointer rewound to the start of the file.""" + + return file.read(4) == 'wvpk' + + def lossless(self): + """Returns True.""" + + return True + + def channel_mask(self): + """Returns a ChannelMask object of this track's channel layout.""" + + if ((self.__channels__ == 1) or (self.__channels__ == 2)): + return ChannelMask.from_channels(self.__channels__) + else: + for (block_id, nondecoder, data) in self.sub_frames(): + if ((block_id == 0xD) and not nondecoder): + mask = 0 + for byte in reversed(map(ord, data[1:])): + mask = (mask << 8) | byte + return ChannelMask(mask) + else: + return ChannelMask(0) + + def get_metadata(self): + """Returns a MetaData object, or None. + + Raises IOError if unable to read the file.""" + + metadata = ApeTaggedAudio.get_metadata(self) + if (metadata is not None): + metadata.frame_count = self.total_frames() + return metadata + + def has_foreign_riff_chunks(self): + """Returns True if the audio file contains non-audio RIFF chunks. + + During transcoding, if the source audio file has foreign RIFF chunks + and the target audio format supports foreign RIFF chunks, + conversion should be routed through .wav conversion + to avoid losing those chunks.""" + + for (sub_header, nondecoder, data) in self.sub_frames(): + if ((sub_header == 1) and nondecoder): + if (set(__riff_chunk_ids__(data)) != set(['fmt ', 'data'])): + return True + elif ((sub_header == 2) and nondecoder): + return True + else: + return False + + def frames(self): + """Yields (header, data) tuples of WavPack frames. + + header is a Container parsed from WavPackAudio.HEADER. + data is a binary string. + """ + + f = file(self.filename) + total_size = os.path.getsize(self.filename) + try: + while (f.tell() < total_size): + try: + header = WavPackAudio.HEADER.parse(f.read( + WavPackAudio.HEADER.sizeof())) + except Con.ConstError: + break + + data = f.read(header.block_size - 24) + + yield (header, data) + finally: + f.close() + + def sub_frames(self): + """Yields (function,nondecoder,data) tuples. + + function is an integer. + nondecoder is a boolean indicating non-decoder data. + data is a binary string. + """ + + import cStringIO + + for (header, data) in self.frames(): + total_size = len(data) + data = cStringIO.StringIO(data) + while (data.tell() < total_size): + sub_header = WavPackAudio.SUB_HEADER.parse_stream(data) + if (sub_header.actual_size_1_less): + yield (sub_header.metadata_function, + sub_header.nondecoder_data, + data.read((sub_header.size * 2) - 1)) + data.read(1) + else: + yield (sub_header.metadata_function, + sub_header.nondecoder_data, + data.read(sub_header.size * 2)) + + def __read_info__(self): + f = file(self.filename) + try: + try: + header = WavPackAudio.HEADER.parse(f.read( + WavPackAudio.HEADER.sizeof())) + except Con.ConstError: + raise InvalidWavPack(_(u'WavPack header ID invalid')) + except Con.FieldError: + raise InvalidWavPack(_(u'WavPack header ID invalid')) + + self.__samplerate__ = WavPackAudio.SAMPLING_RATE[ + (header.sampling_rate_high << 1) | + header.sampling_rate_low] + + if (self.__samplerate__ == 0): + #if unknown, pull from the RIFF WAVE header + for (function, nondecoder, data) in self.sub_frames(): + if ((function == 1) and nondecoder): + #fmt chunk must be in the header + #since it must come before the data chunk + + import cStringIO + + chunks = cStringIO.StringIO(data[12:-8]) + try: + while (True): + chunk_header = \ + WaveAudio.CHUNK_HEADER.parse_stream( + chunks) + chunk_data = chunks.read( + chunk_header.chunk_length) + if (chunk_header.chunk_id == 'fmt '): + self.__samplerate__ = \ + WaveAudio.FMT_CHUNK.parse( + chunk_data).sample_rate + except Con.FieldError: + pass # finished with chunks + + self.__bitspersample__ = WavPackAudio.BITS_PER_SAMPLE[ + header.bits_per_sample] + self.__total_frames__ = header.total_samples + + self.__channels__ = 0 + + #go through as many headers as necessary + #to count the number of channels + if (header.mono_output): + self.__channels__ += 1 + else: + self.__channels__ += 2 + + while (not header.final_block_in_sequence): + f.seek(header.block_size - 24, 1) + header = WavPackAudio.HEADER.parse(f.read( + WavPackAudio.HEADER.sizeof())) + if (header.mono_output): + self.__channels__ += 1 + else: + self.__channels__ += 2 + finally: + f.close() + + def bits_per_sample(self): + """Returns an integer number of bits-per-sample this track contains.""" + + return self.__bitspersample__ + + def channels(self): + """Returns an integer number of channels this track contains.""" + + return self.__channels__ + + def total_frames(self): + """Returns the total PCM frames of the track as an integer.""" + + return self.__total_frames__ + + def sample_rate(self): + """Returns the rate of the track's audio as an integer number of Hz.""" + + return self.__samplerate__ + + @classmethod + def from_pcm(cls, filename, pcmreader, compression=None): + """Encodes a new file from PCM data. + + Takes a filename string, PCMReader object + and optional compression level string. + Encodes a new audio file from pcmreader's data + at the given filename with the specified compression level + and returns a new WavPackAudio object.""" + + from . import encoders + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + try: + encoders.encode_wavpack(filename, + BufferedPCMReader(pcmreader), + **cls.__options__[compression]) + + return cls(filename) + except (ValueError, IOError), msg: + cls.__unlink__(filename) + raise EncodingError(str(msg)) + except Exception, err: + cls.__unlink__(filename) + raise err + + def to_wave(self, wave_filename, progress=None): + """Writes the contents of this file to the given .wav filename string. + + Raises EncodingError if some error occurs during decoding.""" + + from . import decoders + + try: + f = open(wave_filename, 'wb') + except IOError, msg: + raise EncodingError(str(msg)) + + (head, tail) = self.pcm_split() + + try: + f.write(head) + total_frames = self.total_frames() + current_frames = 0 + decoder = decoders.WavPackDecoder(self.filename) + frame = decoder.read(4096) + while (len(frame) > 0): + f.write(frame.to_bytes(False, self.bits_per_sample() > 8)) + current_frames += frame.frames + if (progress is not None): + progress(current_frames, total_frames) + frame = decoder.read(4096) + f.write(tail) + f.close() + except IOError, msg: + self.__unlink__(wave_filename) + raise EncodingError(str(msg)) + + def to_pcm(self): + """Returns a PCMReader object containing the track's PCM data.""" + + from . import decoders + + try: + return decoders.WavPackDecoder(self.filename, + self.__samplerate__) + except (IOError, ValueError), msg: + return PCMReaderError(error_message=str(msg), + sample_rate=self.__samplerate__, + channels=self.__channels__, + channel_mask=int(self.channel_mask()), + bits_per_sample=self.__bitspersample__) + + @classmethod + def from_wave(cls, filename, wave_filename, compression=None, + progress=None): + """Encodes a new AudioFile from an existing .wav file. + + Takes a filename string, wave_filename string + of an existing WaveAudio file + and an optional compression level string. + Encodes a new audio file from the wave's data + at the given filename with the specified compression level + and returns a new WavPackAudio object.""" + + from . import encoders + + if ((compression is None) or + (compression not in cls.COMPRESSION_MODES)): + compression = __default_quality__(cls.NAME) + + wave = WaveAudio(wave_filename) + + (head, tail) = wave.pcm_split() + + try: + encoders.encode_wavpack(filename, + to_pcm_progress(wave, progress), + wave_header=head, + wave_footer=tail, + **cls.__options__[compression]) + + return cls(filename) + except (ValueError, IOError), msg: + cls.__unlink__(filename) + raise EncodingError(str(msg)) + except Exception, err: + cls.__unlink__(filename) + raise err + + def pcm_split(self): + """Returns a pair of data strings before and after PCM data.""" + + head = "" + tail = "" + + for (sub_block_id, nondecoder, data) in self.sub_frames(): + if ((sub_block_id == 1) and nondecoder): + head = data + elif ((sub_block_id == 2) and nondecoder): + tail = data + + return (head, tail) + + @classmethod + def add_replay_gain(cls, filenames, progress=None): + """Adds ReplayGain values to a list of filename strings. + + All the filenames must be of this AudioFile type. + Raises ValueError if some problem occurs during ReplayGain application. + """ + + tracks = [track for track in open_files(filenames) if + isinstance(track, cls)] + + if (len(tracks) > 0): + for (track, + track_gain, + track_peak, + album_gain, + album_peak) in calculate_replay_gain(tracks, progress): + metadata = track.get_metadata() + if (metadata is None): + metadata = WavPackAPEv2([]) + metadata["replaygain_track_gain"] = ApeTagItem.string( + "replaygain_track_gain", + u"%+1.2f dB" % (track_gain)) + metadata["replaygain_track_peak"] = ApeTagItem.string( + "replaygain_track_peak", + u"%1.6f" % (track_peak)) + metadata["replaygain_album_gain"] = ApeTagItem.string( + "replaygain_album_gain", + u"%+1.2f dB" % (album_gain)) + metadata["replaygain_album_peak"] = ApeTagItem.string( + "replaygain_album_peak", + u"%1.6f" % (album_peak)) + track.set_metadata(metadata) + + @classmethod + def can_add_replay_gain(cls): + """Returns True.""" + + return True + + @classmethod + def lossless_replay_gain(cls): + """Returns True.""" + + return True + + def replay_gain(self): + """Returns a ReplayGain object of our ReplayGain values. + + Returns None if we have no values.""" + + metadata = self.get_metadata() + if (metadata is None): + return None + + if (set(['replaygain_track_gain', 'replaygain_track_peak', + 'replaygain_album_gain', 'replaygain_album_peak']).issubset( + metadata.keys())): # we have ReplayGain data + try: + return ReplayGain( + unicode(metadata['replaygain_track_gain'])[0:-len(" dB")], + unicode(metadata['replaygain_track_peak']), + unicode(metadata['replaygain_album_gain'])[0:-len(" dB")], + unicode(metadata['replaygain_album_peak'])) + except ValueError: + return None + else: + return None + + def get_cuesheet(self): + """Returns the embedded Cuesheet-compatible object, or None. + + Raises IOError if a problem occurs when reading the file.""" + + import cue + + metadata = self.get_metadata() + + if ((metadata is not None) and ('Cuesheet' in metadata.keys())): + try: + return cue.parse(cue.tokens( + unicode(metadata['Cuesheet']).encode('utf-8', + 'replace'))) + except cue.CueException: + #unlike FLAC, just because a cuesheet is embedded + #does not mean it is compliant + return None + else: + return None + + def set_cuesheet(self, cuesheet): + """Imports cuesheet data from a Cuesheet-compatible object. + + This are objects with catalog(), ISRCs(), indexes(), and pcm_lengths() + methods. Raises IOError if an error occurs setting the cuesheet.""" + + import os.path + import cue + + if (cuesheet is None): + return + + metadata = self.get_metadata() + if (metadata is None): + metadata = WavPackAPEv2.converted(MetaData()) + + metadata['Cuesheet'] = WavPackAPEv2.ITEM.string('Cuesheet', + cue.Cuesheet.file( + cuesheet, + os.path.basename(self.filename)).decode('ascii', 'replace')) + self.set_metadata(metadata) diff --git a/Melodia/resources/audiotools/cdio.so b/Melodia/resources/audiotools/cdio.so new file mode 100755 index 0000000000000000000000000000000000000000..e3cd811e6b3fcbe111ddcabea12aae4b696c196f GIT binary patch literal 60126 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 literal 0 HcmV?d00001 diff --git a/Melodia/resources/audiotools/construct/__init__.py b/Melodia/resources/audiotools/construct/__init__.py new file mode 100644 index 0000000..f033d13 --- /dev/null +++ b/Melodia/resources/audiotools/construct/__init__.py @@ -0,0 +1,115 @@ +""" +. #### #### + ## #### ## ## #### ###### ##### ## ## #### ###### ## ## + ## ## ## ### ## ## ## ## ## ## ## ## ## #### ## + ## ## ## ###### ### ## ##### ## ## ## ## ## + ## ## ## ## ### ## ## ## ## ## ## ## ## ## + #### #### ## ## #### ## ## ## ##### #### ## ###### + + Parsing made even more fun (and faster too) + +Homepage: + http://construct.wikispaces.com (including online tutorial) + +Typical usage: + >>> from construct import * + +Hands-on example: + >>> from construct import * + >>> + >>> s = Struct("foo", + ... UBInt8("a"), + ... UBInt16("b"), + ... ) + >>> + >>> s.parse("\\x01\\x02\\x03") + Container(a = 1, b = 515) + >>> + >>> print s.parse("\\x01\\x02\\x03") + Container: + a = 1 + b = 515 + >>> + >>> s.build(Container(a = 1, b = 0x0203)) + "\\x01\\x02\\x03" +""" +from core import * +from adapters import * +from macros import * +from debug import Probe, Debugger + + +#=============================================================================== +# meta data +#=============================================================================== +__author__ = "tomer filiba (tomerfiliba [at] gmail.com)" +__version__ = "2.04" + +#=============================================================================== +# shorthands +#=============================================================================== +Bits = BitField +Byte = UBInt8 +Bytes = Field +Const = ConstAdapter +Tunnel = TunnelAdapter +Embed = Embedded + +#=============================================================================== +# deprecated names (kept for backward compatibility with RC1) +#=============================================================================== +MetaField = Field +MetaBytes = Field +GreedyRepeater = GreedyRange +OptionalGreedyRepeater = OptionalGreedyRange +Repeater = Range +StrictRepeater = Array +MetaRepeater = Array +OneOfValidator = OneOf +NoneOfValidator = NoneOf + +#=============================================================================== +# exposed names +#=============================================================================== +__all__ = [ + 'AdaptationError', 'Adapter', 'Alias', 'Aligned', 'AlignedStruct', + 'Anchor', 'Array', 'ArrayError', 'BFloat32', 'BFloat64', 'Bit', 'BitField', + 'BitIntegerAdapter', 'BitIntegerError', 'BitStruct', 'Bits', 'Bitwise', + 'Buffered', 'Byte', 'Bytes', 'CString', 'CStringAdapter', 'Const', + 'ConstAdapter', 'ConstError', 'Construct', 'ConstructError', 'Container', + 'Debugger', 'Embed', 'Embedded', 'EmbeddedBitStruct', 'Enum', 'ExprAdapter', + 'Field', 'FieldError', 'Flag', 'FlagsAdapter', 'FlagsContainer', + 'FlagsEnum', 'FormatField', 'GreedyRange', 'GreedyRepeater', + 'HexDumpAdapter', 'If', 'IfThenElse', 'IndexingAdapter', 'LFloat32', + 'LFloat64', 'LazyBound', 'LengthValueAdapter', 'ListContainer', + 'MappingAdapter', 'MappingError', 'MetaArray', 'MetaBytes', 'MetaField', + 'MetaRepeater', 'NFloat32', 'NFloat64', 'Nibble', 'NoneOf', + 'NoneOfValidator', 'Octet', 'OnDemand', 'OnDemandPointer', 'OneOf', + 'OneOfValidator', 'OpenRange', 'Optional', 'OptionalGreedyRange', + 'OptionalGreedyRepeater', 'PaddedStringAdapter', 'Padding', + 'PaddingAdapter', 'PaddingError', 'PascalString', 'Pass', 'Peek', + 'Pointer', 'PrefixedArray', 'Probe', 'Range', 'RangeError', 'Reconfig', + 'Rename', 'RepeatUntil', 'Repeater', 'Restream', 'SBInt16', 'SBInt32', + 'SBInt64', 'SBInt8', 'SLInt16', 'SLInt32', 'SLInt64', 'SLInt8', 'SNInt16', + 'SNInt32', 'SNInt64', 'SNInt8', 'Select', 'SelectError', 'Sequence', + 'SizeofError', 'SlicingAdapter', 'StaticField', 'StrictRepeater', 'String', + 'StringAdapter', 'Struct', 'Subconstruct', 'Switch', 'SwitchError', + 'SymmetricMapping', 'Terminator', 'TerminatorError', 'Tunnel', + 'TunnelAdapter', 'UBInt16', 'UBInt32', 'UBInt64', 'UBInt8', 'ULInt16', + 'ULInt32', 'ULInt64', 'ULInt8', 'UNInt16', 'UNInt32', 'UNInt64', 'UNInt8', + 'Union', 'ValidationError', 'Validator', 'Value', "Magic", +] + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/adapters.py b/Melodia/resources/audiotools/construct/adapters.py new file mode 100644 index 0000000..771dfab --- /dev/null +++ b/Melodia/resources/audiotools/construct/adapters.py @@ -0,0 +1,482 @@ +from core import Adapter, AdaptationError, Pass +from lib import int_to_bin, bin_to_int, swap_bytes, StringIO +from lib import FlagsContainer, HexString + + +#=============================================================================== +# exceptions +#=============================================================================== +class BitIntegerError(AdaptationError): + __slots__ = [] +class MappingError(AdaptationError): + __slots__ = [] +class ConstError(AdaptationError): + __slots__ = [] +class ValidationError(AdaptationError): + __slots__ = [] +class PaddingError(AdaptationError): + __slots__ = [] + +#=============================================================================== +# adapters +#=============================================================================== +class BitIntegerAdapter(Adapter): + """ + Adapter for bit-integers (converts bitstrings to integers, and vice versa). + See BitField. + + Parameters: + * subcon - the subcon to adapt + * width - the size of the subcon, in bits + * swapped - whether to swap byte order (little endian/big endian). + default is False (big endian) + * signed - whether the value is signed (two's complement). the default + is False (unsigned) + * bytesize - number of bits per byte, used for byte-swapping (if swapped). + default is 8. + """ + __slots__ = ["width", "swapped", "signed", "bytesize"] + def __init__(self, subcon, width, swapped = False, signed = False, + bytesize = 8): + Adapter.__init__(self, subcon) + self.width = width + self.swapped = swapped + self.signed = signed + self.bytesize = bytesize + def _encode(self, obj, context): + if obj < 0 and not self.signed: + raise BitIntegerError("object is negative, but field is not signed", + obj) + obj2 = int_to_bin(obj, width = self.width) + if self.swapped: + obj2 = swap_bytes(obj2, bytesize = self.bytesize) + return obj2 + def _decode(self, obj, context): + if self.swapped: + obj = swap_bytes(obj, bytesize = self.bytesize) + return bin_to_int(obj, signed = self.signed) + +class MappingAdapter(Adapter): + """ + Adapter that maps objects to other objects. + See SymmetricMapping and Enum. + + Parameters: + * subcon - the subcon to map + * decoding - the decoding (parsing) mapping (a dict) + * encoding - the encoding (building) mapping (a dict) + * decdefault - the default return value when the object is not found + in the decoding mapping. if no object is given, an exception is raised. + if `Pass` is used, the unmapped object will be passed as-is + * encdefault - the default return value when the object is not found + in the encoding mapping. if no object is given, an exception is raised. + if `Pass` is used, the unmapped object will be passed as-is + """ + __slots__ = ["encoding", "decoding", "encdefault", "decdefault"] + def __init__(self, subcon, decoding, encoding, + decdefault = NotImplemented, encdefault = NotImplemented): + Adapter.__init__(self, subcon) + self.decoding = decoding + self.encoding = encoding + self.decdefault = decdefault + self.encdefault = encdefault + def _encode(self, obj, context): + try: + return self.encoding[obj] + except (KeyError, TypeError): + if self.encdefault is NotImplemented: + raise MappingError("no encoding mapping for %r" % (obj,)) + if self.encdefault is Pass: + return obj + return self.encdefault + def _decode(self, obj, context): + try: + return self.decoding[obj] + except (KeyError, TypeError): + if self.decdefault is NotImplemented: + raise MappingError("no decoding mapping for %r" % (obj,)) + if self.decdefault is Pass: + return obj + return self.decdefault + +class FlagsAdapter(Adapter): + """ + Adapter for flag fields. Each flag is extracted from the number, resulting + in a FlagsContainer object. Not intended for direct usage. + See FlagsEnum. + + Parameters + * subcon - the subcon to extract + * flags - a dictionary mapping flag-names to their value + """ + __slots__ = ["flags"] + def __init__(self, subcon, flags): + Adapter.__init__(self, subcon) + self.flags = flags + def _encode(self, obj, context): + flags = 0 + for name, value in self.flags.iteritems(): + if getattr(obj, name, False): + flags |= value + return flags + def _decode(self, obj, context): + obj2 = FlagsContainer() + for name, value in self.flags.iteritems(): + setattr(obj2, name, bool(obj & value)) + return obj2 + +class StringAdapter(Adapter): + """ + Adapter for strings. Converts a sequence of characters into a python + string, and optionally handles character encoding. + See String. + + Parameters: + * subcon - the subcon to convert + * encoding - the character encoding name (e.g., "utf8"), or None to + return raw bytes (usually 8-bit ASCII). + """ + __slots__ = ["encoding"] + def __init__(self, subcon, encoding = None): + Adapter.__init__(self, subcon) + self.encoding = encoding + def _encode(self, obj, context): + if self.encoding: + obj = obj.encode(self.encoding) + return obj + def _decode(self, obj, context): + obj = "".join(obj) + if self.encoding: + obj = obj.decode(self.encoding) + return obj + +class PaddedStringAdapter(Adapter): + r""" + Adapter for padded strings. + See String. + + Parameters: + * subcon - the subcon to adapt + * padchar - the padding character. default is "\x00". + * paddir - the direction where padding is placed ("right", "left", or + "center"). the default is "right". + * trimdir - the direction where trimming will take place ("right" or + "left"). the default is "right". trimming is only meaningful for + building, when the given string is too long. + """ + __slots__ = ["padchar", "paddir", "trimdir"] + def __init__(self, subcon, padchar = "\x00", paddir = "right", + trimdir = "right"): + if paddir not in ("right", "left", "center"): + raise ValueError("paddir must be 'right', 'left' or 'center'", + paddir) + if trimdir not in ("right", "left"): + raise ValueError("trimdir must be 'right' or 'left'", trimdir) + Adapter.__init__(self, subcon) + self.padchar = padchar + self.paddir = paddir + self.trimdir = trimdir + def _decode(self, obj, context): + if self.paddir == "right": + obj = obj.rstrip(self.padchar) + elif self.paddir == "left": + obj = obj.lstrip(self.padchar) + else: + obj = obj.strip(self.padchar) + return obj + def _encode(self, obj, context): + size = self._sizeof(context) + if self.paddir == "right": + obj = obj.ljust(size, self.padchar) + elif self.paddir == "left": + obj = obj.rjust(size, self.padchar) + else: + obj = obj.center(size, self.padchar) + if len(obj) > size: + if self.trimdir == "right": + obj = obj[:size] + else: + obj = obj[-size:] + return obj + +class LengthValueAdapter(Adapter): + """ + Adapter for length-value pairs. It extracts only the value from the + pair, and calculates the length based on the value. + See PrefixedArray and PascalString. + + Parameters: + * subcon - the subcon returning a length-value pair + """ + __slots__ = [] + def _encode(self, obj, context): + return (len(obj), obj) + def _decode(self, obj, context): + return obj[1] + +class CStringAdapter(StringAdapter): + r""" + Adapter for C-style strings (strings terminated by a terminator char). + + Parameters: + * subcon - the subcon to convert + * terminators - a sequence of terminator chars. default is "\x00". + * encoding - the character encoding to use (e.g., "utf8"), or None to + return raw-bytes. the terminator characters are not affected by the + encoding. + """ + __slots__ = ["terminators"] + def __init__(self, subcon, terminators = "\x00", encoding = None): + StringAdapter.__init__(self, subcon, encoding = encoding) + self.terminators = terminators + def _encode(self, obj, context): + return StringAdapter._encode(self, obj, context) + self.terminators[0] + def _decode(self, obj, context): + return StringAdapter._decode(self, obj[:-1], context) + +class TunnelAdapter(Adapter): + """ + Adapter for tunneling (as in protocol tunneling). A tunnel is construct + nested upon another (layering). For parsing, the lower layer first parses + the data (note: it must return a string!), then the upper layer is called + to parse that data (bottom-up). For building it works in a top-down manner; + first the upper layer builds the data, then the lower layer takes it and + writes it to the stream. + + Parameters: + * subcon - the lower layer subcon + * inner_subcon - the upper layer (tunneled/nested) subcon + + Example: + # a pascal string containing compressed data (zlib encoding), so first + # the string is read, decompressed, and finally re-parsed as an array + # of UBInt16 + TunnelAdapter( + PascalString("data", encoding = "zlib"), + GreedyRange(UBInt16("elements")) + ) + """ + __slots__ = ["inner_subcon"] + def __init__(self, subcon, inner_subcon): + Adapter.__init__(self, subcon) + self.inner_subcon = inner_subcon + def _decode(self, obj, context): + return self.inner_subcon._parse(StringIO(obj), context) + def _encode(self, obj, context): + stream = StringIO() + self.inner_subcon._build(obj, stream, context) + return stream.getvalue() + +class ExprAdapter(Adapter): + """ + A generic adapter that accepts 'encoder' and 'decoder' as parameters. You + can use ExprAdapter instead of writing a full-blown class when only a + simple expression is needed. + + Parameters: + * subcon - the subcon to adapt + * encoder - a function that takes (obj, context) and returns an encoded + version of obj + * decoder - a function that takes (obj, context) and returns an decoded + version of obj + + Example: + ExprAdapter(UBInt8("foo"), + encoder = lambda obj, ctx: obj / 4, + decoder = lambda obj, ctx: obj * 4, + ) + """ + __slots__ = ["_encode", "_decode"] + def __init__(self, subcon, encoder, decoder): + Adapter.__init__(self, subcon) + self._encode = encoder + self._decode = decoder + +class HexDumpAdapter(Adapter): + """ + Adapter for hex-dumping strings. It returns a HexString, which is a string + """ + __slots__ = ["linesize"] + def __init__(self, subcon, linesize = 16): + Adapter.__init__(self, subcon) + self.linesize = linesize + def _encode(self, obj, context): + return obj + def _decode(self, obj, context): + return HexString(obj, linesize = self.linesize) + +class ConstAdapter(Adapter): + """ + Adapter for enforcing a constant value ("magic numbers"). When decoding, + the return value is checked; when building, the value is substituted in. + + Parameters: + * subcon - the subcon to validate + * value - the expected value + + Example: + Const(Field("signature", 2), "MZ") + """ + __slots__ = ["value"] + def __init__(self, subcon, value): + Adapter.__init__(self, subcon) + self.value = value + def _encode(self, obj, context): + if obj is None or obj == self.value: + return self.value + else: + raise ConstError("expected %r, found %r" % (self.value, obj)) + def _decode(self, obj, context): + if obj != self.value: + raise ConstError("expected %r, found %r" % (self.value, obj)) + return obj + +class SlicingAdapter(Adapter): + """ + Adapter for slicing a list (getting a slice from that list) + + Parameters: + * subcon - the subcon to slice + * start - start index + * stop - stop index (or None for up-to-end) + * step - step (or None for every element) + """ + __slots__ = ["start", "stop", "step"] + def __init__(self, subcon, start, stop = None): + Adapter.__init__(self, subcon) + self.start = start + self.stop = stop + def _encode(self, obj, context): + if self.start is None: + return obj + return [None] * self.start + obj + def _decode(self, obj, context): + return obj[self.start:self.stop] + +class IndexingAdapter(Adapter): + """ + Adapter for indexing a list (getting a single item from that list) + + Parameters: + * subcon - the subcon to index + * index - the index of the list to get + """ + __slots__ = ["index"] + def __init__(self, subcon, index): + Adapter.__init__(self, subcon) + if type(index) is not int: + raise TypeError("index must be an integer", type(index)) + self.index = index + def _encode(self, obj, context): + return [None] * self.index + [obj] + def _decode(self, obj, context): + return obj[self.index] + +class PaddingAdapter(Adapter): + r""" + Adapter for padding. + + Parameters: + * subcon - the subcon to pad + * pattern - the padding pattern (character). default is "\x00" + * strict - whether or not to verify, during parsing, that the given + padding matches the padding pattern. default is False (unstrict) + """ + __slots__ = ["pattern", "strict"] + def __init__(self, subcon, pattern = "\x00", strict = False): + Adapter.__init__(self, subcon) + self.pattern = pattern + self.strict = strict + def _encode(self, obj, context): + return self._sizeof(context) * self.pattern + def _decode(self, obj, context): + if self.strict: + expected = self._sizeof(context) * self.pattern + if obj != expected: + raise PaddingError("expected %r, found %r" % (expected, obj)) + return obj + + +#=============================================================================== +# validators +#=============================================================================== +class Validator(Adapter): + """ + Abstract class: validates a condition on the encoded/decoded object. + Override _validate(obj, context) in deriving classes. + + Parameters: + * subcon - the subcon to validate + """ + __slots__ = [] + def _decode(self, obj, context): + if not self._validate(obj, context): + raise ValidationError("invalid object", obj) + return obj + def _encode(self, obj, context): + return self._decode(obj, context) + def _validate(self, obj, context): + raise NotImplementedError() + +class OneOf(Validator): + """ + Validates that the value is one of the listed values + + Parameters: + * subcon - the subcon to validate + * valids - a set of valid values + """ + __slots__ = ["valids"] + def __init__(self, subcon, valids): + Validator.__init__(self, subcon) + self.valids = valids + def _validate(self, obj, context): + return obj in self.valids + +class NoneOf(Validator): + """ + Validates that the value is none of the listed values + + Parameters: + * subcon - the subcon to validate + * invalids - a set of invalid values + """ + __slots__ = ["invalids"] + def __init__(self, subcon, invalids): + Validator.__init__(self, subcon) + self.invalids = invalids + def _validate(self, obj, context): + return obj not in self.invalids + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/core.py b/Melodia/resources/audiotools/construct/core.py new file mode 100644 index 0000000..fec621f --- /dev/null +++ b/Melodia/resources/audiotools/construct/core.py @@ -0,0 +1,1249 @@ +from lib import StringIO, Packer +from lib import Container, ListContainer, AttrDict, LazyContainer + + +#=============================================================================== +# exceptions +#=============================================================================== +class ConstructError(Exception): + __slots__ = [] +class FieldError(ConstructError): + __slots__ = [] +class SizeofError(ConstructError): + __slots__ = [] +class AdaptationError(ConstructError): + __slots__ = [] +class ArrayError(ConstructError): + __slots__ = [] +class RangeError(ConstructError): + __slots__ = [] +class SwitchError(ConstructError): + __slots__ = [] +class SelectError(ConstructError): + __slots__ = [] +class TerminatorError(ConstructError): + __slots__ = [] + +#=============================================================================== +# abstract constructs +#=============================================================================== +class Construct(object): + """ + The mother of all constructs! + + User API: + * parse(buf) - parses an in-memory buffer (usually a string) + * parse_stream(stream) - parses a stream (in-memory, file, pipe, ...) + * build(obj) - builds the object into an in-memory buffer (a string) + * build_stream(obj, stream) - builds the object into the given stream + * sizeof(context) - calculates the size of the construct, if possible, + based on the context + + Overriable methods for subclassing: + * _parse(stream, context) - low-level parse from stream + * _build(obj, stream, context) - low-level build to stream + * _sizeof(context) - low-level compute size + + Flags API: + * _set_flag(flag) - sets the given flag/flags + * _clear_flag(flag) - clears the given flag/flags + * _inherit_flags(*subcons) - inherits the flag of subcons + * _is_flag(flag) - is the flag set? (predicate) + + Overridable methods for the copy-API: + * __getstate__() - returns a dict of the attributes of self + * __setstate__(attrs) - sets the attrs to self + + Attributes: + All constructs have a name and flags. The name is used for naming + struct-members and context dicts. Note that the name must be a string or + None (if the name is not needed). A single underscore ("_") is a reserved + name, and so are names starting with a less-than character ("<"). The name + should be descriptive, short, and valid as a python identifier (although + these rules are not enforced). + + The flags specify additional behavioral information about this construct. + The flags are used by enclosing constructs to determine a proper course + of action. Usually, flags are "inherited", i.e., an enclosing construct + inherits the flags of its subconstruct. The enclosing construct may + set new flags or clear existing ones, as necessary. + + For example, if FLAG_COPY_CONTEXT is set, repeaters will pass a copy of + the context for each iteration, which is necessary for OnDemand parsing. + """ + FLAG_COPY_CONTEXT = 0x0001 + FLAG_DYNAMIC = 0x0002 + FLAG_EMBED = 0x0004 + FLAG_NESTING = 0x0008 + + __slots__ = ["name", "conflags"] + def __init__(self, name, flags = 0): + if name is not None: + if type(name) is not str: + raise TypeError("name must be a string or None", name) + if name == "_" or name.startswith("<"): + raise ValueError("reserved name", name) + self.name = name + self.conflags = flags + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self.name) + + def _set_flag(self, flag): + self.conflags |= flag + def _clear_flag(self, flag): + self.conflags &= ~flag + def _inherit_flags(self, *subcons): + for sc in subcons: + self._set_flag(sc.conflags) + def _is_flag(self, flag): + return bool(self.conflags & flag) + + def __getstate__(self): + attrs = {} + if hasattr(self, "__dict__"): + attrs.update(self.__dict__) + slots = [] + c = self.__class__ + while c is not None: + if hasattr(c, "__slots__"): + slots.extend(c.__slots__) + c = c.__base__ + for name in slots: + if hasattr(self, name): + attrs[name] = getattr(self, name) + return attrs + def __setstate__(self, attrs): + for name, value in attrs.iteritems(): + setattr(self, name, value) + def __copy__(self): + """returns a copy of this construct""" + self2 = object.__new__(self.__class__) + self2.__setstate__(self.__getstate__()) + return self2 + + def parse(self, data): + """parses data given as a buffer or a string (in-memory)""" + return self.parse_stream(StringIO(data)) + def parse_stream(self, stream): + """parses data read directly from a stream""" + return self._parse(stream, AttrDict()) + def _parse(self, stream, context): + raise NotImplementedError() + + def build(self, obj): + """builds an object in a string (in memory)""" + stream = StringIO() + self.build_stream(obj, stream) + return stream.getvalue() + def build_stream(self, obj, stream): + """builds an object into a stream""" + self._build(obj, stream, AttrDict()) + def _build(self, obj, stream, context): + raise NotImplementedError() + + def sizeof(self, context = None): + """calculates the size of the construct (if possible) using the + given context""" + if context is None: + context = AttrDict() + return self._sizeof(context) + def _sizeof(self, context): + raise SizeofError("can't calculate size") + +class Subconstruct(Construct): + """ + Abstract subconstruct (wraps an inner construct, inheriting it's + name and flags). + + Parameters: + * subcon - the construct to wrap + """ + __slots__ = ["subcon"] + def __init__(self, subcon): + Construct.__init__(self, subcon.name, subcon.conflags) + self.subcon = subcon + def _parse(self, stream, context): + return self.subcon._parse(stream, context) + def _build(self, obj, stream, context): + self.subcon._build(obj, stream, context) + def _sizeof(self, context): + return self.subcon._sizeof(context) + +class Adapter(Subconstruct): + """ + Abstract adapter: calls _decode for parsing and _encode for building. + + Parameters: + * subcon - the construct to wrap + """ + __slots__ = [] + def _parse(self, stream, context): + return self._decode(self.subcon._parse(stream, context), context) + def _build(self, obj, stream, context): + self.subcon._build(self._encode(obj, context), stream, context) + def _decode(self, obj, context): + raise NotImplementedError() + def _encode(self, obj, context): + raise NotImplementedError() + + +#=============================================================================== +# primitives +#=============================================================================== +def _read_stream(stream, length): + if length < 0: + raise ValueError("length must be >= 0", length) + data = stream.read(length) + if len(data) != length: + raise FieldError("expected %d, found %d" % (length, len(data))) + return data + +def _write_stream(stream, length, data): + if length < 0: + raise ValueError("length must be >= 0", length) + if len(data) != length: + raise FieldError("expected %d, found %d" % (length, len(data))) + stream.write(data) + +class StaticField(Construct): + """ + A field of a fixed size + + Parameters: + * name - the name of the field + * length - the length (an integer) + + Example: + StaticField("foo", 5) + """ + __slots__ = ["length"] + def __init__(self, name, length): + Construct.__init__(self, name) + self.length = length + def _parse(self, stream, context): + return _read_stream(stream, self.length) + def _build(self, obj, stream, context): + _write_stream(stream, self.length, obj) + def _sizeof(self, context): + return self.length + +class FormatField(StaticField): + """ + A field that uses python's built-in struct module to pack/unpack data + according to a format string. + Note: this field has been originally implemented as an Adapter, but it + was made a construct for performance reasons. + + Parameters: + * name - the name + * endianity - "<" for little endian, ">" for big endian, or "=" for native + * format - a single format character + + Example: + FormatField("foo", ">", "L") + """ + __slots__ = ["packer"] + def __init__(self, name, endianity, format): + if endianity not in (">", "<", "="): + raise ValueError("endianity must be be '=', '<', or '>'", + endianity) + if len(format) != 1: + raise ValueError("must specify one and only one format char") + self.packer = Packer(endianity + format) + StaticField.__init__(self, name, self.packer.size) + def __getstate__(self): + attrs = StaticField.__getstate__(self) + attrs["packer"] = attrs["packer"].format + return attrs + def __setstate__(self, attrs): + attrs["packer"] = Packer(attrs["packer"]) + return StaticField.__setstate__(attrs) + def _parse(self, stream, context): + try: + return self.packer.unpack(_read_stream(stream, self.length))[0] + except Exception, ex: + raise FieldError(ex) + def _build(self, obj, stream, context): + try: + _write_stream(stream, self.length, self.packer.pack(obj)) + except Exception, ex: + raise FieldError(ex) + +class MetaField(Construct): + """ + A field of a meta-length. The length is computed at runtime based on + the context. + + Parameters: + * name - the name of the field + * lengthfunc - a function that takes the context as a parameter and return + the length of the field + + Example: + MetaField("foo", lambda ctx: 5) + """ + __slots__ = ["lengthfunc"] + def __init__(self, name, lengthfunc): + Construct.__init__(self, name) + self.lengthfunc = lengthfunc + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + return _read_stream(stream, self.lengthfunc(context)) + def _build(self, obj, stream, context): + _write_stream(stream, self.lengthfunc(context), obj) + def _sizeof(self, context): + return self.lengthfunc(context) + + +#=============================================================================== +# arrays and repeaters +#=============================================================================== +class MetaArray(Subconstruct): + """ + An array (repeater) of a meta-count. The array will iterate exactly + `countfunc()` times. Will raise ArrayError if less elements are found. + See also Array, Range and RepeatUntil. + + Parameters: + * countfunc - a function that takes the context as a parameter and returns + the number of elements of the array (count) + * subcon - the subcon to repeat `countfunc()` times + + Example: + MetaArray(lambda ctx: 5, UBInt8("foo")) + """ + __slots__ = ["countfunc"] + def __init__(self, countfunc, subcon): + Subconstruct.__init__(self, subcon) + self.countfunc = countfunc + self._clear_flag(self.FLAG_COPY_CONTEXT) + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + obj = ListContainer() + c = 0 + count = self.countfunc(context) + try: + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + while c < count: + obj.append(self.subcon._parse(stream, context.__copy__())) + c += 1 + else: + while c < count: + obj.append(self.subcon._parse(stream, context)) + c += 1 + except ConstructError, ex: + raise ArrayError("expected %d, found %d" % (count, c), ex) + return obj + def _build(self, obj, stream, context): + count = self.countfunc(context) + if len(obj) != count: + raise ArrayError("expected %d, found %d" % (count, len(obj))) + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + for subobj in obj: + self.subcon._build(subobj, stream, context.__copy__()) + else: + for subobj in obj: + self.subcon._build(subobj, stream, context) + def _sizeof(self, context): + return self.subcon._sizeof(context) * self.countfunc(context) + +class Range(Subconstruct): + """ + A range-array. The subcon will iterate between `mincount` to `maxcount` + times. If less than `mincount` elements are found, raises RangeError. + See also GreedyRange and OptionalGreedyRange. + + The general-case repeater. Repeats the given unit for at least mincount + times, and up to maxcount times. If an exception occurs (EOF, validation + error), the repeater exits. If less than mincount units have been + successfully parsed, a RepeaterError is raised. + + .. note:: + This object requires a seekable stream for parsing. + + Parameters: + + * mincount - the minimal count (an integer) + * maxcount - the maximal count (an integer) + * subcon - the subcon to repeat + + Example: + Range(5, 8, UBInt8("foo")) + + >>> c = Repeater(3, 7, UBInt8("foo")) + >>> c.parse("\\x01\\x02") + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 3..7, found 2 + >>> c.parse("\\x01\\x02\\x03") + [1, 2, 3] + >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") + [1, 2, 3, 4, 5, 6] + >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06\\x07") + [1, 2, 3, 4, 5, 6, 7] + >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09") + [1, 2, 3, 4, 5, 6, 7] + >>> c.build([1,2]) + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 3..7, found 2 + >>> c.build([1,2,3,4]) + '\\x01\\x02\\x03\\x04' + >>> c.build([1,2,3,4,5,6,7,8]) + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 3..7, found 8 + """ + + __slots__ = ["mincount", "maxcout"] + def __init__(self, mincount, maxcout, subcon): + Subconstruct.__init__(self, subcon) + self.mincount = mincount + self.maxcout = maxcout + self._clear_flag(self.FLAG_COPY_CONTEXT) + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + obj = ListContainer() + c = 0 + try: + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + while c < self.maxcout: + pos = stream.tell() + obj.append(self.subcon._parse(stream, context.__copy__())) + c += 1 + else: + while c < self.maxcout: + pos = stream.tell() + obj.append(self.subcon._parse(stream, context)) + c += 1 + except ConstructError, ex: + if c < self.mincount: + raise RangeError("expected %d to %d, found %d" % + (self.mincount, self.maxcout, c), ex) + stream.seek(pos) + return obj + def _build(self, obj, stream, context): + if len(obj) < self.mincount or len(obj) > self.maxcout: + raise RangeError("expected %d to %d, found %d" % + (self.mincount, self.maxcout, len(obj))) + cnt = 0 + try: + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + for subobj in obj: + self.subcon._build(subobj, stream, context.__copy__()) + cnt += 1 + else: + for subobj in obj: + self.subcon._build(subobj, stream, context) + cnt += 1 + except ConstructError, ex: + if cnt < self.mincount: + raise RangeError("expected %d to %d, found %d" % + (self.mincount, self.maxcout, len(obj)), ex) + def _sizeof(self, context): + raise SizeofError("can't calculate size") + +class RepeatUntil(Subconstruct): + """ + An array that repeat until the predicate indicates it to stop. Note that + the last element (which caused the repeat to exit) is included in the + return value. + + Parameters: + * predicate - a predicate function that takes (obj, context) and returns + True if the stop-condition is met, or False to continue. + * subcon - the subcon to repeat. + + Example: + # will read chars until \x00 (inclusive) + RepeatUntil(lambda obj, ctx: obj == "\x00", + Field("chars", 1) + ) + """ + __slots__ = ["predicate"] + def __init__(self, predicate, subcon): + Subconstruct.__init__(self, subcon) + self.predicate = predicate + self._clear_flag(self.FLAG_COPY_CONTEXT) + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + obj = [] + try: + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + while True: + subobj = self.subcon._parse(stream, context.__copy__()) + obj.append(subobj) + if self.predicate(subobj, context): + break + else: + while True: + subobj = self.subcon._parse(stream, context) + obj.append(subobj) + if self.predicate(subobj, context): + break + except ConstructError, ex: + raise ArrayError("missing terminator", ex) + return obj + def _build(self, obj, stream, context): + terminated = False + if self.subcon.conflags & self.FLAG_COPY_CONTEXT: + for subobj in obj: + self.subcon._build(subobj, stream, context.__copy__()) + if self.predicate(subobj, context): + terminated = True + break + else: + for subobj in obj: + self.subcon._build(subobj, stream, context.__copy__()) + if self.predicate(subobj, context): + terminated = True + break + if not terminated: + raise ArrayError("missing terminator") + def _sizeof(self, context): + raise SizeofError("can't calculate size") + + +#=============================================================================== +# structures and sequences +#=============================================================================== +class Struct(Construct): + """ + A sequence of named constructs, similar to structs in C. The elements are + parsed and built in the order they are defined. + See also Embedded. + + Parameters: + * name - the name of the structure + * subcons - a sequence of subconstructs that make up this structure. + * nested - a keyword-only argument that indicates whether this struct + creates a nested context. The default is True. This parameter is + considered "advanced usage", and may be removed in the future. + + Example: + Struct("foo", + UBInt8("first_element"), + UBInt16("second_element"), + Padding(2), + UBInt8("third_element"), + ) + """ + __slots__ = ["subcons", "nested"] + def __init__(self, name, *subcons, **kw): + self.nested = kw.pop("nested", True) + if kw: + raise TypeError("the only keyword argument accepted is 'nested'", kw) + Construct.__init__(self, name) + self.subcons = subcons + self._inherit_flags(*subcons) + self._clear_flag(self.FLAG_EMBED) + def _parse(self, stream, context): + if "" in context: + obj = context[""] + del context[""] + else: + obj = Container() + if self.nested: + context = AttrDict(_ = context) + for sc in self.subcons: + if sc.conflags & self.FLAG_EMBED: + context[""] = obj + sc._parse(stream, context) + else: + subobj = sc._parse(stream, context) + if sc.name is not None: + obj[sc.name] = subobj + context[sc.name] = subobj + return obj + def _build(self, obj, stream, context): + if "" in context: + del context[""] + elif self.nested: + context = AttrDict(_ = context) + for sc in self.subcons: + if sc.conflags & self.FLAG_EMBED: + context[""] = True + subobj = obj + elif sc.name is None: + subobj = None + else: + subobj = getattr(obj, sc.name) + context[sc.name] = subobj + sc._build(subobj, stream, context) + def _sizeof(self, context): + if self.nested: + context = AttrDict(_ = context) + return sum(sc._sizeof(context) for sc in self.subcons) + +class Sequence(Struct): + """ + A sequence of unnamed constructs. The elements are parsed and built in the + order they are defined. + See also Embedded. + + Parameters: + * name - the name of the structure + * subcons - a sequence of subconstructs that make up this structure. + * nested - a keyword-only argument that indicates whether this struct + creates a nested context. The default is True. This parameter is + considered "advanced usage", and may be removed in the future. + + Example: + Sequence("foo", + UBInt8("first_element"), + UBInt16("second_element"), + Padding(2), + UBInt8("third_element"), + ) + """ + __slots__ = [] + def _parse(self, stream, context): + if "" in context: + obj = context[""] + del context[""] + else: + obj = ListContainer() + if self.nested: + context = AttrDict(_ = context) + for sc in self.subcons: + if sc.conflags & self.FLAG_EMBED: + context[""] = obj + sc._parse(stream, context) + else: + subobj = sc._parse(stream, context) + if sc.name is not None: + obj.append(subobj) + context[sc.name] = subobj + return obj + def _build(self, obj, stream, context): + if "" in context: + del context[""] + elif self.nested: + context = AttrDict(_ = context) + objiter = iter(obj) + for sc in self.subcons: + if sc.conflags & self.FLAG_EMBED: + context[""] = True + subobj = objiter + elif sc.name is None: + subobj = None + else: + subobj = objiter.next() + context[sc.name] = subobj + sc._build(subobj, stream, context) + +class Union(Construct): + """ + a set of overlapping fields (like unions in C). when parsing, + all fields read the same data; when building, only the first subcon + (called "master") is used. + + Parameters: + * name - the name of the union + * master - the master subcon, i.e., the subcon used for building and + calculating the total size + * subcons - additional subcons + + Example: + Union("what_are_four_bytes", + UBInt32("one_dword"), + Struct("two_words", UBInt16("first"), UBInt16("second")), + Struct("four_bytes", + UBInt8("a"), + UBInt8("b"), + UBInt8("c"), + UBInt8("d") + ), + ) + """ + __slots__ = ["parser", "builder"] + def __init__(self, name, master, *subcons, **kw): + Construct.__init__(self, name) + args = [Peek(sc) for sc in subcons] + args.append(MetaField(None, lambda ctx: master._sizeof(ctx))) + self.parser = Struct(name, Peek(master, perform_build = True), *args) + self.builder = Struct(name, master) + def _parse(self, stream, context): + return self.parser._parse(stream, context) + def _build(self, obj, stream, context): + return self.builder._build(obj, stream, context) + def _sizeof(self, context): + return self.builder._sizeof(context) + +#=============================================================================== +# conditional +#=============================================================================== +class Switch(Construct): + """ + A conditional branch. Switch will choose the case to follow based on + the return value of keyfunc. If no case is matched, and no default value + is given, SwitchError will be raised. + See also Pass. + + Parameters: + * name - the name of the construct + * keyfunc - a function that takes the context and returns a key, which + will ne used to choose the relevant case. + * cases - a dictionary mapping keys to constructs. the keys can be any + values that may be returned by keyfunc. + * default - a default value to use when the key is not found in the cases. + if not supplied, an exception will be raised when the key is not found. + You can use the builtin construct Pass for 'do-nothing'. + * include_key - whether or not to include the key in the return value + of parsing. defualt is False. + + Example: + Struct("foo", + UBInt8("type"), + Switch("value", lambda ctx: ctx.type, { + 1 : UBInt8("spam"), + 2 : UBInt16("spam"), + 3 : UBInt32("spam"), + 4 : UBInt64("spam"), + } + ), + ) + """ + + class NoDefault(Construct): + def _parse(self, stream, context): + raise SwitchError("no default case defined") + def _build(self, obj, stream, context): + raise SwitchError("no default case defined") + def _sizeof(self, context): + raise SwitchError("no default case defined") + NoDefault = NoDefault("No default value specified") + + __slots__ = ["subcons", "keyfunc", "cases", "default", "include_key"] + + def __init__(self, name, keyfunc, cases, default = NoDefault, + include_key = False): + Construct.__init__(self, name) + self._inherit_flags(*cases.values()) + self.keyfunc = keyfunc + self.cases = cases + self.default = default + self.include_key = include_key + self._inherit_flags(*cases.values()) + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + key = self.keyfunc(context) + obj = self.cases.get(key, self.default)._parse(stream, context) + if self.include_key: + return key, obj + else: + return obj + def _build(self, obj, stream, context): + if self.include_key: + key, obj = obj + else: + key = self.keyfunc(context) + case = self.cases.get(key, self.default) + case._build(obj, stream, context) + def _sizeof(self, context): + case = self.cases.get(self.keyfunc(context), self.default) + return case._sizeof(context) + +class Select(Construct): + """ + Selects the first matching subconstruct. It will literally try each of + the subconstructs, until one matches. + + Notes: + * requires a seekable stream. + + Parameters: + * name - the name of the construct + * subcons - the subcons to try (order-sensitive) + * include_name - a keyword only argument, indicating whether to include + the name of the selected subcon in the return value of parsing. default + is false. + + Example: + Select("foo", + UBInt64("large"), + UBInt32("medium"), + UBInt16("small"), + UBInt8("tiny"), + ) + """ + __slots__ = ["subcons", "include_name"] + def __init__(self, name, *subcons, **kw): + include_name = kw.pop("include_name", False) + if kw: + raise TypeError("the only keyword argument accepted " + "is 'include_name'", kw) + Construct.__init__(self, name) + self.subcons = subcons + self.include_name = include_name + self._inherit_flags(*subcons) + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + for sc in self.subcons: + pos = stream.tell() + context2 = context.__copy__() + try: + obj = sc._parse(stream, context2) + except ConstructError: + stream.seek(pos) + else: + context.__update__(context2) + if self.include_name: + return sc.name, obj + else: + return obj + raise SelectError("no subconstruct matched") + def _build(self, obj, stream, context): + if self.include_name: + name, obj = obj + for sc in self.subcons: + if sc.name == name: + sc._build(obj, stream, context) + return + else: + for sc in self.subcons: + stream2 = StringIO() + context2 = context.__copy__() + try: + sc._build(obj, stream2, context2) + except Exception: + pass + else: + context.__update__(context2) + stream.write(stream2.getvalue()) + return + raise SelectError("no subconstruct matched", obj) + def _sizeof(self, context): + raise SizeofError("can't calculate size") + + +#=============================================================================== +# stream manipulation +#=============================================================================== +class Pointer(Subconstruct): + """ + Changes the stream position to a given offset, where the construction + should take place, and restores the stream position when finished. + See also Anchor, OnDemand and OnDemandPointer. + + Notes: + * requires a seekable stream. + + Parameters: + * offsetfunc: a function that takes the context and returns an absolute + stream position, where the construction would take place + * subcon - the subcon to use at `offsetfunc()` + + Example: + Struct("foo", + UBInt32("spam_pointer"), + Pointer(lambda ctx: ctx.spam_pointer, + Array(5, UBInt8("spam")) + ) + ) + """ + __slots__ = ["offsetfunc"] + def __init__(self, offsetfunc, subcon): + Subconstruct.__init__(self, subcon) + self.offsetfunc = offsetfunc + def _parse(self, stream, context): + newpos = self.offsetfunc(context) + origpos = stream.tell() + stream.seek(newpos) + obj = self.subcon._parse(stream, context) + stream.seek(origpos) + return obj + def _build(self, obj, stream, context): + newpos = self.offsetfunc(context) + origpos = stream.tell() + stream.seek(newpos) + self.subcon._build(obj, stream, context) + stream.seek(origpos) + def _sizeof(self, context): + return 0 + +class Peek(Subconstruct): + """ + Peeks at the stream: parses without changing the stream position. + See also Union. If the end of the stream is reached when peeking, + returns None. + + Notes: + * requires a seekable stream. + + Parameters: + * subcon - the subcon to peek at + * perform_build - whether or not to perform building. by default this + parameter is set to False, meaning building is a no-op. + + Example: + Peek(UBInt8("foo")) + """ + __slots__ = ["perform_build"] + def __init__(self, subcon, perform_build = False): + Subconstruct.__init__(self, subcon) + self.perform_build = perform_build + def _parse(self, stream, context): + pos = stream.tell() + try: + return self.subcon._parse(stream, context) + except FieldError: + pass + finally: + stream.seek(pos) + def _build(self, obj, stream, context): + if self.perform_build: + self.subcon._build(obj, stream, context) + def _sizeof(self, context): + return 0 + +class OnDemand(Subconstruct): + """ + Allows for on-demand (lazy) parsing. When parsing, it will return a + LazyContainer that represents a pointer to the data, but does not actually + parses it from stream until it's "demanded". + By accessing the 'value' property of LazyContainers, you will demand the + data from the stream. The data will be parsed and cached for later use. + You can use the 'has_value' property to know whether the data has already + been demanded. + See also OnDemandPointer. + + Notes: + * requires a seekable stream. + + Parameters: + * subcon - + * advance_stream - whether or not to advance the stream position. by + default this is True, but if subcon is a pointer, this should be False. + * force_build - whether or not to force build. If set to False, and the + LazyContainer has not been demaned, building is a no-op. + + Example: + OnDemand(Array(10000, UBInt8("foo")) + """ + __slots__ = ["advance_stream", "force_build"] + def __init__(self, subcon, advance_stream = True, force_build = True): + Subconstruct.__init__(self, subcon) + self.advance_stream = advance_stream + self.force_build = force_build + def _parse(self, stream, context): + obj = LazyContainer(self.subcon, stream, stream.tell(), context) + if self.advance_stream: + stream.seek(self.subcon._sizeof(context), 1) + return obj + def _build(self, obj, stream, context): + if not isinstance(obj, LazyContainer): + self.subcon._build(obj, stream, context) + elif self.force_build or obj.has_value: + self.subcon._build(obj.value, stream, context) + elif self.advance_stream: + stream.seek(self.subcon._sizeof(context), 1) + +class Buffered(Subconstruct): + """ + Creates an in-memory buffered stream, which can undergo encoding and + decoding prior to being passed on to the subconstruct. + See also Bitwise. + + Note: + * Do not use pointers inside Buffered + + Parameters: + * subcon - the subcon which will operate on the buffer + * encoder - a function that takes a string and returns an encoded + string (used after building) + * decoder - a function that takes a string and returns a decoded + string (used before parsing) + * resizer - a function that takes the size of the subcon and "adjusts" + or "resizes" it according to the encoding/decoding process. + + Example: + Buffered(BitField("foo", 16), + encoder = decode_bin, + decoder = encode_bin, + resizer = lambda size: size / 8, + ) + """ + __slots__ = ["encoder", "decoder", "resizer"] + def __init__(self, subcon, decoder, encoder, resizer): + Subconstruct.__init__(self, subcon) + self.encoder = encoder + self.decoder = decoder + self.resizer = resizer + def _parse(self, stream, context): + data = _read_stream(stream, self._sizeof(context)) + stream2 = StringIO(self.decoder(data)) + return self.subcon._parse(stream2, context) + def _build(self, obj, stream, context): + size = self._sizeof(context) + stream2 = StringIO() + self.subcon._build(obj, stream2, context) + data = self.encoder(stream2.getvalue()) + assert len(data) == size + _write_stream(stream, self._sizeof(context), data) + def _sizeof(self, context): + return self.resizer(self.subcon._sizeof(context)) + +class Restream(Subconstruct): + """ + Wraps the stream with a read-wrapper (for parsing) or a + write-wrapper (for building). The stream wrapper can buffer the data + internally, reading it from- or writing it to the underlying stream + as needed. For example, BitStreamReader reads whole bytes from the + underlying stream, but returns them as individual bits. + See also Bitwise. + + When the parsing or building is done, the stream's close method + will be invoked. It can perform any finalization needed for the stream + wrapper, but it must not close the underlying stream. + + Note: + * Do not use pointers inside Restream + + Parameters: + * subcon - the subcon + * stream_reader - the read-wrapper + * stream_writer - the write wrapper + * resizer - a function that takes the size of the subcon and "adjusts" + or "resizes" it according to the encoding/decoding process. + + Example: + Restream(BitField("foo", 16), + stream_reader = BitStreamReader, + stream_writer = BitStreamWriter, + resizer = lambda size: size / 8, + ) + """ + __slots__ = ["stream_reader", "stream_writer", "resizer"] + def __init__(self, subcon, stream_reader, stream_writer, resizer): + Subconstruct.__init__(self, subcon) + self.stream_reader = stream_reader + self.stream_writer = stream_writer + self.resizer = resizer + def _parse(self, stream, context): + stream2 = self.stream_reader(stream) + obj = self.subcon._parse(stream2, context) + stream2.close() + return obj + def _build(self, obj, stream, context): + stream2 = self.stream_writer(stream) + self.subcon._build(obj, stream2, context) + stream2.close() + def _sizeof(self, context): + return self.resizer(self.subcon._sizeof(context)) + + +#=============================================================================== +# miscellaneous +#=============================================================================== +class Reconfig(Subconstruct): + """ + Reconfigures a subconstruct. Reconfig can be used to change the name and + set and clear flags of the inner subcon. + + Parameters: + * name - the new name + * subcon - the subcon to reconfigure + * setflags - the flags to set (default is 0) + * clearflags - the flags to clear (default is 0) + + Example: + Reconfig("foo", UBInt8("bar")) + """ + __slots__ = [] + def __init__(self, name, subcon, setflags = 0, clearflags = 0): + Construct.__init__(self, name, subcon.conflags) + self.subcon = subcon + self._set_flag(setflags) + self._clear_flag(clearflags) + +class Anchor(Construct): + """ + Returns the "anchor" (stream position) at the point where it's inserted. + Useful for adjusting relative offsets to absolute positions, or to measure + sizes of constructs. + absolute pointer = anchor + relative offset + size = anchor_after - anchor_before + See also Pointer. + + Notes: + * requires a seekable stream. + + Parameters: + * name - the name of the anchor + + Example: + Struct("foo", + Anchor("base"), + UBInt8("relative_offset"), + Pointer(lambda ctx: ctx.relative_offset + ctx.base, + UBInt8("data") + ) + ) + """ + __slots__ = [] + def _parse(self, stream, context): + return stream.tell() + def _build(self, obj, stream, context): + context[self.name] = stream.tell() + def _sizeof(self, context): + return 0 + +class Value(Construct): + """ + A computed value. + + Parameters: + * name - the name of the value + * func - a function that takes the context and return the computed value + + Example: + Struct("foo", + UBInt8("width"), + UBInt8("height"), + Value("total_pixels", lambda ctx: ctx.width * ctx.height), + ) + """ + __slots__ = ["func"] + def __init__(self, name, func): + Construct.__init__(self, name) + self.func = func + self._set_flag(self.FLAG_DYNAMIC) + def _parse(self, stream, context): + return self.func(context) + def _build(self, obj, stream, context): + context[self.name] = self.func(context) + def _sizeof(self, context): + return 0 + +#class Dynamic(Construct): +# """ +# Dynamically creates a construct and uses it for parsing and building. +# This allows you to create change the construction tree on the fly. +# Deprecated. +# +# Parameters: +# * name - the name of the construct +# * factoryfunc - a function that takes the context and returns a new +# construct object which will be used for parsing and building. +# +# Example: +# def factory(ctx): +# if ctx.bar == 8: +# return UBInt8("spam") +# if ctx.bar == 9: +# return String("spam", 9) +# +# Struct("foo", +# UBInt8("bar"), +# Dynamic("spam", factory), +# ) +# """ +# __slots__ = ["factoryfunc"] +# def __init__(self, name, factoryfunc): +# Construct.__init__(self, name, self.FLAG_COPY_CONTEXT) +# self.factoryfunc = factoryfunc +# self._set_flag(self.FLAG_DYNAMIC) +# def _parse(self, stream, context): +# return self.factoryfunc(context)._parse(stream, context) +# def _build(self, obj, stream, context): +# return self.factoryfunc(context)._build(obj, stream, context) +# def _sizeof(self, context): +# return self.factoryfunc(context)._sizeof(context) + +class LazyBound(Construct): + """ + Lazily bound construct, useful for constructs that need to make cyclic + references (linked-lists, expression trees, etc.). + + Parameters: + + + Example: + foo = Struct("foo", + UBInt8("bar"), + LazyBound("next", lambda: foo), + ) + """ + __slots__ = ["bindfunc", "bound"] + def __init__(self, name, bindfunc): + Construct.__init__(self, name) + self.bound = None + self.bindfunc = bindfunc + def _parse(self, stream, context): + if self.bound is None: + self.bound = self.bindfunc() + return self.bound._parse(stream, context) + def _build(self, obj, stream, context): + if self.bound is None: + self.bound = self.bindfunc() + self.bound._build(obj, stream, context) + def _sizeof(self, context): + if self.bound is None: + self.bound = self.bindfunc() + return self.bound._sizeof(context) + +class Pass(Construct): + """ + A do-nothing construct, useful as the default case for Switch, or + to indicate Enums. + See also Switch and Enum. + + Notes: + * this construct is a singleton. do not try to instatiate it, as it + will not work... + + Example: + Pass + """ + __slots__ = [] + def _parse(self, stream, context): + pass + def _build(self, obj, stream, context): + assert obj is None + def _sizeof(self, context): + return 0 +Pass = Pass(None) + +class Terminator(Construct): + """ + Asserts the end of the stream has been reached at the point it's placed. + You can use this to ensure no more unparsed data follows. + + Notes: + * this construct is only meaningful for parsing. for building, it's + a no-op. + * this construct is a singleton. do not try to instatiate it, as it + will not work... + + Example: + Terminator + """ + __slots__ = [] + def _parse(self, stream, context): + if stream.read(1): + raise TerminatorError("expected end of stream") + def _build(self, obj, stream, context): + assert obj is None + def _sizeof(self, context): + return 0 +Terminator = Terminator(None) + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/debug.py b/Melodia/resources/audiotools/construct/debug.py new file mode 100644 index 0000000..b2df465 --- /dev/null +++ b/Melodia/resources/audiotools/construct/debug.py @@ -0,0 +1,160 @@ +""" +Debugging utilities for constructs +""" +import sys +import traceback +import pdb +import inspect +from core import Construct, Subconstruct +from lib import HexString, Container, ListContainer, AttrDict + + +class Probe(Construct): + """ + A probe: dumps the context, stack frames, and stream content to the screen + to aid the debugging process. + See also Debugger. + + Parameters: + * name - the display name + * show_stream - whether or not to show stream contents. default is True. + the stream must be seekable. + * show_context - whether or not to show the context. default is True. + * show_stack - whether or not to show the upper stack frames. default + is True. + * stream_lookahead - the number of bytes to dump when show_stack is set. + default is 100. + + Example: + Struct("foo", + UBInt8("a"), + Probe("between a and b"), + UBInt8("b"), + ) + """ + __slots__ = [ + "printname", "show_stream", "show_context", "show_stack", + "stream_lookahead" + ] + counter = 0 + + def __init__(self, name = None, show_stream = True, + show_context = True, show_stack = True, + stream_lookahead = 100): + Construct.__init__(self, None) + if name is None: + Probe.counter += 1 + name = "" % (Probe.counter,) + self.printname = name + self.show_stream = show_stream + self.show_context = show_context + self.show_stack = show_stack + self.stream_lookahead = stream_lookahead + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self.printname) + def _parse(self, stream, context): + self.printout(stream, context) + def _build(self, obj, stream, context): + self.printout(stream, context) + def _sizeof(self, context): + return 0 + + def printout(self, stream, context): + obj = Container() + if self.show_stream: + obj.stream_position = stream.tell() + follows = stream.read(self.stream_lookahead) + if not follows: + obj.following_stream_data = "EOF reached" + else: + stream.seek(-len(follows), 1) + obj.following_stream_data = HexString(follows) + print + + if self.show_context: + obj.context = context + + if self.show_stack: + obj.stack = ListContainer() + frames = [s[0] for s in inspect.stack()][1:-1] + frames.reverse() + for f in frames: + a = AttrDict() + a.__update__(f.f_locals) + obj.stack.append(a) + + print "=" * 80 + print "Probe", self.printname + print obj + print "=" * 80 + +class Debugger(Subconstruct): + """ + A pdb-based debugger. When an exception occurs in the subcon, a debugger + will appear and allow you to debug the error (and even fix on-the-fly). + + Parameters: + * subcon - the subcon to debug + + Example: + Debugger( + Enum(UBInt8("foo"), + a = 1, + b = 2, + c = 3 + ) + ) + """ + __slots__ = ["retval"] + def _parse(self, stream, context): + try: + return self.subcon._parse(stream, context) + except Exception: + self.retval = NotImplemented + self.handle_exc("(you can set the value of 'self.retval', " + "which will be returned)") + if self.retval is NotImplemented: + raise + else: + return self.retval + def _build(self, obj, stream, context): + try: + self.subcon._build(obj, stream, context) + except Exception: + self.handle_exc() + def handle_exc(self, msg = None): + print "=" * 80 + print "Debugging exception of %s:" % (self.subcon,) + print "".join(traceback.format_exception(*sys.exc_info())[1:]) + if msg: + print msg + pdb.post_mortem(sys.exc_info()[2]) + print "=" * 80 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/lib/__init__.py b/Melodia/resources/audiotools/construct/lib/__init__.py new file mode 100644 index 0000000..322e111 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/__init__.py @@ -0,0 +1,10 @@ +from binary import int_to_bin, bin_to_int, swap_bytes, encode_bin, decode_bin +from bitstream import BitStreamReader, BitStreamWriter +from container import (Container, AttrDict, FlagsContainer, + ListContainer, LazyContainer) +from hex import HexString, hexdump +from utils import Packer, StringIO +from path import drill + + + diff --git a/Melodia/resources/audiotools/construct/lib/binary.py b/Melodia/resources/audiotools/construct/lib/binary.py new file mode 100644 index 0000000..b348da2 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/binary.py @@ -0,0 +1,61 @@ +def int_to_bin(number, width = 32): + if number < 0: + number += 1 << width + i = width - 1 + bits = ["\x00"] * width + while number and i >= 0: + bits[i] = "\x00\x01"[number & 1] + number >>= 1 + i -= 1 + return "".join(bits) + +_bit_values = {"\x00" : 0, "\x01" : 1, "0" : 0, "1" : 1} +def bin_to_int(bits, signed = False): + number = 0 + bias = 0 + if signed and _bit_values[bits[0]] == 1: + bits = bits[1:] + bias = 1 << len(bits) + for b in bits: + number <<= 1 + number |= _bit_values[b] + return number - bias + +def swap_bytes(bits, bytesize = 8): + i = 0 + l = len(bits) + output = [""] * ((l // bytesize) + 1) + j = len(output) - 1 + while i < l: + output[j] = bits[i : i + bytesize] + i += bytesize + j -= 1 + return "".join(output) + +_char_to_bin = {} +_bin_to_char = {} +for i in range(256): + ch = chr(i) + bin = int_to_bin(i, 8) + _char_to_bin[ch] = bin + _bin_to_char[bin] = ch + _bin_to_char[bin] = ch + +def encode_bin(data): + return "".join(_char_to_bin[ch] for ch in data) + +def decode_bin(data): + assert len(data) & 7 == 0, "data length must be a multiple of 8" + i = 0 + j = 0 + l = len(data) // 8 + chars = [""] * l + while j < l: + chars[j] = _bin_to_char[data[i:i+8]] + i += 8 + j += 1 + return "".join(chars) + + + + diff --git a/Melodia/resources/audiotools/construct/lib/bitstream.py b/Melodia/resources/audiotools/construct/lib/bitstream.py new file mode 100644 index 0000000..e473864 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/bitstream.py @@ -0,0 +1,80 @@ +from binary import encode_bin, decode_bin + + +class BitStreamReader(object): + __slots__ = ["substream", "buffer", "total_size"] + def __init__(self, substream): + self.substream = substream + self.total_size = 0 + self.buffer = "" + def close(self): + if self.total_size % 8 != 0: + raise ValueError("total size of read data must be a multiple of 8", + self.total_size) + def tell(self): + return self.substream.tell() + def seek(self, pos, whence = 0): + self.buffer = "" + self.total_size = 0 + self.substream.seek(pos, whence) + def read(self, count): + assert count >= 0 + l = len(self.buffer) + if count == 0: + data = "" + elif count <= l: + data = self.buffer[:count] + self.buffer = self.buffer[count:] + else: + data = self.buffer + count -= l + bytes = count // 8 + if count & 7: + bytes += 1 + buf = encode_bin(self.substream.read(bytes)) + data += buf[:count] + self.buffer = buf[count:] + self.total_size += len(data) + return data + + +class BitStreamWriter(object): + __slots__ = ["substream", "buffer", "pos"] + def __init__(self, substream): + self.substream = substream + self.buffer = [] + self.pos = 0 + def close(self): + self.flush() + def flush(self): + bytes = decode_bin("".join(self.buffer)) + self.substream.write(bytes) + self.buffer = [] + self.pos = 0 + def tell(self): + return self.substream.tell() + self.pos // 8 + def seek(self, pos, whence = 0): + self.flush() + self.substream.seek(pos, whence) + def write(self, data): + if not data: + return + if type(data) is not str: + raise TypeError("data must be a string, not %r" % (type(data),)) + self.buffer.append(data) + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/lib/container.py b/Melodia/resources/audiotools/construct/lib/container.py new file mode 100644 index 0000000..bbbac86 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/container.py @@ -0,0 +1,275 @@ +def recursion_lock(retval, lock_name = "__recursion_lock__"): + def decorator(func): + def wrapper(self, *args, **kw): + if getattr(self, lock_name, False): + return retval + setattr(self, lock_name, True) + try: + return func(self, *args, **kw) + finally: + setattr(self, lock_name, False) + wrapper.__name__ = func.__name__ + return wrapper + return decorator + +class Container(object): + """ + A generic container of attributes + """ + __slots__ = ["__dict__", "__attrs__"] + def __init__(self, **kw): + self.__dict__.update(kw) + attrs = [] + attrs.extend(kw.keys()) + object.__setattr__(self, "__attrs__", attrs) + + def __eq__(self, other): + try: + return self.__dict__ == other.__dict__ + except AttributeError: + return False + def __ne__(self, other): + return not (self == other) + + def __delattr__(self, name): + object.__delattr__(self, name) + self.__attrs__.remove(name) + def __setattr__(self, name, value): + d = self.__dict__ + if name not in d and not name.startswith("__"): + self.__attrs__.append(name) + d[name] = value + def __getitem__(self, name): + return self.__dict__[name] + def __delitem__(self, name): + self.__delattr__(name) + def __setitem__(self, name, value): + self.__setattr__(name, value) + def __update__(self, obj): + for name in obj.__attrs__: + self[name] = obj[name] + def __copy__(self): + new = self.__class__() + new.__attrs__ = self.__attrs__[:] + new.__dict__ = self.__dict__.copy() + return new + def __iter__(self): + for name in self.__attrs__: + yield name, self.__dict__[name] + + @recursion_lock("<...>") + def __repr__(self): + attrs = sorted("%s = %s" % (k, repr(v)) + for k, v in self.__dict__.iteritems() + if not k.startswith("_")) + return "%s(%s)" % (self.__class__.__name__, ", ".join(attrs)) + def __str__(self): + return self.__pretty_str__() + @recursion_lock("<...>") + def __pretty_str__(self, nesting = 1, indentation = " "): + attrs = [] + ind = indentation * nesting + for k, v in self: + if not k.startswith("_"): + text = [ind, k, " = "] + if hasattr(v, "__pretty_str__"): + text.append(v.__pretty_str__(nesting + 1, indentation)) + else: + text.append(repr(v)) + attrs.append("".join(text)) + if not attrs: + return "%s()" % (self.__class__.__name__,) + attrs.insert(0, self.__class__.__name__ + ":") + return "\n".join(attrs) + + def __introspect__(self): + for k in self.__attrs__: + v = self.__dict__[k] + if not k.startswith("_"): + yield "kv", (k, v) + + +class FlagsContainer(Container): + """ + A container providing pretty-printing for flags. Only set flags are + displayed. + """ + def __inspect__(self): + for k in self.__attrs__: + v = self.__dict__[k] + if not k.startswith("_") and v: + yield "kv", (k, v) + + def __pretty_str__(self, nesting = 1, indentation = " "): + attrs = [] + ind = indentation * nesting + for k in self.__attrs__: + v = self.__dict__[k] + if not k.startswith("_") and v: + attrs.append(ind + k) + if not attrs: + return "%s()" % (self.__class__.__name__,) + attrs.insert(0, self.__class__.__name__+ ":") + return "\n".join(attrs) + +class ListContainer(list): + """ + A container for lists + """ + __slots__ = ["__recursion_lock__"] + def __str__(self): + return self.__pretty_str__() + @recursion_lock("[...]") + def __pretty_str__(self, nesting = 1, indentation = " "): + if not self: + return "[]" + ind = indentation * nesting + lines = ["["] + for elem in self: + lines.append("\n") + lines.append(ind) + if hasattr(elem, "__pretty_str__"): + lines.append(elem.__pretty_str__(nesting + 1, indentation)) + else: + lines.append(repr(elem)) + lines.append("\n") + lines.append(indentation * (nesting - 1)) + lines.append("]") + return "".join(lines) + +class AttrDict(object): + """ + A dictionary that can be accessed both using indexing and attributes, + i.e., + x = AttrDict() + x.foo = 5 + print x["foo"] + """ + __slots__ = ["__dict__"] + def __init__(self, **kw): + self.__dict__ = kw + def __contains__(self, key): + return key in self.__dict__ + def __nonzero__(self): + return bool(self.__dict__) + def __repr__(self): + return repr(self.__dict__) + def __str__(self): + return self.__pretty_str__() + def __pretty_str__(self, nesting = 1, indentation = " "): + if not self: + return "{}" + text = ["{\n"] + ind = nesting * indentation + for k in sorted(self.__dict__.keys()): + v = self.__dict__[k] + text.append(ind) + text.append(repr(k)) + text.append(" : ") + if hasattr(v, "__pretty_str__"): + try: + text.append(v.__pretty_str__(nesting+1, indentation)) + except Exception: + text.append(repr(v)) + else: + text.append(repr(v)) + text.append("\n") + text.append((nesting-1) * indentation) + text.append("}") + return "".join(text) + def __delitem__(self, key): + del self.__dict__[key] + def __getitem__(self, key): + return self.__dict__[key] + def __setitem__(self, key, value): + self.__dict__[key] = value + def __copy__(self): + new = self.__class__() + new.__dict__ = self.__dict__.copy() + return new + def __update__(self, other): + if isinstance(other, dict): + self.__dict__.update(other) + else: + self.__dict__.update(other.__dict__) + +class LazyContainer(object): + __slots__ = ["subcon", "stream", "pos", "context", "_value"] + def __init__(self, subcon, stream, pos, context): + self.subcon = subcon + self.stream = stream + self.pos = pos + self.context = context + self._value = NotImplemented + def __eq__(self, other): + try: + return self._value == other._value + except AttributeError: + return False + def __ne__(self, other): + return not (self == other) + def __str__(self): + return self.__pretty_str__() + def __pretty_str__(self, nesting = 1, indentation = " "): + if self._value is NotImplemented: + text = "" + elif hasattr(self._value, "__pretty_str__"): + text = self._value.__pretty_str__(nesting, indentation) + else: + text = repr(self._value) + return "%s: %s" % (self.__class__.__name__, text) + def read(self): + self.stream.seek(self.pos) + return self.subcon._parse(self.stream, self.context) + def dispose(self): + self.subcon = None + self.stream = None + self.context = None + self.pos = None + def _get_value(self): + if self._value is NotImplemented: + self._value = self.read() + return self._value + value = property(_get_value) + has_value = property(lambda self: self._value is not NotImplemented) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/lib/hex.py b/Melodia/resources/audiotools/construct/lib/hex.py new file mode 100644 index 0000000..34e75b5 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/hex.py @@ -0,0 +1,36 @@ +_printable = dict((chr(i), ".") for i in range(256)) +_printable.update((chr(i), chr(i)) for i in range(32, 128)) + +def hexdump(data, linesize = 16): + prettylines = [] + if len(data) < 65536: + fmt = "%%04X %%-%ds %%s" + else: + fmt = "%%08X %%-%ds %%s" + fmt = fmt % (3 * linesize - 1,) + for i in xrange(0, len(data), linesize): + line = data[i : i + linesize] + hextext = " ".join(b.encode("hex") for b in line) + rawtext = "".join(_printable[b] for b in line) + prettylines.append(fmt % (i, hextext, rawtext)) + return prettylines + +class HexString(str): + """ + represents a string that will be hex-dumped (only via __pretty_str__). + this class derives of str, and behaves just like a normal string in all + other contexts. + """ + def __init__(self, data, linesize = 16): + str.__init__(self, data) + self.linesize = linesize + def __new__(cls, data, *args, **kwargs): + return str.__new__(cls, data) + def __pretty_str__(self, nesting = 1, indentation = " "): + if not self: + return "''" + sep = "\n" + indentation * nesting + return sep + sep.join(hexdump(self)) + + + diff --git a/Melodia/resources/audiotools/construct/lib/path.py b/Melodia/resources/audiotools/construct/lib/path.py new file mode 100644 index 0000000..4f41ea5 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/path.py @@ -0,0 +1,151 @@ +from container import Container + + +def drill(obj, root = "", levels = -1): + if levels == 0: + yield root, obj + return + levels -= 1 + if isinstance(obj, Container): + for k, v in obj: + r = "%s.%s" % (root, k) + if levels: + for r2, v2 in drill(v, r, levels): + yield r2, v2 + else: + yield r, v + elif isinstance(obj, list): + for i, item in enumerate(obj): + r = "%s[%d]" % (root, i) + if levels: + for r2, v2 in drill(item, r, levels): + yield r2, v2 + else: + yield r, item + else: + yield root, obj + + +if __name__ == "__main__": + from construct import * + + c = Struct("foo", + Byte("a"), + Struct("b", + Byte("c"), + UBInt16("d"), + ), + Byte("e"), + Array(4, + Struct("f", + Byte("x"), + Byte("y"), + ), + ), + Byte("g"), + ) + o = c.parse("acddexyxyxyxyg") + + for lvl in range(4): + for path, value in drill(o, levels = lvl): + print path, value + print "---" + + output = """ + Container: + a = 97 + b = Container: + c = 99 + d = 25700 + e = 101 + f = [ + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + ] + g = 103 + --- + .a 97 + .b Container: + c = 99 + d = 25700 + .e 101 + .f [ + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + Container: + x = 120 + y = 121 + ] + .g 103 + --- + .a 97 + .b.c 99 + .b.d 25700 + .e 101 + .f[0] Container: + x = 120 + y = 121 + .f[1] Container: + x = 120 + y = 121 + .f[2] Container: + x = 120 + y = 121 + .f[3] Container: + x = 120 + y = 121 + .g 103 + --- + .a 97 + .b.c 99 + .b.d 25700 + .e 101 + .f[0].x 120 + .f[0].y 121 + .f[1].x 120 + .f[1].y 121 + .f[2].x 120 + .f[2].y 121 + .f[3].x 120 + .f[3].y 121 + .g 103 + --- + """ + + + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/construct/lib/utils.py b/Melodia/resources/audiotools/construct/lib/utils.py new file mode 100644 index 0000000..86d8b03 --- /dev/null +++ b/Melodia/resources/audiotools/construct/lib/utils.py @@ -0,0 +1,22 @@ +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + + +try: + from struct import Struct as Packer +except ImportError: + from struct import pack, unpack, calcsize + class Packer(object): + __slots__ = ["format", "size"] + def __init__(self, format): + self.format = format + self.size = calcsize(format) + def pack(self, *args): + return pack(self.format, *args) + def unpack(self, data): + return unpack(self.format, data) + + + diff --git a/Melodia/resources/audiotools/construct/macros.py b/Melodia/resources/audiotools/construct/macros.py new file mode 100644 index 0000000..b271e56 --- /dev/null +++ b/Melodia/resources/audiotools/construct/macros.py @@ -0,0 +1,628 @@ +from lib import BitStreamReader, BitStreamWriter, encode_bin, decode_bin +from core import * +from adapters import * + + +#=============================================================================== +# fields +#=============================================================================== +def Field(name, length): + """a field + * name - the name of the field + * length - the length of the field. the length can be either an integer + (StaticField), or a function that takes the context as an argument and + returns the length (MetaField) + """ + if callable(length): + return MetaField(name, length) + else: + return StaticField(name, length) + +def BitField(name, length, swapped = False, signed = False, bytesize = 8): + """a bit field; must be enclosed in a BitStruct + * name - the name of the field + * length - the length of the field in bits. the length can be either + an integer, or a function that takes the context as an argument and + returns the length + * swapped - whether the value is byte-swapped (little endian). the + default is False. + * signed - whether the value of the bitfield is a signed integer. the + default is False. + * bytesize - the number of bits in a byte (used for byte-swapping). the + default is 8. + """ + return BitIntegerAdapter(Field(name, length), + length, + swapped = swapped, + signed = signed, + bytesize = bytesize + ) + +def Padding(length, pattern = "\x00", strict = False): + r"""a padding field (value is discarded) + * length - the length of the field. the length can be either an integer, + or a function that takes the context as an argument and returns the + length + * pattern - the padding pattern (character) to use. default is "\x00" + * strict - whether or not to raise an exception is the actual padding + pattern mismatches the desired pattern. default is False. + """ + return PaddingAdapter(Field(None, length), + pattern = pattern, + strict = strict, + ) + +def Flag(name, truth = 1, falsehood = 0, default = False): + """a flag field (True or False) + * name - the name of the field + * truth - the numeric value of truth. the default is 1. + * falsehood - the numeric value of falsehood. the default is 0. + * default - the default value to assume, when the value is neither + `truth` nor `falsehood`. the default is False. + """ + return SymmetricMapping(Field(name, 1), + {True : chr(truth), False : chr(falsehood)}, + default = default, + ) + +#=============================================================================== +# field shortcuts +#=============================================================================== +def Bit(name): + """a 1-bit BitField; must be enclosed in a BitStruct""" + return BitField(name, 1) +def Nibble(name): + """a 4-bit BitField; must be enclosed in a BitStruct""" + return BitField(name, 4) +def Octet(name): + """an 8-bit BitField; must be enclosed in a BitStruct""" + return BitField(name, 8) + +def UBInt8(name): + """unsigned, big endian 8-bit integer""" + return FormatField(name, ">", "B") +def UBInt16(name): + """unsigned, big endian 16-bit integer""" + return FormatField(name, ">", "H") +def UBInt32(name): + """unsigned, big endian 32-bit integer""" + return FormatField(name, ">", "L") +def UBInt64(name): + """unsigned, big endian 64-bit integer""" + return FormatField(name, ">", "Q") + +def SBInt8(name): + """signed, big endian 8-bit integer""" + return FormatField(name, ">", "b") +def SBInt16(name): + """signed, big endian 16-bit integer""" + return FormatField(name, ">", "h") +def SBInt32(name): + """signed, big endian 32-bit integer""" + return FormatField(name, ">", "l") +def SBInt64(name): + """signed, big endian 64-bit integer""" + return FormatField(name, ">", "q") + +def ULInt8(name): + """unsigned, little endian 8-bit integer""" + return FormatField(name, "<", "B") +def ULInt16(name): + """unsigned, little endian 16-bit integer""" + return FormatField(name, "<", "H") +def ULInt32(name): + """unsigned, little endian 32-bit integer""" + return FormatField(name, "<", "L") +def ULInt64(name): + """unsigned, little endian 64-bit integer""" + return FormatField(name, "<", "Q") + +def SLInt8(name): + """signed, little endian 8-bit integer""" + return FormatField(name, "<", "b") +def SLInt16(name): + """signed, little endian 16-bit integer""" + return FormatField(name, "<", "h") +def SLInt32(name): + """signed, little endian 32-bit integer""" + return FormatField(name, "<", "l") +def SLInt64(name): + """signed, little endian 64-bit integer""" + return FormatField(name, "<", "q") + +def UNInt8(name): + """unsigned, native endianity 8-bit integer""" + return FormatField(name, "=", "B") +def UNInt16(name): + """unsigned, native endianity 16-bit integer""" + return FormatField(name, "=", "H") +def UNInt32(name): + """unsigned, native endianity 32-bit integer""" + return FormatField(name, "=", "L") +def UNInt64(name): + """unsigned, native endianity 64-bit integer""" + return FormatField(name, "=", "Q") + +def SNInt8(name): + """signed, native endianity 8-bit integer""" + return FormatField(name, "=", "b") +def SNInt16(name): + """signed, native endianity 16-bit integer""" + return FormatField(name, "=", "h") +def SNInt32(name): + """signed, native endianity 32-bit integer""" + return FormatField(name, "=", "l") +def SNInt64(name): + """signed, native endianity 64-bit integer""" + return FormatField(name, "=", "q") + +def BFloat32(name): + """big endian, 32-bit IEEE floating point number""" + return FormatField(name, ">", "f") +def LFloat32(name): + """little endian, 32-bit IEEE floating point number""" + return FormatField(name, "<", "f") +def NFloat32(name): + """native endianity, 32-bit IEEE floating point number""" + return FormatField(name, "=", "f") + +def BFloat64(name): + """big endian, 64-bit IEEE floating point number""" + return FormatField(name, ">", "d") +def LFloat64(name): + """little endian, 64-bit IEEE floating point number""" + return FormatField(name, "<", "d") +def NFloat64(name): + """native endianity, 64-bit IEEE floating point number""" + return FormatField(name, "=", "d") + + +#=============================================================================== +# arrays +#=============================================================================== +def Array(count, subcon): + """ + Repeats the given unit a fixed number of times. + + :param int count: number of times to repeat + :param ``Construct`` subcon: construct to repeat + + >>> c = StrictRepeater(4, UBInt8("foo")) + >>> c + + >>> c.parse("\\x01\\x02\\x03\\x04") + [1, 2, 3, 4] + >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") + [1, 2, 3, 4] + >>> c.build([5,6,7,8]) + '\\x05\\x06\\x07\\x08' + >>> c.build([5,6,7,8,9]) + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 4..4, found 5 + """ + + if callable(count): + con = MetaArray(count, subcon) + else: + con = MetaArray(lambda ctx: count, subcon) + con._clear_flag(con.FLAG_DYNAMIC) + return con + +def PrefixedArray(subcon, length_field = UBInt8("length")): + """an array prefixed by a length field. + * subcon - the subcon to be repeated + * length_field - a construct returning an integer + """ + return LengthValueAdapter( + Sequence(subcon.name, + length_field, + Array(lambda ctx: ctx[length_field.name], subcon), + nested = False + ) + ) + +def OpenRange(mincount, subcon): + from sys import maxint + return Range(mincount, maxint, subcon) + +def GreedyRange(subcon): + """ + Repeats the given unit one or more times. + + :param ``Construct`` subcon: construct to repeat + + >>> from construct import GreedyRepeater, UBInt8 + >>> c = GreedyRepeater(UBInt8("foo")) + >>> c.parse("\\x01") + [1] + >>> c.parse("\\x01\\x02\\x03") + [1, 2, 3] + >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") + [1, 2, 3, 4, 5, 6] + >>> c.parse("") + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 1..2147483647, found 0 + >>> c.build([1,2]) + '\\x01\\x02' + >>> c.build([]) + Traceback (most recent call last): + ... + construct.core.RepeaterError: expected 1..2147483647, found 0 + """ + + return OpenRange(1, subcon) + +def OptionalGreedyRange(subcon): + """ + Repeats the given unit zero or more times. This repeater can't + fail, as it accepts lists of any length. + + :param ``Construct`` subcon: construct to repeat + + >>> from construct import OptionalGreedyRepeater, UBInt8 + >>> c = OptionalGreedyRepeater(UBInt8("foo")) + >>> c.parse("") + [] + >>> c.parse("\\x01\\x02") + [1, 2] + >>> c.build([]) + '' + >>> c.build([1,2]) + '\\x01\\x02' + """ + + return OpenRange(0, subcon) + + +#=============================================================================== +# subconstructs +#=============================================================================== +def Optional(subcon): + """an optional construct. if parsing fails, returns None. + * subcon - the subcon to optionally parse or build + """ + return Select(subcon.name, subcon, Pass) + +def Bitwise(subcon): + """converts the stream to bits, and passes the bitstream to subcon + * subcon - a bitwise construct (usually BitField) + """ + # subcons larger than MAX_BUFFER will be wrapped by Restream instead + # of Buffered. implementation details, don't stick your nose in :) + MAX_BUFFER = 1024 * 8 + def resizer(length): + if length & 7: + raise SizeofError("size must be a multiple of 8", length) + return length >> 3 + if not subcon._is_flag(subcon.FLAG_DYNAMIC) and subcon.sizeof() < MAX_BUFFER: + con = Buffered(subcon, + encoder = decode_bin, + decoder = encode_bin, + resizer = resizer + ) + else: + con = Restream(subcon, + stream_reader = BitStreamReader, + stream_writer = BitStreamWriter, + resizer = resizer) + return con + +def Aligned(subcon, modulus = 4, pattern = "\x00"): + r"""aligns subcon to modulus boundary using padding pattern + * subcon - the subcon to align + * modulus - the modulus boundary (default is 4) + * pattern - the padding pattern (default is \x00) + """ + if modulus < 2: + raise ValueError("modulus must be >= 2", modulus) + if modulus in (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024): + def padlength(ctx): + m1 = modulus - 1 + return (modulus - (subcon._sizeof(ctx) & m1)) & m1 + else: + def padlength(ctx): + return (modulus - (subcon._sizeof(ctx) % modulus)) % modulus + return SeqOfOne(subcon.name, + subcon, + # ?????? + # ?????? + # ?????? + # ?????? + Padding(padlength, pattern = pattern), + nested = False, + ) + +def SeqOfOne(name, *args, **kw): + """a sequence of one element. only the first element is meaningful, the + rest are discarded + * name - the name of the sequence + * args - subconstructs + * kw - any keyword arguments to Sequence + """ + return IndexingAdapter(Sequence(name, *args, **kw), index = 0) + +def Embedded(subcon): + """embeds a struct into the enclosing struct. + * subcon - the struct to embed + """ + return Reconfig(subcon.name, subcon, subcon.FLAG_EMBED) + +def Rename(newname, subcon): + """renames an existing construct + * newname - the new name + * subcon - the subcon to rename + """ + return Reconfig(newname, subcon) + +def Alias(newname, oldname): + """creates an alias for an existing element in a struct + * newname - the new name + * oldname - the name of an existing element + """ + return Value(newname, lambda ctx: ctx[oldname]) + + +#=============================================================================== +# mapping +#=============================================================================== +def SymmetricMapping(subcon, mapping, default = NotImplemented): + """defines a symmetrical mapping: a->b, b->a. + * subcon - the subcon to map + * mapping - the encoding mapping (a dict); the decoding mapping is + achieved by reversing this mapping + * default - the default value to use when no mapping is found. if no + default value is given, and exception is raised. setting to Pass would + return the value "as is" (unmapped) + """ + reversed_mapping = dict((v, k) for k, v in mapping.iteritems()) + return MappingAdapter(subcon, + encoding = mapping, + decoding = reversed_mapping, + encdefault = default, + decdefault = default, + ) + +def Enum(subcon, **kw): + """a set of named values mapping. + * subcon - the subcon to map + * kw - keyword arguments which serve as the encoding mapping + * _default_ - an optional, keyword-only argument that specifies the + default value to use when the mapping is undefined. if not given, + and exception is raised when the mapping is undefined. use `Pass` to + pass the unmapped value as-is + """ + return SymmetricMapping(subcon, kw, kw.pop("_default_", NotImplemented)) + +def FlagsEnum(subcon, **kw): + """a set of flag values mapping. + * subcon - the subcon to map + * kw - keyword arguments which serve as the encoding mapping + """ + return FlagsAdapter(subcon, kw) + + +#=============================================================================== +# structs +#=============================================================================== +def AlignedStruct(name, *subcons, **kw): + """a struct of aligned fields + * name - the name of the struct + * subcons - the subcons that make up this structure + * kw - keyword arguments to pass to Aligned: 'modulus' and 'pattern' + """ + return Struct(name, *(Aligned(sc, **kw) for sc in subcons)) + +def BitStruct(name, *subcons): + """a struct of bitwise fields + * name - the name of the struct + * subcons - the subcons that make up this structure + """ + return Bitwise(Struct(name, *subcons)) + +def EmbeddedBitStruct(*subcons): + """an embedded BitStruct. no name is necessary. + * subcons - the subcons that make up this structure + """ + return Bitwise(Embedded(Struct(None, *subcons))) + +#=============================================================================== +# strings +#=============================================================================== +def String(name, length, encoding=None, padchar=None, paddir="right", + trimdir="right"): + """ + A configurable, fixed-length string field. + + The padding character must be specified for padding and trimming to work. + + :param str name: name + :param int length: length, in bytes + :param str encoding: encoding (e.g. "utf8") or None for no encoding + :param str padchar: optional character to pad out strings + :param str paddir: direction to pad out strings; one of "right", "left", + or "both" + :param str trim: direction to trim strings; one of "right", "left" + + >>> from construct import String + >>> String("foo", 5).parse("hello") + 'hello' + >>> + >>> String("foo", 12, encoding = "utf8").parse("hello joh\\xd4\\x83n") + u'hello joh\\u0503n' + >>> + >>> foo = String("foo", 10, padchar = "X", paddir = "right") + >>> foo.parse("helloXXXXX") + 'hello' + >>> foo.build("hello") + 'helloXXXXX' + """ + + con = StringAdapter(Field(name, length), encoding=encoding) + if padchar is not None: + con = PaddedStringAdapter(con, padchar=padchar, paddir=paddir, + trimdir=trimdir) + return con + +def PascalString(name, length_field=UBInt8("length"), encoding=None): + """ + A length-prefixed string. + + ``PascalString`` is named after the string types of Pascal, which are + length-prefixed. Lisp strings also follow this convention. + + The length field will appear in the same ``Container`` as the + ``PascalString``, with the given name. + + :param str name: name + :param ``Construct`` length_field: a field which will store the length of + the string + :param str encoding: encoding (e.g. "utf8") or None for no encoding + + >>> foo = PascalString("foo") + >>> foo.parse("\\x05hello") + 'hello' + >>> foo.build("hello world") + '\\x0bhello world' + >>> + >>> foo = PascalString("foo", length_field = UBInt16("length")) + >>> foo.parse("\\x00\\x05hello") + 'hello' + >>> foo.build("hello") + '\\x00\\x05hello' + """ + + return StringAdapter( + LengthValueAdapter( + Sequence(name, + length_field, + Field("data", lambda ctx: ctx[length_field.name]), + ) + ), + encoding=encoding, + ) + +def CString(name, terminators="\x00", encoding=None, + char_field=Field(None, 1)): + """ + A string ending in a terminator. + + ``CString`` is similar to the strings of C, C++, and other related + programming languages. + + By default, the terminator is the NULL byte (0x00). + + :param str name: name + :param iterable terminators: sequence of valid terminators, in order of + preference + :param str encoding: encoding (e.g. "utf8") or None for no encoding + :param ``Construct`` char_field: construct representing a single character + + >>> foo = CString("foo") + >>> + >>> foo.parse("hello\\x00") + 'hello' + >>> foo.build("hello") + 'hello\\x00' + >>> + >>> foo = CString("foo", terminators = "XYZ") + >>> + >>> foo.parse("helloX") + 'hello' + >>> foo.parse("helloY") + 'hello' + >>> foo.parse("helloZ") + 'hello' + >>> foo.build("hello") + 'helloX' + """ + return Rename(name, + CStringAdapter( + RepeatUntil(lambda obj, ctx: obj in terminators, + char_field, + ), + terminators=terminators, + encoding=encoding, + ) + ) + + +#=============================================================================== +# conditional +#=============================================================================== +def IfThenElse(name, predicate, then_subcon, else_subcon): + """an if-then-else conditional construct: if the predicate indicates True, + `then_subcon` will be used; otherwise `else_subcon` + * name - the name of the construct + * predicate - a function taking the context as an argument and returning + True or False + * then_subcon - the subcon that will be used if the predicate returns True + * else_subcon - the subcon that will be used if the predicate returns False + """ + return Switch(name, lambda ctx: bool(predicate(ctx)), + { + True : then_subcon, + False : else_subcon, + } + ) + +def If(predicate, subcon, elsevalue = None): + """an if-then conditional construct: if the predicate indicates True, + subcon will be used; otherwise, `elsevalue` will be returned instead. + * predicate - a function taking the context as an argument and returning + True or False + * subcon - the subcon that will be used if the predicate returns True + * elsevalue - the value that will be used should the predicate return False. + by default this value is None. + """ + return IfThenElse(subcon.name, + predicate, + subcon, + Value("elsevalue", lambda ctx: elsevalue) + ) + + +#=============================================================================== +# misc +#=============================================================================== +def OnDemandPointer(offsetfunc, subcon, force_build = True): + """an on-demand pointer. + * offsetfunc - a function taking the context as an argument and returning + the absolute stream position + * subcon - the subcon that will be parsed from the `offsetfunc()` stream + position on demand + * force_build - see OnDemand. by default True. + """ + return OnDemand(Pointer(offsetfunc, subcon), + advance_stream = False, + force_build = force_build + ) + +def Magic(data): + return ConstAdapter(Field(None, len(data)), data) + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Melodia/resources/audiotools/cue.py b/Melodia/resources/audiotools/cue.py new file mode 100644 index 0000000..aaa2055 --- /dev/null +++ b/Melodia/resources/audiotools/cue.py @@ -0,0 +1,418 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2008-2011 Brian Langenberger + +#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 + +"""The cuesheet handling module.""" + +import re +from audiotools import SheetException, parse_timestamp, build_timestamp +import gettext + +gettext.install("audiotools", unicode=True) + +################### +#Cue Sheet Parsing +################### + +#This method of cuesheet reading involves a tokenizer and parser, +#analagous to lexx/yacc. +#It might be easier to use a line-by-line ad-hoc method for parsing, +#but this brute-force approach should be a bit more thorough. + +SPACE = 0x0 +TAG = 0x1 +NUMBER = 0x2 +EOL = 0x4 +STRING = 0x8 +ISRC = 0x10 +TIMESTAMP = 0x20 + + +class CueException(SheetException): + """Raised by cuesheet parsing errors.""" + + pass + + +def tokens(cuedata): + """Yields (text, token, line) tuples from cuedata stream. + + text is a plain string. + token is an integer such as TAG or NUMBER. + line is a line number integer.""" + + full_length = len(cuedata) + cuedata = cuedata.lstrip('efbbbf'.decode('hex')) + line_number = 1 + + #This isn't completely accurate since the whitespace requirements + #between tokens aren't enforced. + TOKENS = [(re.compile("^(%s)" % (s)), element) for (s, element) in + [(r'[A-Z]{2}[A-Za-z0-9]{3}[0-9]{7}', ISRC), + (r'[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}', TIMESTAMP), + (r'[0-9]+', NUMBER), + (r'[\r\n]+', EOL), + (r'".+?"', STRING), + (r'\S+', STRING), + (r'[ ]+', SPACE)]] + + TAGMATCH = re.compile(r'^[A-Z]+$') + + while (True): + for (token, element) in TOKENS: + t = token.search(cuedata) + if (t is not None): + cuedata = cuedata[len(t.group()):] + if (element == SPACE): + break + elif (element == NUMBER): + yield (int(t.group()), element, line_number) + elif (element == EOL): + line_number += 1 + yield (t.group(), element, line_number) + elif (element == STRING): + if (TAGMATCH.match(t.group())): + yield (t.group(), TAG, line_number) + else: + yield (t.group().strip('"'), element, line_number) + elif (element == TIMESTAMP): + (m, s, f) = map(int, t.group().split(":")) + yield (((m * 60 * 75) + (s * 75) + f), + element, line_number) + else: + yield (t.group(), element, line_number) + break + else: + break + + if (len(cuedata) > 0): + raise CueException(_(u"Invalid token at char %d") % \ + (full_length - len(cuedata))) + + +def get_value(tokens, accept, error): + """Retrieves a specific token from the stream of tokens. + + tokens - the token iterator + accept - an "or"ed list of all the tokens we'll accept + error - the string to prepend to the error message + + Returns the gotten value which matches one of the accepted tokens + or raises ValueError if the token matches none of them. + """ + + (token, element, line_number) = tokens.next() + if ((element & accept) != 0): + return token + else: + raise CueException(_(u"%(error)s at line %(line)d") % \ + {"error": error, + "line": line_number}) + + +def parse(tokens): + """Returns a Cuesheet object from the token iterator stream. + + Raises CueException if a parsing error occurs. + """ + + def skip_to_eol(tokens): + (token, element, line_number) = tokens.next() + while (element != EOL): + (token, element, line_number) = tokens.next() + + cuesheet = Cuesheet() + track = None + + try: + while (True): + (token, element, line_number) = tokens.next() + if (element == TAG): + + #ignore comment lines + if (token == "REM"): + skip_to_eol(tokens) + + #we're moving to a new track + elif (token == 'TRACK'): + if (track is not None): + cuesheet.tracks[track.number] = track + + track = Track(get_value(tokens, NUMBER, + _(u"Invalid track number")), + get_value(tokens, TAG | STRING, + _(u"Invalid track type"))) + + get_value(tokens, EOL, "Excess data") + + #if we haven't started on track data yet, + #add attributes to the main cue sheet + elif (track is None): + if (token in ('CATALOG', 'CDTEXTFILE', + 'PERFORMER', 'SONGWRITER', + 'TITLE')): + cuesheet.attribs[token] = get_value( + tokens, + STRING | TAG | NUMBER | ISRC, + _(u"Missing value")) + + get_value(tokens, EOL, _(u"Excess data")) + + elif (token == 'FILE'): + filename = get_value(tokens, STRING, + _(u"Missing filename")) + filetype = get_value(tokens, STRING | TAG, + _(u"Missing file type")) + + cuesheet.attribs[token] = (filename, filetype) + + get_value(tokens, EOL, _(u"Excess data")) + + else: + raise CueException( + _(u"Invalid tag %(tag)s at line %(line)d") % \ + {"tag": token, + "line": line_number}) + #otherwise, we're adding data to the current track + else: + if (token in ('ISRC', 'PERFORMER', + 'SONGWRITER', 'TITLE')): + track.attribs[token] = get_value( + tokens, + STRING | TAG | NUMBER | ISRC, + "Missing value") + + get_value(tokens, EOL, _(u"Invalid data")) + + elif (token == 'FLAGS'): + flags = [] + s = get_value(tokens, STRING | TAG | EOL, + _(u"Invalid flag")) + while (('\n' not in s) and ('\r' not in s)): + flags.append(s) + s = get_value(tokens, STRING | TAG | EOL, + _(u"Invalid flag")) + track.attribs[token] = ",".join(flags) + + elif (token in ('POSTGAP', 'PREGAP')): + track.attribs[token] = get_value( + tokens, TIMESTAMP, + _(u"Invalid timestamp")) + get_value(tokens, EOL, _(u"Excess data")) + + elif (token == 'INDEX'): + index_number = get_value(tokens, NUMBER, + _(u"Invalid index number")) + index_timestamp = get_value(tokens, TIMESTAMP, + _(u"Invalid timestamp")) + track.indexes[index_number] = index_timestamp + + get_value(tokens, EOL, _(u"Excess data")) + + elif (token in ('FILE',)): + skip_to_eol(tokens) + + else: + raise CueException( + _(u"Invalid tag %(tag)s at line %(line)d") % \ + {"tag": token, + "line": line_number}) + + else: + raise CueException(_(u"Missing tag at line %d") % ( + line_number)) + except StopIteration: + if (track is not None): + cuesheet.tracks[track.number] = track + return cuesheet + + +def __attrib_str__(attrib): + if (isinstance(attrib, tuple)): + return " ".join([__attrib_str__(a) for a in attrib]) + elif (re.match(r'^[A-Z]+$', attrib) is not None): + return attrib + else: + return "\"%s\"" % (attrib) + + +class Cuesheet: + """An object representing a cuesheet file.""" + + def __init__(self): + self.attribs = {} + self.tracks = {} + + def __repr__(self): + return "Cuesheet(attribs=%s,tracks=%s)" % \ + (repr(self.attribs), repr(self.tracks)) + + def __str__(self): + return "\r\n".join(["%s %s" % (key, __attrib_str__(value)) + for key, value in self.attribs.items()] + \ + [str(track) for track in + sorted(self.tracks.values())]) + + def catalog(self): + """Returns the cuesheet's CATALOG number as a plain string, or None. + + If present, this value is typically a CD's UPC code.""" + + if ('CATALOG' in self.attribs): + return str(self.attribs['CATALOG']) + else: + return None + + def single_file_type(self): + """Returns True if this cuesheet is formatted for a single file.""" + + previous = -1 + for t in self.indexes(): + for index in t: + if (index <= previous): + return False + else: + previous = index + else: + return True + + def indexes(self): + """Yields a set of index lists, one for each track in the file.""" + + for key in sorted(self.tracks.keys()): + yield tuple( + [self.tracks[key].indexes[k] + for k in sorted(self.tracks[key].indexes.keys())]) + + def pcm_lengths(self, total_length): + """Yields a list of PCM lengths for all audio tracks within the file. + + total_length is the length of the entire file in PCM frames.""" + + previous = None + + for key in sorted(self.tracks.keys()): + current = self.tracks[key].indexes + if (previous is None): + previous = current + else: + track_length = (current[max(current.keys())] - + previous[max(previous.keys())]) * (44100 / 75) + total_length -= track_length + yield track_length + previous = current + + yield total_length + + def ISRCs(self): + """Returns a track_number->ISRC dict of all non-empty tracks.""" + + return dict([(track.number, track.ISRC()) for track in + self.tracks.values() if track.ISRC() is not None]) + + @classmethod + def file(cls, sheet, filename): + """Constructs a new cuesheet string from a compatible object. + + sheet must have catalog(), indexes() and ISRCs() methods. + filename is a string to the filename the cuesheet is created for. + Although we don't care whether the filename points to a real file, + other tools sometimes do. + """ + + import cStringIO + + catalog = sheet.catalog() # a catalog string, or None + indexes = list(sheet.indexes()) # a list of index tuples + ISRCs = sheet.ISRCs() # a track_number->ISRC dict + + data = cStringIO.StringIO() + + if (catalog is not None): + data.write("CATALOG %s\r\n" % (catalog)) + data.write("FILE \"%s\" WAVE\r\n" % (filename)) + + for (i, current) in enumerate(indexes): + tracknum = i + 1 + + data.write(" TRACK %2.2d AUDIO\r\n" % (tracknum)) + + if (tracknum in ISRCs.keys()): + data.write(" ISRC %s\r\n" % (ISRCs[tracknum])) + + for (j, index) in enumerate(current): + data.write(" INDEX %2.2d %s\r\n" % (j, + build_timestamp(index))) + + return data.getvalue() + + +class Track: + """A track inside a Cuesheet object.""" + + def __init__(self, number, type): + """number is the track's number on disc, type is a string.""" + + self.number = number + self.type = type + self.attribs = {} + self.indexes = {} + + def __cmp__(self, t): + return cmp(self.number, t.number) + + def __repr__(self): + return "Track(%s,%s,attribs=%s,indexes=%s)" % \ + (repr(self.number), repr(self.type), + repr(self.attribs), repr(self.indexes)) + + def __str__(self): + return (" TRACK %2.2d %s\r\n" % (self.number, self.type)) + \ + "\r\n".join([" %s %s" % (key, __attrib_str__(value)) + for key, value in self.attribs.items()] + \ + [" INDEX %2.2d %2.2d:%2.2d:%2.2d" % \ + (k, v / 75 / 60, v / 75 % 60, v % 75) + for (k, v) in sorted(self.indexes.items())]) + + def ISRC(self): + """Returns the track's ISRC value, or None.""" + + if ('ISRC' in self.attribs.keys()): + return str(self.attribs['ISRC']) + else: + return None + + +def read_cuesheet(filename): + """Returns a Cuesheet from a cuesheet filename on disk. + + Raises CueException if some error occurs reading or parsing the file. + """ + + try: + f = open(filename, 'r') + except IOError, msg: + raise CueException(unicode(_(u"Unable to read cuesheet"))) + try: + sheet = parse(tokens(f.read())) + if (not sheet.single_file_type()): + raise CueException(_(u"Cuesheet not formatted for disc images")) + else: + return sheet + finally: + f.close() diff --git a/Melodia/resources/audiotools/decoders.so b/Melodia/resources/audiotools/decoders.so new file mode 100755 index 0000000000000000000000000000000000000000..dc834e9d7f82336f78c3d123e89f42eabb5ecb88 GIT binary patch literal 1207464 zcmeFadt6l2`aix$K?fy=3X?jPSX5|MU{=u4nvogZBq&F`b<6+}guFm72zJGgVmFOZ zS=sGGms57tZl;zxfQs6wP_ry6$I#u?&H)9hM;))Rj((4rY_XfWl} zn-8Ao#XuQqc!n;@qX&LfPxADtCkGRZI1iUx$fDX#5z6Pf0jB3_#B()*UWSdt7?%vK zJgS8tq~9iyu7)v!PKHEFSK40p40b=6%c&{h(J)RYL;2ia@Epnc&t6i_@gl#j^in1= zkfA6JD_bNo>yF>(u@klPi$1U)GyEUsZq#3mtqNSD?MeO{$wGR$4q-HYz43cCrbe?D zYT6lE$X`y=wAUh?(-&AYJyYAdaKS_8Klfm{KV(5z-pJ=IBMU7T+BaPa4&_l=&G%ZJ z-D0UKw^wOSty~M~X3;DmGc~If`7h|{(|SC3estx6kxdby7R$)K_1*4^TzJ_w$7#L7 ztmWg+us7bFa9^0EcZmBrXI8h~y|nNH_K+nrBD6DVVnfP9dReuF5n)MxS)hePj?^PG zdql)SYgISEmdFL6VId38x87G_vF3D}o;hJbW>s>3O-nu9?)!8gvYuvHI#Sc-W!k&F zV~>uo+CwyJ^w4n4?hEO**{=0^q%y8W8B|T9|dWDl-NnyUj#NDVY(@Og1Db3!bu{W zEW#T^NWouC_cxmEr{Vr4{4xZVi7-pttHE>t*(Pv?>7H(LOz~XY&%`euzghUr#?O4s zMWjFgFjwss{EF}^78nI?{N|bBrMNFM#k;zlFA{D=c$>Jty%XX)1a>FFa{LzHcQ<~W zT?+wLiiCSQBLG$;twHQY)X67bpM#?ehKa$$L|Rf z_9X6~HpR(l)Zq85z@8J~3kYAtZ>fmCg78&wPr+;Wy^h~9{NBWmuD9`fhuyXRdAI$x z)4LS{eNTidMYsy#YW&_8aT$CdZq_37;a7`a9e#Ax^FUjVaHF_y5FrJdO!u3`{T75D znsD>&KSbmsgrDHI)trd??WXvrxZfe-pP6vF{oEA)Lfr2{_!WL%xs~cUzmvZ5}~9shv7);Bhn)f zp3w>InF5PM*jL=2g|MHvH}f;!M#8Ge_W@Oaa`q#X+E3jBuQccqekl@h<&6i>i?B7T21VZ?Jd;v*F7 zT2tJPdxt4b&x}Mo3BSLbTs80cEeldVOWyd^d#!rWZ67?-lyYF=PitCAI8TCczB zn`Prq9}=~)Z(;4CF`mq*-nGk4`#QJr?oS?=aK$=T;kE^fzWFV&I6tKC%Bmxet@^tA z{1c1oX0_EW`slMudpz^>^WL~K&)AZ6#upQw-}>}`Nw-{Zpfou$@WtOBeDTuQ>J0~z zCf&L0&ZBQSo|vltbmqyN_aeUZI3l;j?MJEdjGELUwHie?;g7S=|kVOtsA)clIuQ+jLT{{KJ1JMx9qQ< zsreuI@SVyNdrpRaam$qcwMPy<-2I{V=efR%y!XA_hciDczVPP*dj3;uE@k-+?t1#FeGwrMOSkqM@b31K{By6^ zcfVs}#d#AizUHB*z$@D`KdG7(_qNaaUdT;l+a?}~Jl5mRdybagG9@N#anh25?|2G*+IMdJ`Pa$eHzeo05p&+z zvwcz3#?kB2Za((0@1or6Ebqo;o_YMu1$A$PWk);9u2?*4_tk&<_^f&T_I=n>JNoVv z%Omzx-kw>^GWw_`6_ zvyuMZX%CdYI`^XJKYfr~d|Fzc7s`9R8&(#Sg!J%VQ<(p=(xMklwU9EXlRwz~+_p4~)w5sc^dEM?|2^oTGd_<%5uNGzk+9C`Q@fCJco+C3p`G)I?n0kmbRo~I zF7!OGi}J4QBHw4b;9rNj?o2=LbfN#|F8D0!LT|&m;IpTTa!u<(pINZ0&g6vocWTeC zb&>CqzMa>5aTo1qbr*7;-bFozbRmCf7kYlR3;s`b!RMAP%4KxH-{`^~o;$O1eU9%! zp6y-WGrMT-XLr#~r*=_aPjyi*+q%%hV_lT%r7r4`<}{tz&(JR9NdbO7e(H4&^6kt| zX0d#GYY}(xC&q~f2QoQ(Yb_6QAX(r|O#d*VNAMu7u{_X->n98Wuk=hZ z{iWc;%KJvg@?HizB>LzYPB>lAzajZ7;6RMP^Wgu9kMkVlvb#gyS@) zApUl-$T640TK`@m-z^-NEcje0>ev1d$EOK=tDrC3!Ew|yyA0@)_&5EX6Uw9l;6sMjRL=g`P+V4W-Tw5fVH*IGpk<*6h&7R z7bsigTO$@)ig~K$74_S4i~~;ye6J{Pn$G39Lf|j5e!sUCw}At+Mncypp@-$Aoc>%M zXuE_x)SS)%QT>`r)Jx`aE`K@Wg0)dmu4tuPOJse`;e6zK4)UW+KjZ*$&ESFdo}iB| z;Pfv`J4E{;`nY#E{*0if_X>pDALKxxz@L)(T*c|7KB*ZJyMQW4Q4d5P@c;+n1^%$WTNZHu=E1Hl!fqqJ;c;ni(?oqmKgaRIJkVkU?t6g)-FWs| zoRGizF^)@ra!Axyc^$`}6@1PV_R}Q%^DP1&FXXHia>{nPQ?v`8XrO-q9bFEDtUW&4 z(ch9AAw8rCyN%)G+6lqG`$_1h=|@gDOwivU%2oIt2ZjiF z?t>V_$M-hJXAAw@A?zXTD943aX%18z(Q7Yo!t(_Gd7`|H>p3t*;8%-$<5qBBiNMLt z5}!;lUXuEJO7v?HuXDm2Ay1j`KR#N#!}SQ{qw6#wkMCKIOF4UsdT)A>(@DLJ5cXNV znB!o}u2n+MHNp-r5cozRXUp9jcv9efg#9!M2Py6913_OX=-q<;dxTWp!ucF168OC$ zU!Sm_iv|9zsK*Fe@Wyo#baeei=)o=)JWC-5U1dTK%SFA&HPy{bo>SKuY|t~a!!T4F zUBVCCC-mR+8i%DG9*};RE;cl0L? zq0j0^IH7F6e-(IIHOC7DpAo2k#^(jjM~;Ul3Oz(C_Bm7Fc7YcNK83;_B1FFD3;a-x=`l=Rwc!QunSMZN`juT2d94`DuOD@N0or10uf&20~em94;2GJhl zc5pz-Gfs>jT4>=M*TbUT9~O2}{UxV=QSe`My3o(-Tt6*5S!)5#+OIOs+#%Yjy_OTo z_4B)+0-~=GFDot)`G)l2{OwCS>YvutiGH~lKhG2Sek0_!)51Qkw}qS|g*`;C;e5(j zs;1o|%2g=J)nDLyggy9#J;?TT6zP<2i)dd`pH$C;7Yadi!6#gltMF$IY!W!l4~RZa z_~B@Q{{%B2T-(Wk9D%P9^%WuN3&mmAD*Pq->M|ae^1LhbP<{#5L%z^Mgd9iJb9y=c zj2C*&e1+>r%K4eFpT=7_A2E#3T15L@zKrwv3lFqB2uAWWz0K)e0$(chDPMkW5%>o} z|1Dp0;B0|U5$(E3jMJn%k)j@(#5_^rS&*OUlU_XGs$qZe-bcuvIfLWm2k9CcD)hFP z$5VKqT`%g({woL82>gif^Y)iGa9H3KkdyK)7yYBgv(c6bJv6?{fqIeeYS~}B+>y@@ zNN0L`isRDHPZa(q^F>}SH6q`?S~-2=3JyFi@RdT(nW6*yhrr_m|3cyarJi3B?X+6V zgJJ~zd{Mt?uW{fqfe(;&CFU2Y0>4VoSJ!Yr`pLnvzTV^VOZ+Y&XPOuY=L zoDPGhOXtB5jL+HpbRFl@B=kI5)O+C>9DsV+b(-u)+#J70=zoBa(ZXC;4@0_uX&gQ+Xa53@F&shIj~gVjeWWN<*T^-n*`n_^rMOO0Z|O?gpj9N%=jx!V9j;p%=RL2zvYdJl>Nh zYnz4MsvqUJ)Z1aczgIqddc#n&@8EzS*BnA`gWX4zi|8{547=uPr2YD=S|lOJx4#!31z=PZjor9Ixboc9G~`nneF%7x)orw~z9CzZ3ZRh?4yF+XcXrwa-yL)(>t5L%MVx zEEe)dh;iM`9M))=*99Sdd(K0e- z&MBCiQS8nta%W^{8M*m$^R>Qrfc}hlh zSr#$Knw@_u2(O=)Fq3N@; z=FXzD+@hQu3X5`zi6KJ@=48xVgmvHYaa#Ug(eFGlt`tSlX1lnr?Z!s1!^ zg;d%O6eV-BisqX+&CZ{L8kzy^v?nNX@N&1yVUo)%hY1#PaHL%h69v!C1ay=`JlRnn zD2<|#LUT#XvUErg(nzdb9*MA`afv!W9c7Y9igqO2uAdHac9cpf0P0E-o24>QNvTYb zDwRws&7V61W?1Zo17wz2ltYk~3xR{SR{*CKv_ZOIz6v3HLq;}S+4QVzX25hG1d55W zu%IvqP&{jTL6I8{3@&!&&2x|j2bNQY_Q*8RQA*atsIsUbWOqry6L^_}kC25gYnHi2^ ze&d)sBc0rL+I&}0QAQd$ZC4qwVk$!zY_}a6G;;)$TSno0FrKSrq|MJ5i*5*9OS0Wy zmoc&=fA)+?S+h%sc?x=kjIlYTxJ{nx&KOlxFee2Xl_?J1&5W9zmF>*QEzI>_KbYQc;WXxL22G&Lv3odw^SrICL@MS-)cEIWhckCGJ>5r7h==eT*n1wryS zo{HjTF)PZM)lNxbB6)5>hx}L{nKs{1G&3VDtEf0O6iy;K`E+09SWL{3u^elJ&oIfC;Zf`~jdYx1F&o0dVgXePd%iwyu&brf-88CyQ zqMX_24yngSUopG5L&jO?|K{I{#6K*Xr26CHm9TC%W6q2#sRK6`56|W2qFv3(;zI)% z7F96Z2YG^w+^qbL>OkG+Fl#e2kwSE;K$+O34kf`Ks8NyxHOak+J2#<2VHn!MoO0bc zvuBf0&dZvek)Aa#XF?up2Lc(NQ|vA%k|0$HY_K@PRJIB83p?5y+9CW*$Et!iLZif! zTDm?~w(q%c2BzqY{M_8Q4nTYRhv7Pkg}b0OJT5!C1hzrmjM_NKz#Fl`Z)gX8$RJ(? zt}p{kJ-6l*6==nI81~RGs$?EUsKFRTOj$4rRNE;Sm8JbD>N!p!5zX1ejd>NyiuIAf zj9H8_4tj3#9NdLT-)-WOJqIm~d3Y^YUG2%Nw%Vf^va(E2dtEtF97*QNGRLKJHe)Ll_hRP9DD4zqWhP+L1oWsTM}BIuS{@8>3QFAV)o6Nx)uSmMtVlD~ zUX!I+^9sphLC&I_IXP%f*##wY(IBUZK`14X2SW=penuYO@d&6BZlaW1^|HsKPv(6r!lZ9TatW&P6 z>Szw5JlEb5#B{VEmu7|S;!s;?kG1=GDvmTHZbfD!s2ujFD6J5k7GUNS%;Q`;CYjXG z&XZ}SBg44``B*0r{NzKT^ub(M{dNQ;DSQ~Sg!Yc2z2=!Uw?~7PY=YXY*fDNoT2iWN zwjEJsNq{m&-Y~(Hkv`dxrezgOFU+39%`ZEz1Z#uArq$tD-e+~lLk>SW(9zsgju!Lh z=47N6%q_@ZgGGv^Gbdt-=hKYml(_83(oN5Fz!=vKNIK`lN@#wp9bnI}XmS2rtq5J{ zjP|nfM>r2wR5Kt8YR1}&8Ppd~<|Q=o;6O(n9P5e)leC=!i*|UPA?;6(gdbuqVLY2< z27Q)_v%;s%r|Bvibz@MMKe|e1VyD^-< z;Al^4PvPn9^muh-;zOySg0o0KKq$Sbpb+1t_<#TYp9Y`-`tD4qHi5nC=C=T2 zcWNXqKU7ip^k7C1#Gl~wWeVOT_Tem1aJiqeM#1I#&7}%1-#;!_aq)g|rGm?S#hVmd zp0n7g;PSm>lY-0hGJXY@`;c1{T&u9 zTyHxSJnnIhwAKBah!t7eZqDHm*-z}1(*90 z(-d6phsjj%rk8nn3l&`MizriYxu2m*!6U@`{b~i5`-+#S_=`N>8U>g8PnIjV+#kD1 z!5jb1`7|oH+}G__@a3Z3TNPaHC#-q4V?E0FP6dDHl3pz176q64FbkjS$mb$-U&vFX;MJdSK1&qbC-~GT zxL@qYTdLsYLjIKs?iYOIJ~AnPPpKb;K4KY{r&Ynv8pX?H75l*@AE)3Gq2Mh-o@fQ% zFoE-lQ}E4#PlAFs3O>4mOZq7azD@ASRPg13PoaWK`ke~iErH9~qTq6Wa^c?xGet=~ zoF(Y}3NFtVv?_R^*dHbLw@N-idlUO!C0^(k_NL%E9Yn%auHb`&JXH#wd5H5_qTq#s zPmO|0yIrc_5qmhFl?uK@@bM|QwA)Pzo+8a7C%O zppRAXDFTmE@HoN8uHceBO~He9sNfNTPo9EH`Z5KV?WkPATZDe96HMn-siI@M%$SNpBbXnq__2h5hIX zF7=kC;8LC`3NHC)D!9~Jo`NS!J6G^Y0xwhW*#a+D@Vf+FrQi<;e5HafaB#bARPZ=) z4khiij`sYxpx>n6a$oUI1-H`%U0m{$Jp z$@UeY;L<*$6ud_8iB)h(pP=BiFDtM-lf2D#ug&yR&G%3HdTfahY7w2eN6fsQey4(Gj2HH%;PPB~;aeT; zZJwa_E4Vyo*Q($(PjmZ`=YXX?gZ3uQ2TMGzM%bHzSBreh6+R0%-ze&O6`RknuF3(L*5$B(zelDKK?Xyt9 z<@X0#6nwa#&lBewB_DY%zD&X8cLQ1#JWcS4SlO{$@?3eff@ceQ>#C0Q@;g6K3NFv- z$a8p7PFast3cc?+-Y%9XxTIgI;L;A4D|n6I<5O@+->BfSUF=lwa>2*1;F7*o!KGbk z;(V|yZ>HcAq2Q8Ues@aJ2mOXZ-}tid8w%b-)JwU72mOYEM@u~`xEvSNDEL6Zf2o4o z1)r4)UMA?96kOJ$U%~C-{8X!gOM0vLj)K&Wtj7oij~0BQ6yE z{S*Zc)}w+q3H=l*xTN2YS?`+o{+86U ztaqz|w+KE_3NGtie#cAlk@cu6^gf~IDGDy>^AudxW1)iA2tMTsF6pZkT-M_f1uqwT zmMXZUU#Z~1dQ|XC!KYEdCB6I(gw&6$_t-TZ{c7}5UhfGCF6-T{;IiIz1uqx%HATT? zy=N-8toJ+xuMvF86kOK(N(DbA{6M3E%kML!t?gLeK4P7JlY-0dR_#>qYWg4^F8jKU ze55{g1&nF@Z9kS9;U%ij`ySivQqas|Is@TpSph-IA55(SrhY7~5^ z;ImZ0n_lO9Rw}sU<5TbvQqKyWCcYQ3Q^6&lCIxp2K7Ivne3Q%5s^F53=IdBrQv@HY zg13kd(nKk^>@&V6MltB{-q}Td=sCQCj3ql?la*rCcMdnrVYtOXnd6fx|FyTW? zc&rIO%Orn-34hc?KgEO>n(#amew7I?H{oxZ@TDevxCvir!o?>uSgOy2N15c@X~IXC z_%xaDBop3Z!ml;qOU3(iVl7@#u+)_%Jj|5uQt>{Npn!?bN)w)D!ehmI6QZv&;Rz;O zylP^pRboAv=*6cZ7{0`WZ!qy$D%SCczSM-TG~wTv@TFoMhUnil;VVset_iOa^Kqir zP52TM-h&dw75g5yLxNUF5MhD|-)+J-iTN_o%Wqsz@=g;z#YA7Vww=Ft)xlDuYB)~5 zO74-QglH4acTh5NE!Kp~{gRXtXTtGGhv1c9!sQs06741&8{LAJZo+#7QTQ1Xj!%CC zuPG)RpL7UbnI;??>w;IF3GWj`@&D49aGMD)GvW9IO7JQ-;rR4Q@TxN5`1C~Zsy5+$ zgQ%u0G2u}ryvBr|ZNitDaQV$5N?vZl|74ou+I%C{~Z zthHVE4*uE(*l|bkJmM5+YQuHmD-LveCRf#ocI2E}P87pP(JUKA(S6sTtLZWN~>U7(!Be;I-}4dnub zEPj~cEWU-}uHLfpQkVmEz=T0);GIL~(L4flL;^nd0PH0%nTnyB@n^lBPmXVsN!W3OJ(+NZSJw0b=F>BaoP z!_(TDsC|L{22MZTL|@z5T{r6V+Wpt*mPXy!sBitfggxK)9hUJnH=f@^&zFxl8_#Ja z7wZ)x8jyx8jlJ%0-816uO9pHH5h#H_4}Yd@3~jl7ux2?@pG((eL3t}iq+N)|+yfw7 zKT)bPCqn*f0E1Us$DTwNx$yU!euyTR{QlcB2F;;4jmcxWaC2lPqWNfkxD5q>JzQo3&UlMEG zXX&0l>)v6N1R6=<{$dCOX(|u8Q&K!BF;SigG1e3hST@Iy9*xF|I%|q$lPAHGgbMC$ zY^?BEDh^tV;cpsAR(DjzFPG2Tm16jkD}2`GFU|T}KV|B)`e6M-wie0~Ashb1`*h^g z5-hLoxlXTab6W%TzqGa4254%1q$if5q`wyRoQg-B5FJs^b;fbMc3(IDGBQA;`_%gO z{2db=6CB1-)cOvgN2`A&YRXml{hc|EiUXFh-r0W-X^xiq);(wH6&pf~S`;rO@u1U) zxsS?s4NC1P4tIKTw8WO8FQGfjaYk1h&T_sIIeXHr$lTakQ74|PGSaOj8_E8sPIKJo zmmHY;XK(j}SL@!syRNfn z@xHZWG%3ap74;VXeB|}#Y1X2csnb%7ee0$n#c^ZcZLTlfGf}hb^n~Bt%=JSQ)VTc* z^E{fLQ0zN<8>%3Cvu^p^Gs#-HtzO-Hu%k*C;1DvSJDm>OijbIvzOu0}GqOb63V-6^qDISc zgPR~s5)a}r|I0sju*D#cyFO?)MaNB!3>b)ABW`2D9c!p>cZ6+7++w?XK5i|WjWOYH z4_=s#*8F_Cz8sSslc*$4Z%o*UFPz>X*H28%{vL%&C(rMwIBBshLUn4Ry~8!fiJfSw zqrJnl)aO1_XLz2(_>~Q&GU#F&6v6gJn}$S!?%FIm0%f<)O(n zmdz}2kFdIVx#Tu=~V1(MmiPy5mxL+sJ%}1 zh9t8h8#^3>Hc%BdQ5DMKcC#%a9ifnR-8h+={k!ADH_aEe=SS_aV}ZLF{qHke);n)N zDQ}GFws2QjHtw7;mfG(kJSE|^P1dk_rhu?|@(C?PAE4+Z%+2VYJBS&TefZxPq@X=9X}%+gK1xg zp4eFOt<#uA{hf4>xz#D?HCs{)cT8)t@jG>9P22Cys-p`Gk4=0R6#mL>F`tqk`HWLYVFNw;f}>5Y?d5$blkr!rgE`Ub7(c|3%tXlpl7|JKEnSL>OCd#yOJNwS~HDT{-^#G6?qa}4mDQK z=x~hC&gFj8*p04*gwwmbWhG7vFAb2zQGXo4vkP2$gnDK8T^_Hmc1%h(jyonM z8z&tTCZ>BvS;2B#{K23+_*2ns>a|TF6&ozNr9RoR-cxKvXXd}0H{fK?a13Iu z&};W}^WT0HcAaE(VBlhPfL)@$^aIv=qRBX>Id0;^v-bAYX@B|>q~!hS0Q9F$J^Khc zX_Tx)cA->0>OxQN(1jM_v0#6h&3QDh=KApti;_G5wda58c&|HjE5~~@vg6~u@4@b$ z8Sh~*6WH_>u zkVXtQ3a++j?A4(E4AcbaXj%syrGORhzcEJf_Dur0*t4)ytA85_SMh6X$)^}B z4**??@hyFgozwfDM{@HEXzyZtas-7&ods@!4>IW&V_Wp&QM$*LYn$wg_Z_xP38`i6 zx~}vHI$MBb62bBMKjW{KVjf5SDnaaS!6JV<TD-UwwtaYD!{r$q&sBF~4Eq*si#UNAbuiJ98>SKvX^jo%5S9=Bw$Bg#gf9{VTuc>u%uK{@wEfDUNJ7jVcBGCb=3M!kFRxD8l3}c<7=Ik&7-{c$1Stne#~k3 zYHQDmZ**E}2X3NZ6H?9?yz$=A#unu7jIXn78d!(GY1x8OL@~}JZwqp_o;fORsl)I& z;y01#N1dKKV;ln;ou0Wv0J$u+PVd6AEsu;kNdnYD04Ld-!?M*ma5G6!JIcE-YUh&j ze5bKVNU?b!1bA)G+Rtw^NE#m~u32`%=@HUw;nHkzTI!shQL#*#(cTv)2sbWQ*VFeX7^Pw=6m7H1<2=_fYZoI4xg7#R;By!$qF&^k0-T|3!zf-W7kqG4NCT zby<$Oyzg8&(E3g?_3M;z{08Lh8n_oX7@IlKFj%I@(&1g$WBP^X9Ve^>9olbB!|#l5 z8rbOYEB#Z%Jb~pxZz+Z?2fxAtMxcoDyB9as#gh0Md zOA8Vs(j%SSI%Z7*SPmoOix%vAcIPRXK?@}M0g>Nm?`xNB`gQvc;MH^AN8b)43;4|} zgtI$cPycS?_QRwU@~-~ zkFG_b?7ru6Q2n$%f9N+T;DRr@70jf%k+mXfp`%V9#i09A279SGpc^WGFzf*Cr{^Xl6&|~+^G4CIzB0G&e@Cjrt-0KmZ*p_OrmJ|%tcLC#=D3q+I&R5Qx^!ug@+R>7O@hiJrLkIVZ) z&&0-0zd&}ib^W+f2JL-(*FI>ABwSAtu19VyV0~5V?avKB6M;O)i~EP(+&{$o(Hw*k zL_k>5NY13!*1Nn+3kN6>UEZF0j@GH_LTb+XF5a zqMq~6Kf)hy7PFq;%B+qL* zu?_D2v~hPXEpS>I!=T-5@W3vkk!9IPS;DS-F4lXT)wFNO?^x5Q_4PRM8Hw;c^*do3 z<3Dp+K6ZKU?-7|~c^;2$>~*5iyZH2HPq&VBS~iBkW_=EH8R$-GYi%b`J3l$YHVF$q zfQ--s!Fg+U-S zf&(jawZ6W_IIE=*tBH=A4D`peI8sg{CCB7s;{;7|KBJK(8@=$kQ<^t2BC*k!oHj3{ zV)O({MbmZf+d)65J~{Cl+udt$o8p~gPoYWdm&t>^Nw(}xF%Id2cKe_Bfkse2BIaL) z$y{>9@7K*MN;QtA7{9Xd6IQklG}H(_W*!{{^=8-vRU z6zC13r-(3<)wNE+^+c^oSBB-xV<8o0Zx$uxV^J-1EK z8|XzFo5A+=-|{`E8j^%iNtu*FQ%klEw)#56bnh&C{P96`$lHGfa^~6kt;F8gy*dFT zftfTvX&(=&>wS9mXse!m9IGIsbWiAth{2jCq}mv5mG;yzebg!GVq^|-G5@2*f6ra0 z=FzD3q-g)E-(jg^n_h8SG)$wr?U6botv?pLB|Ydsn+Dp+Fpq}7?I1VLk7yBRT{H^f zA5R7Joawnf%D@t!)zD#DWAKd5@@W{!{$mbsW>>JlV!lgL3iehaiZcsk%>GQTVvG&` z$;cFD%dHhGXF()-vBAuiUUSeJ4nD8O;sS|8Gd#BNAL0Ki9){{J=tHkplFGOQ!Tc+J zw+I!vL!f)CkAyyW8c~i$3kaRZ9vY2C5PE@)p$WKcT_YqZ2dv^SOaOWoOIn&3XA(y$12^QU{n4v-;y~c zF&;@)dTUgUXNb>M%G5i;kbI^F8TAAsK}Q~c-4Z;IZX6-U@Bh;tyvEq28?g;`K8J3w z)4MjfJA0G}qbami(zZF>(|3GtGJ!PctnUDR3!U|Sir+$KeK+@F1a{nB%Teg8?-fit zY0z2UMvg*feLv!~nYiWpP0PdWGL9DF_ACBa8E#)@XmvRkqnW}#?Nqrl?C8>3OOH!Bc$4Kh?I7(9Y<0wfzgWu)_T=1jl z?}9xl9D!{ib(`>Z5wzrZ7GG!dWJLJi`v!GLO5a_A?&^*x&Fw_}olZsdj_7qE>>w5o z%Ifp$tjh0*A})Ul*7q};K;xg?&guYIMQiSB!D=JP>K$oZv7hLO_x4E*RZS~0{T z`#Lfp|LWby(uhqlGOfBNJp!hKANqcb83Bm(Yvw^oo{4tbiXYj6vJOo_NkP38Ta80) zXX>7*gp%H9m7Urb;%Hy!B*1qvehq=iUkB~|l>Usp&%cZ5@=T@{{|yk()Zc^}RHfb# z85cl#w9g`_JRb(K@K0|op2DwaoQd$vRk5iL()8v3oy(zc3i08m9k^OUi!c8YW?9D z@(-%V*wY_T(P}9fimKYb;DHkVO=g-NH))kIY>bs9}2FpvzsS4%P4{J!6@ z#Q8|a{`222|K0!V@_+T;Ep$yOaRWVDV1|NXl}A=kSn zFc7u;Rf?w!b=u~R%&ktw3mjv&qpe>m+zc?P=YLQ=H+zM@0V5~1JyfgV=P&MAt%~uA z2NL>eJ+Zll?1sM&?W{b{h5lcZ=Yuc*8|696RGwhtM9ZWu5AQP2G;Is-Mr%Yh%?cT; zHD48M|FWIxXs4s9Nc#AVNH_)TK(V*X- z@+*d(xM_ZY*B8y-gtO_qJX29k|89Bu{pZSaJ8j$OP#*3%I~0aB8{5LAs3BMUL0A0o z=D*1KK*#z)2mETc!Fb;o5H;l)a<{QxRu#1`o5m|_e>m!F`yMQkB!_*5x|@s&cstn2 zF51Z}FpD*< z9?-#<^g#PJ86)X$^bQV3=m-9Wl^?Gxsr-+1QT|}*(OCZ#dw5d&7wy5(i9MY4*?+%131=@YVF25k zFmTw}$w;ex!Y}u~Q0LXPz4frb-je<&d!sRf+1@aYv1u?knBDfh%-H@yo!bXNV_Wtq zSMy)HFt&%t*tp;Or|hkRx$)<8>fgxTx?|CU^t-sDy_x3!P^)oFX!BS9cU+g3V^1Ik zyVw=74S*3?P2)c{``^BY6wBuRgBpYD8{QIHTHz^j^JCyKJSxWRY`vlpJp9k0@E8!I zDyugUPa`R6YJD}vvlyGQ@vML+gQ6j@a2v6(BkRyW+aMaBUV~#~t7%`W9G?cFchE?i z?bqb5NXbn2dd8KMS%phOS?VzuUx)uYSo22%Y)Fcrd*qH*wzDBA5)8G5BsTSHNMa`& zIu?d6paj=1uyKg5n|LNi{dsa^@c=BkSZQ;m1sjtr28zdqlR^E^vWT~Dk9WgRge&JF zi1)2x!ff9P2`hbAZm})I$Q#M<#JaH$h4+8Ho$T6H`2gvOJhWc9&9=ycm}g9XY;U<9 zYl)sQQO3qWAM1&SZ4W%d=ujfhuo&Gt-0D9L?J=vfBt_~Kb2LjyFIrc_Jf|%!4s{S1 z1=q#=6Rk>mZo_NwI@<%~jLonZ|9kRrp%^16vUw%9FFqgGNWv3ew~flnM%0*`u=P)w z4FdxQnJG{`-bU-QNfE|I|0c$s6&JfQ$3z93Od84_74w;YX?uDDRg{q)5tsoIp7-_0 zyV;QawhyJ`3b}0|LS}s?(n}d9)IW;lrFp z@!qRH5Bj&qdskz)jGFsTj9>3>f!qDR9Pho~I_TdY?~TH!nhN}19Pd@oevCgD?*)6` ze{sC?>WP0*ADxYNuEMDN|6U(|INmA7_Lold@t+^>{JZNl+o16Om4Dod5$}K1KSmt< zSNvn$vHuJIcmTs#R>=RTf4u6zKkXmK9RK(IV?SP~|Ac>>-Q0zL{KN71Jk-^HX8tz> z!({RV|M~gfe%}7On*aTA`H!Of|M&Be%dv%-3jg1jj}!-Z`Tu{Pk9c~r*GoRy6CKM2 z#@AsIV#UCi#;E?@8!@z{)&6d{$*pF?eHz1G`PXn99`~0^pwV8 zu6ou>G|>y(wSm37#|%7J|F#vSb`TtUkrCV^3C!sZr0?MA*PfE@DIJdF6+C%>Om64T z_fP*8-^Ne4`1{v0V@<|OlZg%*n8I*V;tw{TF6QUh`|C)=o2hwMCu4MC?ANo0SNmsz zFYR`rx${PU{(7*exWrPj9q(ab+`I7%S_^xubTj6EI13;a+Ut3H@vduvuKa1A;6d;E zEp-1q3>Eh{tE2gM(!J+4_LeZz|3n?dXfsShTN*5dWieIvl-ohu*2I=COy!&8pz{i} zWmo4d**jv&{4mXvXZ6RCpp`z9)wXauRhIY46eMA{h0%a^n}v*$Y0{c(thX(E9t5eC z-`f_xj2j1D=tUssWUQV+gdcXmd(5j$L6}yY7nLCiIw` zU5EWv##TBep?AkIOuWpvb69S*(-Zz!GIpLtr(|Q>d!1#J5q=L&Pgs6R+;P`;4ge0E z0;{7f`r`dlJyIq9O7p&COxsZv(05=g90OjsHE%Q96RT#ddtlXvwwd_v$1oGc^}m3^ zR{BcNA~4Th8%^5qjO03w9g&oklIxxb)BffFOxt^9Tv-^B6a1gl!Y$#AE9@AFgATI9 zyKm)*Zy}K{MtE+G_B)Y}I4eM}&rItblpku&l%KJItwpS*t?TfQkmB>U@v$&2vd6Ww z^wN%2?y^-{@i>>899X;D?O3ic63t$ghvUQt_|VR9W8^RuriCA4B=pmf3+*>DM&bx( z2N>s&)`lXbYNTEFj28u9*-}ajOK}8KgwnYZu1Dp3t{WqDY>rA>O$G8t`Jl;))(H1V zXt}wz&PlhvS|NMj8Wn94gfUy zJM0fQCYQ|MM5+AbOxb!H!f1;7Um_=ERFI?4jfYzaT1=34Of2He9K2V)Spp65MKU;H zqCA9ystrk*AlKHQZM6BvK{Z%6TetxTTL^`1-+{;c8zC+{1FbpQ7Oq2T{Bdd|yT7Ia zP}8BESq>t?S|%2${C{UF1Qy%E`x&bwUH9Hr7?0jHDbv4dCp~prwC=g`MN)@1J+Gl+ zC+O(%@7f(qZQ-f2{SClu@1+m5tths`2{sYk^P34P9*Q`X+h0M=i#tfxeEdZOh?kh{ z`@=RS*|larYQhtsns8IIPw*dy=*@6N*iQg`v*+cW0vPM=w)EJw^aTojyU=IUm0aB5 z0-$LdT_IvYm65?^jM(T3m77X(tA|_MDHTl#6|GkHgyVJ5D^J5S?r$sh48Zf$R^Y*^ zCWbVBAlKuN1dE7q z`oq!T!>w-X@Gy7e@LnaM*iYrQ*;b71Ble%+P5)06MP~3pc%O@|0q4bSD-N^Q)5eE* z0}2&kQxbJAao9^+`8{?JH1I?FCFeKaAlJ=%qgyjRLwTHudvR*_O`Jn@59h~gae8pK zWiw9bf1W^7h448&n}>YZ1!)`<=v z&WR&PDLAHxLsKp^-bKgoh-3Q!JWc1`=|cnLU$F+ZhfWS8I0x;=^TT2JG3eTcqxBA} zJZ^JMh)JkyLqe>raxAm%tp@$q){_qGWIeINftMj8jUjKjoxDe*7afqj4ITYHbZR^r;qsQY5%ev+^syh` zU@2K`;v#vJe1Jz|EfbI_d7KIq%K{`WaY9Utt@6?~*4TAwDW(_Wc;AWgS#VypV!ghy zH>B>6jP}I3CEl(pS_e=;EBk?$39j_fc&HmdCmj-_(hfl*uq~Vqs2axu$c%QUdWYTX zfD+o$+iVeV_7IgUjIN^TA)#les((XE2lB6%3(~l-Z6%?ibHJ^;~aFt3*Xgn7#kC}6n$dZjGYVgh-|

o%7g4D7E+t#>d{fI;gD-m zN4X|JuCc7W3c0TBDA(9<|KC@UT$3PIk9N5@tJ~it142u~w>>;nq%6D<8d4FkxG#?P zVSmiE27THArF;xtBVh3ie=Kp6)6>JaHraEP(+GLA=qnw~z>4~eF}|VRFT&pwy&cTN zNtXC2luPCt;q*K~)#jpVpe_^DfSPl~`{ChVSHL+2liyU61O_N!{Ums#kn*Gc}HW|y)GOA zaCx4JA-Tx~;$WmR@oU@NGhwWdCkCx3p+f_*Yc9*S>&5p1T*l;Z{}8;kG8=?6tmc=v zKX!J9<&qR5Jt0d1X!x|14(%}hcwh=5(qyEma5Etb35-Fr!Ty)YwiTOGyz7Fk#W67z zM|v=wVTZb7PiZTW^lgDia+$Kd;9y?_Dx;~&88d+1FUK_B(%xT^XgCQjI4IR_mU zKnc8QZC?F%Pvm2s@CUq+_DtW7;Cfv*j{W7!5Zu}^A18R7o0F2#Aw;kk#zp)q)O zvV1CJeOyu5XK!~QXMj3k>PNxFiGz2r&*qgPjssbqm<55K zp~&|3o$9e!4r9O5gMq1p!{1+xlfoce6nG!PBMv?v6Q97D6sP?WJJ}~VjAQNJ=D?;~ zdhz7P;5dPOrvuv#KJ@!=q#s*uxw|LN8|n#(aTy03gFafg*=2L>Wr@zlYFUH9H zOgQ}QF>fXMOZL*Yq;8~PBKx+-3_8`0ks0;Aapbw#_`agGoBNWA*6t-ss5=Tlmj6gL zb{hLhjKUKbn7Elj`8N=nmsOuibt~Tev9%OtmmSKHfpP?{0E2dYV{Q>XJj}L`dbi=d z+|ihegkz6&aDJkDuF}1C!nOVqu)I&>DV*%4NycXP4DSCtJ@o7?@Fgj9Ai^Gz>W!>Q z$quhd&F+?BY^rFoq*{C_VZO265NpbyP5Rc>=j9tWbZ<9P?x`PQ2pB&I2U(aq0Jp3jZ8b)a1V;?lAx2^b|R*_lH z6Rmq`DDc}`)C}QzXUq8qh8fhM&Kxn%Prd8-CqEJo!X{_~A z(T8kQVL48Z0c0Q8`gA$EV00SnD`#v-!FZ*w}%DT?K(1F`;@Z-5g`|LfiTX$c`p_pozaS&MlNEt68GiuV9C5Ndu!j*rrHZ)qXlLKLkVKg`fQAs5C{z0w!~i)CPc=C$8@?Rn$UC(hc__zhQ#mqaIcBqRR6x^c5qXqDrpgWFK*ZN zDG6N{w4xg!F=(}qz6!1t>&v8zW9m_*$>uhPNuV(L@$q*Qt<9jbh!TD?F0rlHjzt9ezST19U=h?4FqNd47+a)(?+?A}J{XUI z5B+#gdpsiyhs94jgG)YlHWgrmjbdac5WMtds`eZ4;ZF=`?Bqyv8rr0xFjIv8rE$%l zF|Kjlx#l^Ms!D7CwHRAW{G;KAl zM!L^88g);991+I?1Zh$I3>@T_3w2odtMsj=73z{LCQPmiI;uiqXjMFfXM=HzjA3z@ z=ZjNIm|=%|?XAPRl}0-@I%7`jww4(3zumZVI71D8+k*(D``!`s~Q%d`e8uMmBF^ zJR+KXEDUd6$wF)Ma@z`*gXHYf{C7u#GbTi{)5II=;1wrrrGvq37U#B^iPANJ2CgYocrTTRm-+^C?a(;k37`2`;;>GEV}1 z-U>@_Ic$}a0odMi4R!n(@|?Y`Vo$Gt6ObuymT~j_rabd~eyEn=fm@(XDvMPswP=BC z87qGuhxsPTnDaHnM$4FX2V#jb=9`AtB{FvYB*e~@vGQvXv&oo!0Adyy(|+ux1&&a0 zDEEjr5!)+cRZ}3#=ZLMQzAivt+x57HbAjocAXk1glI{-1pzMG<7(*)w}iKwHHz-7TSv;+2?Yn~sxS>Oz$nRJWk6iF2l_yr=GG#teD0OwER zquv4fjxmpgA+}M*%1OSJGDZs(fmaa2`W1imzTm(T$gEe~m5JtXdrW4@01SdMKN$oF zd+rykr&R8y<@gePbtZeOic!+VFTfu{$UN#pftE!#*k|Jjt-+p0fqx_I9KZ{@Z=Pp^ z-^zPXQ0mb$$)gwg--8##n7ESukEHmv_=73l89?KoYiq;$(;etAHk6#%oFV+8Gv*E~ zG9>!%9Lt^hE9iqTv~V+iwiS*3Ram{^vjf}05tNa!kv{HGguL0d2b|w9ZF?Zoza!Cq z7e*MeL^K6LDG=rLV0w2<10m0p*|dmS`TsHZ?(tDoSL1hvBrsU;#0na1s!_)_DN%`r znnDkP^nRim$nEApdbV$ksOZ$*xG9CMQdAIpW2Gr;$0IEB2+CGFDNQ_ zKVuNkR&FYJziaJtW+nljKF|C7^W*c;%-Pqq*Is+=wbxpEZ3)Prr5JQmw78lo7}7s` z0dNEriJ|SYjXW}k&1CO|vWpDPxk&zuc=<=NnII}s>I6+1wVMK0gDB#?WKBqT<> z)nJ-FThjm1%O1#nv{8K?s+`5Hjtsem6Wp+roQ!rxE(W8pRmd4`6Ow@3}qe>2R8 zbJu3R#1hgr$(tEG!mgj1WwrK@;m(l33ud(VA&B&Z=cPcGTLF|pja#)9z)`Wo{i-TO zo3AYW2%n9rBbwqm6GwJKw>HQQqw8j<(Dp((%K`kgz@pB(^eXi1%ikz!fIi3;i_$tKzP{Mj8Ik% zsv*xUgS7(`-f{~U(m2NvgQIEJphj%_gSJH#@D@rfwk7|NhCq{h*>41`O(BkbTiriy zG0BLfYeX{r<4&E?))ICG)eOW+w z9wJMyT<$hY<{O%+yrgss8inL@njql3^lPnmj;Z(7MAPKiQcGSzNXt)z3+Oom6;SRw zviur*oSaAO{u%lxr@xedbF7*Ie^^O0;?56)rTfpwx#i>@$hucqqtD2_S2`8HHuK%v zpUvK@8kdy(=FBcZxczpEy06^{e0|O%&g}EaKg#4UI8;6yYt-%qTK|$m<#T)-^|HyA z@gLMa3~tm4lYji7@{!0#{oLgDfYpQQ!}UhZGWlB%&X@g-6GO^>?)6_XG3rzHzwn>? zCUB+w=Za-+|EKpL`Yo)T(ZPC8y9uhZffVv`@9y4)Lj(DHWL1n~p>Ykm`#GUU<9}-+ zisZUKx&y{GzP4>`Gl8QYZwF)v?2+qUKsviL+C})l^n-i|<(!+C+u%NZ55*F5r@1T4 zk2!ALo$N4w>vcZqb)S&%5(GsO)uQ`V=>tC~7(~-C_LTFDwi-3SHSndlKKT%V75>r? zOw$|o=5EZZxz1`}a`fRQWV*k*f6=SI`Y-8k zSfBpBX8N1#_4hfgWcCM|37Ib@pR$`UnI&>&56ihJlYg8e`SxBc$ArdSwM>HXJN*;m zzDUgI$*ycqjKc`BeAtk7;`9e#4a9Sm*BQjbA~S_Q&1AEGh+-epPA6g~q|%jhlhBvE z#83(85xgCP&g&RSe3u%vE)l!ky-#LX)Tb$Tm989_=PY%p@lKO{=F1iQfyB?m#6d(B zbH)OlJ@}jK;Dl;UY&Oxb3qs*d??&wR^z=Azwe9LzQm4;@n>7YCyGW=#_R0-z{Ov$f zzdh@Pe3d^M|DD}>5cGIOUE-S19M2Dv+pHpL$!3QL<$jM=qE2Na~?zin$ljg4kx&j)|IY-Hd;TZ^I2@ z_U&cP{614J1yknCbbHOq!=7Y_;BY#z1e#6}Pgdwx8d9wwO)X{mTpS3NRuIVbIB_6o zM&(hkWCqa)F${~5!wRz_Rua0s$7(A>IH+N}Eh*h1jy%eAFyM{BLVHxjYBYHSoc|(H zycgftMA;&%wU+Xa70Srh);UwMx{uZUr?C^J;8bF9&52w0?+xs)NH(3&w)VRBs}ngD zq+{*Rt`WwOQJ{Hi*nTD4*^`Ta#B(B*A$P<98T&aPX%<#Y9HXrGgY*=`4?`Ee0 zoD&3P;fl$j5^M4KV3pbu9R6%^yuiEnOtD}AdzAMj$bpgrWj9G4??-$M3)Z_aeLup_ zy2WJ8<~1Dgh)sF%7`jTgQ(ShFoW&|4p-SsUkpO7wEyChvpCgEpo+#1%x+g#3&k@)i zwrA=40q&C9WLRmp5JMjq1l4F2*1HACy)>DY7bJehKaJ7nQ$w`6uc*%%@rwv6v_0Q_ z7}cBl#jR=ndiOPkFFERWX7qUP;YJ|taNk8$Cr6`KL{(?MX?KNtUSYA~e5TF>*nN0b zMI=zq`3w%=Zuz+`XdxI`)V&&PzP~T7mQB#5!diAu)K0eAYc5V6%}-yR6fUW;^we$B zEVJ7>1)eVV{+|gpn+cl4k`v16nN&3D2UlP9eF;woRV<~PZ{v|CdZ2eL8Z<>k#Dv>b zhV1G>ccw1gR6@wTw0A<0``z9NC2m#kgyHUKy%WmZ<1!QC*ALIe1NjlrDOsbdhj&#+ zMBeVIj`DwTLUy;}&nl*+jQ51XldxKa^4yywQP%Smv;f9$_Kz3| zp#!q>-K!xtRi2(iHn#JSd@OpDHc@F>H;QW~sxoWwA4vhET7eC&R2j~mSW=g`ya88~ zqFCaG(`riPB8z+TZ-l~|i%i@BXl*VDvBV8?l&QN@pr)`hr3eMhAQ^->Cw+^SQ|E^o znnrKcbVFTZ7coj=xZ{iEfq6bspF9e~+`Dpw7szf@GqSmI=6N-6ul8ZI5@Ua;4XlzK zYUUtb?!bNmK}!{nplgMx4+J6J7A4f&m9t!1o1m@LIys>kf30z*l%)aS^xu3^_e_u8 zz66dk4-T|k06Qh?Kf|%`r(X_7nSn#x7;8q}fJ^4Q&>(BkR_2O1s2AlKf6o`n6XS0m z7agRQ)laC@lHed>2n*5Wfm@JT{QC|Z(*}j{g$l}9HI`ivO0J>tE0#%m_7qKxW>3jV zmP3^??Xtv@ITWGsX{PZLyi?AFw5y&}Wc^*T;DPy2alW8cWTt!un!JF9WFC>1wxyN+ zM&-Y7yAU^Q0jm~fA33#G@ij+&uyZbMkz9T^IAbGhcq65Ua%T)w-L!yC|0JD?-U{HS zi9j%2#Dh7t&V3=Rx$qfj-scx%^Kon0EpY7ua5;yfW(gyD{?k)4xDB7_l4!o2w&y*r zi2UC919d1rTqY};pjzqk?ihGexjRJK0>r2sVrg(rzT5ePBz3v3Qb+U)VYYu^QRRk3 z;-Bvx*eyK`v{%nU9?s1(ec2vf1Jv`tyDs1TDXpR0&sQ{7aWv!%IZ2MLzVnsYr^FtH zmTB$(F!y78#G zA>SPj$clft6*50x$KrmQ#I_C=bpw5H3|ZZLa_|no)p{cN zIy_^2bQt5=Gy{Sfm=i3Z&mbCgh}*W9Fg-snd>1CWQAQxelst?H)N8x@ZbiR`VCLZ0 zp9-|#T=9Zl?man&B?iCIsOb5tevMkqAG^BB&IzgB93-_Zg=DuWxhs7D+==Lebl`qd zfs3`NpJ-E~7Se|5mhCZ|ut%IPO{x;^ENRNz2+{q@2L>o687PVj6le0Mw1e#fPL`#X z3HQJf>Ru=dGfi)O=Hu~y8?dUx@By;RyT-^wXE{|RY^6oXt7%Q=(U+V;%MhHjBr`Fx zp~Q+yhdLADdn@zsaJtQB5W<}KgDUpTcv9+A1vr3}Jt-a7a}d?a-Nyk@FkB_LsfybD zob!U|Ik_O%eXGYeh44iH7CM6Tv$c=fP*qz8Q|gj3g^Ba9tpxUZmok zrb~1Rl=5Vl?h_~@&A_X;x#>g)K{R?*rYh}(2bgwrkbA_JL25ea{I7HZl0mYG58QuU@`JJt}{MUeLPBqMDdsqLw4(2(?zZv#5_A_wLa~AsmJ9Mrg&s zmzieF*Qjr6GicaU!CTtFy#?;@xdWuNOKHulA5aVOO1F6YDdJoz4&cn~0y_8QDkNjy zRU%A@Ip~Z`>i{Rab*m z?sfVx;t$n=siC9JP2=E~nlyN-8d^tPMotu?p-3wy>u-_PK&tE!g^$TiC(ea=V0VuL zKF)(HOMkiFT~SQKBYq;dg8*NLW2@*;n%wyC;R&^LD)M*g_Sia(Jf zOB6y$v$mDH*qI3dA3reAy0MLp1X%d9Et8h}%--BrZ zS4{7Z>w!+LmmjBS5UJhYA-~Py6*;l(c(x;Ur5%Pvfq!CX#2Rxr8*Vf2hiaz^wDvq0 zptUu7Y*q4DDhp}nDMMJvO7^l!l0CZnD8H0J&1(1Zy2dJZ%8yYTN`BGW3DLe8a5 z>OQAwN#Z≫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 NlP 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

  • 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

    U*MwSC%E_l z7qf9O^bTBjRTWm$yRhgGXeT3RC8KxpuWFK!zXN%#lC^E}V&@rCg&e}GKHoT7PDZ0O zGNajOCyS(EZU*LGcbwxEqtwV-?h=}J1N3nxc8Z$rI5ypk|Gz1tsw!nm(4KovEb)2$#)7W7+QPkH;ITRdKgAA+&*n~1@_3?<7G0oEN zmb7Vff2ump(l&wjB~8zZU7D%yNPCjMipW8CYmVy6E%$vO*FI(-jlF{?=hePxNgXYz z+N<4dNi~)<#;a{&=8d?J7&U*^(-~ z+RH5IK}+iA)o!t*7c|KaI(SvzSQ@S8j~~LSyx2{d$|@D@F>-q) z;qZR#982nFNvMxSmNdqa#$W=nq#clZkR(q==IYBVc{h@)Z#Tf2$8RG2m0hoe+?j4S zO7|_=*QR_1Qn&J`Gq;er`M-d&SjyABg9&A^6u2F56nDI?wd{B|%&h*zga%Vk_MQfy zs`uSmOc5xZJ4LZz2J=nf! zSk*g5cnmo{j6`vk{;v`K1;TF;fwT0l4G3*e-xzkW#VdUs3e{b$Irbo%H`+ahLGC(Y zYDP6z80jnf{t@->zJ`QK*=lt3*|73)BvIxDsn){8w$s`iP4JY&;<6dKD8KdVk zy?eAnbhmHrJO*`vS8z9UWiavDO&_~I*X^-B*BROJ@m{uc5m0=ziyaOg-4l=ILf=Vt z^P^=WJlYN6K4FGcofYzweJ_I5jxM%Zbu*;u=6ngvyI?od=MC1y#9ZdwEUBu05%WIA z?eDX=)?cA2#o^^ZpF7qZKhi&j&_R=M(fDf&u&a%WYnN9u$qNB~%YrbLA;isrL0Sv*r5295OP1s8h_{O$My&hZ!6{OuN@ zj_pz&OTNI{1`M@PTwEX3p|;6H{^J2v<~-D)`$undB$=xpm7(_DufWpr9+ROp{5N3f zc#q4_yM|bX-V-|XJZBTolQQ)1vv4x>o|ftHH=?6Fr|2PsV$pg38JYLLBYq6(yJtmq zcOSSrEOgJwz?}qKw*;2D9X{{h`-&gcKm5PJ*p1}n^CGuX%Kd;?2E+@3$HjnU8~dWq zQFk-2OahNZwP4@wWxr)FOagnS+aw@)-ZI{QMR{KFCo<38=?(LIX}mv2d0zEbGtb`X z4JVuC+q7lYbFz8U-v)k}Y~F|RGT97?JFof>Ltb{wOKpB>Zm=K z>nDekF@(=E%D{#c*Vn7P(g@SC2pHQh8sXT61TF|w^R14!&RwO{_=Zg@5}b%Q=}gYq za5ttE>^fz}@oKl3l3N>!Lg6)!8zG}BCKU|(i(8^1m)ihFPL|>J1~6CL6*6#Z8e{Ou25+Sd z^x7uT;9Mo#PZG=ETrGpMDBlL>ZqxNA`*x@K_x3@D+&jJDKx_P<+Er}d?sWfC=Gi;F z;Xtb}-ijuur?dSsY_Ozj90WzAYut#7>JyEtexP{|X<3_@?`HpiDBrtLzGnDM(dvc9 zCHcm&+m={L7yEX%_*0`Zq+9I~17Y#kdg3zvDK^S)5jT zubafVwDmgwmq_XZk<^xHlUi!E7u6zaPb@nG3}V?CxUd?mvAS7Lsh9cvs;mZYA}=S) zf8wJ0;)XRSQ}--O*~xsD`)4vATd1(9l`#nyQ`u7^PA>^g(^s;bR*>%s|D8zU z>5;^L;X-OHH2WeuBdOitWGMDcqPL;my*y=77gFkleqpuQw}`y7??zlyx8L5NhlqXu zwS1d2-_guR``(Sp7*uH5{9t(_ts-p}fkCvn5ErIRo$>CZ)Vus^B5k&km)d-ei|S{L ztG>T3vXqnU+uiN|5^2<-$jTXu3#p&qaYwzXA*c1%NaD&!@;&~H8ngA7i2wRX^6$7! zau%majwG&$B;V`*Et33pB)O>Abp9Q;NzURl$&tjhk>o9YW2|e^KKnwT)Otqe-*KDd zEKci#mzhK_h4$I%9~?VZ8MS`Y>iCsXEx#)+uzi^FAU^ST3PfcVYrA_G zd6N;jA0Y7*d@`1X>;$&zPC()rjCP${L8DKd+({0z{=f7Ql|2DPxq}BrEBmMNvg!^b z>Pr5Z@NO^r}Jk*LXX?>8l4o{7DeSGAup^Tw$9 z|H3?yk!kqH$2O5v#!}x~1#g<>p`26Ok=`zoVNu?SoB2jzMy>fs50I}=`x61R0Z-Hxvn}pfO zj1C+<@tGb;c6>*L(!VZ3>3`SK>nu;fV_F?O+oJR{2S=sV@k z{uZ#lO?y<{o;7QSJ}iCuu^4Y0tq(sg)l&_k+%>JVqIoRaJsm4Yp|WXM1qPXf-@!%o zbH*i;aMcn+e1bX(8QAC>hHzX4WS${sz40kr-;VYm8@chVE5eV`=9j-?>)k(%pDy_=pi$D~nOsXt#s< zPSqerJB?cYxMxK>#9@+U-!4C|w*mE7hW80RyH zW*srJjdu68M7A=tF`BEw*tgjC1hBX>heg(ui8Z$&QE$#VNPMg&ouc8;G0rKy7I>mO z`{*3k?p~*(p^f*EhEaSI@!|M!;h&?ufE#S*=W^w8Q_a3)Xn@-)Xi?48nzp$;AxQX*Qqn= z=7oKty4fvL!?NW5cWmPA#~)a>yMXX%3v>hitOFVigYuw;Z8LtVBs$m3N_GYZGq z+e(qOmv(Ul#?x9no2|Op*m$aCHo6b&&x@VkHJZur2Jf^Cn2aJZx#h(cXOd>-Y`9#u zV6*aKM@OmX`0)*R)LVh&J1=%?eR9Zw;h)evFLsS3dR31$uwbbwzy|QDUNi!0^SlOx z+V_m`S4o`4+WaQswWNOD$R;*0Seq~^s!6luxtmt~|(AeNEzij0j*iDe|cD)bkCb!@zz84Da)Z^+1L)C)adM#h`c^LrA@ zNO()|p}^9k=bCPtL+HCJcKb*h2^+y6BjGz-RNrP?+N1YtVE7JXkRH7`)1%Kc@_Rzk z9{r-Fu^0VRpT(>CrxDl&O;IH#%d7g_2<%-0l#t!KZe{Np8CsoY&P?4Gbq2n1&vY0p zgnY7xo|WkrXryge72Mg@NG9lnXSI>~RG^W*9~Cvy+0saVL83Ow8flcTiKS7_kw%%) z8;v5n_q8$Gz4tw!EecsDwf-c?RpYE6?yMU@J}j1djcM4)cvY*6$~|fCEGkFFW!dU%F{QS@*GWbm}MpsZe1Q?s1w->nUbwm}&cJO>Afc8sOv-)Xl26+}y0R43FFQ<$cfqmySjQNYJiTalTlqsYE~i zxEXStDr@g)#PY)RG{Nr!*Pd$ElVecW$k4~IJF@mUcK0B?bU2CT73rGC69K8 zbM-l1Z}@f^%ev>ai!|>G4Ofhfy2$Zz!?z5HmG^f*uBGzw`ZZvE7`x2Tf~tP#BKuM5 zaxvS@nYfF)&Jz{QuJxZ&=^e+Y_UyOQ+z_vJpb>^-5pXtSk`ZR?O_*bZg;@m5X2%%e z?7aym8sV>d6D~Ev{aFMYhgXSp?+x$Ov^=1mx&#Ei^xiFwCnNYlQlO(aQTRZ-EBrhDOfCD-Pp`y{Kv) zgZ6TB_l+94n>6y=YBaK(g6SriE&-k>caS|Ck0Z$YTpn)4tUeENULgH&%w(>YhT++8 z;|iS^DkOia8g!B&>;}CBA4)7+*FJJDavSgr!NKT3XX!td;{ceY^O=g=t5qFgR4#)}#!GP`)~h|Ram@L1^ znk=V9B-vt&tViW}vFdtMlNaj|q1XxAJ?bAj;VCaKwrq?Q6gy$3mxErw9n$rtA2;D` z(9=Yvc_zTCe#pqQrTR4kvU~r;05gts)?o=m!keZ#!l*I!quU`}D>SymE85=wLf3K^ zPQuX-c^|cdceQ5@aCXRR2Zuyzp!0@HZ+@Pgc_ZK`>Fhh%*RgC3mpkAW$om3$Kj4!0 z;tiOldkg}Uj{6dC!OjEJe%#UR_mV2G509~@O{=f~IbWGF0WUX?Msk22mVl?iRfFq5 z7;*xV9*2mjJVaArS=NIRU+o5O$G5#?LOq>g)ck1xR~e9weuDva^wUsK)X^WZbawP> zH9gMa*<-mf=a|0i&yQHX`u^P6sC={cepYTAT|*!2Z}e8sXHP`u&(&0qG>WunR4Hu4 z>cfp9op_A_K7klKQPdXou)#J8PYmy`lw7Mf8~|=WJYjEQ-pkqqd}w*05^XE87{jW& zQEwEA467-YBpMxPfF?b!xiuDd)qJB+qmN83BvviAbUt9pMVCX>XR4U=OBzUQ7tvWs zRgC+}Ki11IpgvS`^AzAEWTV zqEPOC0s411D#l1a&dqueH>@pBW#6~K==TnW@ZUh#=)_rApay($JKEbpE z;S6uVXZ$b(ljJ_VkPk(@xvsa5#DUK740$2X!GJN2&k{zRGnI@y$eZ&!`1wa6v7Ws>54qpd8KI9iO#X( ztCFl{5cpddIr!nM9VCdrgWW4=s^C8sdy;2vHJk+NS^X_%yWyz8miMXQJQ=GV*N3=^ zz!R@=e2nB~yVY#lR;m-vyw;aI$D8Nwf{dWGdw`o4ItJmbELfb7rr=(Ij&RMQ4eurK6e#UcaSzeGk3|~3!ddPJ6ja@6ElYR3g%0IxKkXY66vAEoWWjgm2VJF2+3$7qY zd<2je^Lptv2rlQ1<{@Pl{u}e-Hny`rxMdqrOj_KLn5?5i%JWfpxk*em*KFi}<` ziTOC8H)?IK=&M0i^wqrj=&O14(O2{SSM=4q`sk~9)7h8l5B&;ycwTn&)jW&7+NeJI zYNM>^tBtawuQsZWz8YBc)u2B5YLFFuHOPv-8a$$E{Qro)np+=zHTQSXR~tXhg7Q~3 zY4a3DfP`Fa(w3K~0u8y!ks%u?3%S~)l<#OWAy;<;qRX}5w zII9_|##v2e$5~B{w!9i=H3K!yYHGY2g!P|8bOmOy)V^+iff{EuHNl-LP~)toCc3{1 z)HtiDN$z`rb-|^uKUL>q`0~p%&T49!`%Iw5SxrrMUkTJWtEv6m4+1sLYHEL%5~y)j zQwPW|)H85KFuW;5A1I<3$R>CPy)`x4-G!1faaL1v+^2#s(KxHAgWazXmx;5Q+AGd# zYOgq}siR!~#^m3MIC3m+f%^<~pNX@YI!;1oW#X)+mPnmu;;g2Yx!F=4;?6P7YHGQg zFL;;6Sxuef#$wftm06tC)X8qTV2iVwI>p^C7;)#GV*VAnGapxFkHMQEU5{$TWjI)|L)%4q>aaL2OxwS$^+&RWsO`Yx@7ra^HtftOzY(dzs zaaL1jx)Q0+?HXq_b(Yn~QyOPAb++lVQ{$|r));JAld^QtdjB{4V52Vh=m&933opC)b z5l97}%Jwj>giU!R&T8t+=Y)%a*OiN{U(aQ%jI)|L>w97SMObA<38Hd+##v3B-5d#t zpah@Iq!k!<)g&IRXHpd9tE6nEMvXZSBw4mB&T8r|+9z>VQ(G886@h#4scrH&uC$uuiah{yijX*~se4|P z3~%GJ*!?$)+4C=9|9vzq$%WzrBDXEpVKB8{_}`cRR^SxtSUNaL)gK31f0 zR#TrS(m1QB|8Q1dLv+LHp89l&AdRz{`b?3=Sxx;{k;Yj~ea?9TamJJP;yd+)(lpL$ zYPXi4aaL1bD$+Qssjn1ioYmCViZsq@>Kh^n8I?k1q`u|!!G$k*Bvy#jcPt|lXEpV` zLPT(zLh26+H))*J)Q<`+&T8r>g%)QuwMPru>XHmInfgWHc8#-|`c(BiD7 zaL`!vzYb*m|=^vnu;67ddE1csT{*t?>=DnNf^d@$2hC0 zMuxH8G0tkLv0g>{BmpH4bayM9*G|p zycyLvtEqmD8v}{6nyPZoN|qNS3ng+hS)aueVw}}fwc{!$aaL0`j#Ht;SxxnK+>c0{ z)zkpj3XPly+Tl~W zYKY^eMdGZchN@QgK(*8`y=I)%)Nps5lygg_9B%sxdGkl+N>B%BC1UJ?O&A{JRxl*U;NJ939BaaO~uIICgjCqY2Bk~phjR-DzaL7de%xS}|# zlW?tZRtp+)V=Qr23$o&@7UX}TVkORML6Tt}(cdM`YC%?<)q)0bRu4cPiL;uz4Cf0m zlZNq5Fu~7(Wnr3KLgK83-9;OVvnp|78E3U1_y+kC!B6{@@>(J_ z5tQOn`|N-Wmo%=jGR|s20ToIFcjHsztfs?%gIU5zrqjIS{UPJ5rkf7M#Kvl5oYk}x z%BWzBvzjiVTt)?BoYi!(B8{_}ZmvkR*E#vYPz)|jkB6=5NCBf^w2n~ z=^ARG>J3zdG|p;z&`MK}aaPkq{soJu9^m@rpFgYIzHv?o0i^)gvRrM zx8g!Jin*S~S#4JK1(GDrYO^j^;F6tZvl<_!{YT@h#)p%@;mbIy z@evwtP~)t|_fe#AR^uZTX`Iz~t&J9_!Ai;t;^WpslA1W4YoNqgjZa`I>kVHTXEi={ zGu}%{oYnZGqpQe?daaQ9qpM}6E&T9NXMmyxD z`B8Gtb$Hhh#aWFX(p-?nS&h%{B}n6}#uw1dotx(8vB`=rIZBYmS&c6{Nsz`_jh}RZ zAdRycU!^pSvl>5Lk;Yk#uOZ6BS&g5k(BiDd&sVtKVK_}dEj`Znb@D-kO1lWPlL%N{ zI^Jkm7Q+idVxUc$nML{xq+&;VvyyX>Q0!>9CbJn)MhOyB3D!aush^O@$115O>1H4i z)FHLl(G;OU*g{ERB`G)iCz4kqLE@~&FQ8!(XEjzIXEmm=HlN4Kh**O-tFfMYkWU6{ ztQRjiE~sRzLSi{uoYh!wMGTXAEvOo2H8#Ty#%no=vl^Qz*T^n$R%5fA<(D|CvHcBF z0N?Soi5Iq*fxHbOZfc~=!WR1=8RRksUoF|U491mA$EPcqgHONY2z`|&j+bry@FDycd zuUXiKnK&4}ftW&l)Qf1F&!T|Be(XDbSqF(zSy-j0T;iS6sbeHAX5nz9?JHqk3r8rb zlc=DDw%krj9*@3ISnH!M@#rAQ6J>>?6ydHE6<0W#&Ec0VOSWQpV=l&=$R!Q!bSVk5 zX!TgOMSew5w}Y|okm@Yz-mp50x<}Q?V4g);!90s9R51iFW=7a z%&X^-h?f%lGB%HrH1=lCAYWNRev>CB?NEk_gyt5-c=s z!9p(qfBC${UVIC?tk?c}G@*M!-zC4w^5ulq6LKkMUZ3RZ)K0=kKD8D(%C@2lxM#Re zK!bk@A?+8S!QFK#qa}7(D&x9(8S+d_W!z9N<0g^OWfdl)7(<5+MOHQCWHF`dd@r^_ zCIPS8461p!Jim?Jm>%;ARX~5kd)iZwwYzA3I7@ZYyUW4J!>K#sH}!CRn17YzUugOM z+#vtg$gj~lSJk5aR^Y|01|VBa30n!rKuss`OF)g*c^V7r6$y$W8{#k*4g!0vxPka@GUB&W{N)+(+bRAPijUa; zQ2h7Qew&EjX=2}NAbu+DPgMJD6rUU#X}^u)M*~(y?0+b}h#m1t5x?8Sx>u1Cf9w-? zX2f4f@hdapucG+-C_ZBUL-B7@{3RkjG_ma(h%YFOw7-PnzsiWegyOs5EJJ0){)ghX zvvZs;;wwz-@CM=+X2hRQ@rOd5HtqQoe+9)y?0+c!6E>~BO{p`n2R9J^d`A4a6#r^Q z{J9j5=K)@2#QsO(`${y_a$nS6XmY=>?=i^j&VYISE_YC(TzYfg5pYY8XsBI%j;WQz z5)HMR;HQDB;abw&=Omfl$9XlUnY^*+x#J)XC;2e0`rl{C2P3)WNdwCPj#r-ggS-RY zG%Al@E{0tLE%q=K*ln~uuYrKS15u>A7ClxYjy7J3YPo$RYMrhZzQiQX$2par^>K-h zA*_#0{4U@ijZaMZgGV`UFwd;|A*J3%sBwz9dbS=7<|tP2{sd9H;(GuF*T*bwHU>3O zXgXd5D-VP)*n?k#j$#tl^fmJBAfKURagW0B#q6-7{g)c&i{Kpal>yeyDX0P5NMgMk z;sS_p3!L}5)QfkReb0d=ZYloj= zJ3GPeyFc#bdDv@?Im#S!%)ZK-3NB?!jPt%-i}!((Ez$QYH-WnjRONk0Q<4Amp z#3)+mZJLnVhjzAq51MrrkkwAWhu4zE2S2%rPiX8X-O^my1^KH z?iYO@agwnPwJT@i=djDuweA;x9%|{P4V1O+7nvQ(Cpd2`w`-B=fu`zq`zJtipXrq&bSy+M>#Pe9xlOE>nY8>_AOYf{`e zvkT^5*<0)pH|{|-HR5~3k*`5dpevCw-y?Q^`8(i#N*F074n<xl1_4!nL*_vFgfcCd z0HM(nbsb9&*vr?08po!1&}?mC_%edZYmoOon3Wrm_#25KyG(*pv*%589XSgR4&**W zp?R>_t{o=9lV{+`B<$oN#I5{M$Q#%#LzL*qL!bx!R0w*AIF>#c^f&A^r9zj1o?LDQ zH^UZ}0sT&@uU9(G7|Be0;6|^0rh)Q6_WDaq<~+O3fkij8n|W0(Ufqs7^{QM-{ghtx zV$~{z?uU18%U48&sTW)&u!n90oL(RocmjwR01$C8ObZ}l@ERj8fQXiq+YhgC=YV%t zFQSj}z^ya0gZ_tX{9A;wT(4eezxU`sJm3oU(3EIgG?Vu1GZl0kD}c+E7Q6uTU`DyQ z)aMzHgU-i12+&GKx$`t_?og=Nq=1E}RO|gA`xc$a5$;K(d4P7gQq)tR_Y>^HJb{28 zy!7}Zaob3~txX(&3GoOF&v&d6pW4;63Kn%oH*1(bW;uibZNtu1YqEv7_vzXMHISDM zcMOb5hkF@`AtTC^az!&y~$IVs^ed!u>?EznABmWVIR8B!+=7C6zMPdUIIwjSb&Nk|F4^E*D7l8LD z%1N^HAe%)pKVS{;e8jG3RFOOs0wQ@05@z)`vzm?D6|P6HEwcJTB&$<)$nQE*>m^`=O+HnO@il5AkL#VoTr2np=Rp0s|%Iq!9t z;|}Hoj~^?!{$9zODcsun+eYTluXThHx!M$$P#l zx7dAW*8}00>)Sh;g5Q&+?2_5Q5akek-{(a5F-V<}Kkzw3d(Q!VYkL^{pI-&llR)#N zv0b>&fYJfIL+I?eSQj~nPP8Hmv4wY^`k$c=GKi`mAdPz=5<~uz+PEc$8O4D4D2lTu zzebjLU2aU)xiFQ<&3EZ_kt)6f<55NLFVkOrio+QXJ9O54qPv3O0sJYeS8IwHAA-QY z|G+Kx0K_CD)iP@(4#pwkuc!o+f320T^L;1&L0!RVz7eh)gi z!t%$~2_uO7ivT5)jkO6X2iLK^$wwID^hI@CujGOh#+|8*Yf~7{ zq%yXoFg{9UJdwiKoyvGUg^@t4thWOc-=fHhM48?cSH`AQsQhe`X!^0n`vSz$eb)~? zTH@W3;od$UXHdD2Jaj+!m9voe8j1ZWc-amW++tVPQUu!{ zYJ#JX07ezZ)mXF1k67HkWwgo7&_arGGjuHyLoPKTnKQ+ehb*T&7iyE&MXtORm5{a2 zT!~zGy1pwF;ET@-kT6%ana$N=^V!IivnWbe9z$YCJF_FMl+3X74|0^8me_t=BSs5#))CH|ek-eVpMS8`X1aWEyu}~! ziPmcD3Jino#{9vqnEpEqzy_*e{+RP2JmedbTFa2>Ztokjw#%*n+uffA8s?|&_PkHk zgYE3ar}`H_UPe^^Bdr@>h{TZTCZ)R&?ko@aO!W%$pf}sU2YLriLORv6gVsZ zfHs-K@Im8o7``Jsd{lfZJ{m50!#Er@zp7S7&@DME{x&w3zLLh)s$A|`50c4)%Uwwa z%jdSCzvNGK*g{2Ji>CL}YqD7_)~rrLZfvI)0dFt@Pp`zj@SN1eBQt%GrUv)i%%4)!#w?>~FCHc*62ztY0ykT<1&Dtxxi?$J76>1q}SZ6cFJy zcqNr7HnU2k{r)dO9`MgLy^?6)F(e(tjO-8pZPppUQq9KZ(JP6@62&K*I0C!C1_rYi zSvEF14_WrBg}6;9+4}jrSMqhFFc$awm6H)%^nVKZkbm}GLY{>4DfvC6wAy;54Y9Gs z_#ZUHVm1B$P@16U05@r`9x26DMp{7R;&vK$*-{{uN-naJ7`J1kBticu`O5MciSyJ0 z1v4o5HHCAda)`cAvdtTn1 zD&&s8{7@@Bc^kGi8tPt$ARh+`T~6Jh@J#<^qQ4Bwi2lt)xmV#0J-8$0yN~s$jG24; zJFV28nDN}BmC^3;W9}YnkBN4VAM=sLq+{*TgZp$Il->u)4dQ1c?pg{$7Ua))>iGCL zh{}4qljP*%LGodT`;vyv0y&irJKR@1x40=&@8jC~wGea4|rZ% z9mTTIGG?$BL`3#(B*b8e8QflHur?BEagrG1t>zjND@59jcGGB(_dSL{MDAvsg~a}p ze8eQT*%e+=@U}?sWi`roI6gCxNl3d1ZYzy$L%No-|3PBN$w&}|Z8H-4Q{`M65?9z2 z)~T_Zg4AfW!Za2mfnZQ4_Kn7DHPUzv*>1QMb3SFM^i-sjSc#}mrH83(r-~La06dXC zfC)Nv5)yU;rfUyl=HpEV^647mbgYpoV{H((mmiyM)Db zaIZ&xcY=txv;+z1e1DpxU)Md@3>zcC2h=Es$aE8_q0x=5OF4Y!n0uG99CIB{gHcMZ zGRdg#!DR}L0bc|cBZ0o!*rv6ot3ebPA)ChzMsV|ZAj-ikBb&$Bmd|~_63Lg%F9}@SJK3q_j8ndy$P+tK5K&I^V!ftNoB8ue}0hv7I(uPXw6Rr6e>B@ z_$>7Aq@ENSJv8%5u1gW>h((yKXP!lmJn@%aQiS%YFBH8#^qJ2jdG1kiI-WHBVTvsw8&#gS9r{F;Qr@1z&Bv)M^zsfU^nkz>T4B@ddMOOL z+oD1bkU~E}o)&t56k2%(3LR<+7c?w1vXoM2^tfrjF|6wKPBu|<&A_!kX?1UaRX27_ zbnoJN$6eIVYodD>*NalGGoyPKH_9E_LqY4kiJOJqOj_} zZWFGz7W7pPKHVqzm@bNY+u}Fp>o5vRJzZUFrD4p|2`%AkYouZxj$+>I3QP8HYz_VCHo@H<}-(q zBP^daxJ&Y*8f-KU&kO%a+8=V4Wy=iyt`Q8{mnH+((rl>E2Zxb@hL^$ySw5S#Q1er6 zl$0D|Z2D3v>}Wl>%s6sqv9D{?5q4(>?g~`3##j+}4&T361?5R{P?;@aBc>1*78s183x3kg&;06f}m^pS16Ii54Ao-LH3o* ztdB8M<*a=LIe575-O^o}A?x)7-Z)2nL@EvM55V=Dt9Gf>+?!Qu)|1q|i(hsTbL~dW zoh_JaE!)YEcO15YoHfUrEtqQseU!m>;Pk8g*@C&&s)*2RSz|dFMrixq5)Ga4Wa_l z#@D>`lbwUz?Z^xW@y0i~a(H|N#uy>q0zka6XXMCpu6fQYM6`j0#+RqGXu(38?UrEX zYt>EhtoZ7Ye%>_S#X3P@qWU{qVA#^$aBCnSKRNQUb9#(l1TT27l8gKEd-fRI$YiS^9yqjO=5(7b$vvv{68Sn3F6c-43T4O^`<0BWxyZgda ziP?glmUfAwdye<)^)iK@vBT@Sk8=^2WPgn~kJlZw07a;L@AI zr2j#HZ?yX6aHisSbnj#(+{XxKthxnWAgqtQm6hlIq*Z)_od?mZd?OWmE32iE`LT0g zAgjR0!dMrSlhw+|uCW=gk=5Er#oo$lV`NEeBDrmiERQ`vQ-wy3jo|@`m(||LNii<> zSsjd=9$P`OquUJU{Gz$B9W1xAyI;sfv2&=7igO5BS=0|)33ob<9P+#@h2I6xn=9@XwWp)Yf>&q$9my2i!6 zAwAycTV3oY(i4o{;$pv(Zh*a&)c|`dYd`mzl>fBzGSZst??7aZZGxqs4tuM~EarMy z>;eg-nmk93yr!`xQwD*IcgaBBw0X$n2Uf)1YBHPs!7obl{Qt#4&Y@b_rTi^0 z-?R;@N%;#f9-FqMA#@VYKQ;!kT?NQyr7YC2x3adfh2qb$hdrW=<;7dEu^!d7ip6h* z*{mnk4PtMd2!-?*d#QNNFpKBRJqCp2?uc?*Aa^H-1Z(N9h2_jy;vzAgG8b|S;TNK! zna8jWL9EfOtl?s0$NwW`o&ve}GaN!qS2t@@0Rw`_)vO(psHh@xO$H%e7$R4*!tTh) zZj14koqggOYTb?zo_*4*ED+%th(VrxvW!fGCkfrP0g}xHx+_r!-IdVqxmLoHL>+Wj z^V@!<$7yK-&=gDSf%!dqSU0?M+@kj#=(6#SD6mEG5-adp%pWZVt`{m6e-o=!i($72 zl^x$o-teo0%8yTl(=EzR7OHjpX-Za{DO6$Hqs@`p7#-uSNsZPLy2kgVWVMc(;`rI5 z_WeNgO5zVua?(zr%HwS@7qyr%6LrP6y783=MT?nAO^<(1y;({vil0Z%7PC4SiTZKy zRuB?u-^>0m3v~_`e}*ji#49}fJ~66a%!P;VLa$@@YjGkv(OMUda?BB=vT(FBSwSiT zX~Ke3mgFi@Sy<)Rqws-UjDJoq9AmnQRF)(asVp4lUPe<9LxV_V;duA8kcw0mPH=6o z)$)rJsVv;r5%n2yh+T!sgcIFbAr+}Coa8PNQjyBSsct1K`k2tx)ABTTx{!)g7VhuP z7E+PQ!h>9m=qgfKI0Jtef-}%+MJfwtifMi~CrD-CEH?_`Nu;uHwp$@IW~f6Nqp*YB zg|MDPDhnGRm4$~&h=L-_P&ZJ1v3mhQPa>6tN4k|#{^Q_hf`5#AQtUtHVjqAJ9w#wP zB9(E>UJB9(<_xVFLv zato2l!ZmJxp|>bfS$L-FF0>()g=e|V=mtP)Q>3zRt;ORxMJfx=Hh;D$QdxM8(S}qO zo@?}WMJfx=Gx`ffDhtmyx>k|O!V9DqCXvd*dPrp)F@jVU9>MV>NM+%gYy>1dmdj|1 zF$O4yKgj)^L#b6dSZ5N3Dm^wVDaL*!Vk#?0W#L(~L~4FgimhKKWuinX3)ij{(F;VB zbIUc6s3%Be;n|x+V6zBt)IL@xK%}zp90EzDYd?`~^=A}F{(!|=2vS*i{x2fC2ftd& z1X@oWqiIDd3omGm-1JxnwyeaWte#YkiV~?TTt7xcCx|HBUszvM0w_pj;f7;H^u(m- zrS(N=)gnWrvT)<|B7bXA{>h|#YTIxtksgx`*$j$a{jR8eBx(5qJ;vV%3NM$Uz5G+|^45=)1g z?vIp)NmA?q;M0U4m4y#16on)4o99lcC#*XdJC#zTvhWL~6sauyQYl3$3%}y5z=j}FS@?A$p%kes{6;B7Dht0=N|DOK?>J9H zNM+&o%2TAWuvSY@q_Xe_r4*?w{81@IDhq#7N|DOKU8Dqbfn7ZOnbSuSsVw}3Wh9Zx z!e5m%q_S|gk~NA{7XGHBA(e%{D``k&;T|o>kjlb8m3&;0%EG^tG^DcdZzZ<@$rBEQ zo>Lm@T|cfzICYC(Snr5b7W&4=dbck_8W@fB&S9Yo(~QP?N2Ic_kckwcxX?iCSIq_VJ^Z)nXFSWhlo@b4t8AS1gR`6ahwVTsVp4gxE~RuvarwQdv0ManmA5W#I_* z>H%bg<(ei^8E)GRLKHFoGnNtzZu@e0c&IB(k;=kKH&0|2C1tsNS6MDIFvCeWJ;w2p z9%D~TkFhf;Qdv$X?r;UEET^-cKfL&87Sv@r+(ow%q_UiPNM$+Q?W6)z7ehTlD%*~< zB9-N4abqk$gD@bLzaegv`&MHV{xy@8EKhE#_bF+21EJPvS zz_1{dg;zRmD^roma+I# z+ePYbkz#jxF)1aDtD;0I%T3TBz)e9wk;?M2kH=giKumefndC}Gq_Vsg+i>@pVI)#n zo)k(bunO{WX_ts9L@LY6Q%aG_^755Zq_VsMr4*?wua#1YRF>CTDMc#FYe&zq<$!x1 zh_o0eWqG5t zn8Ns*biHbaR8o=3^2R8oNM(6rBWH~(EGjZ;dI%JRl5rATFY6O>Y2( zDNid2?2MJYup%d3x6mRBFCEN>2FlSpNG^^wZ*=CO`Rq_VvEDqKSh zn3LJW=M!6+MvglrKbjIx$RCm~BP%35~oN)2=~VwAP4hf&tD2k#ZJ6Zl(Uv1Q*iv`A|g z9sy4ZMa^SN2-Wo`q@sj)sU~l(j^X z=GGx-4Kd0nhS3CHXpy?K2dwwHZd)9x45wG0Lnh z45N%O^z}L;uES+qxm-o6=9S;Bvgb^_Lfi)MwtLS z05qv$4D?QHjPZ|~Me!V3SR7rBNRPdb+&sss2oJ{okQ@d{rP)7`-IPbJZ=Mpn!)%0l+Itq=%$ zNC$fro28&9bF=ZsIlb(l_gT<0j4~!UE)=7zRH#_I2)!-ns}v!|`XE1vQT7~&2&0T? zs7DxOrXOLH)ft!sxu%yDwEP6im)s34DBvc8CG+n#6cpGEPQec=XszpccKmKkvjuI~ z_t{aO>IbSVO<*G`C|w1Gj3PVgFO}f6SE{FAb`^9`s#wsy3W}5(5a;V41)Y>CiQn7> zlx#{!I^1z0Q~FPl^xe3aYnKbK{xh^-*d` zoPU_SpqP|&+Yh^e?Ase_8jp2|ZAWmjpN4__f}zZgzrgs6T_AA z<3Ce!1Y?W&2B!GwvEP^q{a&Hf&fv!i2An~wIg}k3Sv`b8gCeVy48q{Z>Ug?eqH|Lk zro)0tLV@gsELTuTyG@H*^&oDBG-|7!sg2sIXVj=fF>6&1#jI656thy*i+p^ zpB)g2Bj9$2?@^N5s5lovHHF^JlpG3me_=S%7pp>#Z_xa~;Q$glhGI|qLP<=Hg;(G( z?e#bn+Y7-PyM$sAx|PD}DR^US3a`U0u;m&l&Ova0ve-s}_}1Cs6*sT(T&=&`4u1P| zl-GDJ$8q~Fg~?F#@;VZ7C_PI~DsCqBx$^3MdKP_=SNGEeTBto?h0>eSdV4|&rN^1< zO*okZh!R`2CY(Q~cHBT|ZPSBMAvVy%}?b3lcWl6(0q3vU4qTHX!U zYsA13Q#>`rz$q}$R}5T3{nzNMAfR2t{+oF&-mHtnT@@B(c$tcTHs~UBRe*f4v~_0o zx)k&OOParo=10Pwn!k+ZSI~SU{*UHc)B6o#ev6rXBE@`J`^ftZG=G26{05r;j^-or ze>8s;&Fh1RZDw{yiuo&(=Fg+~F6Tww3u4Dykb@)fe==VpAYT)lxL<2_kNz2+;os%Z zcKda}Tgvio;slwE)|~IWQu#`AqA0yaT0p)g30-i3^M>M!lF5#vY(A*6G_yAcjgt#= zXdv{TVM8qY1Z04VG<#7fn+b%Ol2iFmh8E8zM$67#&g=w?~ZC`2J&@F`hsf!)6-s7Kz0vM8C-K zXi7k%x!=2>ZUcPBWpD?no|X*H~Gb?dr<>>rv9EH^3Ws5x}#aMdDH< zMn@7~p+4+{efzt~_}~ojc+GSZWAQR1l+p2G%TCmHMA=Ge5bha2S`# zs9Hv_q7zEs8mB3v$qFx4*fCbvxj(^w%jTNIMUc2$BnTT(w#>5cMD~N4o$|qc+1bW^ z73^0{3lrC+mi-N~%Wg1&qj#5<%_(Zw^Onz7BS(L3LBi!Iv=O(^#z zGQ530M{lh)`6a)p&{t?}*RCr%_0Ql|Uy4r69mFOknjjIo3}bPA+IkEOm0rfkfX8(j{k-8r z8y10qRfpI$65@u~#eHulMeO3C&70s_pb&hX?xLEN{H~!{h^o7@yW!R8dDw8yl?~^V z%kky+^RVU)_IVb$7If*;G%#QGkza$B$zG`TS0H#T5t&ELyZ_kLE%x7rk#P<4$9IM> zuo~DP+e~&FBYTA3433N%jQqo4bW~3yo<(9(?S%T+XL zG-PZt#zFNM{k^Jx8)Iob#z1fQ&&H^;U(P5_<@$3hKzGccVSlhD$h#6zd<0C1;;|Y< ztolQE2y{z*E}{33Ud1RLCvi($4Vnj5cf8R1kWRx8aLa_g6*QxKqEOpGmC7G~UoLdZ zYn(=KwYf5hU38^C8BRz9=R-gucn1>0cBDpdBF{^=SkB|BcLVh%A^&6QjY4ADwZIIb zWLK+Xva-ke)s%E|swwAYqVq@A7_Vh)k4Ee76QH6BSHdcNqQ{eRGxeukuR$5^Uc^Y^ z_KC!;bB*)%J)D3-oP?hMHKYqVg8NM9eXc`PPW0SPp*{swdMXR}Lg@3acV5-uW_$wd zCjD{6T!)5uRqKtrFqMlwq zMy~Olw?{gNckW+${VzOpH}$p}Un4c{dL!z{8wBoJpCflJ=^pHAHBzg`NJ|W^6T0n9 zpm|%uT`%#G;vl-G`gf6-n^wFrAyH)5% zNeeFGCZTtc7W}^3gr0PZcFfy_x||eXag@rs6%-op4&hA&B~wFNi$W*6y1V=zdtz#6 zm~T_V$ad(IRVF(p(z(a)kF)itzTlk$!{ZtX>^BUY=9_S`^u)jtQ#`%S0HNf>z#NE; zYbYQFE*AqbIbCdu9(Ee;G5-!Kb8^}W5gA(fw_#{i{;4f1lam%~ITza1z2bix6}&H0 z#w}?eAO$}Gj(L8o@we0&=#4HTp2u&8frbKNU@SN`t-fQ5<@Edw|4=H+vGOXFylVeUvL4Z<++_SFfskaWME-I=Lyge%-3dg_OU_ z=$ciPM{}~i+UPB-I2m6f)+XHr>oOT%EA&&O|HlDWBlJ$vZ8@T@6MCP`p!rt<@X;JA zcspr6GIKYGx37@?i6inxp{HyCIDmZB-_hTlrq!M*AFOrp_p>mJoZkjtVp(h+x2xOa z4k*UBYM4L%I0z4mqz>GNah%9oMa6$J>3Lh&QSNr9L3z{yIoD3JraM!?Sn~l{3`Iq zHDvC0E^?2!4{HzHS`kjoxE<^j1AZ_k8CsDcw63-Lq`F5$ixS=`T|JXtL~k%co|M z=A)ifacloUl0~qXvU@Fy`}&ER%~9`_J#B5vTQiH)M1bM%l^y6bh78K@%E$<=ifYTC zJl`XV5az^}PPr&e4t*PwB8bje5rOF7FjPn7X9V}wQC%~FCKYB3hrK#rm;S*Ck9&>Q ze*oiN*$VTBkqrmfq`U2ubg$}M<8+Z+R(RNE%eo68t9r+XF~%?Ps=l+VgOXXp23rs1 z(P0=qY?21xeyj|*$wDwl=WEFU5IelGsH>83bHu0t;~i^LG9HT<)c7`q@lM2`My*Y4 zjQ86ErFI#?b9S_oPWb<8yoV1>#=E%D`rT|jiF}tRUn9SVjNpXla8n?+jx;6mi=N(n{X>833o~f7EC^_f&}-N z@dvSB%APYJ^hVNx_SRhJ*uOy^!6m6hFc0Pzf-b$MJLsH%N6P0(%O){b=)XyCMNM2@ z&@K&kjvfNdBQMZ;dH4NM&_j75buES7Mg9zKN(;pPu!pfg??<|o(C#2Ex2+|;6g+M* z+X%HAlx)xbZS`E&9$FoO$ym*0CSSGHX7c-y7`@S=z?mHJ!(^db(nn1DX}bc+cMU9z zYnY#UTJ_R3qO~lsYw$=^V(BAR;u0i=jWa1-J9x_d&T`5zG~9^b=SYu1ku~RL(M$2v z8_7p6tr}~2UG3_|2CdMJqizN71E_ctDOGOV)wDh#7#2zVos^hm5|2}2N-!sq82Bh` z96%e_n1qMhFm7TXB^*w!S2z>D!A2Kc4=u%(-pCH5*wT_j-#dmqV@BY%Ssiv|QrGjY zgAMm^8T#I-=;4syN%*J7(6@5ZLC+NWg2zG2_Gy;1aPS0Z**@v_$@4*X|CPOauJp~y z0qj=?OWMuu{sBgYo2Q%u;G~hpefF-QheTj ztoTwSr1&FEa)}hbJ1Tw_1zG&HOtAQ;kQlbIUh#_>6u&eo{xoCMu=r)cc~S8@X^gdR z@{ARKsY%vK@h4D_wXXzUia&!17Jn-e!#33`enW%ePeJh`*+|=r@rGU95y8W>%$p)F z(I9V&q&qu0#bbYw#K0zt^Xjkrs>7!j4@ZNz}aQ?VS4nJNNdpX{~O6YYe%(`zelJ&m- zO}y`a^YhVt|C@N;{1D_p1L)H&^Prjc0!TUh-AZx+$gy(v+Y}xB#>&y}w&>(Hwm+wW z+m)>*VOeIX&9wYFNtvj&kR0$5NI4eXL-G=keBf{|iHAsF z4HKf`We5t0+kG8!fujv_>aK2Zq0$X*YPFW*UX^<}uJm-CK@t|4$63{X9WorP#xqjd zD>xj~B2SJXBSFd8XrM`tvMY}v4fB%6km)?P-D8r4T!){zkoI{PJP8)%Ft{5DZw4iw zGs#!&>Yjfjl78-0ldjqZX|el;Nll{NXLm-DA45Rw&V4Pi`?X2_6xn?)XM}lC{JKfs zg@iYq-EmP9r0{Pw?Y=*rlDx|??F~rs=JDM~413UobUEf)RAw>WMzv9Hayj(gM*dFf zy@W*Zo6eiL9o38^3$fs&r;TckuD2Y#QG399l8GOX$a)LmUjm8!+JHY5)P7x&c$$g+ zNc8_N62p-=hKVsqyvoERBpSaB8;y~ej6~T%=GPufw~gTxPDUwz!>DYzvBPSN1!e0q z-nzeG#Cx20!t!sEWR-{S&ekBo8c%EZCw*y8T(h@vE&cmW*pu`2v_iy9`q9;JN%~QC zGnH&@SN5ZZdC7h>Y__#r3A`M3j1h9ATW$o8bRVHSI)o!#)y02 z6vfsUXSXWPYSvaWdF<(BS=2GrH>XF+{D5L-K*+n^_^~-I1r7ttizL8!>+U} z9*D~RWdx0FNHta#jY@9J?^f-Mpw><<-mv#gQCupwuyLEeU1fQal5M`8@-~?S4_<$& zMB^3SGOq)`>&kvKChvF^R7xnoT&2vW*0$W6jTh!L9%Ut5JW1e`D(4&?DR{2&%FZ_p z*6C2y&;XU)U>w$IjTV#<92Olm%HBv(ytba=mnn)w!>NBt8I7-Q(B}Xo1|QMn|9Ahe zm3+E8I^>$b6`J0~c6}55(Oo(!+Dfho_#)Agcd%8Ix&6$5??=4~dLmy&YHwOg(2#Cz zuy!P#;=O_V%wUaG>Dp1xfu@1cl_q=;g2G-YkMHF1c1BVhD>Us^ndnTrx^se0>ug_C z&vvVKVLKB1C)<&@*`8}QmqoVE3(8Sn^ZVv{winWNB=}FZBXMl->31Y5o8Aiov-xN} zoA<)z;3(YAjM~Evi$Fqr(ZJ{@P57T`9En>rpE1!7?CLHHE~v9zI4o0orS^iV z_hCB{{3qLyxY^!rHh+n1UlDv&XZy=~es7@dNbsL*N8)BX5^dI8$Bnxx7>8I|i~U*8 z_J_0`39i)Mn-N4ZJnr%x4Yv;_8+2;yN7)rRo8e+iNbcI;d>9|kp&{d;`v>R)QA4_0 z)ub!sjPeuz-o@w+rv1FIfFm5kyEfQ1dYPMuhvD3;FHlhCZA#4Eh{Y|e3ixd{Sj3KM zeLA;nAP5)L`U)ko__fR~cp{JS)4VyKVp%G<=~LtY@@ejE-KDXz=0mDrj7bIFoEexg z3+~QD4y3kkQmHw7xuM`meqMvz@>?}`uE0gLX(xM3$J>WF`ugEqfs1O}M;UyZNR zD{xWmI%_`fz~vl9FXjqdRNDb^C*Sd9BK=5%6#=Nz?f4Cd-^5pda(LVY4pD^P#5aL* zczQPUr@}8F$k%D~V~F|gT?_*MTDPGae4hs~$2V&9(+_%^BQK0D5Fnz=2#9C^MK~FX zfBO3PTz4*l(5AH-nMn!yr$1te-#_<)8~;Yr34#*e{t$n2cwUwtZ-EQJE_~a`%dhSt zir`5Wt5lf=JwPk*-4CgfYRnfzr%Xe1qF0Wue@Lw52l4x@IrglVIKJEJ_!5XZFK@Fi z5TvN~K#Ka4wddO(kyZ@it+#4xaE+>~3%v0P!2}ol(~YA)v`ikdn>j0gBLnSf?J1<#WS?( z9U`v~YYZI^)9M6Y8qRqRno!!0%`nP2?)_52iFU-0>5#3}=FU&UvA_|2tO)R9GJd$( z(rPnoIsED69V%c{9glZBV;C4!M}Sdr4$5I3YSPTdR&#%?3Fi-O3idoHr%>(i^cjigJ$7&MN|o-0|!*zc{DG$UyM=o`f#% z1f@q^yKif-@{1IE zDzmfOPe{d{%B+t)m02HqDzmp+B3>!>RAxWH;pCSMF$W`=ST4X0icWJe+;8i z7gB;yNbISsDQ|!j?5V72^T6fz8N{B-n$7+|?5Tj*Q(1GU)-=0Gs{myQ_EeKLtS04& zJ=LTw4e^_efY?(_+Og__J(X$LQ<+=YLV`V&`G_`_Vozm0s%@p%Q<+cB6SKsg%7H?9 zjJ;GmXPCuv=EgxtE`b6im)KKhfJoFpAt2yX#zKztpfCf;W9WE#OpGh+RInJ#rUE+^ z5O%8RGlwx_b-c~H5Ea;|csnLhM=y)R^Ggs?R5LGl1GS77K1p`0@lXuf^q9j~Y#z)- z=$rM$TJHtdVY+M9ZvvAv-E06GBp|RBr+u1atz)}FW5nw4nT1qTl0*mq) zO5*U|oC56IqQv2=Fr_othP0Fz<(MN#ONr6WWCdvnqzMbsQj)7kONlDn`JyRBT1t#D zT}4_-l8UsH80V(r%PbCGA}uAxyJbQu(o$lAyH!Xgr?o5@{(h&BcXOq@~3EE)-IcmJ$cK9-^yAONklof2g~R*9uHu ziJ4+LiL{iMG_10BJ~(mJ-Lf31a^_MOsQ6CoxSTEhSEL%Z2}rA}uAByEQ^@SEQxH3U`S3 z1LO%JEdd4o7@>hYL8PU`DeeWKcPr9TVwE&7>aR#kiPi3Ii3gA;h_sYA)vXu%K%OAd zQsOjswa`GGxRb#?-TbRjq@~0eZjbeCC)dxR*{wx z7f3HmA}uA>I~i6*s{@Qdj+o#GhV6(kOui^JxDo+Lk6nk~P>eA^Is8HH8e9S*EhWx; z63O(~bNE#;_A3!n*&v_IebyHu^<7emwXKsfQ6eoR*0umEJ=PMx`fX;nNYo29LqBo$ z01+q^0gl@0IsqarCC-^90y9K_bJr3IB!6IB+WI@z^88ap_AHTQ_EnUXs?xLzb>Nhh$svHvA(DTFxW-W4S$MgfSFcn+5xG$vc;-JhDb|^ zjlIAJ1Vd7OLQ-BF7Ss5gOR1U3p!6MASiEAht`0U`< zUV&tKtOmcK^!59ZQsFSiONo2bGaxOo;M>8H70h|T=bTLLW&MH>D|q7mC%{aPJ&Rv$ z!yQOzm?Xs>06t9w1M!o1;79zX$9Cg4&tVqMHEO&iT7WHQ9)WteEKhG2t`^-e5RBl zEhRozN|BZlJC#zTrNkFXDbiBnOQjTPDe)C&1vUiXV-jDl6H1Ym65lALNK1)tl~Sao z#CM!0BBZ6n_sUbGr9`ckph!!JACyw0rNoa)DbiBnC#4i=DY1(bSH3urmJ&a6`bZ)z zC4ONUNu;I3uSy!yQewA~HHx&9_)SSeT1xz`q#-RO_Gm$dw3PT$$;TCGDe;$*hP0IU zTgh#Tw3NWp9q|L}9g&t2&em(JcSKrB_{PV2N2DdZlcVxj?;I!GG^4TJ5osyW$Y`v0 zpRxO-8;$jjNK1)Kqp{u*X$jAn)E?HmKIrU;CPrhuBhpf$snJ;Ph_sZ*c2;*oT1q4w zyIR4dL<@H^3<}axB6OV0G2{hlDUl;act|4BQX<#!RuTq%>|$IKc}6PIQX=1RYL1YW z5-lC);0S3cQQ$bwa+gJ+kS`pGxqKy@#NK1*fX4#OI67Agkh)F?yqP=^RzW%`o zbx8V3q@_er(pMraB|17z*6`J9c{!y!xwD{IP@L%EdP7{0mJ(g@x7R47NK1)sjx#T- zOQfYlcXy$h5TvC<5BIQ;inNsI=^nro5g{!ldbyoK8q!jtw|fEQ3DQ!cud70l>9O(n z&69Orp~MAgDbdeyLz5m`EL?6rWtQ*+X(`d)ohID1_|@6w`bZ*2QZ|9zf+aeO9>#r zAy9&}lo;Z;9}%RbM5!ALeZV{7H*|-=9ygC>g-A<@q3%GDm?IK&lG{fuk(Aye6Qrd? znOY{&Qev2PKiE>R7X(>_R2ycb?KUog9eK|Zl)D@;kONmPN zt;qhAl;!qaWx3423@2fL!@!gD7<(cXS%gfHmYR3s4p)$tns?UohaxRC@A3&4=vIQX z)VvOD(dvF&3ny7EN^VRHUUAO&eigb3tBu$Z=kacn_fz zX{kjsl~kmq7TM>+dvsM4asrGA(o*6|$8Dvboz@vu2pXYg&6~4J1ZSfD&3lSBhP3n> zl!8CdzgxtzQ3~Ka@vFN@ma36t8D2o7r4|{f@K)?j0&gYlDnBZEG`drZ1RVnECVmxZ zDa`iJxB@2=HfNIOLn1AOEoNX6Vi@mj2TBU%282jUVJ__wdxA(yVV+Wov=rtmrASL* zfl`XJ6t+@Ik(R>NN-5G(n1Zyl5VdSQhe%6d3B6GFhN?q~v=o+IW$y8{@o@Oxs1e;G z(o$FtX(=4ZkoZN4v=r7uS_-R<5G#tb6pm3!k(R=-k+U6fUq0L?a`rmh!4AhMrASNR zc%>9+DV(5`A}xgzl~SaoaFSArv=mNON|BbrDM~5QQdl2pDV)Vh1Vv}Kc%M9!KZmkO zq@{2!2feJ)H?eujeC!$5t{eH!2xh z?PiRt-m#<+2ptSoK%}K`A#J6{t{2@ZIzYUooWiG(kwu5zL_#)-5#Ca6Q5NoI2;Nd| zw||4n&PKeY+lRrW%xykx8$FyJjGk` z*C?fUOa3{eWYbK%CI3Pt4R6WcpyWE@E%ic_cAy$L@2vr{c4#P9A=w+cM#ffE~*YRGN zucpTjBh_gDD&`l>#h=kY-Kb{wbcLp((1G&*7tuH|zfAScbCA;}Ex(`|>t_mtP}|S? z!EDGBoT>idF`EmYLyZnht1z!FVm*1a{ zw&f;t{s6sqp#WF;1MI%CKw9Mw;`G8-3Xr8=W@6%ecZ zp-S}>xU2j!rHTdaDu0+#1L6;3Da;?PR7w0X1TnvY{lPCPk3WM7=T|B78^eMS_G#! zf6njN_r&?tYyQEyV0iIe9YM{LKSWcM7Vl2pd~Nph_-s~ofl`eHT`d0))r-ZCWk?TI zs!2R#Q45vI)&@OH^}_fH@)j$V6CXpp!jZ#`Y+sTE;7A zD4&AI#3RTzOsN^H|qKx8d@JVvvCsXnL7Ad_KXG}fyi3c z10ri#%nsofh0-1^>j9Cq9H6tc0+F>Gq_b^TFW7@o+j0n<7a+2<;V$?9gg`K)4d;CA zb+`ia2PSOJ(CNZ;2{|mZ3mrq6MRhq(C8ewmL`n1Smm_!Z479q=TMC*p75sP*RZZ_}e*BU2 zqi>xbee3+_D}Hoy5251{h=}2LtqM`#YnsChuluPvsQyaem6enA7peh@=^lr9X{*FT zj9|_wodpH$CPP6xhT?*Pc9Ty_Jp~0#KX>Lj1BuEgWZUuk UH3sF@jTd32sQEigGMZ`%f~PW?!Vx%*SRA`pxa@h z`R&0b+8T1m?h?zAw5YvAqdUZe*MYETL6$sxaTh^L-klG!SbceSKB$953+iCe0)a*A zNLaL>8MnwqghdOoX`zU)XhDKgaz`M!HRtZ6<6=t`@y+!hf<@yX>a(1UzezkOx0f-- z*_Ehh@eY_N1r=@6!RRu}@akBxe1m-(%iT;;z<7lG0%Vb(7u`<1zL6o2S?)nX#O?^`d%@=-OT=wV!n09 z$oqR~{)D9Ydue_P%}3(@WWHo5=6d&vnD<&Zs9>hC>z7b=Ta)%*q5Xj$Mee^s`$vHs z!s#u|bh7R0UcDBIr46%(a??~62~9&|dEVftynpgx5UfW7r2(t`h1D0J5yPCgoGA8`6T22{l;vv(By84PpiKzPZ& zY`JBhiR_BAjJO8GJe9%A{uony?X&U<<3f|PH*9tnI8>}|Z!u;czUqg652H-iy>sMt zvCO@pymPu%>8w7A`0=(11L?E&KU8c-Ean_as7U7g#%SvFg)qOp}pw_Bn}I#}m+ zfpH_ZN4gU^6gRqJV{EhQt0>PMk2>i%+{mub>QneI%mf~W{o~X=VYa-Asuafg5n~$| z6H^#BM~v-YOiy7v7BOnUSYV7-QN}wFV>Jq2lEU~QV&ITmu_DD3|9&Fs7c8v-V{Hnf zC}L~@9-O0%^d9j zCn0ifT~|cY`4lQI#3w+XVPL(>)gzdPKJqTeQC!J(SdnwPft5D88d)Wuxzl-L<|1)66Ne+Qn~7ye4Eh3zRY)Ac#9Ab7L}Kg+B)p1RE9y7Y zt_t3vE-7EfR5Ua16DQz_zp}L})qNe)Pri;R+s`BiLbCD&BiP4Qq8QKH$34tR=MBfh z>ULv))zS&`JNV;9VLdM<46%EId!J=rA~phK@+LWdf~@$_^roPUZ`GUN1TWpI_}v)C zfYAscVY$bnc8znjfD4h|R`W%nx}!0M)Mav5#|piQ0Vz8B)v>+m@y0l^F4J_X=NRj( zdMsD&RUc=Z>*{k#yy~^ad3Z0*RmS;mJr13#-eRmD_GUe8tR~&H?;|jgd+!*lb3K;p z=T+}9PI-M!U#~hlPeXUmUYw4`Ic_gbiE%F2i!3LZaX#3K zv(`Aj?8UjtIN8|m)-Pv^ak}rtdD=Lm_Ts!_oZ0m`1HI~RjC0~%94}wvwxK>}0Q!${ z?x@c}D@-@eGxa%$&Jo7hz87b;aei;esaS6uc6#3au{e0uPupfUhuYc~fb)4BHNl<8~V|hs(Gv5?<@ComZV^8aHdn zST0d8&Y#uIjqzAL1}a`?jCUF`dK=@128_xIW59h`j`64KaI>NCSj;eKV_eV^e(D); z40jA&<+L|OPGA$k3~|wWhI$E$o#^e$Bl>=(ceY*Kf$k&v*f4)+0>bh$rZrM~ zU~NnnB>Mk|L_Z`pB7u6-W@Kw?Wb+``AMI4yFu#G#2WW~mzm058_=z^FAF-H>hY|Lo z6;UsZDt$;jMt`qznANjRx&(g&p2ze_#yP~UJlQ=8^~v!<1a8`Xl$l|?`F6#TeJI%+ zb04y=9Om2-9&Xm31BdgGJ3qTaYzdSm;aLI1+ub-47d14&EoJ3{CO zN%!O#<4Eb9xxauOM*1kBj|V-X#~{#0i~O6QrKeqE-rO8{ywt5JM#LNDr}oZB_O3|h zIQMVrG|W%!o!d-y347TI?gz+A?`-$0^|D1sl+A3@uy_7pdfTXXvg?K_iQe6j-tW|l zTP*8(^-8nEWy7s<2S<9vyQA`uD685_Z=2~&qTZSA@<{KRNbgDNb!ywt&reK`pos1) z_gbX)S)|wIH|QOdswX}EB+I$OuI?Py3C&#EFuy^Mp8{*rVZ%^Q)xDB5LhumMJNF6LYhT-&H|*!8RXS_B?!C{whk zh^N}|rnnC=Ke-F_{?=*}dD*TUXeBuOPd(!3g%sk(`dN53LT+5G6S~D8&KvX`I+a`R z#zHnDC?A;#IsD7=(>#xP^62Gn{NZJ!C%E${{Jbs@+pMJTI%~7;18dI5Z5|zx&&!a! zau0@-EQ2q|kbHx*49OS8g{(h8%YyNe47rh{Cu2=>FUzgClS$7d{ff}{f+p<2tD^li zDc~M#6RPTOP=JSgO{nuc-y3l=!s=cZ`f1RE1f%E;Cyx#Ane>S9wEU)&+|7sl4AO52 zeLHEnefD2j4|jl`wwU}b{<;oYWmyVJ3YFN#PW+*}1T&TlwuOPOOTkk}lx;LAT?%+J za;xQhYghM$`<1%g!2262r40qf3*CVkD ziK`*uZDVmx#OcE@1-7#{2Ga> zZ4Ha0w@;Zd538MPok7;bGn~@tw5q|P)BW}x&ZxT zdh4jy*e@Dv0Robqdb=5ks>lDS$i_u#tX5TLP?Z7tJu0#|14SOPSCOMluaFbNPwtYa z$U`A60lEf>s!8DPRm%fRb+xL#5*6uXS}g}5QTEGTMILW@Td4Q5%fMDcy1^0DW1BpP zMAi0xD)L-Y&Bj6l)e5SzmbqD0WdcV3AQIQu@k45f4qG}1ad)4w` zQ>{_e`=TPJH?blwK%(s8dPQ<$`i<#rquy`sn@I2NNUv#A=ymFp+6Sn&#d18(e69VC zL#&D;Auc_AIraXmr^oL4tmQ0Gy*bq5c-~AsR&gg1RYY^FS4FD!umxZnRdf6+BGoZ* zQ#~AsDh~@tJym);%v6iPgzD>&w=Ywb+wY(myuHPw>U#SAmNS=nd4AJU^R_d@#oO6P zRIU4`A{U$L!#*TzkU_o;Mo`Sce6#u%fv!cqisWWuyTj z1Gi!djKfy*P=G1c=e|MnDVZVbx3vc<;YwzeXg{CN_6Jw?{5xWYy`Z##ai9C2pc zL~BAjys9JELr>m_IYkSthsLsbRVC4hT;~W*I|lw z#Xb*=zmmR@bYGz#4Sn4cXLM1k*>-jP{L8T!C~cUZx+jig^CF%8{>#*9n4h{QE;89# zw%EX4~z6J&NaOskSIH>TSL8bO>YVHhWN)v zdN<{nUTHq`UfZj@=S^=L^~(G^Bfa+_F8yq9OXwZDm);)J%Vvy+`=3R6k3n4YS`|R= z$-VsSW0odSuiS4l%;K^R;-c5K74$ajrT4ArNgI#!r$u_JAuf6kQty|&^s+2xJIfp8 zpC9QJv^Kr{kSObAeNBfhhkQ5Fn}k)(jrRW&>D?FUeM7wkse09|EhZmAxbBRJAro~5 z4w>pnCY6RRT~8`%dXYNAq`EhhiW*v^o;0aR4W*)H6{(+1YFR_6s1Ze~t3~*#hEh?J zQ3~Vq6Kt|vweQwh-LrdWU);A1#_1^|qH$U+e-_Dbz@9y$k<_wMGY90wZ=#_gF0Q#P4QIUMRhsJ z>Xh3Kb;>G_>NHjAG!L12SeWMXe%f86_i$C&-{$1`uc{9r;PDLJw{}(@-1VlODLYW&uGk3xG`#`e<7~cWCr$j;_m&Zk(*K(HD(NWQJ zq#w2Dj(#Gi;JMPVuOiL&+weC~xTwBGnlHGyc|tes0a{MU`ZrNVljf^kZh>@wm7oXm z4LEm*$ouQP5u4df4;A+PV2==}z=c9j=!v7RblXKj2l(?DBc$6NCUkKx$jjWZSm;%t z2T8X-+-Ft%_2q*$u$Lcc>RVS$n1E z$abqyZ(Ak~MxyL`ld4-L=2|?r~ooBBE3gIkOcTrrc4|p7wYp zBZywqKqn2>Z(Ze8+-{z8-`1y2*sHkL7~HmvQHDH0i>kpX>-0JWbjQR}&;FQE$Ms%^ zSb1waZbB*dt?CEJi}eq#@~X?Na+lTVdDSy5^Paj)4y_We;z;AX2Nzzf<9Zd#jKTfg zr>TtBQZ)WdWxSW7k&A{zN0#S)6`2+~PI!G%7?mFzBa#GY1^VY?h{%l~hu;4V`{Bib z^nS0ew(jkA&FF*PKd%bCU*1`{IEZ(^Gk;_b=X*i`;Nn{e1;yxYVMoxH3VkT)qjEuC z8C-!D-b{K#JJ44Je8+Al=!)J}0-wO*Fd$xTJfGJ^kf)4Ns(d`8fJzlhimFEUh& zHNEek*HQI+dFvpF4X z4jf+-++y6Ip9Y4v;nKz+9=EFyquCCCO~daey+z*I*q^j4b9c+sbUx@o^0#~L33T|) z9keJP;`hq?5AHzT0J~4pPeF8qybgAMz-Ks3`(cjbdywvdfbM(=8clX2kIKh3k|xVG z&qfSX5AnysFtGQDn(Wv{Y_dy`IXs^;?9xVj?EEw65%P5FxJH~yrw)LNGNB#ch>w>D zEk39>ce=|O(H0LRgL-mCIzed6AR`2G^u$Jd@O=){_dTW%;WB4lw5xlz(eH@X=uP0g z0in@XBk?N}>ycBydFTIb6tx2v z6!kGK(}Sg-;O&8JrZWYL-k5qih>PgdsLmD~;ZE@2EtLK=CEnkilT`A`qF(eU;-NQ< zSAuKr?-#B|rP8i)!F9+JbnmpQH~<9QTa#X4M@$T9ueo4bQs%Wf8BNNE46pH(B?Sym z17P^Br1-`a;4CH{vXob1I&sd3mfjbv4=c=Ni*a)1VKkZ7(tLAN>VWa ziU9)(M$G7{ASR5fu7NdT#*A?>V+M7NsQ>$(I(={VU3b6l|9_r`J9X-uI&~^n*Xgde z612R2xlHKuNy|as7?p$GiQh5EDv-^aYB3ghTC?$TE# zI9?yiV7y{9pPpdp2KR|LV_ARm)$RocK=Q0aw^0}pmmvN<2n^x1VQc$FoI1WFyGkY3 zLo#-4a|(Wo=z@L_{1|~z47`QFF$na%TBV<6YmHj2)J{-3fY9gJR*xxX8}q*-F_UVa zK>Q8V_5cEJGr$W-JN3r|GnQ@lqNXXXM4HWsKbdAH;wM33$a@H!ih$VszDm|ZGIr_5 zzRfRCkT!Q7fBp7Zc7t?G=oPsocen$L|ukq8U8fWl9 zsj@0aotOwqKog&Lk5*0ND06e-Ugpk?%vdOq=j$^N==;1%*$vQruw|LXtg-2KFx_j2 z|0mOJMc^j{Yyp2z(Jd5Rn zLKY0vLi&=`lsqx_akI6kycWi=3Xi2$R^c85Y!$wyqB|&hMdDzJvX68h z4ADO!I-3Dj;WY@@Dr~H?N(JUbb6MhMrePJnMp0H_(GaadU$UN(YH&zOtFWbNTtm6b z6CY3`t8gR~NfpM1q6*JasazFy^)1oAu%-`YIkBc1NwU^R75;~`S`?DhDm*|nZnGB6 zqE=SniPXv}G{aCGHU5Of1JdP?@u!nfzw7AbVWl6533?yAoHKpf37Gk3aFzH)==TncI9;xzo?nIT(unDPlkk9J_Ct7& zgwL3WbgyzJ_PfyAC)pL_k2qJ1{s-%dF{H{?pwkzUjS@4)qn)^7d;tMjFzBovgY3zfxb_N^8Z_Y{+pRUSFC8pmVXQLUzpf?0*b{I zYZ|q2#kzz6u2>%OWKlo;iwDW0NfhBCl3mmpwQxh9%s9MddLe8Mzb z<^D-gu5w=^Agf$2m0SbK*rm@>ko8=A7zA0*^BG`0uR&ncFqICka?66NoUhPdX`k4D4Eu0y?ek|De!j<#olhTCxiyq)nfQf< zaX#HZdpMsinWpopFS&)1U&Q}Y3L3cpJf<3VQLc5O?L=tg>@~6;8n+_Q=5RJFm+3cE zv}^!G%M(*5%Bi;w5;FCUo{sK#P+!|+>@xiUG!*r*G4)K>KCy=BShzMbknT?i#Ew9K zg{()wnl(hztYMn2iGTQJeMnK7b;L~Htl=uUjiOx=-}`1=0SPf{pII=g)1Z8_PS$i4 z)kxPZ(P5IBwHe}KR{tZ_tStyQwI3i?R|{97e^HzRkuJZjMD}u(xjHAi{4Zo>|Mk1d z)YF#1i4A`x$ECe}KU<3Rli76Ci`#%f`spxCwp`u&%&#&l3nr;o#4Nk0K zI=26kqmYj6f6#mc*#6fdU@Ll?rg=;MBHcqs_m>qtU2~kJe<8c`FJz^=U!^izXv?TX zql2}$MMrCK??b>A_gWQo210aXViZML+^;A~FX+X`ptvXeN56Vi)73NG*u-+CV{s=g z(Bl5Y0E>IxLgw`WLS+Mt!+&d-W@cgo(&QIa_S}2LiJ1 z_9e@3D(JU=ND4W#N7bpuddeM|7*(el2Q5~OFC!oteaSTejUg#$ybonLOf_zy++m61 zsF6Kt<`QV+&|Q2ii%rq#D(Vb|=(NOjz9~Qy*w#2!MXM=#c;YRJvNb-VC|ko_ ziq_~;W9!jQKAg0k(sV1BZhE5R5KVU##3kJ;O!rQ8Fx>|*ZKtN&%ycsoLzs@Oc=8EI z$4=YoL4(N!%wm}XAm1V7Ca6lIzTCuy475wIP7g{C=M|01s&kuJaWWkxwq zOSeYN?eBN$U(B47{+sLvDznR% z9h*4yzsdfoGR1?f-Ozj6f0J#aG8Mk;oWxuIO}0j5hWN5$6YV@GO=K6>!fZ+U>x(PtpV zsAqJMVo`X^kY^1K)uaIU{Ig9jjDUL*rd}Ufz8Gp-m1n)qVg9qrJ#siS>SR1?$g|76 zLYs;9r1!qWbO*2bfoq+(e@{eWc*E@!(Bg=(^jD5Kyo?NPNdh~#t z9__U};#4m<9R9=y6a4nJ)d~#5o~C;jSo=}J>{2Vc56f9QAJ+Dglj)DFb(5^EAFHiY z{)s3b2xZmt=Rodj|DKh4YzG|hS==KF+P&|9q;4IiG%@CH_o90Y%# z;6d;gHrcJ1%S@A`d@wdn#a9NBy+u1ES(7A_nMpX*mN%R}h{>V$8WsK)(fn6_DxM?n zo`KB75Ai{ahuUjaqBf@SxW0jIni31%CiP^)O$?=71iw3U!DY{VK*sw>6;b zDgW0op7ImAW`MwUeG|K_6kj!hZ_muXjj_yq&c>r2y>6)ywv5F{WPXW#Hx>SnYJ`2S z8)eE>W&ve>k2RhKne{oDT7I^Av&!73e@(0S!H~=3$J_5#eJT6hswmj034ieww2rT% zg8X=^z?ZTLWY4v6lr70NTG=PQ4T)vhD>w%$375SA2=q;iwo>-EgGY@=Yb)QWf6d(Z zqP@e zFNdZf5)TL#7(F+T!!#=&17a3(SQyCRc-6!dCk1l2AP|3MAcqZ_!(zy93gqz5P!3xH zDR$Tt1<~sM`ks1CQu`1K|7$2=3+1pdO)(x(lLgWGA%4P)vRR)!gsos+HG=~x$M_s6 z?V$mcNBJtJW^Fk!pz=&Vp)}EY?Zfmv+~sq2Nb5?Uf}^E4zVqlT%-HiAqYcb_qjX)m;)*`Twfin=e8G%tpXgYOmM(h_@^lXY(qo#xM>Dv4r zO1bY6w;u}T)cCpfMGJc~Etg~L3{5o&@#PwSGU6}Pcz)*HClFse)>_YdC2q0t1nf~JAY(>yV zd$g*}8CD0Ax|>5}ciT`UY1o-6xeNw03B+Hc@iaK2@vP$a{?f4bv$nvn7qWyk>?%#p zO-J&`a6jOFHD}oED#;roTB#%rdms>hfX36XcLIhTXXEo~3>Qr}{3kW`ZJuH6#@iaB zyZDNLVdKT52~t;GRfctSSHPsoK>V`-lMdB*)>Xl5DQuoe?SdwiWC>eWk8AP+2Vw!Y z$+Keyy^D7wpeWJB*6S_Z?Dc>p6Ez7dr*MKT9lh?Wf~unb-RnM0)6n{Nee1_&ZNwZr zBuk*B`)3IZrYfJ1!E~5XxR*n9^4(B(PJZ*_C8Yc9OGtd<>DEC0HCDDDI>T4YrE%iE zfd+j=38$t=Ctj`>^^y>>^RhNHRyHS(rD_9*TnCNk)?-c9Hm9bW#&hejF%aK3kj)mG z4d=R=Ljv*tvhfAcorA5ZPR(%v_8&g`exE(+q5xaQ`6{2~^y9Zp<|%tk$$FJ*bck)) z?=TCSJC62OnWyAErlA*Mm65A}o|5;LZUSxh|4&El{vThI$$o#Uz{|K7V_EpI8*+I@ zcf(@P&xw5W`1_-F8F@Y`JN`@XmJE0552Ijk;C;nopyPnPYyuRp3im1vTw7 z5jVu=Ar&fKK2WIf&ETaie-nn>HFJi_%l>$^65JnewKB3leoo{0Q1`iwmk%7W%0E*9 z-u6;(lnjO#&L8CR2Xv&7KPkV3<*{@1?KH{O3-^FEC3TkI2>o=v&M#|pzbKt&>2QC9 zjE}9|NYxmrJF;U4BXwM*O2|mz5#;6^c|XXja^zN!XXME3Ab0wON4_AB z$#H)MIVnf3iWEfq<;Zm)yXVM_Ae-mN`#~miCE5zIQI5MEWFklI1R2SZKZE?qukh&c zE27fGPTx9hJ2vFVMM@N4{K`HPy}+qCM`JmUbrcTfvFvli$j6l3KbWZRs{y?=p9eI| z^)(FFrgCb2QZ{G2)2tSm!SIQ{ER>w_uE@oYD%5xygzm+ihI5EHkn_bLJ1do`#3hrh zhHaP-%-HBzPBDh(&0-^DR*J8KJ~{OmDX&paAT4imj+XrXMOrq$W9+PTdBizX=rz%?&C76n zucg?*$!BczrDL!O?u7W$Avm;R7+yl_1?mS-@?GmV6<+~P4BxeG#$P?!z##oZxjYg2 z37VvRSIJO}Vo1u7;jLKinjUJajQ2K`E)cooTF8}e!^>=)l*!jxds=3UOtu2ooVm*9 z1UAX%=l!xd++0~(UVKNf!o4=Z*@u) zR!Gy5ugl(sv{R(-wvq+-s)%#g5NuD)32mp^{#5gt8ptE(g^Q$PCAiF#SEFJLUf=#K zAaG$&0IwU1z^?&;yMqGtD$sC>&5K#Q78F>Z0_{{_5t{TjE07c$R$vQ@PYJP|r6tt? zu{P)z7%Nt6O-SsZKz4(JV%!iDFumrefW)kz1op~S;9?3cm*(X#OtZ{OcE z`Wr;o?0=Z8PY&mOmdFT@k=1vYGGya1RtXN)8j-ShXFZ_td{4Me;^jTzw>6rN;0t}F z^e{Bmp2AJ}H8}>_#FnWdTe_b3$X$hH15&L7oAo7Yfo-pCsKoKn27_;PY9^=*t@+Yw zmv3+Qs{1nKB~QfT0ESGqy>ZCi_x4~;KPkb9qpOvai7zqD))Xg>A%XZ3jpyh+OyXs^ z>f1@<#ry#Qp|hSM^L;AY}X8Z&h#VhT1{V%kL*jU_{)M1cc~ zn9j{s@(>0D58azxVF{189G@c_dDl4Z)Zc+gq{$6$AqIPsEw^=sP8@%HQ-U)v%+ewi zb?T4l0jX#Iv{Kb7b@=s+onnaOfyC=?v5BV(sB`mHat>uU*QbeiG6TTHN5PT;AKI7O zSpl>G(ryo&?C-O`O~JbpEqvQ_Q(T5S%G=v`?oiWsR)LFH(4P0{DN~=Jvnqh>GE;z^ zV||R_m3wJ=EP%Ru3w~onfaU{Ny1GmvF?BgDiT2Fv>(Z-1K{c^`TNT?ZOVFvsc-Ve6 zc8_Ji_LX|%p}NhJlVzGeEZ;I{YzbgvsxllNqBPwTBs3GhIP$8Qhj{r(vte*e7V#aX z3x089#Vp3_K;#w!+A}}hk#eT#Ac62n2?*Z|d}Uua zEr1hJz?p`~W0AXz;inx|)pYX;QnbF+)+ayRuw^4iTw0*zW|{-zxHG=OnEl9=A6^`s z#%QIHyvh4W^T6J43&iCnU%9B)aJc2FKM)LeS{M`RqN=_Bfg$?nVe2od|$NM=fY{ zgrL#MZg)X8xgEjnZU8je4TDCzVbEwd3>xi*L8IL;XtWy!jdsJJ(QX(t+6{w7yJ661 zHw+r>hC!px-8|4} zHxD%0%>#{g^FX8BJkV&jR=`WLpwVs~XtWywjV{Q6Mi(412IUaY=z{+S8eNbBjV_qP z$s__$34%r!WI>}N1dT3G(C7v^(C7vs(C7wP(CEk_7rEv@qg@4!c5|T7ZU{8m4S`0x zk6APRe}YCw2pXLf(CA1R=I~?yG#X=PV+2J#yb#O$;}cox>oJ{re5u5VU<5nflVSv+ zq&8OR0js~HmQ*$}y1xO$@Z!m&vvIM5% z)Vxc$y5^vyQ-cj-1WGzJ#Hg%5NrO~jfs)R0EtGUB3?-c!rfDsdbe6PG(y3AAXw0?* zIV6;HYP2~|NDC#M8e<+2(n3k6YRzsTEtGU>tm%Yu`%u!Uai*7$7D_rb(X_HQ%&EU&um9rxuzS zqJOJ}l1?p=I?X~!rI2Z4N3cAnnhl~K(3*sjPMv1%78=l+gpy9JRQmv}c>)rq zPB)JVAJCeFl1`mreiC}Kg_2I4X`U1MehVd?I?Ifc`rTroq*JT3KDJsY>D1Y3&o&Ds zojOP9?G{Qpb*|DoER=NWJf(M9DCyK{rFU5<>D2ks3$swtskMf~3gsu1G)GM2C|281 zhcWn^lz`jVgiA!xQc=bVO7jP?gmsJ%N;-Asb_5gd`}nnD>{lXYWg~==PM!6KNX5|R zR*J2klTuMaNvBp3Z8YKTFQS}h2Kb^*giz9{vx)thaL0)NM{RvhfKbw@bLNS_LJ^>b zGbxb$L0Xm~LMZ9f>dQp-YLR91U6hrgQneHLoKojMEK-kWrQQokrL8ETq*H5mis&~Y z%FJC%uQ`QUQbI|mE^GuAK(p~{0k$f`qSUJLgpy8OG)Uw}WaVdM<;7tBK;LTld5VENl0*k65gpy9J ze^+Eb%*yV`%1RmLFoA`VPTg=PY!V==)Qz+h)3ZQHr*5M8n4SenI<-Nx17wL%(y5J> zvQW~gO|trwmlci0kV@TRskTM4S*IZ=>C|mBm0)ayl1|-jDGMc?y2DZyN;jP?q>NSrCe0*<*ko+y1}n)!=Dhc)g&Pr2R>Cq2qm4mk2fDC z+#>w$ZCc?sC+tKBC7pV+vq)6n*Qy+nm68^YlyI1AA16`=Wu-X3T3xJGCqgLc)LX}i z)X71E_)WtkCD&Uh>C`Wl+-Qn!X4+pZ2@tLKnRbuONTH-tzgu#Pg_2JFVactg=ycY}pO#c8 z=@hQ%6gw13I%Rad#(GC6=~P7d3MGx}TCBW6NvC2;E0lC9t~Ay=wsb0?G}b#pNv9ep zjrH!I9C4n~SnmiWohnos>m8w_Qw^2IdPgYfRI$;rE0lDq#IUP18<%Qi)$&wNTQjy_K|3(y1nfQ*)%e%>6rueN)3Z*oTr%H8Y%N zxy!na+~zX0d?@Ku3(d$vNvB$>W`&YYwKBU=C(W9qTASBsE1{%QZL+p5WCfLHZ6%a+ zs;%K<4HP&FC7o(#u13mc6{!wpFvJB)I@Qq}BSIERI@QT==4EjSC7tSQZnP={N;lbc7?LMZ7}A9IXI94itulG{g{BPn};Bv8_+zE(4#q*MKDm{8KG z{)U?tfs#%QuvT$3OjX-3p`=qa=1s}xy=*?*_NDpokju5`vO0X-Mo^F35zEE-C6Il!cNm2|-Dh6t9N$=&G=KHIxaI zbm~gOZDrI#Nk`%+S@B-%5)nd47k8mG5yD58xXqv$NZ0ta)xw-??NP52A$)X6LA6K? z6)6_6J}V^+YDEbjT~b0L67HwWfndLTm7NS(kNxC41Y{}q!G0T+KaMB?`)$-|A%c8d zB-n4G&bA(_izY))qkZ`pOR(Pv!G0TcdyyKc?S1?gjVP3W{g!q}qxT5dZ)wN&2vVbo zpm3dNBio5Ey``PI2#;XDluFZ0X2)&9r3UP&q1uA|mUf+j7yGzr*mX*HXM%8$iqYiSJ`EI+}1 zO9xt%KMVF-I>=HM?6-8Vr7YNQ=@4ra!G2ju1#aocBcRC^aTI4M0sAc-!&ufEZP|>O zV_oTp({Y+0V85kfhe+;P(D7EM1^X?Xplu;wzoiGVPJOW7(uuYbEZA>p-L+8YgZ-9H zc~B?|_FG#2x=RcQg0DlWK1%Q zN6I6ZrEv_`B%K+BDk$2Q$@==qs=-P3Q^BHJ@Cs_Wzn}LXqy}i-Mf{3CU2UmEQ9EW= zW2t13N1ZzQ-Jsi=wd7t{TA4m*-=@fXEUiA+vYevnr0OhXih5RpI>b_uq9!ds9m+%zAk+TH z>?X5oV198tcGf;%Y57{7i2UnJdg@H((Fq%o^fW(@pIB@4WMFo6JXXQ6eoFL%rM(@e zV|vDeOek3%VKYJVvSDWW6Y+(l6!5lG)`RqsREd4Ro&Iv`&ky>D>1D%$a!0gIcdhsIajIw5yutBMl2)^lKZBKJ; z)gQ;oAndX<%kfMUE#DcjZMKx1BwD@;u+Hp4%^bNZ|or1WJ) zTgW?`Qzlo8ZW&PL*wR-Brf&LNOLZ%XvhB~aRQIB$Y|je{F>WK}J&LB1y6`s1y}IZ! zN?vleP{WHR^Z~W*0inhfrAS@*ob;f&q7qWqSZa3B0M_qymRef$9J~Duq~yu>Ns=2Z zxz1pMnhy?sVL`&>{E=|k@R2uIgpI7eePZcNUn1KU?;;nc#m`mP3$)mVJR&XHL0Qy^ zyhO8adloW~y@S|^0wLa_C)n6F{GHa_@gvv`D;n>+0&Ho5#$AF<(721=1O)$Wyq~S+ zVnNVuTwy5-{@b{_-ypm|tZ`2}k)sJvkjB03MBLGd5d61sRT{Yo_-_>8zc+vo+@@%M zPURNVHwsYS_p^-S$Y?`Q-{?}RDkrFK^aKeK<|%q2R|Kc6fcnOKP~S!v-K|fe%Qgq< z8>=iqZxB%5SY=nFL8AK+6Y~*xhi4Pz5O`zVa*4W0qIO54a?K}lENf0;68ReQ6A226 z=_jk9yUlRc^{1>EwBVz#zugRUAG6ygyeFG*cP`;>N%$5BtH&>*zc00{R2#rG&W7kmVnC@`;ua72Qe^dn5yFpYz5&+lw_UEKIlNEZQQW8 zm=ln$^Yq1x;Lz(Zxep@S#o5_A$PJ0@;~WMZSE5sz4snWi9EIiIbc`=&SZ<>092eCI zm*YO+a(?M##$z4BJ#mIptoeZEah^g92Ve)zQn)ux!dyDc8FIs1hfU1qOo{JU!thxM zD(KjS@~b55?0YIUH&H?#Ct5+(AK-&xxC@Ybm&+CaW^kmHeTzzpo@1gF;L06-(R0|( zK;cKOl zVrpnZFyTlE=k@YAPGm0@p?t0e+OWVWqVP6g<-8G*^eZ&oxqggOeY z_TNFY^gz%ZCBL^K%&?oU3~zD?NG9K#tH6hchIizf4{_9U!Y@%h2s0mhv^V>`cu2r!=Y89Tw) z8en|nGgcWV^ICwh$7f(ssd`Ttx6t}egT%K1qMKh`euH8c6ve2G*gjOOm03F7pjPl+ zH|oWVFGr=y$cS)c9I`&*93Z1Z-ow5hWM3I%ns&!9sEhTR4$-}@i#Yv8BQS=68U$`d zpnutLxSi&M`We)Kr3lQv9)Xnzyve}%2&Dgpz-0)GVqiT2D-ozZ7y&0!p;>J~S(C61 zoil)Xni;F??O=DaZ25i*Z(v@KyK)!(xavZc+ylv)23lxn<7ZU(H_){0j~-KKZ|g2o zen$UtfSw8UgSer95X1PwKjCs~F_=qDwMw3$e_ucm%%rxsx$6*cYi>ZL9D%?E2n;v| zfvpG(VZzy(V440kpR_=#q509nm}odv45z{ozIe0Q^0sI}w82mvOQ^Ils*BB832i85 z9I&_LJ)Ds<{cL(jLR99qNq)kC<|hug{cRnrQOTS2FYDkOD6@62zh4J~PlY*~Rp#IN zx8z2Y{y^+B`dtX_8KC-Ijlio24A_W3;Y}z#6K>Z8-{@bnyE#$~&5s_&M8m0KI2DfY z#j~Yv6Da+|s*APX8`=V;f8EdKFH8Rk8@I15y)(lOi)Q+lrC$YQw)B0orRUOLrZO}2 z?pL6TGN@vCnCOWJB}ghcVS~>KIOq zBYgS4EdJH1jMd)*+5*MD*U#rKia**M&5g(vw)i`IB}dp!@E%MyLpoxqldnv!h;kb> z^X7;%rkuO3D`j@P3UuaMO*tB)YqQNhx^{NL$^4{@xnOLy41Q=)>uMGs=7hQM_H=5~ z%Gnd<^mS_6DW@?kLiv~h(^NZ|{guN{KKIXYoe^UL3{8SdlT2}cn14&u@ByS=MLwHl z3;ig{W6r`eK!vQ}w?w(juH1xOgiM0BN+);_^cbm>+oV!A#FjlOfNgn ztWf=|n&*7m>QFVSl)7p^FTj?rw$o?XeJlI9 z>|0Y#3CGJga|Vai5P25crHTJB$CkI_Ef`fR_w)CzLpZ4RxeePa+3gSIPW=Uv^0knV zO>d7l<2T|2)(j&zvUa%L=MK;9b4M^Z0djVqJCfwFATyaGZLU|LUh2Bo3iH2cS*+#9 zha1p|Pd*}x%bZNDrg#u3j*%363aC0lqdBiA}6az@f>_LE+P|6cPDd6Ao|f<^zDJ@ zH*(QW2co~uMehkj$Iy4gG$+$T`&1`n*~vy1ME$2UHtS+E)^RGtp)uSSIxgGyFAuPf z^x4Iu8pz;uM%))*OW&{bS-2wk06t?)i^(Cw78M*g*EY$m=zeC#{{E6VEyg8t-5ppx z=n*jWF&@J;+>Fo1U(=KyN$z?(8z+yCm9ZzE@trc#P>(6V_C2O>H1qxP8J;qRg&2LE z5xtec+L7|j&Xx~P1Os5{Losplj8nn+`jg!KBw%O zP&&-VpK4n$UA>>~j_kaU(B4Y+a-Y35%WfZFU*og4__>Z48eq$?+U2vbsi!~O%8s$^ zyc37DAs$T6#fCp}!`*h-+ahq09dPx?g|LWkL@H&0f+v!F|~rP%@FO z(UM%Ie@*AacgTHcetd8u^<}T|)9jmQkHhbw`SHP?^|Q*ZV9)BGmk2l<|)sBeEPjvff%j?80vg z7vp2A-;FZ|1=zp%?A!o2F2I(lH8%i8o3@;*p0yL;HWmDQk!{&A4|7KbCxmqUXJrDs z4RICX>UmCFJ%x{e7Wd5aGQq7SE$*Th#4Yqa=-Luhcrk_%i!57z>~(8fE915hqnDGJ zstlI+d10c&AN!Mg?E+>0%d$9!tkft@_rC|#;fgh<_Dbb8Mrm>uAlYU=BMhXTL1yIS zj!x}!${iErAh(+Lm66khIexSu!n7G@Cz4$%a{Urpn@b->ZT^fiBdN`CGLfu%47DY& z3*%*|PkY?2y$K15z6*McI3^BE`~muJPuPiJqDZ%Y5?lhqnn^+*M!JslK|)_bnlC|^ zgJoKI0Ca8R#nzlMsLNT8?stSTs`44jl`$coaiucmg&64j?$7+HBVfe&0k(AUh@TR3JYQZ&xO_8Xv>Czfeva+#n>A7I z<86(kpF#sYgrz_l=p5N(IdeAdYDA-@(MGD9_PN`_uGiCvY^Ict@{<>$K~6MY(w-z|KU#$GME zwe`bodbB;+X;c0)^j@UNJ#>Mf-rAd#(Kf`W!Xvjb*b0M$iB{@L7(g|pvTCY8rLQGrbf3nK(EGb$y_gs%2jWo+UGBx zj%&Ci{U@Nud_w*W3BI2;aXU`vdvj&GF~Jw+cy;rbJILQ4{HwvYbKFKr{|4z1@TLG6 zj;}Z@d<(QJVz&r?18CVV&OgBx+8G7eM-op}>ppWg1Z2NB=56d38)((!_L=uC))g0Fx|F9Z&b7FYk%?6?f(wa-K$cPUsZR_i^HYXH+TwC zvSsxOTewd(4aeh>EYqo-q4DQua89E7n+lmPHS_8~w!mY>&y-sNklP z4LgW46E>Rl1AQmU&vK6RBqA&1BT zj~uhP?_s1psX1k!JU9Jd8Tw5b9KHt%6R4ZpQ6Kp9S8O^eFGX#wGS0|jRLxfgkEW_F zQ6h%Eic){bF7}Llb7`}(j$dVS=nn(Unp(fq&&b`bE-w*VMcublncneC5$>6Z%Hdd{5Q9EcCt~ zfaXh&<`tpu20dv8(9T~Kvg3zfpU9?sP3VQB&mjG}(2tOoar%bP$&Wx!mpN4E<4DgY z{g%*kKZg2arq6ZE+d{tudd$llhwlje=BMD}sqsCjj6*&H1=;t7n!OXUvQ_+-(6@gM z`Vi{=!0=73mq|ZJ`a{DxrsWr)d!jd+k7Um}5A>w@({K**vEfGa1@b3S{u6mwtj(98 zr?YII%8`lCi)h%dVou?g+348XEpjJ%eC-d* z2pocIHvPN(aEEQ?bxpyO?+5=Xg_H4?*+Ma|SF8vhYO4Bb{4~U8Mk;YUh~HJnx>%0G zNS&tKlA-?Cb}}`~ty(&_U$yZC(Xugi%Pn)#DLN-%uUQa1Dofx_(0ZT1E~Fs(?;M3Y zK|jn7=v6tAcY?0Ukt+;VRVOn}OTdcxQcHFU z;$IBJM~B%GFGGcWukli0W`!+2D{Ma%k_nxU+_h=t4pa`}GHo@E*&P~CJ3-?`ZGAxP z87gG&)u!4d%Dp_G_DzjrI}{8TYYU2fk01Ksyv>3ABUp32BF0J8R?N=6xk-ERXLF|-p85wB4A-Bn_q10HtC~MtF2GXb+>BEr$g@;jh0fLq68~%o|Uot9Cpmw z3zWNDIgGnr<1Wfd!||tatk6xloRX(m10<)k63pp!P0O9P+-h0dNx7c~wD!_CYUSam z4$Vsf(M@bLPbI7VsqvEAOG+@eK`LZN5zFw2at~Gx;xZ*GbED`|8($C|=GQsjGkDkU zw;V;;Cc;hT?80T5oW>HBkqa-o>PU?jtLl`XRd1V z_XpHgsE{22sF&Iolsi~C99ZV`TwyP>@whYh|FW>SPre{J))xi}H~UJat*Yb(>t4+& zTei&VK!$^`Z9_Q2D^=b{m-)BGv2G{Zc&_@>bqm57{7oB;p6)k|l+wT7nRCGZ$9BhD{uj-?Q1hlq z-(*dyeMX}TuxG}gk+P!);=PL6&y>~nKUkT#Znx$9N7!hgy|o}tZH2O@{zuB%0m@q9 zv(OICh*<%B(*J+ehDG%~)(_jcS$4a>LgoH;uI(7_If-)zG#*BwIiFD50p_Wd*>@EoWItRtzfM(cKz776N^p3~0+iC%xui?~k*z{ZU{eGd z5ck(-BLVlv`osM7kspWoE4mi8%EX?%e;<3c=-P1!$0?hFCX8NWqA$WO`*q4ixvx_s z=#;fhL*``@{XHx5a!$qu18ZzwxqLT9+wpZ6Z9nq~ zZr>y|9sfN>+j&gYB}pIWSEQS9v~(4^?GK>E@v~o&k7QFw|H}0HOZrPd_gX``BFQga zqL|!!ZJ@qx!cTIhE^l&euR9snU1ioR@AVGp9x4N%Dat&-hw`2(vwnH6YL3!gN^f31 zh96U!-btQTHTXA1v79~~kff9UV9*UKieCB{1^Xg;4+Xm+Fz{yt+9NO3cu#-?D-pYPT=UdNp;oJuKMILlTh5sR(mepGn#G()6Gv_>Zg0nPgjAD zQ>!isrDH4osp-nFsF_8{rUz>)ErPhT(#;I8nix2Yt<*!6RO(-?s#hq;mfGJSz^dAe zzzAQ;Z>b>AyKSj{s;8bNEKXkKoA4_2u%k4Hs0j>+2~#!6jIaqkC`c35FhCP_A~3?2 z@=aJA>@1lbIwSK{&^O2{z{e^p+l1& zt`%dB_a~0bfdNJ*pMepb@w7lpG0!4SjLAL&DMs9=U5F;gnmF6f9xKn8m8jAZ zyYg&N!BJ~%-|?bR$DDeIzw(qMd02f+EUNyEy^_;0l0POb{*6XLw}^ulA8TonXO$O{ zmX#+h>63}5o;5a3V&FL^la`fiZ&|sXBrPjh6QOI8XrH!f5!X``p?$7>{7@VESPTEe zzh>~U9w$CloaX&sNv_9YGTIE`D)qQM)*q+&-Fu;}iHBi?DVXdZa6c}``kV2=qdnGt zLXPz-8-SK${U_yE|8&xFZ2FWO>lb<`nS5LEv>fXX20ektq8Dmz+&B@)ex0q&bbE;;kE|VS{b9!n87q$3_q+DK$lB0K|C&=`ub@W^&5zgW&kR&K4xl{{WC@qC z0i+qm%X9;}SL(5kE=Ih|lZk5vW>+D({Hn|s0taOWlYU7@UgDO(a^KA@qcA# z<{1@r=Q_@YplHN>#mT%8;654V_H;5I1-KuDxvw}Qb_KZEl1AK~z@{+uoQBUx8s`$* z$!agPfBT^KnZjx4@c+W279==jE-gU^=VdYG%p`eFkmgk~<}BIl?;-t0Z_uk`quy&T z(BqlI*+QQRnw#!(MB59X#-yq3T-l<>8iD?;FX;1xt_3X);R>~F7pJK;$v3C!hUIh! z$j0MA1gf4=DcN|`aideMF%@_aG;5Qx$=T(nX!2DQt^$Kf&t21NdfaUfx!zz0j=P zP$e86)-S__2M|5X4@s!ko`rm_DYy?BX;V%x`jM#krvE0o9%;H$GpG7N_a&LSNnjv>aIdDRl3a zpyj~IiSfYdXwu@}HZeMNKO$Yp4j75?E}ldy+fvaOAB8)C5})Z7we@TLYud(6L-y8Z zn$MKYLOqhoX5n>B^0EHqW+6W=yIGJY)wP$~3R%FR+BarUCGwI(?Slj^N1 zxgL_yOTU6e@}wFqgCL)jhcLh=)j0@MJ*3k1N%>}_^huc~Mo!ffHB!#%7AnEhw=OV( z-NCw*mgC%QqjKd)t*I*G?(DFTD0e%A@O3h6w4FI=9IG;?;E{c!#%FiN*&`;WZ0-Ii z*i|NaFXZhp&sDi290@v;KjWO*$R3hzQC&Vz$7+<@+%^k+N)AaI$sy^AHt17wNZLpa zJ?{rS<`MQxd%@#w(gOS3Ob$Iel!KN&X3DIoSj;V^rMts${y89 z=#N0l2D9mvwpq8aS-Y54x5ss0MRbmY| zrl)B)6HR|J;`>2GziSX!jDYkJ_bQw17V5gTn1VdbxS4|NBVRJWK9XvOKGIU9Z6Ap! z<@XWHG|q&=R=9fMYO8b?vmb88QEOYo4}^|>O%b>p0VngBHU~eOp9>lEAOX;HstVM8 zIkhcOf~U3@STXrl`D%^l^n8b(9GGjI^p>Ny4pQ^vv~r#j{A^KCr0uMBtTK3W!MDDa zjev&CoT{AOZSYkJI*C6~WiC(#FCu9jWZbI^euk-l(hb+%0Qh$M(9^T6li3!?ZmLad z%ba;PklpbCtyNzrL#`fKs#VKEjW}P4?AXYj{yH9~zsI3QzLG7K-?%gW8?JNBwj&-7 zMzz)(RKgK3?J+c2QlYn|?L^|FLT}Yyga%6ujq=ufW2O;$Ywwl(Di*{t^v1ofu!P4u zP4`EYNM14L@G+Q|)1MGl8t7R&Hg|?j+&UA3)FfXj>Kr~ABP+doh?S~Wspvo%XhG1VsfqliQPjjpTj_4NrMu~mJ3QF_&7m=9EohHP-;w2{bX4090ebuyB zMz!JXB^Cu}mSA5s1NM~^gc}@tf$J5}A=p<(;>&4bUp4WuuUO%tG~E?4ytkqZ6#=Xy z9&p>l%h1CCqVyfi0alo3W^a}(j|5{!68Ag4YK}mh{G|C75B62OAa$moWi?W?tkal` zKj8Ax))|79RSL8$eqwCX%?#luJ;-=wskzNE2QjxQBd-b>c2CQe3nym@pi>hc(1|0& z7V8MXY>E=IiTetv+B6qF`GFlo=!ycNi(7VS4WB`TuF{*0p&v&KOv^2?t5F6NPSMb$ zPUthW2m~{IG&G5)S0au7lpoj>XPZ4`x-^`5tnCzYW(N_lI1kxY;gw_QGnsmZnShQR z1p*e&jRHo_F|*M>TRMxld!S*4k7I%4=z&a5II&W|iSb#(*7aQTB;#&3#ukkasCebR z8NL&DE<#6Dbg0hN79DE64$@<;gCY308TBjZP?7)t=upudI#l$0nD2zqp`!ONF5#{x zCx8wW3!p>A1L#okFgjE`j1CnKqeI2R=uq)6I#fK24iyihL&d}BQ1LK2RJ=@px^UsF zI}ddh52HiH!{|`)w&vjoYP7uG{QwOSZ*TC$2gunj9a!-&I#fK24iyihL&fvZq2hVy zQ1PAyA164`@|DJY7{fbWY2FeVxHB^cfX+jQiszw2#q-di;(6#$@jP^>cpf@bJP#cz zKEeD;@_)iO1=vzJ@%tLIM?{nOL#z_-=|+fp*w&8YHD~QSVk^h>HWq?t3v}Un{IFaNWdI>|IS7e```5-cLM%K#Kv{sSz%j)Hj!Ds%6dy@|krLfdGmfAk zB`g{eA&`=r=(dQ4Adnio4@R*&cOI(NDN9-iBtUu{2q9k1PY5I+ zdMy;vLLdRq>u*9@2qfTny&!%Z66vk*wQ5=W+w@{PugBcVG>swi5%*|>khMC;Bqyf-cjf#l9NQAB4Uklcl4 zxai+%A&}f9Qm0u6BzLJ?nPd7J+ zJ%EHD1d@A(c~|Jo76QpV(`**{ehY!*o@IJT{cf=kNbV}FkF6F0$vs=`*=8Y-Fd13< zwp$1!_gtlSSO_HdJf(M92qbs4(z`4Kl6$`N!Yl-m8-hUMh!F@R_o#skJ|`u(6cv(i zuflJ!D5C)-{6Xvr{1FHw_soY8#I^&!R*d~h#H_49Ah~CKBvPMerP%s8DHSCIlDn!1 ztb|*N-(p#_+xnsw0?9ple-Y><0vxqNasq@va?cqj0^GA$4f80F{eg0pLLiXb)hCPW zX(G$$%P1>FrD{hYklgdH7paX|smDT6C03LWNbXvqdL-OeMRYned>s~*3XBi}$-VGr z5hc)qwX+4R&*d#zwPpx`MmM+gGBUM5z zjzA!}*HBa-klbr8K@eD1_$`*cz8N8F97A9+u|OcX>sjppmdeV0kd>7jYMG$HahRU# z-5V|~04TxqV`n+84}r87UlDR|qWPGf_d06k(T=-8w3ioqgg|mPTB?cn57yfzR%@iZ z%o~d#?cQRkw%%;=d&j}S=i?Ut(a#&gEI!&24WB1&$iS=cdn55Y<| z3xQO~jBf%<7BhuFa_?sO1Omyu_aQJ7?qm41ZSpQcwwfeFE9f3e{-Ki%!BKmM+hYMCrhp~-UM=gw&Z%_y~(t{SaPHB2!Z7OYRS#UBLtGW$7XcD z@jl>^^1CIs7;hLW_76*LH69_5+&?X;5J;|LERFT9I};mSud&_{0?CaiAM0H$lSh?S z2qZVAG}b$I8aJ*q*1J#GSP7-E-Vp-HZJ;#PJ3=72p3+$F_GhIPDvkAy5J+xArLo=- z0?92lTJ{L8w`W9&VOMKB&TV9lV}``daZ3#+bL_|j0?AE_5{!9)Kyn+Kg~GKENWhl0 zq=i5Nwk)S+410k<0=6vYU>^br*s`2wxyvF160l`Cw0sC8fXT8pBjpwX31G5T^Kd8q z1lz5Zc>{IWxQW}^JV09sfdmj)-&R5(x#d|~34sJmSx(m6`=&3abUSkz{xq&|JD5(a zzckZyG!sS0LLj-F3};>zmk>y9XLF8KArMIJzUDq5Ed&y9XzxV5v$%vna=V%jh3x30 zzhQgqXP!iU>08+r-AoO#Ot{1F+ep^=lGU67(qo_ykhRlnRW2=+2xvC6V!A!!s|@!e=|@@kjNzC_xRv-VmW?MjkE(?b zNNyi9Q6vr(2^z`mqs@_2i4-gSE(_GxY9<7d+s}pxf#mi#+_a>BWhD-!sU2Lxa^5oWMNeU zf(DfpwBruf8-SmJ_V)S1@rJ;-f)4K^4&BNd4zmk7O8sKxBm`1HXMIwEs^*~gE<>Z6 zggXo22E+^M*udk)*c-?Q9|CEwBLRBUpy3aQ=FWjRM3Ui2n13C_fG^9ZXEjU4w5<9+LLZ9 z5J(LQ+95XK?kiF(;*hMAG^iD2ks6fH2;4J{-zN3m0R)JW=RvR1ZX@jTpjWAncpfk6 z^D>8`W>7w_1_wG`A6tn{Ji6_?zLwg@yQchH4S9nhKs>evZbo7Y% z;|=DKCRe?)(M;YD%d7N`ss=T5mhk#I4LsOfRyct9drQ#Vh1Dz&A6u!Uu*NEJJpu<6 z4unTZ%%sY~L6$1@5-4loU`sXeDye0N8jYG@4J2H+W1T|&9EY4_KU3~R8n8se4uU|_ z%VCzOm#w~e03yxAsZlRM@n_W2uI6w>9L|#LGq(%m7eO)gHNBOoueGT=p&vH;24l-y zOXHihAa6bGX(n#a>m(>wj$SXppHO$^ZxUQc*&7&a&MVx_jm)$KuW&cALv&icP2oz( z$v+#rMbF6aKCihNnYWTl)hoxLSTDg<&`Qj&q9(UJNV%v{$QqC>q?{R+v&>gyTH6cN zTjOPk3LNuQ)2hoQ&&`_GLxDWsMV@U$&E-^MCbf|qFK3RpQ?BKsOg>qXZ_#8g2a@+e zRkf1jlbQTP+9)^yli92923hWl8(!rPV5IQRDTk!A1~^iYj7xreK-=JBDceYM1oUdi8cr-wiO@JB4p2+085#42f zB>xnF=?uJsz&ZxDA@Cvs-RdXcbJo2uBg878z6AnjA<#96z{3pef#AOp=ya22b`0z; zfp!_zEBH*rf1N&4_E})hwrsqNA#FV=*VYBm(OF^ws)J2_9DWbMi)hm1C-aYMD)3v3 zSNOUgtbPR6-eP9dgEdyHu@(B))W3-=d*(;?Vr}(iO&!1rJb=~NxxJ>j1%`@wz11Qp z?|g!mg5!W)6TW(T4g?qOKIcGNg+;AF7jmC4+fNpAG7~Afu+EBZxw|uRht%g-K+pH3 za0~AblsaXZm8w^%%oXU_-i6#)(5rZ-P1{GDbih#+J2`8VaMRV->1T@3=7qhDF`Pb1 z*yj;RcTW*riyXyvr`|{0Zvbv(*EbxPcK>7b^fwJrpu$eZP=n!66}Hn~Ja0w5=Z)i{ zq$@Olu?IWV!u^a@$bn&VA7I|)ST&}PI5UgwhRd*viP1=THu5TgGgC^#Cbgzq0ktLk z>FZP*rwq*icV*5>ToTp^6PEKO@>d7e@IlsrwLrVa%eUEiBR&s;ZfsvnbJ19Q&e2Pp z*bVFtuMdUxh?|6ZCt}M0UQ-pD_(YS(WQm~AHN|E7?TJV)qtUm29eH6ZaenH&e3A?EuS?&6Vuv;^h@5xsQ?+?ob$; zY@uYOJC@v*N>;n~QB|3e){m8Jt>ifOTMD;Pvd-n0O13pmAWfv)`mvJj&9g#UKUT7% zmS}Gj6NXNFF4w9*@mi*KBqmN!h(S_f8^v<@sU?7;HE4lFP1!1BTlEHCW9 z^1==*FYLhb!VWAi?7;HE4lFOvf#u~nu)I76mY3(i^70&5-Vug#MAUa+d9$R7vJNcV zMjdisd3g>jFVBJHEs;9SIfiBygUb%m*>Fp@*G%Ro&(Fvb6|OS4lFOvf#u~nu)I76mbcb$ z5MhprVhr-6A$C+ljCFBf#puBD&iFq$uwu=z%kchB4y;%ctO(x!l>;kA2bLFdU~%l{ z99XeCk`M?vusCXS4y+hGDPG8dMGaZsm3XmGU@p$FZ&=Fz;lQG5C-ym|{)YpLQYBWD z4lFO^z+&b(2bPF3YbQnrmKSnhQ8eek%4)Scl^7jZUdVw(`M-8xT?|gb<&qnt`@#!3 zu&6laz>;jlffbvLvolW|Sg{DUNnXf-MLGI=?1qIQH5O835 zIR}<^BQ3@BEDkI$%j7EwOfsj;=uAk z4lFO^!16*4EHC81^6s*h)j5UCSR7bf#f%gC6swLW4y;&dDS{yf7A?thU@;1HMHMl+ zoV@?#z>2M7{|-5@m_E;e6{7>o3pubTm2+TS%sgZ3*@__t7NznWSRx7smX~v2c_9au z7jj^EAqSQha$tEO2bLFdV0j@2mKSnhc_9au7jj^EAqSQha$tEO2bLFdV0j@2mKSnh zd0_{Z7j|HIVF#8Mc3^p72bLFhV0mE&mKSzld0_{Z7j|HIVF#9%=fLvv99UkS1Ix>E zV0n2CEHBT2<>fiBygUb%m*>Fp@*G%Ro&(FvcVKzG1Ir6Iu)MGX%L_ZOys!hy3p=p9 zumj5rJFvX41Ir6Lu)MGX%gb|MdA;w-4lM6~IFV!|YLkxSEo*`c>xEO7jR&C0SA^BaA0}WIR}>a|H6Ug{VxX=ml@RZ|8igz<{Vgs?d|i2bzl{S z99V@NrGC|cRoGddRG|E?9as%>4y=ZScJXw?fz>eNz-kzBU^PrxN$bFBSbQ;?w7d+N zWF1(Zbznt`V|;Ng7RQ=ZC=RR`-EoEDz>58b6|v#}a9~ld6KjvO4MPqr7BSC(Wku=0 zY8Y@}#irqLJ=&RWo7h806y2AfJ~ZfIaAX(V?{7HU@(dp3qWd$*Cq=n)q~dU)T(2B| zqunf3h|6kFmGp-yNd-qCO_SM0P44C5%$F>S zn%b?6eMT*6>O0kT4+gI}%gIg9>jOdUW2sVcoD~rP1H2~Ua4TwQseQaDgCN<;Qe}G` z-pwg0>negB_d2}0Q`FiL6`n)=Z7fykB}tWAs@iMC+}c`dxYwRkJ4=ldpIT7|zOE4| zuXAF14FR*`7cA9+qO&jOR$oeWPN-Dpgi3XuwN6X5+EQAo^DU*Ny1-Iesx_9fr6MF1 zOt7W8&=Ojzi!7z3y4X@$s!J@TrMlEoVuh2wi1sJV4gU{&Zvq%qvFwe{nVt*{14AGnASz*BGn25xWI{lZ zWI{j`NG70yKmy1nnE**3fdp`u1kme70`5w{T_Gsq9#?Q7;Buc{4T?Jkak-0rzpCyt zb0)!i@4NSX@B9A$??s$B)m>fPUEN((U0tUK{O_FDcHpBObQ{|avbM49AhV71i|B1V zs^VBaq-~q1Al1gUgB8@-MK6iB9jaDGyo-Jjz3p%{yZhN3^o!_iN2Q^*GkthRN#GaJ zj{xZUE7q7uq4i-qYaM*h{G--?Mb6orv&Nw3bNENCi5Auc^`x8r!D{xLmY`TyTAFqj zA$R4U+=uY6Vqnmze&bUYo7CM4nXjE^eEQ^mOi^5H0h z)d1CRtDpZ1%Jnh{8NJovXm52m>Xal5`n1I?GxE9SwYtVFmYP$*dG$l+`9#c^)|cze zXJ$>c^|50i8pT|EyDoOXQhZIgc(Jv3u`b@j=m5E4yu{_ra<5s+H=?}i_)FCBqv4Lf zL=@T$HapH>0HEsl%T%tHNvK)JNnZ5nMK%AzH6PM7erl{j;bHByJgGGu$sxBF{P*@YDuqcYcqA-Q~h{AeBVU{kLZ=uit3In-I z>zRUQ2)fK??CaUtoCi3;EMUCQ566nuLw1_#SZDoyqH0Q2HET8bN=r58<48wUQ_9tB z4_8yl)x1a5m<5_wgBsQlGmBIW+co8fEj8R1uAzu)Xg}2KNDj}eK=T@CL~?zyj%0O?BMBb*$C2D=l@*4cBo4)sZ;Dtm6i%V*$Vf6TNvIApba# zSFYvln(V_C^3R9KUrpri2$R2>$bUfOP4v@}Kdht(iRJ^E>^m0nePJUg4y`Bh9Y&h1 zUr*#S0VbH}&B^O^;W0|7l0?J!SX2I0e{V#2V*{#ClPQrG-`hy^exot|2(h#r2oO#7 z{6t$Xv!p4O!BFFCnyt?mw!73)I7fdcjRNsc!tH;CG|3vIdE00NqJ2=&7Wp4T=9?w0 z#4jcGrx@|NOp5;gkcf|gDWjN^Ld@wm8pIPU#0Mdt3&`Bi>}qEyVXEKjsa$n*+r563ESFaBPaO4b4rm8Ml%-U&PR0{9rjjRe-z) zEj_vx;S$W$kEzkdVAUmWM_oI0>6k(>yYuxYQRM|^mb_|S#<@Uh0T->dlW99nJ|-Az7pp(*m>7?Tei{FIq$ z@`1s_0GSVGQqSFE2?8Iw5;Pc)_cvVyjqH|q&4;7Rha}C1A$+cnHu#93Jk+!^n?;F=`B;Q-DSV@G$Q@JWRvGyYw&%5ADa} zVF4b}=wUe?*5YAwe>~W{iMpyZjON=I989H_A{>F_ovgEGA^Wc?8xcmlIyUJrC1P}< z&9_-&t_NmvE8S^YOlwdLc2~>sK|ckW3Kpo{)dbpI`PEN>l2^hu>?#s2lbL<-n!>^R z75iRAlZ`KXnzLsz&7MUQ%-J)UQZ;}FVaP5>er$GNeTRnI1k>TX%QKK%gKCgbjdq_>+59!2H&g!TDdG| zAiQnor4S>>DtqOS#>k>r82nvP za~bZI37CiLJcj23J|E*Xo}q^+mtzjkXTQ~7C>H}b!JrX5XA1!^ngQTEZOfi?%L0Vd?0ji~SXebz5N8oWSKw4Vw5U`E_ zjLf?s+H|$sroJFMg)FXr-lsB9Ge&Jov`xNH!ifE;d^i zi=T>O-+IALE>>d}`-F;xti`-H>o(DF&qRUW8E*O^9-A*!)93M?X$3y90>4;*!P|9p z;kElQ1|j`9^v`)eg+Cca`f;QrVRsDTsrNryqR6A4giYgED3;hb^NUVO?k-1z4$1DXfeklzNGdq5Swso%%;g-K!}c z*r!u#A$r}eRlNd+vjpLh2JLb>g#>+Skw|W@+S!c|;<~&@|TW)!1VR+iz$h z+aFWOnHfK8bnTPNB%(muw`;kXS=Q} zvkWpA)Pa$rc!6Py2Zs?vNy;~pgJRc0yS3MmnWTET4Yny9nHgtBX42fV96;?rdnN&g zu9@j@%;0UIL9?aZR^+sUqY!s18TkvA;PpHflLko(6)k#^aS#iyBOFMyObwN2dkLd! zx4k_WX9UJyDSh;K70>yxo>yD;p!fK@^a>!7P5M6lfjaI^Fk76LmUl+FC>B7 z1o*$_LXvFI4hM4LLX!Cm>p;%`0~eAk;rd@dAg9AQy$WluRT{k$7t91#Tdlx(lk;Lq zMaT|5cH@a}ixN15b6)fgKzHAkz?pU#a_v2B?!&DBT|yU-*n2u`_CMli)p;ouYZKd| zt3X}udqKX%*~J?F2CVBA=MW*h_-3;&mjJs_3~Srbz=(Mwwhx|hKMIYITiuVM1`B6h zSa~t~)mTY))B906qJX*|gTS*yGVV#}(9Y zeN{@EweoDbOUCU+%VjruM89pWktp~E0IsC1&HfI0BIEBtiuH1pmXXUYf#ZslJb1+OZ(%o)v_te$1e{X9Z!ZpE0QJ zSwWcU-?*&0X9Z!Z6!OQR)O61Z!c>WL_?{JnsqSDHq0(zGR}rTA9>WNgo`-@6Q~es$ z!}qKpOmzXq#u}zdEV72F_CoiQ8)2%C zGW?LbX9Z!ZS2Dau-Lrx))z-|<1L~d?gsCci)Tw(`5T>fyb4cB@f-qGDA656PAWT)k zAFF#-5T>f&!}qKpOqG_E4pXHS!}qMX7ImRV6{flv3~|bQ ze8w>`BG`dGkeY=rzGua?aVs93@>YB*G@4h8rf~V571x!ujCCN4MZJw+X;c-adW=!O zV${n}+h0snb1Ow=xV8-kno}loF`_v=T#RcVDmK1n z#Z^V9e9wxjdJ!HGc7jjE^pI1Cq6 zOahSgmA+@i^(gg^?^$s@z6F_1c?&+(m^_Ln#U_5D8Gw8u!S}4Vo_K)^yo%2=j1Qua z)jcb&BcCzG*Z5Q<4Kyh-%r?6UQ*Dh@r)-Z;g+=mJVNv7NJu9yF1~b;kFxG`(ET+n+ zohVFoM;mBOx@X1Ja5WDEE*J$;|hv*(>*J$ zFBH_zP4}$0z9gwY13~w!xW2lKp^{xkx#^x2 z*C`Sor1;!)&x-3us)O!Xann63uAdZmv*D(DR$Mq{kKP&Jd z!%g?Bxc;gt+GDuso)y>M6nMaJ(>*J$Ulmwqxapo1*KZ0uWXP+ikvL7_c0k|Joe~IB zRr(tGj_z4On5xQ$zN33q5T>eN=sSa$X`b-4gxs+l0j z_pBgHm4rDgGQMX8VX8y~Yo6~}L6|B<%p)vI(j89-Q&ph4X9Z!ZB$^Qn$M>utOqFD? zdCv;MR7uW~l|}cgAWW5(mU+(#!cYf#ZsVd58w$3lmxOFpjfhS!$BTTh|+WHsb zP>*n1>7EsYshVx2dsYypO2Qg#wRNU@RuHBdM9D6R2vfBIo$pyenCd|Aj=DR6c-Y?{ z$xGd(dsYypO4E_LyPrmIpm9Be>Yf#Zsb0lBQ1`4LOm#1V{cN4-o)v_t-j4b@(>*H) zQ|*i@o$?%fp22#)!}TNrI@3KX2vZ%-xyhVM#wSY&TW7jw1!1a@3rUn5p$kcr9N{M| z!0sh_bk7RHR5voc>+q?RAz6y5#I0N{-Lrx)RWb}Z(>*H)Q{Br&p5Y=yk&MYm5#1mi zrb=3_GupKco&NE6Q}w3c^&m7P@BzVX9=bbf$Y&5T?qldV*?CRnK(K3c^&ka6NPl zqGAS_eI01?5UI@8`2(6FS zn=D-S7(BP`qxK&*H{G++y6@x2z_fDHJu9uvdsf_Z&r0h7dZz+Xv|T$h9)pg1R{SUt z%lE9bagkx{rh8V}nD?x7qCLwN z`{9vxihoA4+76)EVegsho&h>-2hx5Orh(1=6ezY$+CUVE+Ku?1DT0@6@!UDK@9X$- zmtnrf_WL6qi6R}W#rCH@&=A#Oh++qP%6YL^t%TL#BUE5EohUdZk&b;FtvnQ)5Qici z=Pg-bi}g^0i6&F=QikYRX8`{TWVDQp9WoM0t>}WL*r8iNwACeGck|kp7(*2_ zIei64kLAl^V#oZ5XE$9I6Pv2cIh&gfL}JHM2KE0ea5Q!tH3)*wO_#;Qo~xh^Zn`Wc z_B;i3cGG1svEx;v&O$SYNiAh;peq`yx|l%%N_8=lQi*TWmWME+H^-*?;I4Fcq_LR% zSFT-mbc&)W-EROd_Ch@t?h z?&k?})^!YxbZ4FqXwIDsrMiEGYch60EkkMUu9!Ztiw`q&f%_nM7#ljpP_}z4(OlI6 zyt4P40j*Pc%iQl0(>Ew+mHR8gyoMk_7R?^2aFYUI(OgEkn-z#3 z*n%nsmo7k+9r%MFFs(ayha3Bltkx9uEDB*JXPv?TP&cEpRwCgHgZdklyqS}!<0_e0 zjymo~f@%bDAu8(tXAvH;B$CxZ7ySUKXBgBK&I7T(a0)R=VblCXavS2>9%9lK>R6lj zcDcwM1qv(t0teS|YU#psn`@)RIiq zX4`J%An&ff>xsx}5b482GPxf;rVCpirjp4u&j4)eeIK2Hd$D<>)(UpmJiMG*_HvZ6AVsiYIk5iSZY1FY`E$>m!6nZ%6#Dzdmg`ksjP zPo#=*&`fODt}FanfA0ekT_J5Wc24?23y~=sMhEmCU@ETl;acm%wf5m!+U6jB)+}Izt9eKt zyX$It`e}6TR04RHU_Ir^u1N0^~tWq*y!tW44Xv2wC1$Wtj> zr!y<(Yk*j}P9e1vkr}F3xltn#E4MRJG%GCx2R>uLZ8{xS&~kp4d38vmJj#+c=ayv$}!92)w{$iA3(Lv4%0fjl0fEFJ@INMK+g$Hm3TEB#H_rEbPAIXymIQA znOANN5U+|=LFUykozA=(uL0r}DGpF?HtoDYONoI?HE_DMd4x2}R%XUpjn?x~#f(3p zFUF^ckyOmsO3YX=+hoR8V#aoWiWxT&GrlH}nQ_x8D2mw2z>MvhDluaYi2XfgJfU%! z8T&Or%(zMwWM+J()0r7RX@HnftB_iX(D`az=r!nVsXIg^26ofH>6o$Ld@y4jGb2%> zy`#U+M_-H+2#HY4SVzow6KP5UuOnu}%rTi!M$DK(ATy(!zyg4t3p6!i#xfB5d(6ny zxXg?t8X#ues0uPOZq(__jJq{J%y?NLHCsjAy_OOK4{G2v%t$oyX=+@9z+{co`!O{y zcA_W7x$&mXyM}e%Pe}AOYRuozfPN;rsl*ZJYV;@(qi+kI^Z*}d|MQit(h+^B| z{UCLLrc|fDPogQttR86ULF9gf!{;II<6+GLH1!xBUctjCD!5%2_?Vjd+z6By9y^V~ zt&lg8ii{)z1D|Nx(zi|hhRh{8^B=WzwDIWqsHLBANEa~UNxngAjE=n_d2#*c09t5s z7GjXwKB4%Yi-EZpEdv*5a6BGM`ZGFxHPR8nsVAq1rq@T99@}BhA;Q zoy`-cZFpkPJJCo%b9QuJVW8lXE5jk7gC!F$Fz8lX5lqnidOpw5U_z!(ly>!A0q21x?tJ0!n# z2l`00;f^?Htd9E1L(+K)h5V?L`!To``;KuVHIhC$ke>jXdveW<<=;1JtAF3@QOczc zD4E3&t6#jBXw(>k^o1hDE|IauiSse&9{!~ogY*YyqKaQ=PkfUqMB=Lhd;Gc37~@S8 zay_eWY9txafws^nH5=pEu|PG9rXn}2!)ur^>WQY1^4gqhTmvE<)o)c9k>08L5z%M# zcE`DdyQ{mM(cXx4!p(AqO}Iz9e6Dmjb3`wkL!}@evspjFM~CAo7iT-^0dY`$&??;K zFWfE{O2*LfSIahvOiX$li3_~KmLA8)V%=@&ab6T^9maQ2dK--ox`gjGTLE`(ACv%> zbP5P!GJ8-NHL`E(^tgB?&_2e}?l_MzrnQNo@;g|QsL;^XRBuPP32bL*axoEdoisVF zu5-97Fci5i;Uu(yc$ez@!#JjRW~3o@@U!dHWrnStk%YQ%%Yl%JwRZIJY=D~6got|% z!npvuSu047<0@L|D&nnqQ90dJZ8wf% zK@}q{+={`QHI}yWY#(jSr}DmLwVGp>9O?F$*2xegek*EvTry9hlo+1$W2|{9CpDbp zx-!*G6IP{dfMW#>ll!sW39{tZb0>1qlDQxdQo;3+|JKu;K!1JTPI zhw4f!v^K>;n@IE2VpPl29hp0j2$5MCHK4ITvaGLm77*jxUJofG3{8_bC03%uLKL-* zmO&I%_l;f1=k(HrCHQAq8(zx6*7}?yg>S)eIN8Fjc|s93F0i*-5hvBP^Xnr6a>C(&WM@bDc&Bb%=BqWMq37`N@O;xy^VWk)kTr>mDMz ziOx;62ojz+V_ndhutu%vQG%J~X_PEFPjgtyuJIO828Nv9ytBlE2^NU~tTc|B#P-gN_W)j}GRQARcOJ&T23$3(NXKzvl z)J4`DlMy;^s_r?>Jk&BR(om&Lr?Vb`iq5j;&?L>aQdO!jXiYNpXig+CtRIOdGs5Y- zLKTIXk;EwEi<_h?>`PRtRU2O#K_od$70n7KF_ZsCIP-?!Ul-2M0y3g?&bG?xb4*#? z4G)rpHY{tUWlcLDYSmP`Y)_lH=C-3}WS&7d>)FYYIHF>sM0%fy{9*fA?^Cq2R$`y5 zY}y&Hyf&pW1CYro$86s~T_xuZinPATj-jdT9qAP+XgeD<=-tssQ_74AFMzP@)~kPXv;LXV$7hkHuz^@a zQ)PZ7YEw)xG{&@&EM{~wX**W8UrXC@t@IRV2jPFNwIW)s=c#6sMi{RiDfN5{2?(DF z;Vv~7oN1@YGj&nAg|Q$LXevZAOr11Q>7-0c>sZQ8vJ3?XOja%2GOiUh62jRWHk?sd zY2%GR)@~?rk(H#)Hr3kND5GE+Xh+Q7>CGpL9>groPW(JLOJ!~XFOeuM5R7n8iT0dG zYgNJwD+Y=9nN|!+u!vzAWG#isjEcxz3`kSCi^iy=+1AdQ5vIo4WYP<6+GM!ES@ut3jej*|hl-jUv4OneJ@4%S=dniidU}F%i3|Q+B zx0~yoaECBbszaI)ldU;T?1&5Ww9|&e6xCbm_=S;ifl3OKh|DC@5TFf$Ig`+^X_f{v z2c}zD64@qDjX=+~>L&O!X`7Z~C4qfFqynXeqO=Z)`HQU>L{;1UxA6cNL zoHm{J+PEGZmT!>RmaRu~iER?FN^C4HczPlniZX^qgh`XAgQG{WwV4Wl!^dPe$^6j~ zHW28G^qatBQvwr5{Q>MLU6Pwus9feUB35sS$n=B?xfq7)1%mah5iqkG$z11RS)m ze1<CMzgfN7)FW}6FZgQJ>Dz8^g|sArQc z5|f*Ifko)TH>2gc)@cy!sxJ`hO-IP|`dG#CG$od&D-D)qtqTI&0aB8CF zenL;g8J0G3$(dGCO{6-B`AZ^Wq!huW5zdZjO>#dX-FX;Jv#0nw(mgymqD1*z>lm0j z5-s0pVw7-kJ$I!RzN~~Lvrl-Qzv!JkNp69^-BS!)Mw|Sea zYf8!dzia4QC6Yq_2Og)$BCuNcTAe9xmc{E2S5vd~Xv+0OEr#`ajQE~#!fR0srmsoM zFX)L#n^`EC^qT64NK0vLo?baL7ngk0t3@x1h0&%7?NhchDFm$paFW|pfN7%_$GKJ& zGse;u$V*c(XtQ^$RmF@`K$GJEC4IFZV=Lc0hKCo*)D7n=L5X7kC12AhgH8w`^EJRzl7@dkE8O&~8?O<=TD z!mOrxV|HYEC`A%w{+m*N4%uLTPamlLhEg%P)&W#W5q%K7TbLj1v|6A_T9wPf=E~*r zFnz7+en*X1b%*KRI!$oV|MP0ZdP)&FQ4Swyvn2Xw4=p0o3unjx!Zv%P%g)p#%_V}V zOSDA&U0q^rX;e)^Bh94+PDdE}K!(86oGxn_L8r^6`vH=DWQ6x*7&mtrDOVDrg;c3# zdz0j7BQ$d6tYkYBiIVN9rfk>B1EmKUEWf4v*%`(TzM5Py^ zREkP!=0Ku$MyV82Ddmw;(mM*P%FtSbR8rJ_W?^*w|6N+cR6__%4ewHTp1Yz0jar*w zNo~ydG`Bh%X&V;BY}mv`Vv7)U#t}%-u|;uaY*7bmY*9zu4h$HAP_3~=oy^!GibbNJ zT5cVJP9t(cNlr_&DPm3a)a7Y?mT84VMVfM4QiMp9(4+7qi|~q9>kup2X6tUTz%4;Z zG^cuo(MT{v=@h1J$`lGQ)rKtWK-Bw1xgC=jiM(ul>!TIf)pRk1*JUJJRGUv!OERq`>?tA!salPZ!va=(DsfD-)fRQU{m*RbBhlT_ zM~&)?FcRPyUM{EI)c=2VUFpS&bx7fbXGWHpT4V^_G#3V<{d6vvuX4}Uxx9+aC~gM2 zMF^SkBJq*=j8zqxwH#d1Y*Cn+#`Fp6>D?>5M0dv!DuBu2MnwSRU z5w=)5Q89o`P$>$~M5Q$sndNW=gj+}}!egDpQ9?nV^r`h6DiK=V3RUGI=O(jMuser|-qg&8>q z)R_NW=EHwm7<06h!A69NVD6x-jE>P(#u=uS(aCCMbhcUBRGHg9GkZwf4O(Tk~xbC=Fao38ae#Z;X@M^Em%^pDj{!4f%mcn zp?rn1Xu)OPyg754qYU+oFw6e~V)=!dmaYzm^2?XcF7(Wy#;C{n^q3!-yI|>H&wMl+ z&&wAq$s1w#WUVn3>7Y$m#>n|M~5zoRLFTWc)?Qj2!gYh=c#hZmlZ5n6iQgI zBn3?1s+NSpSSX{O5yxd;hL?NkPjoV5UV^tEC+JHlkPB+=yhyaH@{N+c2F!SMQ0By) ze*9{Xu`vUmcHBlwKpA~Fz4ZA2eWcLGT!x+5PC4Y%87EK0mCM5JKL6k={IbJ-nH0Rp zVHYc<$AJY`i^t{3^b~T~QPeK3KsrCf=IWGXfl0o~&7)I*)iRrk5`N22;`f64?A$~$}muxsAWqJw<%&!C38Fh*I zMEA_VpfRI##d(2Dq?|!@E~LE9lqXt+&X_ppGo)p67y8M%ab8iFD_SN~%j_bHOAVKe zXQYhI0X)v$+d$zISv$___xV%A3c?y2BHC}_QYz!fyp%!LAn6aK4M_UZM%g!&QiWgI zJmKdrIQ(ezxT% zK7um8m6QQmXHesREAgx(qCaw5t})wklG}1U7dvUo6|FpS4Y12fspPLrvy2=1H-0WJ z&E=-8H|o5;6{EfL76SQHiM=N^?K&d>=!X*G(sc%LNj+c74LDUoO}o~}O%$%GdB{A@ zh_@KYz63yDl!Ul_SM!YdsRX>52>gu(@#@c9cB7FiVm+9p$yEGXF1`iDy@0+c2?4u; zYdTS)8oAA=lHS+L#j0$cyDg=MzU8Kzj5p-5g(EXlQVJ*`k3N2zm|^dG#u-o2^CbGn zpEInN70k>yOSEi!Z_bPvqcSow#44sGTFL++f1e{4b~^dfjDeX1y+R)e^g&D0{_>2? z^Qt$#M~|{QCvcXY&u^6E61dBOpDRE=sxYu>&3%G_GSk3U&ixdlr555tM%jk+44Hxz zbW;hA>KT*TE^Co=nG9Kk%)+>z z!m#t=Hru&|FV_%>o9x6?qZ$ia9AA@*lw0gX^z$_|`nT9+wrHCT_$XuF$9eRu z`fiMTWokR@lE{6;4u&6)DX=|=X`oD6yS z?`Q0|pkReqg}Ew<>V{T|!oU%^9s?P3g*NK#fj^vZzu)jLt7091k*qk}SUXNJ$edHRa-tbOIv3)1t-%hwiU1!cjpbp=P(KhIZyhWh+LpnB>5oqnX6d1zB!R^G;IL@0av1M>&vaI3w85{HVy?1_U?1_k#a z1;xFUSp~Zi{0W<<7gX-_d)NBQslv)_8AC)-w!eIv-@6=1)Wh_=?Q1K+kAhw62hJFj zIOq~+$w~eZ<3v#))tBfWI7SSvl9&6dC;ETFTspx*ajTK*gKh*wi*U1%{V;$pN=R$n zY9!AG(7<@N8TOF|pkoZ(Y6PZIk1HrB zSW&Q|T(qp81##;2`Ta8rf&W2C4e%c_LMd|#eEwZX*;N7wC2+fTdjPL6i6@OvFj&4` zEUX~Sdz91eVfFAnBj0Ca@A6@fX&4eQ@pjv5WE%drnu^iuY*}Gw{?a9bJtN>*hxr*= zK5zEoOP8CAhseoakcV4=@yw=Y zWc@8GT()$%wi9uy|GYW+dGS27b*?pK?!5dt%dH8Zw{YWTiQ*mR4%41 z;@OvhC9};2DCuFXPqA-#!4gynGnj-e72U#&~~5 zdGMsDDXxjjC>KvUWOBTJdwE`YMuB*sShkmO+vlbP^D;7~PZX7_8{>TO{>1X&Zm~}^ zbnq4A?b3g;utP$D*M!6dQD@B+dkq7rMkN$%4^7Zq>^|)(x?K*PgJu$mpw8=J8cZt?zH*X=0a)dtE zG@rf^#I7JCrM+yR)RXkV1_);@q^vF~iwy`>>Z){qLQr;$_xt_bVD-u}e>K>ZAs1|a zZ(Z8Vm2nxta`|CKC1~HLOvn#xvO#=lZyW~cdy^I}j7cWimCyB*X z!5?JDO=&YltjtcCI_YvT7utG)4E<+|OqHQ$`UiK4_Ek?M`bW)QK0{m)2+E0a4AE{? zzgaAmxgx9aALC4HltcTEh5a9r>%H?tepyDwYw6|h?MxG`D>B3tGFi+();~Z&Yha+k zF!NzY0$SNJbJUK6!E@$8zI%Px&}3xDo>}E`%(gVKvPyI=TQ3%)$VIZ@W)xa23O(tw zP|PFO`%|vSOZSWAH5oyas6K@P?yAjV33~HXDY*MD)Y4rx1k>yN>(?f3c}hG`D(g>I zXBO%VsXAqnrP5Kdq28P2-y&0{C*F{F-NLuUJ*Bnr{_0&5$6)+P>TW3|8}3m|;(C8| zR*Jtmf69o0f|c^=8^!Q4(Y{eUQ`#V(88LRgTzOQq5BYsCWj-%r!GA|g0Kk6~k#T-^ zO!h_@CuY^9q#^CcB3cGpV=99A;+&dl?CvJa5G!-5#e(|uAjY%Gi4{9euDqrWb4>$vh66X z#byA~%5d^VD%V+E31Kup6h8)jgC!d%N8op7@O2M;Y!F5D!WR+LlN*9r8CZm5&HSG9 ztg}i_dkpmd5(E(0Z9AX`PiG5w=gyn6bnd+6(GH#F&LK9D;bscsdp(|i(VrA;BsB9> zHFYj|BW6UC`c32Bmb+;79A#E4o3psNePMc}uv3WE)kuI{p*&Gg-%Qng=@oz-i48&{sPP z7=FwRHbjUU>|=}Cnk*}vw|x21<>Ygt>X**VFIc9HBEX9lLs5%L8pvu4h`6|)zqrjUiRcDJ^04%&9Y%k~rF~6f! zh8`Lz+9!*pA<-^bc92jDd0T>Grf22&*9Gs8aoEBn_%o$%dYYJ9A@hus{)Y7Rq?BB3JxX$cjl*gPD1|61?65;2oPHF0aVkkUBNd zSMX=qDcvg;RTOOT6^ITpJFa{pRX$Oi_SWc0H z2W&)%gT>?qd6;W>k88M>%f82`_i{1wIfT~Qz1o{|q!`XkN)Y!ua>HrKlYAg|x5ER{ z9~3A1m2345Ci5R=XNHIy44J%H#AS=i1EM27lSRh>K7$!~>oP>!+7*9!-3aN_8k zOD@Wov>!&`hK=&_@rC^-&)=nlxM-K_Y;?-r&rcrjJ?8TsDOey1Yv2h9h&c@+QF_4X zV1wuz5(@&NQ?|IQ5#{n8gNZbpcrIGAyGpWWOR|%T4OO4W_K5pS;W-s8;i5}s&ui{* zv8oCk`niZk;F_4KG|?^q`12y#BwiI$CR$bi{Eop}VhHv7B6de@ilNc^o~@EiF*I7= zV_XffDW=TI%kRiUVP00olxbdmSCpJdLwOyO_@OAUE+Z$6{M6SlogbObH8EvF-o#WH zGc6OezbKMqec#F@KI2MnW#rEo`PS%48^V>|9)_&!0? z?ZnEOj15`-j6o?Qll`9(qu0E0x(Z zu7Hs)R?v)lu9$KUII7YZAn$vfqn5lmt!TWS!!`^_`yC3Pf!NP8^EsZG`yEje`~a;6 z9+U$Pb5ITxdnToO)5#aPkEy&^oSd_k9K3s((929{uOl=>7K#C(JH&;OXd0pu+U*cK zipf3BG(U3GA>lFAqBkA&aL@RV@CftfATPn)#mSm4f8x5Ti!mdJ4XBTazU^p0k^76` zVpK$rFwv)qnMp4>>XG|oahWFa9uv8@DUsKh$U_k#hnUFo#WJ}xX-=LRn76qs8Wi1t z7aa{wG{GsJD24-t`}L{=Ja&keP@L+0+Pl}%;7_@(n~NoUJdAyu>)NRreAGd6M%-OY z&YKT;s@zqaOjF^ggEDR^PTrvUk7+VCTDC;%K`ig z)4j5gX#L_W8&WM(aIPb3y65L@>b@=mzOUr-yz)|zH}Wo~Pcn6j8fB87B%$G~b&A%q zrssr}qfX_>;9^wA@la`_3|w9l-wtwMJz zRTm#_L99E-`SI`*H!(97UT>8e- z)c!@d_CJJc|H4vx1=oIp%U7WG>MZ|^&tzK44p9x3SENo&eSZN>{EjkYPw4~)NWEBD zE4tLm{bEH8K33Jp6=Hdr_}*yrCItOiUb4~bLHhWVK6oZ?x>$Tu*l6z=H~D0i_{!!H zx6&EiD_Mhgubt>$=l5s%Us<(SxEryY%abrM;`i@fpSD7*knwBrC%V_XF51FPanr7h ztUr_|EXYgPf`1tzuR(T`+YX2SMB93?tO{oqND(XRg}Yu{Q4de-;lnat=2PNtC5@tG zomiO-&xcp|YQ$|g2zJDX2Z&2JLaWP3I|}1(k$3P#!7RU=berrnVr4>jn!wSAT$7B`4?vf*gHS6omb%SA^IY|0qc7 zRnC($r;_t~)zp-iQkFk^MD&xj!Gz7?iBcKA{iJx=Cac85aC?b^Ht4m7O9OZyUr~Fx z5zYVQVCDALOHyCYgSAX{?*-XM2XX&W>gbDHZ$^TcUxqy1apu8Tat7ytU^)|NkiNs~>ixp77JqBpK;huSQJg8beTa-nus|MJFFlQF|7{>wM6MBntE zW8+Hwwrp3qZ)U6rQ2(v%>fhU9)khiY4iGP0Aij7Tuaf2kmK81Fu>DZwTKEJ@94w;y-^@x8S zPKuJ|`S&hQ6D`Ydn9t|PB2@JW#KlotMZCW&BR5KO!Fh zf6RG1VrudH5trK$le~NEf(h|skn$YwWA?+?re`*TVctictML46k!J^)Ui%p9#UkEG z()MF7qrS|=_Qq5ti3AysBgYIJgwFS-=Vf_iuZ%ke29rdfV#V~ri}KPZ`Z6vRg%wkB z27&B76fYw_@`KO3L)z3;$7@k%rvz{I>;m* zMjMr_Dc)c@k20M%2ptTm%6NL7xl>t#dhd$iol5m_er zJc7*!fH#>Bk8m>&#)PtT6CN(&h@97B>VWzf=e`jW$a)yiZAG;IXyEE^#{mX_4`UjI ztDXdQxf88&iu-w!b~Gk8oqXBcz59yF$V9D=$wu0G(7CsW&H1_*-m&Iuv^_=jg!U3o zjR%SveR-RCcldq`91&0~fv2V~958Y8L<-d*Cpl@*TeuIOb1QFQ7MagX+N(()D+=#Y zZll@7%{qo7Tptzz$lS#2{<0`JXE{xXtxV}_ri$4(STw*((>=>y-A#N~Qk#)JWAsEg z<2y=EWe(14WL&zxI{M$;bOyiTA zN3S4VzSB-t@P3{JJ4Bs)MZ9j471;J>AHm^BjTjAkpsPL65EsaX9Rn+~yhl+RHlb+u zUqqRB5y4DCyh`VMJV;MCWIR29BMjF?_M3Yg=BlZqUEIr9DYR3#*U=ygsC2d&T4id68-s`}8w4_(k4la1)?2XRBW{_ka03coU~O{iykujC>&Tv zOJD)Yr<+5Mo?whAS7v%jmWtT~DaF8)x$F??SbRsICco|{UlNZ5RDNKZlmBoJ`2 zsjBZ_91Brd!UF0$1g#N3tvi$P^&8f*0->o67b(_6`)^8v?U#xe?3fbOUUU~Qf`l>!GURhm-?M=3v zBwxom7p?1MrF`#-Eim-6We$#%vAU`KPFc%e)n2T1>G?q>E>DquxP~wE2oDdKa!-Cw zSZc(=PreW2n__9M90bFnA}4J{P)xD+H7ajY8*}B2d{Q$1@!02B-BcrC9TMg92{Icvdz@vX_ zdl5bj;~o)j>C6k2{{Fthvb~6o4Wg~Z1wYUh1Mxk$ShyqRawGN^->%NKo_p~&;s8Q^ z{@KH?3Q+Dc)q$;1Ra?-{g~nM;x@#dXro6h(kFgbuB-^OjKIuYCH5CHA?)nCfQ3C=6*W! zdWfq(R2;~VJ=hZ81*f$T?=Z1ljM1H;KP$d>Ye!6l+O)0hvAyJTQetJZK2X--NRj?g+%mF+Zzgf)9mEC>ftbmv& z+tZ{GBEFFu3bk8Iekx9DbWo(XSfO*SE3PF){uf8%17pO(T+yX5y*!`&R&ZO1cEpZv zu^sS!3VV_4w%;6x9!hJJ1wJt{Akt+SzG>$xXj>~tQ3!G&3%?V?;}n19E#6hU@A#Rm z+^cxE@H6igu8N_3>`z6Wr)j6TfwBG)Iddv!)W0!mc}&g4Vo|N=oGj+k=P39$MS-jn zhu75MG@w1=qJ+B)$FFdWi>+MKNuz9qJXx@=oNQ_uic_#5P|r)Yz$!pbl-3pideIg* zQUGvoX=ok5S8c@ECrSeadyfEo#nvzr@c4Rp#Ps+<`=f(~@K=bST6u8iQK4(s@afwr znDhjY8Fb3dvse4^)ug!^Xm_OJofDd)C+uuMGV%#~C;@w$c=3kKez#$)EPYzsT$(M< zNm(v_u;CRDbaGcIOpTn+OIM10rNnhRIwQ#oXqRN3+zoWU*-kR88f;|W;3%^ZXPRuH z(-AstK$SY5Ku`PWV*q`uqL1_GL+%x>Y_XR7z+$c8!Bc}c2Mx##i8Di(V4h0R%0Aw} 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 new_length): + s = s[0:new_length] + elif (len(s) < new_length): + s += (chr(0) * (new_length - len(s))) + + return "".join([chr(ord(x) ^ ord(y)) for (x, y) in + izip(s, bz2.decompress(patch))]) + + def __add__(self, file_data1, file_data2): + #file_data1's target is file_data2 and + #file_data2's target is file_data1 + + self.cursor.execute( + "INSERT INTO patch (patch_id, patch_data) VALUES (?, ?)", + [None, + base64.b64encode( + UndoDB.build_patch(file_data1, + file_data2)).decode('ascii')]) + patch_id = self.cursor.lastrowid + try: + self.cursor.execute("""INSERT INTO source_file ( +source_checksum, source_size, target_size, patch_id) values (?, ?, ?, ?)""", + [sha1(file_data1).hexdigest().decode('ascii'), + len(file_data1), + len(file_data2), + patch_id]) + self.cursor.execute("""INSERT INTO source_file ( +source_checksum, source_size, target_size, patch_id) values (?, ?, ?, ?)""", + [sha1(file_data2).hexdigest().decode('ascii'), + len(file_data2), + len(file_data1), + patch_id]) + self.db.commit() + except sqlite3.IntegrityError: + self.db.rollback() + + def __undo__(self, file_data): + self.cursor.execute("""SELECT target_size, patch_data FROM +source_file, patch WHERE ((source_checksum = ?) AND + (source_size = ?) AND + (source_file.patch_id = patch.patch_id))""", + [sha1(file_data).hexdigest().decode('ascii'), + len(file_data)]) + row = self.cursor.fetchone() + if (row is not None): + (target_size, patch) = row + return UndoDB.apply_patch( + file_data, + base64.b64decode(patch.encode('ascii')), + target_size) + else: + return None + + def add(self, old_file, new_file): + """Adds an undo entry for transforming new_file to old_file. + + Both are filename strings.""" + + old_f = open(old_file, 'rb') + new_f = open(new_file, 'rb') + try: + self.__add__(old_f.read(), new_f.read()) + finally: + old_f.close() + new_f.close() + + def undo(self, new_file): + """Updates new_file to its original state, + if present in the undo database. + + Returns True if undo performed, False if not.""" + + new_f = open(new_file, 'rb') + try: + old_data = self.__undo__(new_f.read()) + finally: + new_f.close() + if (old_data is not None): + old_f = open(new_file, 'wb') + old_f.write(old_data) + old_f.close() + return True + else: + return False + + +class OldUndoDB: + """A class for performing legacy undo operations on files. + + This implementation is based on xdelta and requires it to be + installed to function. + """ + + def __init__(self, filename): + """filename is the location on disk for this undo database.""" + + self.db = anydbm.open(filename, 'c') + + def close(self): + """Closes any open database handles.""" + + self.db.close() + + @classmethod + def checksum(cls, filename): + """Returns the SHA1 checksum of the filename's contents.""" + + f = open(filename, "rb") + c = sha1("") + try: + transfer_data(f.read, c.update) + return c.hexdigest() + finally: + f.close() + + def add(self, old_file, new_file): + """Adds an undo entry for transforming new_file to old_file. + + Both are filename strings.""" + + #perform xdelta between old and new track to temporary file + delta_f = tempfile.NamedTemporaryFile(suffix=".delta") + + try: + if (subprocess.call([BIN["xdelta"], + "delta", + new_file, old_file, delta_f.name]) != 2): + #store the xdelta in our internal db + f = open(delta_f.name, 'rb') + data = cStringIO.StringIO() + transfer_data(f.read, data.write) + f.close() + + self.db[OldUndoDB.checksum(new_file)] = data.getvalue() + else: + raise IOError("error performing xdelta operation") + finally: + delta_f.close() + + def undo(self, new_file): + """Updates new_file to its original state, + if present in the undo database.""" + + undo_checksum = OldUndoDB.checksum(new_file) + if (undo_checksum in self.db.keys()): + #copy the xdelta to a temporary file + xdelta_f = tempfile.NamedTemporaryFile(suffix=".delta") + xdelta_f.write(self.db[undo_checksum]) + xdelta_f.flush() + + #patch the existing track to a temporary track + old_track = tempfile.NamedTemporaryFile() + try: + if (subprocess.call([BIN["xdelta"], + "patch", + xdelta_f.name, + new_file, + old_track.name]) == 0): + #copy the temporary track over the existing file + f1 = open(old_track.name, 'rb') + f2 = open(new_file, 'wb') + transfer_data(f1.read, f2.write) + f1.close() + f2.close() + return True + else: + raise IOError("error performing xdelta operation") + finally: + old_track.close() + xdelta_f.close() + else: + return False + + +def open_db(filename): + """Given a filename string, returns UndoDB or OldUndoDB. + + If the file doesn't exist, this uses UndoDB by default. + Otherwise, detect OldUndoDB if xdelta is installed.""" + + if (BIN.can_execute(BIN["xdelta"])): + db = whichdb.whichdb(filename) + if ((db is not None) and (db != '')): + return OldUndoDB(filename) + else: + return UndoDB(filename) + else: + return UndoDB(filename) diff --git a/Melodia/resources/audiotools/encoders.so b/Melodia/resources/audiotools/encoders.so new file mode 100755 index 0000000000000000000000000000000000000000..746fac10322618f8837b7e4c5f967131e6de2c15 GIT binary patch literal 532170 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%0D~z=M@OHM$ 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 SA1P&k~C&Rp`{O4=XO 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 literal 0 HcmV?d00001 diff --git a/Melodia/resources/audiotools/flac.py b/Melodia/resources/audiotools/flac.py new file mode 100644 index 0000000..a54ebe4 --- /dev/null +++ b/Melodia/resources/audiotools/flac.py @@ -0,0 +1,715 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2007-2011 Brian Langenberger + +#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 + +import array +import audiotools +import sys,cStringIO + +Con = audiotools.Con + +class UTF8(Con.Struct): + @classmethod + def __total_utf8_bytes__(cls, header): + total = 0 + for b in header: + if b == '\x01': + total += 1 + else: + break + return max(1,total) + + @classmethod + def __calculate_utf8_value__(cls, ctx): + import operator + + return Con.lib.bin_to_int(ctx.header[ctx.header.index('\x00') + 1:] + \ + reduce(operator.concat, + [s[2:] for s in ctx['sub_byte']], + '')) + + def __init__(self, name): + Con.Struct.__init__( + self,name, + Con.Bytes('header',8), + Con.Value('total_bytes', + lambda ctx: self.__total_utf8_bytes__(ctx['header'])), + Con.MetaRepeater( + lambda ctx: self.__total_utf8_bytes__(ctx['header']) - 1, + Con.Bytes('sub_byte',8)), + Con.Value('value', + lambda ctx: self.__calculate_utf8_value__(ctx))) + +class Unary(Con.Adapter): + def __init__(self, name): + Con.Adapter.__init__( + self, + Con.RepeatUntil(lambda obj,ctx: obj == 1, + Con.Byte(name))) + + def _encode(self, value, context): + if (value > 0): + return ([0] * (value)) + [1] + else: + return [1] + + def _decode(self, obj, context): + return len(obj) - 1 + +class PlusOne(Con.Adapter): + def _encode(self, value, context): + return value - 1 + + def _decode(self, obj, context): + return obj + 1 + +class FlacStreamException(Exception): pass + +class FlacReader: + FRAME_HEADER = Con.Struct('frame_header', + Con.Bits('sync',14), + Con.Bits('reserved',2), + Con.Bits('block_size',4), + Con.Bits('sample_rate',4), + Con.Bits('channel_assignment',4), + Con.Bits('bits_per_sample',3), + Con.Padding(1), + Con.IfThenElse( + 'total_channels', + lambda ctx1: ctx1['channel_assignment'] <= 7, + Con.Value('c',lambda ctx2: ctx2['channel_assignment'] + 1), + Con.Value('c',lambda ctx3: 2)), + + UTF8('frame_number'), + + Con.IfThenElse( + 'extended_block_size', + lambda ctx1: ctx1['block_size'] == 6, + Con.Bits('b',8), + Con.If(lambda ctx2: ctx2['block_size'] == 7, + Con.Bits('b',16))), + + Con.IfThenElse( + 'extended_sample_rate', + lambda ctx1: ctx1['sample_rate'] == 12, + Con.Bits('s',8), + Con.If(lambda ctx2: ctx2['sample_rate'] in (13,14), + Con.Bits('s',16))), + + Con.Bits('crc8',8)) + + UNARY = Con.Struct('unary', + Con.RepeatUntil( + lambda obj,ctx: obj == '\x01', + Con.Field('bytes',1)), + Con.Value('value', + lambda ctx: len(ctx['bytes']) - 1) + ) + + SUBFRAME_HEADER = Con.Struct('subframe_header', + Con.Padding(1), + Con.Bits('subframe_type',6), + Con.Flag('has_wasted_bits_per_sample'), + Con.IfThenElse( + 'wasted_bits_per_sample', + lambda ctx: ctx['has_wasted_bits_per_sample'], + PlusOne(Unary('value')), + Con.Value('value',lambda ctx2: 0))) + + + GET_BLOCKSIZE_FROM_STREAMINFO = -1 + GET_8BIT_BLOCKSIZE_FROM_END_OF_HEADER = -2 + GET_16BIT_BLOCKSIZE_FROM_END_OF_HEADER = -3 + + BLOCK_SIZE = (GET_BLOCKSIZE_FROM_STREAMINFO, + 192, + 576,1152,2304,4608, + GET_8BIT_BLOCKSIZE_FROM_END_OF_HEADER, + GET_16BIT_BLOCKSIZE_FROM_END_OF_HEADER, + 256,512,1024,2048,4096,8192,16384,32768) + + GET_SAMPLE_SIZE_FROM_STREAMINFO = -1 + SAMPLE_SIZE = (GET_SAMPLE_SIZE_FROM_STREAMINFO, + 8,12,None,16,20,24,None) + + def FIXED0(subframe,residual,i): + subframe.insert(i, + residual[i]) + + def FIXED1(subframe,residual,i): + subframe.insert(i, + subframe[i - 1] + residual[i]) + + def FIXED2(subframe,residual,i): + subframe.insert(i, + ((2 * subframe[i - 1]) - subframe[i - 2] + \ + residual[i])) + + def FIXED3(subframe,residual,i): + subframe.insert(i, + ((3 * subframe[i - 1]) - (3 * subframe[i - 2]) + \ + subframe[i - 3] + residual[i])) + + def FIXED4(subframe,residual,i): + subframe.insert(i, + ((4 * subframe[i - 1]) - (6 * subframe[i - 2]) + \ + (4 * subframe[i - 3]) - subframe[i - 4] + residual[i])) + + #iterates over all of the channels, in order + def MERGE_INDEPENDENT(channel_list): + channel_data = [iter(c) for c in channel_list] + + while (True): + for channel in channel_data: + yield channel.next() + + def MERGE_LEFT(channel_list): + channel_left = iter(channel_list[0]) + channel_side = iter(channel_list[1]) + + while (True): + left = channel_left.next() + side = channel_side.next() + + yield left + yield left - side + + + def MERGE_RIGHT(channel_list): + channel_side = iter(channel_list[0]) + channel_right = iter(channel_list[1]) + + while (True): + side = channel_side.next() + right = channel_right.next() + + yield side + right + yield right + + def MERGE_MID(channel_list): + channel_mid = iter(channel_list[0]) + channel_side = iter(channel_list[1]) + + while (True): + mid = channel_mid.next() + side = channel_side.next() + + mid = mid << 1 + mid |= (side & 0x1) + + yield (mid + side) >> 1 + yield (mid - side) >> 1 + + + CHANNEL_FUNCTIONS = (MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_INDEPENDENT, + MERGE_LEFT, + MERGE_RIGHT, + MERGE_MID) + + FIXED_FUNCTIONS = (FIXED0,FIXED1,FIXED2,FIXED3,FIXED4) + + def __init__(self, flac_stream): + self.stream = BufferedStream(flac_stream) + self.streaminfo = None + self.bitstream = None + + #ensure the file starts with 'fLaC' + self.read_stream_marker() + + #initialize self.bitstream + self.begin_bitstream() + + #find self.streaminfo in case we need it + self.read_metadata_blocks() + + def close(self): + if (self.bitstream != None): + self.bitstream.close() + else: + self.stream.close() + + + def read_stream_marker(self): + if (self.stream.read(4) != 'fLaC'): + raise FlacStreamException('invalid stream marker') + + def read_metadata_blocks(self): + block = audiotools.FlacAudio.METADATA_BLOCK_HEADER.parse_stream(self.stream) + while (block.last_block == 0): + if (block.block_type == 0): + self.streaminfo = audiotools.FlacAudio.STREAMINFO.parse_stream(self.stream) + else: + self.stream.seek(block.block_length,1) + + block = audiotools.FlacAudio.METADATA_BLOCK_HEADER.parse_stream(self.stream) + self.stream.seek(block.block_length,1) + + def begin_bitstream(self): + import bitstream + + #self.bitstream = Con.BitStreamReader(self.stream) + self.bitstream = bitstream.BitStreamReader(self.stream) + + def read_frame(self): + self.stream.reset_buffer() + + try: + header = FlacReader.FRAME_HEADER.parse_stream(self.bitstream) + except Con.core.FieldError: + return "" + + if (header.sync != 0x3FFE): + raise FlacStreamException('invalid sync') + + if (crc8(self.stream.getvalue()[0:-1]) != header.crc8): + raise FlacStreamException('crc8 checksum failed') + + + #block_size tells us how many samples we need from each subframe + block_size = FlacReader.BLOCK_SIZE[header.block_size] + if (block_size == self.GET_BLOCKSIZE_FROM_STREAMINFO): + block_size = self.streaminfo.maximum_blocksize + + elif ((block_size == self.GET_8BIT_BLOCKSIZE_FROM_END_OF_HEADER) or + (block_size == self.GET_16BIT_BLOCKSIZE_FROM_END_OF_HEADER)): + block_size = header.extended_block_size + 1 + + + #grab subframe data as 32-bit array objects + subframe_data = [] + + for channel_number in xrange(header.total_channels): + subframe_data.append( + self.read_subframe(header, block_size, channel_number)) + + crc16sum = crc16(self.stream.getvalue()) + + + #try to byte-align the stream + if (len(self.bitstream.buffer) > 0): + self.bitstream.read(len(self.bitstream.buffer)) + + + if (crc16sum != Con.Bits('crc16',16).parse_stream(self.bitstream)): + raise FlacStreamException('crc16 checksum failed') + + + #convert our list of subframe data arrays into + #a string of sample data + if (FlacReader.SAMPLE_SIZE[header.bits_per_sample] == 16): + merged_frames = array.array('h', + FlacReader.CHANNEL_FUNCTIONS[ + header.channel_assignment](subframe_data)) + + if (audiotools.BIG_ENDIAN): + merged_frames.byteswap() + + return merged_frames.tostring() + + elif (FlacReader.SAMPLE_SIZE[header.bits_per_sample] == 8): + merged_frames = array.array('b', + FlacReader.CHANNEL_FUNCTIONS[ + header.channel_assignment](subframe_data)) + + return merged_frames.tostring() + + else: + if (FlacReader.SAMPLE_SIZE[header.bits_per_sample] == \ + self.GET_SAMPLE_SIZE_FROM_STREAMINFO): + bits_per_sample = self.streaminfo.bits_per_sample + 1 + + elif (FlacReader.SAMPLE_SIZE[header.bits_per_sample] == None): + raise FlacStreamException('invalid bits per sample') + + else: + bits_per_sample = FlacReader.SAMPLE_SIZE[header.bits_per_sample] + + stream = Con.GreedyRepeater( + Con.BitStruct('bits', + Con.Bits('value',bits_per_sample, + swapped=True,signed=True))) + + return stream.build( + [Con.Container(value=v) for v in + FlacReader.CHANNEL_FUNCTIONS[header.channel_assignment]( + subframe_data)]) + + + + def read_subframe(self, frame_header, block_size, channel_number): + subframe_header = \ + FlacReader.SUBFRAME_HEADER.parse_stream(self.bitstream) + + #figure out the bits-per-sample of this subframe + if ((frame_header.channel_assignment == 8) and + (channel_number == 1)): + #if channel is stored as left+difference + #and this is the difference, add 1 bit + bits_per_sample = FlacReader.SAMPLE_SIZE[ + frame_header.bits_per_sample] + 1 + + elif ((frame_header.channel_assignment == 9) and + (channel_number == 0)): + #if channel is stored as difference+right + #and this is the difference, add 1 bit + bits_per_sample = FlacReader.SAMPLE_SIZE[ + frame_header.bits_per_sample] + 1 + + elif ((frame_header.channel_assignment == 10) and + (channel_number == 1)): + #if channel is stored as average+difference + #and this is the difference, add 1 bit + bits_per_sample = FlacReader.SAMPLE_SIZE[ + frame_header.bits_per_sample] + 1 + + else: + #otherwise, use the number from the frame header + bits_per_sample = FlacReader.SAMPLE_SIZE[ + frame_header.bits_per_sample] + + + if (subframe_header.has_wasted_bits_per_sample): + bits_per_sample -= subframe_header.wasted_bits_per_sample + + if (subframe_header.subframe_type == 0): + subframe = self.read_subframe_constant(block_size, bits_per_sample) + + elif (subframe_header.subframe_type == 1): + subframe = self.read_subframe_verbatim(block_size, bits_per_sample) + + elif ((subframe_header.subframe_type & 0x38) == 0x08): + subframe = self.read_subframe_fixed( + subframe_header.subframe_type & 0x07, + block_size, + bits_per_sample) + + elif ((subframe_header.subframe_type & 0x20) == 0x20): + subframe = self.read_subframe_lpc( + (subframe_header.subframe_type & 0x1F) + 1, + block_size, + bits_per_sample) + + else: + raise FlacStreamException('invalid subframe type') + + if (subframe_header.has_wasted_bits_per_sample): + return array.array( + 'i', + [i << subframe_header.wasted_bits_per_sample + for i in subframe]) + else: + return subframe + + def read_subframe_constant(self, block_size, bits_per_sample): + sample = Con.Bits('b',bits_per_sample).parse_stream( + self.bitstream) + + subframe = array.array('i',[sample] * block_size) + + return subframe + + + def read_subframe_verbatim(self, block_size, bits_per_sample): + return array.array('i', + Con.StrictRepeater( + block_size, + Con.Bits("samples", + bits_per_sample, + signed=True)).parse_stream(self.bitstream)) + + + def read_subframe_fixed(self, order, block_size, bits_per_sample): + samples = Con.StrictRepeater( + order, + Con.Bits("warm_up_samples", + bits_per_sample, + signed=True)) + + subframe = array.array('i', + samples.parse_stream(self.bitstream)) + + residual = self.read_residual(block_size,order) + + fixed_func = self.FIXED_FUNCTIONS[order] + + for i in xrange(len(subframe),block_size): + fixed_func(subframe,residual,i) + + return subframe + + + def read_subframe_lpc(self, order, block_size, bits_per_sample): + samples = Con.StrictRepeater( + order, + Con.Bits("warm_up_samples", + bits_per_sample, + signed=True)) + + subframe = array.array('i', + samples.parse_stream(self.bitstream)) + + lpc_precision = Con.Bits('lpc_precision', + 4).parse_stream(self.bitstream) + 1 + + lpc_shift = Con.Bits('lpc_shift', + 5).parse_stream(self.bitstream) + + coefficients = array.array('i', + Con.StrictRepeater( + order, + Con.Bits('coefficients', + lpc_precision, + signed=True)).parse_stream(self.bitstream)) + + residual = self.read_residual(block_size, order) + + for i in xrange(len(subframe),block_size): + subframe.insert(i, + (sum( + [coefficients[j] * subframe[i - j - 1] for j in + xrange(0,len(coefficients))]) >> lpc_shift) + \ + residual[i]) + + return subframe + + + def read_residual(self, block_size, predictor_order): + rice = array.array('i') + + #add some dummy rice so that the Rice index matches + #that of the rest of the subframe + for i in xrange(predictor_order): + rice.append(0) + + coding_method = self.bitstream.read(2) + if (coding_method == '\x00\x00'): + rice2 = False + elif (coding_method == '\x00\x01'): + rice2 = True + else: + raise FlacStreamException('invalid residual coding method') + + partition_order = Con.Bits('partition_order',4).parse_stream( + self.bitstream) + + if (partition_order > 0): + total_samples = ((block_size / 2 ** partition_order) - + predictor_order) + rice.extend(self.read_encoded_rice(total_samples,rice2)) + + for i in xrange(1,2 ** partition_order): + total_samples = (block_size / 2 ** partition_order) + + rice.extend(self.read_encoded_rice(total_samples,rice2)) + else: + rice.extend(self.read_encoded_rice(block_size - predictor_order, + rice2)) + + return rice + + + def read_encoded_rice(self, total_samples, rice2=False): + bin_to_int = Con.lib.binary.bin_to_int + + samples = array.array('i') + + if (not rice2): + rice_parameter = Con.Bits('rice_parameter',4).parse_stream( + self.bitstream) + else: + rice_parameter = Con.Bits('rice_parameter',5).parse_stream( + self.bitstream) + + if (rice_parameter != 0xF): + #a Rice encoded residual + for x in xrange(total_samples): + + #count the number of 0 bits before the next 1 bit + #(unary encoding) + #to find our most significant bits + msb = 0 + s = self.bitstream.read(1) + while (s != '\x01'): + msb += 1 + s = self.bitstream.read(1) + + #grab the proper number of least significant bits + lsb = bin_to_int(self.bitstream.read(rice_parameter)) + + #combine msb and lsb to get the Rice-encoded value + value = (msb << rice_parameter) | lsb + if ((value & 0x1) == 0x1): #negative + samples.append(-(value >> 1) - 1) + else: #positive + samples.append(value >> 1) + else: + #unencoded residual + + bits_per_sample = Con.Bits('escape_code',5).parse_stream( + self.bitstream) + + sample = Con.Bits("sample",bits_per_sample,signed=True) + + for x in xrange(total_samples): + samples.append(sample.parse_stream(self.bitstream)) + + return samples + + +############################### +#Checksum calculation functions +############################### + +CRC8TABLE = (0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, + 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, + 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, + 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, + 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, + 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, + 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, + 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, + 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, + 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, + 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, + 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, + 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, + 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, + 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, + 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, + 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, + 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, + 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, + 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, + 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, + 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, + 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, + 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, + 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, + 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, + 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, + 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, + 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, + 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, + 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, + 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3) + +def crc8(data, start=0): + value = start + + for i in map(ord,data): + value = CRC8TABLE[value ^ i] + + return value + +CRC16TABLE = (0x0000,0x8005,0x800f,0x000a,0x801b,0x001e,0x0014,0x8011, + 0x8033,0x0036,0x003c,0x8039,0x0028,0x802d,0x8027,0x0022, + 0x8063,0x0066,0x006c,0x8069,0x0078,0x807d,0x8077,0x0072, + 0x0050,0x8055,0x805f,0x005a,0x804b,0x004e,0x0044,0x8041, + 0x80c3,0x00c6,0x00cc,0x80c9,0x00d8,0x80dd,0x80d7,0x00d2, + 0x00f0,0x80f5,0x80ff,0x00fa,0x80eb,0x00ee,0x00e4,0x80e1, + 0x00a0,0x80a5,0x80af,0x00aa,0x80bb,0x00be,0x00b4,0x80b1, + 0x8093,0x0096,0x009c,0x8099,0x0088,0x808d,0x8087,0x0082, + 0x8183,0x0186,0x018c,0x8189,0x0198,0x819d,0x8197,0x0192, + 0x01b0,0x81b5,0x81bf,0x01ba,0x81ab,0x01ae,0x01a4,0x81a1, + 0x01e0,0x81e5,0x81ef,0x01ea,0x81fb,0x01fe,0x01f4,0x81f1, + 0x81d3,0x01d6,0x01dc,0x81d9,0x01c8,0x81cd,0x81c7,0x01c2, + 0x0140,0x8145,0x814f,0x014a,0x815b,0x015e,0x0154,0x8151, + 0x8173,0x0176,0x017c,0x8179,0x0168,0x816d,0x8167,0x0162, + 0x8123,0x0126,0x012c,0x8129,0x0138,0x813d,0x8137,0x0132, + 0x0110,0x8115,0x811f,0x011a,0x810b,0x010e,0x0104,0x8101, + 0x8303,0x0306,0x030c,0x8309,0x0318,0x831d,0x8317,0x0312, + 0x0330,0x8335,0x833f,0x033a,0x832b,0x032e,0x0324,0x8321, + 0x0360,0x8365,0x836f,0x036a,0x837b,0x037e,0x0374,0x8371, + 0x8353,0x0356,0x035c,0x8359,0x0348,0x834d,0x8347,0x0342, + 0x03c0,0x83c5,0x83cf,0x03ca,0x83db,0x03de,0x03d4,0x83d1, + 0x83f3,0x03f6,0x03fc,0x83f9,0x03e8,0x83ed,0x83e7,0x03e2, + 0x83a3,0x03a6,0x03ac,0x83a9,0x03b8,0x83bd,0x83b7,0x03b2, + 0x0390,0x8395,0x839f,0x039a,0x838b,0x038e,0x0384,0x8381, + 0x0280,0x8285,0x828f,0x028a,0x829b,0x029e,0x0294,0x8291, + 0x82b3,0x02b6,0x02bc,0x82b9,0x02a8,0x82ad,0x82a7,0x02a2, + 0x82e3,0x02e6,0x02ec,0x82e9,0x02f8,0x82fd,0x82f7,0x02f2, + 0x02d0,0x82d5,0x82df,0x02da,0x82cb,0x02ce,0x02c4,0x82c1, + 0x8243,0x0246,0x024c,0x8249,0x0258,0x825d,0x8257,0x0252, + 0x0270,0x8275,0x827f,0x027a,0x826b,0x026e,0x0264,0x8261, + 0x0220,0x8225,0x822f,0x022a,0x823b,0x023e,0x0234,0x8231, + 0x8213,0x0216,0x021c,0x8219,0x0208,0x820d,0x8207,0x0202) + +def crc16(data, start=0): + value = start + + for i in map(ord,data): + value = ((value << 8) ^ CRC16TABLE[(value >> 8) ^ i]) & 0xFFFF + + return value + +#BufferedStream stores the data that passes through read() +#so that checksums can be calculated from it. +#Be sure to reset the buffer as needed. +class BufferedStream: + def __init__(self, stream): + self.stream = stream + self.buffer = cStringIO.StringIO() + + def read(self, count): + s = self.stream.read(count) + self.buffer.write(s) + return s + + def seek(self, offset, whence=0): + self.stream.seek(offset,whence) + + def tell(self): + return self.stream.tell() + + def close(self): + self.stream.close() + + def reset_buffer(self): + self.buffer.close() + self.buffer = cStringIO.StringIO() + + def getvalue(self): + return self.buffer.getvalue() + + +class FlacPCMReader(audiotools.PCMReader): + #flac_file should be a file-like stream of FLAC data + def __init__(self, flac_file): + self.flacreader = FlacReader(flac_file) + self.sample_rate = self.flacreader.streaminfo.samplerate + self.channels = self.flacreader.streaminfo.channels + 1 + self.bits_per_sample = self.flacreader.streaminfo.bits_per_sample + 1 + self.process = None + + self.buffer = [] + + #this won't return even close to the expected number of bytes + #(though that won't really break anything) + def read(self, bytes): + return self.flacreader.read_frame() + + def close(self): + self.flacreader.close() + diff --git a/Melodia/resources/audiotools/pcm.so b/Melodia/resources/audiotools/pcm.so new file mode 100755 index 0000000000000000000000000000000000000000..d19d02d8708192bee70eb9e7bb83619f0cbe78cc GIT binary patch literal 89275 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 0): + self.audio_output.play(data) + self.frames_played += frames + if (self.frames_played >= self.total_frames): + next_track_callback() + else: + self.frames_played = self.total_frames + next_track_callback() + else: + self.stop() + + +class CDPlayer: + """A class for operating a CDDA player. + + The player itself runs in a seperate thread, + which this sends commands to.""" + + def __init__(self, cdda, audio_output, + next_track_callback=lambda: None): + """cdda is a audiotools.CDDA object. + audio_output is an AudioOutput subclass. + next_track_callback is a function with no arguments + which is called by the player when the current track is finished.""" + + self.command_queue = Queue.Queue() + self.worker = CDPlayerThread(cdda, + audio_output, + self.command_queue) + self.thread = threading.Thread(target=self.worker.run, + args=(next_track_callback,)) + self.thread.daemon = True + self.thread.start() + + def open(self, track_number): + """track_number indicates which track to open, starting from 1 + + stops playing the current track, if any""" + + self.command_queue.put(("open", [track_number])) + + def play(self): + """begins or resumes playing the currently open track, if any""" + + self.command_queue.put(("play", [])) + + def pause(self): + """pauses playback of the current track + + Playback may be resumed with play() or toggle_play_pause()""" + + self.command_queue.put(("pause", [])) + + def toggle_play_pause(self): + """pauses the track if playing, play the track if paused""" + + self.command_queue.put(("toggle_play_pause", [])) + + def stop(self): + """stops playback of the current track + + If play() is called, playback will start from the beginning.""" + + self.command_queue.put(("stop", [])) + + def close(self): + """closes the player for playback + + The player thread is halted and the AudioOutput is closed.""" + + self.command_queue.put(("exit", [])) + + def progress(self): + """returns a (pcm_frames_played, pcm_frames_total) tuple + + This indicates the current playback status in PCM frames.""" + + return (self.worker.frames_played, self.worker.total_frames) + + +class CDPlayerThread: + """The CDPlayer class' subthread. + + This should not be instantiated directly; + CDPlayer will do so automatically.""" + + def __init__(self, cdda, audio_output, command_queue): + self.cdda = cdda + self.audio_output = audio_output + self.command_queue = command_queue + + self.audio_output.init( + sample_rate=44100, + channels=2, + channel_mask=3, + bits_per_sample=16) + self.framelist_converter = self.audio_output.framelist_converter() + + self.track = None + self.pcmconverter = None + self.frames_played = 0 + self.total_frames = 0 + self.state = PLAYER_STOPPED + + def open(self, track_number): + self.stop() + self.track = self.cdda[track_number] + self.frames_played = 0 + self.total_frames = self.track.length() * 44100 / 75 + + def play(self): + if (self.track is not None): + if (self.state == PLAYER_STOPPED): + self.pcmconverter = ThreadedPCMConverter( + self.track, + self.framelist_converter) + self.frames_played = 0 + self.state = PLAYER_PLAYING + elif (self.state == PLAYER_PAUSED): + self.state = PLAYER_PLAYING + elif (self.state == PLAYER_PLAYING): + pass + + def pause(self): + if (self.state == PLAYER_PLAYING): + self.state = PLAYER_PAUSED + + def toggle_play_pause(self): + if (self.state == PLAYER_PLAYING): + self.pause() + elif ((self.state == PLAYER_PAUSED) or + (self.state == PLAYER_STOPPED)): + self.play() + + def stop(self): + if (self.pcmconverter is not None): + self.pcmconverter.close() + del(self.pcmconverter) + self.pcmconverter = None + self.frames_played = 0 + self.state = PLAYER_STOPPED + + def run(self, next_track_callback=lambda: None): + while (True): + if ((self.state == PLAYER_STOPPED) or + (self.state == PLAYER_PAUSED)): + (command, args) = self.command_queue.get(True) + if (command == "exit"): + self.audio_output.close() + return + else: + getattr(self, command)(*args) + else: + try: + (command, args) = self.command_queue.get_nowait() + if (command == "exit"): + return + else: + getattr(self, command)(*args) + except Queue.Empty: + if (self.frames_played < self.total_frames): + (data, frames) = self.pcmconverter.read() + if (frames > 0): + self.audio_output.play(data) + self.frames_played += frames + if (self.frames_played >= self.total_frames): + next_track_callback() + else: + self.frames_played = self.total_frames + next_track_callback() + else: + self.stop() + + +class ThreadedPCMConverter: + """A class for decoding a PCMReader in a seperate thread. + + PCMReader's data is queued such that even if decoding and + conversion are relatively time-consuming, read() will + continue smoothly.""" + + def __init__(self, pcmreader, converter): + """pcmreader is a PCMReader object. + + converter is a function which takes a FrameList + and returns an object suitable for the current AudioOutput object. + Upon conclusion, the PCMReader is automatically closed.""" + + self.decoded_data = Queue.Queue() + self.stop_decoding = threading.Event() + + def convert(pcmreader, buffer_size, converter, decoded_data, + stop_decoding): + try: + frame = pcmreader.read(buffer_size) + while ((not stop_decoding.is_set()) and (len(frame) > 0)): + decoded_data.put((converter(frame), frame.frames)) + frame = pcmreader.read(buffer_size) + else: + decoded_data.put((None, 0)) + pcmreader.close() + except (ValueError, IOError): + decoded_data.put((None, 0)) + pcmreader.close() + + buffer_size = (pcmreader.sample_rate * + pcmreader.channels * + (pcmreader.bits_per_sample / 8)) / 20 + + self.thread = threading.Thread( + target=convert, + args=(pcmreader, + buffer_size, + converter, + self.decoded_data, + self.stop_decoding)) + self.thread.daemon = True + self.thread.start() + + def read(self): + """returns a (converted_data, pcm_frame_count) tuple""" + + return self.decoded_data.get(True) + + def close(self): + """stops the decoding thread and closes the PCMReader""" + + self.stop_decoding.set() + self.thread.join() + + +class AudioOutput: + """An abstract parent class for playing audio.""" + + def __init__(self): + self.sample_rate = 0 + self.channels = 0 + self.channel_mask = 0 + self.bits_per_sample = 0 + self.initialized = False + + def compatible(self, pcmreader): + """Returns True if the given pcmreader is compatible. + + If False, one is expected to open a new output stream + which is compatible.""" + + return ((self.sample_rate == pcmreader.sample_rate) and + (self.channels == pcmreader.channels) and + (self.channel_mask == pcmreader.channel_mask) and + (self.bits_per_sample == pcmreader.bits_per_sample)) + + def framelist_converter(self): + """Returns a function which converts framelist objects + + to objects acceptable by our play() method.""" + + raise NotImplementedError() + + def init(self, sample_rate, channels, channel_mask, bits_per_sample): + """Initializes the output stream. + + This *must* be called prior to play() and close(). + The general flow of audio playing is: + + >>> pcm = audiofile.to_pcm() + >>> player = AudioOutput() + >>> player.init(pcm.sample_rate, + ... pcm.channels, + ... pcm.channel_mask, + ... pcm.bits_per_sample) + >>> convert = player.framelist_converter() + >>> frame = pcm.read(1024) + >>> while (len(frame) > 0): + ... player.play(convert(frame)) + ... frame = pcm.read(1024) + >>> player.close() + """ + + raise NotImplementedError() + + def play(self, data): + """plays a chunk of converted data""" + + raise NotImplementedError() + + def close(self): + """closes the output stream""" + + raise NotImplementedError() + + @classmethod + def available(cls): + """returns True if the AudioOutput is available on the system""" + + return False + + +class NULLAudioOutput(AudioOutput): + """An AudioOutput subclass which does not actually play anything. + + Although this consumes audio output at the rate it would normally + play, it generates no output.""" + + NAME = "NULL" + + def framelist_converter(self): + """Returns a function which converts framelist objects + + to objects acceptable by our play() method.""" + + return lambda f: f.frames + + def init(self, sample_rate, channels, channel_mask, bits_per_sample): + """Initializes the output stream. + + This *must* be called prior to play() and close().""" + + self.sample_rate = sample_rate + self.channels = channels + self.channel_mask = channel_mask + self.bits_per_sample = bits_per_sample + + def play(self, data): + """plays a chunk of converted data""" + + time.sleep(float(data) / self.sample_rate) + + def close(self): + """closes the output stream""" + + pass + + @classmethod + def available(cls): + """returns True""" + + return True + + +class OSSAudioOutput(AudioOutput): + """An AudioOutput subclass for OSS output.""" + + NAME = "OSS" + + def init(self, sample_rate, channels, channel_mask, bits_per_sample): + """Initializes the output stream. + + This *must* be called prior to play() and close().""" + + if (not self.initialized): + import ossaudiodev + + self.sample_rate = sample_rate + self.channels = channels + self.channel_mask = channel_mask + self.bits_per_sample = bits_per_sample + + self.ossaudio = ossaudiodev.open('w') + if (self.bits_per_sample == 8): + self.ossaudio.setfmt(ossaudiodev.AFMT_S8_LE) + elif (self.bits_per_sample == 16): + self.ossaudio.setfmt(ossaudiodev.AFMT_S16_LE) + elif (self.bits_per_sample == 24): + self.ossaudio.setfmt(ossaudiodev.AFMT_S16_LE) + else: + raise ValueError("Unsupported bits-per-sample") + + self.ossaudio.channels(channels) + self.ossaudio.speed(sample_rate) + + self.initialized = True + else: + self.close() + self.init(sample_rate=sample_rate, + channels=channels, + channel_mask=channel_mask, + bits_per_sample=bits_per_sample) + + def framelist_converter(self): + """Returns a function which converts framelist objects + + to objects acceptable by our play() method.""" + + if (self.bits_per_sample == 8): + return lambda f: f.to_bytes(False, True) + elif (self.bits_per_sample == 16): + return lambda f: f.to_bytes(False, True) + elif (self.bits_per_sample == 24): + import audiotools.pcm + + return lambda f: audiotools.pcm.from_list( + [i >> 8 for i in list(f)], + self.channels, 16, True).to_bytes(False, True) + else: + raise ValueError("Unsupported bits-per-sample") + + def play(self, data): + """plays a chunk of converted data""" + + self.ossaudio.writeall(data) + + def close(self): + """closes the output stream""" + + if (self.initialized): + self.initialized = False + self.ossaudio.close() + + @classmethod + def available(cls): + """returns True if OSS output is available on the system""" + + try: + import ossaudiodev + return True + except ImportError: + return False + + +class PulseAudioOutput(AudioOutput): + """An AudioOutput subclass for PulseAudio output.""" + + NAME = "PulseAudio" + + def init(self, sample_rate, channels, channel_mask, bits_per_sample): + """Initializes the output stream. + + This *must* be called prior to play() and close().""" + + if (not self.initialized): + import subprocess + + self.sample_rate = sample_rate + self.channels = channels + self.channel_mask = channel_mask + self.bits_per_sample = bits_per_sample + + if (bits_per_sample == 8): + format = "u8" + elif (bits_per_sample == 16): + format = "s16le" + elif (bits_per_sample == 24): + format = "s24le" + else: + raise ValueError("Unsupported bits-per-sample") + + self.pacat = subprocess.Popen( + [audiotools.BIN["pacat"], + "-n", "Python Audio Tools", + "--rate", str(sample_rate), + "--format", format, + "--channels", str(channels), + "--latency-msec", str(100)], + stdin=subprocess.PIPE) + + self.initialized = True + else: + self.close() + self.init(sample_rate=sample_rate, + channels=channels, + channel_mask=channel_mask, + bits_per_sample=bits_per_sample) + + def framelist_converter(self): + """Returns a function which converts framelist objects + + to objects acceptable by our play() method.""" + + if (self.bits_per_sample == 8): + return lambda f: f.to_bytes(True, False) + elif (self.bits_per_sample == 16): + return lambda f: f.to_bytes(False, True) + elif (self.bits_per_sample == 24): + return lambda f: f.to_bytes(False, True) + else: + raise ValueError("Unsupported bits-per-sample") + + def play(self, data): + """plays a chunk of converted data""" + + self.pacat.stdin.write(data) + self.pacat.stdin.flush() + + def close(self): + """closes the output stream""" + + if (self.initialized): + self.initialized = False + self.pacat.stdin.close() + self.pacat.wait() + + @classmethod + def server_alive(cls): + import subprocess + + dev = subprocess.Popen([audiotools.BIN["pactl"], "stat"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + dev.stdout.read() + dev.stderr.read() + return (dev.wait() == 0) + + @classmethod + def available(cls): + """returns True if PulseAudio is available and running on the system""" + + return (audiotools.BIN.can_execute(audiotools.BIN["pacat"]) and + audiotools.BIN.can_execute(audiotools.BIN["pactl"]) and + cls.server_alive()) + + +class PortAudioOutput(AudioOutput): + """An AudioOutput subclass for PortAudio output.""" + + NAME = "PortAudio" + + def init(self, sample_rate, channels, channel_mask, bits_per_sample): + """Initializes the output stream. + + This *must* be called prior to play() and close().""" + + if (not self.initialized): + import pyaudio + + self.sample_rate = sample_rate + self.channels = channels + self.channel_mask = channel_mask + self.bits_per_sample = bits_per_sample + + self.pyaudio = pyaudio.PyAudio() + self.stream = self.pyaudio.open( + format=self.pyaudio.get_format_from_width( + self.bits_per_sample / 8, False), + channels=self.channels, + rate=self.sample_rate, + output=True) + + self.initialized = True + else: + self.close() + self.init(sample_rate=sample_rate, + channels=channels, + channel_mask=channel_mask, + bits_per_sample=bits_per_sample) + + def framelist_converter(self): + """Returns a function which converts framelist objects + + to objects acceptable by our play() method.""" + + return lambda f: f.to_bytes(False, True) + + def play(self, data): + """plays a chunk of converted data""" + + self.stream.write(data) + + def close(self): + """closes the output stream""" + + if (self.initialized): + self.stream.close() + self.pyaudio.terminate() + self.initialized = False + + @classmethod + def available(cls): + """returns True if the AudioOutput is available on the system""" + + try: + import pyaudio + return True + except ImportError: + return False + +AUDIO_OUTPUT = (PulseAudioOutput, OSSAudioOutput, + PortAudioOutput, NULLAudioOutput) diff --git a/Melodia/resources/audiotools/prot.so b/Melodia/resources/audiotools/prot.so new file mode 100755 index 0000000000000000000000000000000000000000..537cca7cb48ae692edea373184cc8024380fe32a GIT binary patch literal 88316 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 (len(self.input_kernel))): + self.unfiltered_samples = self.unfiltered_samples[-len(self.input_kernel):] + + if (len(self.filtered_samples) > (len(self.output_kernel))): + self.filtered_samples = self.filtered_samples[-len(self.output_kernel):] + + return toreturn + + +MAX_ORDER = 10 + +class EqualLoudnessFilter(audiotools.PCMReader): + def __init__(self, pcmreader): + if (pcmreader.channels != 2): + raise ValueError("channels must equal 2") + if (pcmreader.sample_rate not in SAMPLE_RATE_MAP.keys()): + raise ValueError("unsupported sample rate") + + self.stream = audiotools.pcmstream.PCMStreamReader( + pcmreader, + pcmreader.bits_per_sample / 8, + False,True) + + audiotools.PCMReader.__init__( + self, + self.stream, + pcmreader.sample_rate, + 2, + pcmreader.bits_per_sample) + + self.leftover_samples = [] + + self.yule_filter_l = Filter( + BYule[SAMPLE_RATE_MAP[self.sample_rate]], + AYule[SAMPLE_RATE_MAP[self.sample_rate]]) + + self.yule_filter_r = Filter( + BYule[SAMPLE_RATE_MAP[self.sample_rate]], + AYule[SAMPLE_RATE_MAP[self.sample_rate]]) + + self.butter_filter_l = Filter( + BButter[SAMPLE_RATE_MAP[self.sample_rate]], + AButter[SAMPLE_RATE_MAP[self.sample_rate]]) + + self.butter_filter_r = Filter( + BButter[SAMPLE_RATE_MAP[self.sample_rate]], + AButter[SAMPLE_RATE_MAP[self.sample_rate]]) + + def read(self, bytes): + #read in a bunch of floating point samples + (frame_list,self.leftover_samples) = audiotools.FrameList.from_samples( + self.leftover_samples + self.stream.read(bytes), + self.channels) + + #convert them to a pair of floating-point channel lists + l_channel = frame_list.channel(0) + r_channel = frame_list.channel(1) + + #run our channel lists through the Yule and Butter filters + l_channel = self.butter_filter_l.filter( + self.yule_filter_l.filter(l_channel)) + + r_channel = self.butter_filter_r.filter( + self.yule_filter_r.filter(r_channel)) + + #convert our channel lists back to integer samples + multiplier = 1 << (self.bits_per_sample - 1) + + return audiotools.pcmstream.pcm_to_string( + audiotools.FrameList.from_channels( + ([int(round(s * multiplier)) for s in l_channel], + [int(round(s * multiplier)) for s in r_channel])), + self.bits_per_sample / 8, + False) + + +#this takes a PCMReader-compatible object +#it yields FrameLists, each 50ms long (1/20th of a second) +#how many PCM frames that is varies depending on the sample rate +def replay_gain_blocks(pcmreader): + unhandled_samples = [] #partial PCM frames + frame_pool = audiotools.FrameList([],pcmreader.channels) + + reader = audiotools.pcmstream.PCMStreamReader(pcmreader, + pcmreader.bits_per_sample / 8, + False,False) + + (framelist,unhandled_samples) = audiotools.FrameList.from_samples( + unhandled_samples + reader.read(audiotools.BUFFER_SIZE), + pcmreader.channels) + + while ((len(framelist) > 0) or (len(unhandled_samples) > 0)): + frame_pool.extend(framelist) + + while (frame_pool.total_frames() >= (pcmreader.sample_rate / 20)): + yield audiotools.FrameList( + frame_pool[0: + ((pcmreader.sample_rate / 20) * pcmreader.channels)], + pcmreader.channels) + frame_pool = audiotools.FrameList( + frame_pool[((pcmreader.sample_rate / 20) * pcmreader.channels):], + pcmreader.channels) + + (framelist,unhandled_samples) = audiotools.FrameList.from_samples( + unhandled_samples + reader.read(audiotools.BUFFER_SIZE), + pcmreader.channels) + + reader.close() + #this drops the last block that's not 50ms long + #that's probably the right thing to do + + +#takes a PCMReader-compatible object with 2 channels and a +#supported sample rate +#returns the stream's ReplayGain value in dB +def calculate_replay_gain(pcmstream): + import math + + def __mean__(l): + return sum(l) / len(l) + + pcmstream = EqualLoudnessFilter(pcmstream) + + db_blocks = [] + + for block in replay_gain_blocks(pcmstream): + left = __mean__([s ** 2 for s in block.channel(0)]) + right = __mean__([s ** 2 for s in block.channel(1)]) + db_blocks.append((left + right) / 2) + + db_blocks = [10 * math.log10(b + 10 ** -10) for b in db_blocks] + db_blocks.sort() + replay_gain = db_blocks[int(round(len(db_blocks) * 0.95))] + + return PINK_REF - replay_gain + + +if (__name__ == '__main__'): + pass + diff --git a/Melodia/resources/audiotools/resample.so b/Melodia/resources/audiotools/resample.so new file mode 100755 index 0000000000000000000000000000000000000000..c40b1b1604787fdfef3508d7f3acf93a5a300194 GIT binary patch literal 1570132 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

    jjQ|Tp(oujS8pE1U2?-;_O3YVrZZ0Ra>ApJ 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

    &Ol_FK29`F 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

    PW{X~ATb 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

    v{7_``eZ{^lkIzxb-LKlvJ?|M*<|-~&y*^M|J2 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�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%0A{2GV7f~HMqCd-lXU@z9T9-5V%^*~(;u#`f(L)o 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%0A8W-J6G^+WpgX@U7Fol$m0iH)zB8QI?hNL+ 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%0Ao$|x+MjQ-6pqeO=?;UAWf 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

    N&{*$6zMMLNur9sIUgWr-q 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℞tbBvTd$8V3G;n2uu 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±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 G5k$jG*9u1;!7PO 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 z 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�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 Tn0T84p-?gC^MZ+RH#q+X)~C)l literal 0 HcmV?d00001 diff --git a/Melodia/resources/audiotools/toc.py b/Melodia/resources/audiotools/toc.py new file mode 100644 index 0000000..b51be57 --- /dev/null +++ b/Melodia/resources/audiotools/toc.py @@ -0,0 +1,246 @@ +#!/usr/bin/python + +#Audio Tools, a module and set of tools for manipulating audio data +#Copyright (C) 2008-2011 Brian Langenberger + +#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 + +"""The TOC file handling module.""" + +import re +from audiotools import SheetException, parse_timestamp, build_timestamp +import gettext + +gettext.install("audiotools", unicode=True) + +################### +#TOC Parsing +################### + + +class TOCException(SheetException): + """Raised by TOC file parsing errors.""" + + pass + + +def parse(lines): + """Returns a TOCFile object from an iterator of lines. + + Raises TOCException if some problem occurs parsing the file.""" + + TRACKLINE = re.compile(r'TRACK AUDIO') + + lines = list(lines) + + if ('CD_DA' not in [line.strip() for line in lines]): + raise TOCException(_(u"No CD_DA TOC header found")) + + lines = iter(lines) + + toc = TOCFile() + track = None + track_number = 0 + line_number = 0 + + try: + while (True): + line_number += 1 + line = lines.next().strip() + + if (len(line) == 0): + pass + elif (TRACKLINE.match(line)): + if (track is not None): + toc.tracks[track.number] = track + track_number += 1 + track = Track(track_number) + else: + if (track is not None): + track.lines.append(line) + if (line.startswith('FILE') or + line.startswith('AUDIOFILE')): + if ('"' in line): + track.indexes = map( + parse_timestamp, + re.findall(r'\d+:\d+:\d+|\d+', + line[line.rindex('"') + 1:])) + else: + track.indexes = map( + parse_timestamp, + re.findall(r'\d+:\d+:\d+|\d+', + line)) + elif (line.startswith('START')): + track.start = parse_timestamp(line[len('START '):]) + else: + toc.lines.append(line) + except StopIteration: + if (track is not None): + toc.tracks[track.number] = track + return toc + + +class TOCFile: + """An object representing a TOC file.""" + + def __init__(self): + self.lines = [] + self.tracks = {} + + def __repr__(self): + return "TOCFile(lines=%s,tracks=%s)" % (repr(self.lines), + repr(self.tracks)) + + def catalog(self): + """Returns the cuesheet's CATALOG number as a plain string, or None. + + If present, this value is typically a CD's UPC code.""" + + for line in self.lines: + if (line.startswith('CATALOG')): + result = re.search(r'"(.+)"', line) + if (result is not None): + return result.group(1) + else: + continue + else: + return None + + def indexes(self): + """Yields a set of index lists, one for each track in the file.""" + + for track in sorted(self.tracks.values()): + if (track.start != 0): + yield (track.indexes[0], track.indexes[0] + track.start) + else: + yield (track.indexes[0],) + + def pcm_lengths(self, total_length): + """Yields a list of PCM lengths for all audio tracks within the file. + + total_length is the length of the entire file in PCM frames.""" + + previous = None + + for current in self.indexes(): + if (previous is None): + previous = current + else: + track_length = (max(current) - max(previous)) * (44100 / 75) + total_length -= track_length + yield track_length + previous = current + + yield total_length + + def ISRCs(self): + """Returns a track_number->ISRC dict of all non-empty tracks.""" + + return dict([(track.number, track.ISRC()) for track in + self.tracks.values() if track.ISRC() is not None]) + + @classmethod + def file(cls, sheet, filename): + """Constructs a new TOC file string from a compatible object. + + sheet must have catalog(), indexes() and ISRCs() methods. + filename is a string to the filename the TOC file is created for. + Although we don't care whether the filename points to a real file, + other tools sometimes do. + """ + + import cStringIO + + catalog = sheet.catalog() # a catalog string, or None + indexes = list(sheet.indexes()) # a list of index tuples + ISRCs = sheet.ISRCs() # a track_number->ISRC dict + + data = cStringIO.StringIO() + data.write("CD_DA\n\n") + + if ((catalog is not None) and (len(catalog) > 0)): + data.write("CATALOG \"%s\"\n\n" % (catalog)) + + for (i, (current, next)) in enumerate(zip(indexes, + indexes[1:] + [None])): + tracknum = i + 1 + + data.write("TRACK AUDIO\n") + + if (tracknum in ISRCs.keys()): + data.write("ISRC \"%s\"\n" % (ISRCs[tracknum])) + + if (next is not None): + data.write("AUDIOFILE \"%s\" %s %s\n" % \ + (filename, + build_timestamp(current[0]), + build_timestamp(next[0] - current[0]))) + else: + data.write("AUDIOFILE \"%s\" %s\n" % \ + (filename, + build_timestamp(current[0]))) + if (len(current) > 1): + data.write("START %s\n" % \ + (build_timestamp(current[-1] - current[0]))) + + if (next is not None): + data.write("\n") + + return data.getvalue() + + +class Track: + """A track inside a TOCFile object.""" + + def __init__(self, number): + self.number = number + self.lines = [] + self.indexes = [] + self.start = 0 + + def __cmp__(self, t): + return cmp(self.number, t.number) + + def __repr__(self): + return "Track(%s,lines=%s,indexes=%s,start=%s)" % \ + (repr(self.number), repr(self.lines), + repr(self.indexes), repr(self.start)) + + def ISRC(self): + """Returns the track's ISRC value, or None.""" + + for line in self.lines: + if (line.startswith('ISRC')): + match = re.search(r'"(.+)"', line) + if (match is not None): + return match.group(1) + else: + return None + + +def read_tocfile(filename): + """Returns a TOCFile from a TOC filename on disk. + + Raises TOCException if some error occurs reading or parsing the file. + """ + + try: + f = open(filename, 'r') + except IOError, msg: + raise TOCException(str(msg)) + try: + return parse(iter(f.readlines())) + finally: + f.close() diff --git a/Melodia/resources/audiotools/verify.so b/Melodia/resources/audiotools/verify.so new file mode 100755 index 0000000000000000000000000000000000000000..b322c6891c8a92ea84a4e8113e3be30c93b4532c GIT binary patch literal 666841 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 b=D1