Commits

Ivan Andrianov committed aec35e8

Codecs module.

Comments (0)

Files changed (1)

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)