* Add encoding using Xiph.org 'flac' program.
This adds a FlacEncodeTask that encodes wave files to flac files.
This commit also replaces morituri's EncodeTask with FlacEncodeTask, however, in
morituri, EncodeTask also does the tagging.
FlacEncodeTask will not perform the tagging.
So we will need an extra task for the tagging - this will be added soon.
Meanwhile, do not merge this commit to master yet.
* Add tagging using mutagen.
Replace the gstreamer tagging code with mutagen tagging code.
getTagList is rewritten to return a dictionary of tags, which are then simply
passed to mutagen.
The way it is set up right now is not the best - I don't think it makes sense
for tagging to take place in program/cdparanoia.py ; but this is how the current
code did it.
I suggest that, when we rip out all the gstreamer code, we also move the tagging
to a more sensible place; and then also make the tagging not be an actual
'task.Task'.
* Add gstreamer-less CRC32 version
Only works on wave files at this point. Should not be a problem, I think.
* Use proper musicbrainz tags and ALBUM tag.
* Add mutagen to .travis.yml
* introduce logcommand.Lager, Whipper(); use argparse for whipper image commands, stub logging
* update Lager docstring to mention config.Config()
* make incorrect subcommand and --version work on toplevel command
* migrate accurip show, expand Lager, do not attempt to return from Lager.__init__.
* migrate offset find, add Lager.error
* correct offset find drive symlink handling
* migrate drive
* change Lager.__init__(prog) to arg from kwarg
* but actually
* remove Whipper.usage
* add and use Lager.device_option() context manager
* help I married an axe murderer
* use unified options namespace for entire command tree
* migrate whipper cd without comprehensive config loading
* switch to logging module
- use logging instead of flog for non-extern modules
- use WHIPPER_DEBUG and WHIPPER_LOGFILE env variables
* convert self.log calls to logger.debug
* convert self.error calls to logger.error
* remove log.Loggable, use logger not logging
* Logging conversion continues
- Convert log.* calls to logger.*
- Remove morituri.common.log imports
* remove morituri.common.log from tests
* remove extern/flog, bare minimum Debug conversion
* update README for logging changes
* update soxi to use logging
* refactor Lager for more declarative subcommands
* Refactor Lager.device_option:
- inline into __init__
- throw IOError instead of Exception for missing drives
- remove CommandError checking in rip/main
* rename rip to whipper in rip.main
* convert rip.debug commands
* Rename logcommand.Lager to command.BaseCommand
- remove command.CommandError occurrences
- remove python-command external module
* remove submodules from README, update rclog formatter
* update minor ambiguity in readme for command invocation
* update version number to match setup.py
* remove gitmodules
* update version number in tests as well (boo)
* convert logger.error to logger.critical
* Change morituri.rip to morituri.command
- mv common.command to command.basecommand
- move TEMPLATES used only by rip.cd out of rip.common
- update entry point for command to command.main
* update basecommand documentation
* go pyflaking: import fixing
* replace self.stdout with sys.stdout
* remove BaseCommand.config, alphabetise imports
* convert self.stdXXX leftovers
* convert last getRootCommand to config.Config
* convert last getExceptionMessage's to str
* change musicbrainz useragent to whipper
* standardise program/sox.py formatting, add test case
* add program/sox.peak_level() docstring
* update .travis.yml to include sox as a test dependency
* move sox from test dependency to normal dependency
* update README to mention sox, remove small autoconf mention
* use .splitlines() instead of .split('n')
* update README to force python2
* add support for PRE_EMPHASIS detection; mark pre-emphasis as FLAGS PRE in .cue
* correct typo, s/ivar/type/ for pre_emphasis element in track table
* add SoxPeakTask, program/sox module, sox.peak_level()
* use sox peak detection in lieu of gstreamer
* morituri/test/test_program_cdparanoia.py:
Add a task that can analyze the drive for whether it defeats
the audio cache.
* morituri/result/result.py:
* morituri/rip/cd.py:
Make it possible to store whether a drive defeats audio cache
in the result.
* morituri/rip/drive.py:
Add rip drive analyze command to analyze caching of a drive,
and store it in the config.
* morituri/program/cdparanoia.py:
* morituri/result/result.py:
* morituri/rip/cd.py:
* morituri/test/test_program_cdparanoia.py:
Get cdparanoia version.
Store both cdparanoia and cdrdao versions on rip result.
* morituri/common/program.py:
* morituri/program/cdparanoia.py:
* morituri/result/logger.py:
* morituri/result/result.py:
Calculate speed of reading track.
Output Test and Copy speed per track in log.
Add shrinkPath to write shorter path names.
* morituri/test/test_common_common.py (added):
Add test.
* morituri/program/cdparanoia.py:
Catch ENAMETOOLONG and shrink path.
* morituri/common/program.py:
Update track result's filename if it was shrunk.
* morituri/rip/cd.py:
set the possibly shrunk path on the result.
add task argument to TaskRunner.schedule so we can get exceptions.
Add .schedule method to Task to pass self.
* morituri/common/checksum.py:
* morituri/common/encode.py:
* morituri/common/gstreamer.py:
* morituri/program/cdparanoia.py:
* morituri/program/cdrdao.py:
Adapt.
cdparanoia can hang indefinitely on scsi read errors.
For example, on some drives, when trying negative offsets.
Notice them, count them, and fail after 100.
* morituri/test/test_program_cdparanoia.py:
* morituri/test/cdparanoia.progress.error (added):
Add a test for this output.
Add logCategory to CDRDAO tasks.
Remove errors from parser, set them publically on task.
Properly raise exceptions on data cd's with correct stack origin.