Source

fftranscoder / fftranscoder / codecs.py

#################################################################################
# Copyright (C) 2011 by Ivan Andrianov                                          #
#                                                                               #
# Permission is hereby granted, free of charge, to any person obtaining a copy  #
# of this software and associated documentation files (the "Software"), to deal #
# in the Software without restriction, including without limitation the rights  #
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell     #
# copies of the Software, and to permit persons to whom the Software is         #
# furnished to do so, subject to the following conditions:                      #
#                                                                               #
# The above copyright notice and this permission notice shall be included in    #
# all copies or substantial portions of the Software.                           #
#                                                                               #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR    #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,      #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE   #
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER        #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN     #
# THE SOFTWARE.                                                                 #
#################################################################################

class Codec:
    def __init__(self, name, encoderName, fileExtension, isLossy = True):
        self.__name = name
        self.__encoderName = encoderName
        self.__fileExtension = fileExtension
        self.__isLossy = isLossy

    def getName(self):
        return self.__name

    def getEncoderName(self):
        return self.__encoderName

    def hasEncoder(self):
        return self.__encoderName != None

    def getFileExtension(self):
        return self.__fileExtension

    def isLossy(self):
        return self.__isLossy

__codecs = [Codec('AAC', 'aac', 'aac'),
            Codec('ALAC', 'alac', 'alac', False),
            Codec('Dolby AC3', 'ac3', 'ac3'),
            Codec('FLAC', 'flac', 'flac', False),
            Codec('Monkey\'s Audio', None, 'ape', False),
            Codec('mp3', 'libmp3lame', 'mp3'),
            Codec('OGG Vorbis', 'libvorbis', 'ogg'),
            Codec('WavPack', None, 'wv', False),
            Codec('WMA', 'wmav2', 'wma')]

__bitRates = [128, 144, 160, 192, 224, 256, 320]

def getCodecs():
    return __codecs

def getBitRates():
    return __bitRates

def getCodecByFileExtension(fileExtension):
    return filter(lambda codec: codec.getFileExtension() == fileExtension, __codecs)

def getDestinationCodecsAndBitRates(sourceCodec, sourceBitRate = None):
    if sourceCodec.isLossy():
        destinationCodecs = filter(lambda codec: codec.isLossy() and codec != sourceCodec, __codecs)
        destinationBitRates = filter(lambda bitRate: bitRate <= sourceBitRate, __bitRates)
    else:
        destinationCodecs = filter(lambda codec: codec != sourceCodec, __codecs)
        destinationBitRates = __bitRates
    return (destinationCodecs, destinationBitRates)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.