Commit Graph

61 Commits

Author SHA1 Message Date
Merlijn Wajer
304c66876b Fix several issues in the gstreamer removal PR
Patch by JoeLametta
2017-04-23 22:32:05 +02:00
Merlijn Wajer
e7767694af Rip out all code that directly uses gstreamer
We can now rip CDs without gstreamer.

This is not the most clean attempt, but I have tried to remove most of the
code that depends on gstreamer. I hope there is not a lot of code left that
depends on code that I have removed - I can at least rip a CD fully.
2017-02-09 23:05:34 +01:00
Merlijn Wajer
6ddb5d0114 Add gstreamer-less flac encoder and tagging (#121)
* 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
2017-02-02 21:50:47 +01:00
Samantha Baldwin
d1ed80d62a argparse & logging (#92)
* 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
2016-12-20 23:11:30 +01:00
Samantha Baldwin
b2ca3167eb Sox (#48)
* 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
2016-10-17 15:42:17 +02:00
Chad Bergeron
8ff28da4fc clean up unnecessary return. 2016-02-02 16:24:24 -05:00
Chad Bergeron
0da064fe97 Modified str outputs and ensured that tracks with no peakdB set trackResult.peak to a float. 2016-02-02 16:14:26 -05:00
Thomas Vander Stichele
aec75861be Use newer lamemp3enc element
This fixes trac issue 45 and adapts pull request 42 on github
2013-11-23 16:57:33 -05:00
Thomas Vander Stichele
8a8189fa89 make profiles loggable 2013-11-23 16:57:33 -05:00
Thomas Vander Stichele
fc282df8a6 start with a one frame interval until we know more
if it's say four frames, we get to paused without eos, but then
hit eos without level message
2013-08-29 19:51:07 +02:00
Thomas Vander Stichele
4e03a6e966 work around GStreamer bug in flacdec for really short files 2013-02-26 23:12:16 +01:00
Thomas Vander Stichele
a692542307 debug and cleanup 2013-02-26 23:12:16 +01:00
Thomas Vander Stichele
f05ec0f2e9 The logic was the wrong way around.
The idea is that we set an interval that is definitely smaller than
the whole file.
2013-02-26 23:12:15 +01:00
Thomas Vander Stichele
1c1d1c954e add FIXME 2012-12-06 17:49:32 +00:00
Thomas Vander Stichele
90a8d4992c * morituri/common/common.py:
Strip bitrate tags too for comparison of dicts.
	  Add a way to show us the different keys between dicts.
	* morituri/common/encode.py:
	  Debug different keys.
2012-12-06 17:28:24 +00:00
Thomas Vander Stichele
90bb3a7371 * morituri/common/encode.py:
Collect all tags by replacing from newer tag messages.
	  Gets more than bitrate from flacs now.
2012-12-06 17:18:32 +00:00
Thomas Vander Stichele
43963a0050 log all tasks 2012-12-06 16:58:44 +00:00
Thomas Vander Stichele
6b50218701 * morituri/common/encode.py:
Also remove buggy audio parsers when encoding.
	  Fixes #73.
2012-11-23 16:39:34 +00:00
Thomas Vander Stichele
3c87608773 * morituri/common/encode.py:
Use vbr-quality instead of quality for vbr.  Fixes #94.
2012-11-23 16:30:05 +00:00
Thomas Vander Stichele
4ddca857f7 pep8 fixes 2012-11-10 21:56:30 +00:00
Thomas Vander Stichele
91b852b485 * morituri/common/checksum.py:
* morituri/common/encode.py:
	  Add a GstPipelineTask that lets us log.
	  Handle checksumming of small tracks better.
2012-08-12 12:26:33 +00:00
Thomas Vander Stichele
519baf6501 revert accidental commit 2012-07-12 09:40:00 +00:00
Thomas Vander Stichele
97101ec972 add new file 2012-07-12 09:38:59 +00:00
Thomas Vander Stichele
8ec7bcbb9d * morituri/common/checksum.py:
* morituri/common/common.py:
	* morituri/common/encode.py:
	* morituri/image/image.py:
	* morituri/test/test_common_encode.py:
	  Moved quoteParse.
2011-08-05 19:18:10 +00:00
Thomas Vander Stichele
798a209195 * morituri/extern/task (added):
* morituri/extern/task/taskgtk.py (added):
	* morituri/extern/task/gstreamer.py (added):
	* morituri/extern/task/task.py (added):
	* morituri/common/taskgtk.py (deleted):
	* morituri/common/gstreamer.py (deleted):
	* morituri/common/task.py (deleted):
	  Move task-related modules into an extern directory so other
	  projects can use them.
	* morituri/common/checksum.py:
	* morituri/common/encode.py:
	* morituri/image/image.py:
	* morituri/program/cdparanoia.py:
	* morituri/program/cdrdao.py:
	* morituri/rip/cd.py:
	* morituri/rip/debug.py:
	* morituri/rip/image.py:
	* morituri/rip/main.py:
	* morituri/rip/offset.py:
	* morituri/test/test_common_checksum.py:
	* morituri/test/test_common_encode.py:
	* morituri/test/test_image_image.py:
	  Adapt.  Tests work.
2011-08-05 18:50:51 +00:00
Thomas Vander Stichele
3fccbac367 * morituri/common/encode.py:
Query for duration and use it in level callback to set progress.
	  Works around F-15 bug where encode progress is not being updated.
2011-05-24 17:00:04 +00:00
Thomas Vander Stichele
9a6af593f8 * morituri/rip/Makefile.am:
* morituri/rip/main.py:
	* morituri/rip/debug.py (added):
	  Add helper command to debug tasks.
	* morituri/common/encode.py:
	  Add debug.
2011-05-24 16:30:41 +00:00
Thomas Vander Stichele
8bc5eff73c * morituri/common/task.py:
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.
2011-05-24 12:51:40 +00:00
Thomas Vander Stichele
eef8b18435 * morituri/common/encode.py:
Convert TagReadTask to gstreamer.GstPipelineTask and
	  remove lots of duplicate code.
2011-05-23 18:05:31 +00:00
Thomas Vander Stichele
ce71bfb5c2 * morituri/common/checksum.py:
* morituri/common/encode.py:
	* morituri/common/gstreamer.py:
	  Move play to base class of GstPipelineTask.
2011-05-23 18:02:48 +00:00
Thomas Vander Stichele
3482288750 * morituri/common/gstreamer.py:
Add a stop method and a stopped overridable handler.
	* morituri/common/checksum.py:
	* morituri/common/encode.py:
	  Adapt to using stopped.
2011-05-23 15:26:19 +00:00
Thomas Vander Stichele
1ce46272a9 * morituri/test/test_common_encode.py:
Generate an actual file by spawning gst-launch; otherwise
	  with proper error handling we get an error from wavparse that
	  there is not enough data to typefind.
	* morituri/common/gstreamer.py:
	  Move the gst import to start() and set it as a class attribute.
	  Document methods.
	* morituri/common/encode.py:
	  Convert EncodeTask to a GstPipelineTask.
2011-05-23 14:57:16 +00:00
Thomas Vander Stichele
514bf4bc10 * morituri/common/encode.py:
Add some debug.
2011-05-23 13:46:46 +00:00
Thomas Vander Stichele
c301015537 * morituri/common/checksum.py:
* morituri/common/encode.py:
	* morituri/image/table.py:
	* morituri/rip/cd.py:
	* morituri/rip/image.py:
	* morituri/rip/offset.py:
	* morituri/test/test_common_accurip.py:
	* morituri/test/test_common_checksum.py:
	* morituri/test/test_image_cue.py:
	* morituri/test/test_image_table.py:
	  Pychecker fixes.
2011-05-21 11:50:39 +00:00
Thomas Vander Stichele
0b520f2e86 * morituri/common/encode.py:
Alac does not have merge_tags.  Fixes #15.
2011-05-19 01:23:53 +00:00
Thomas Vander Stichele
f70ba7cb32 * morituri/program/cdparanoia.py:
* morituri/common/encode.py:
	* morituri/common/program.py:
	* morituri/rip/cd.py:
	  Add action and what args to describe task better.
2011-05-19 00:28:36 +00:00
Thomas Vander Stichele
7bd0c5e2c0 * morituri/common/encode.py:
wavenc does not have merge_tags, it seems.
	  So don't call an element a tagger, don't merge tags if there is
	  no tagger, and complain if there is no merge_tags when we think
	  there should be.
2011-04-08 09:04:25 +00:00
Thomas Vander Stichele
335b49e4b4 * morituri/common/encode.py:
Debug failing to write tags better.  See #60.
2011-03-20 18:39:28 +00:00
Thomas Vander Stichele
a4a1df9d2f remove print 2010-04-16 21:12:11 +00:00
Thomas Vander Stichele
5a778deca7 move checksum import inline so we don't import gst again 2010-04-16 21:11:50 +00:00
Thomas Vander Stichele
c68848026a * morituri/common/encode.py:
* morituri/rip/image.py:
	  Provide status on the retagging.
2010-04-14 22:01:45 +00:00
Thomas Vander Stichele
3361edbee2 * morituri/common/encode.py:
Before moving the newly tagged file to overwrite the original
	  one, copy over mode.
2010-04-14 21:44:09 +00:00
Thomas Vander Stichele
cee915fbd2 * morituri/common/encode.py:
Fix wrong code for checksum comparison.
2010-04-13 22:10:06 +00:00
Thomas Vander Stichele
4cc8b753b8 pychecker fix 2010-04-13 21:58:13 +00:00
Thomas Vander Stichele
d9ca12d7cc * morituri/common/encode.py:
Add tasks to read, write, and safely retag flac files.
	* morituri/test/test_common_encode.py:
	  Add tests for this.
2010-04-13 21:55:35 +00:00
Thomas Vander Stichele
310a3789c0 * morituri/common/encode.py:
pychecker fix.
2010-04-13 14:12:17 +00:00
Thomas Vander Stichele
a787676239 * morituri/common/encode.py:
Add a task to read tags.
	* morituri/test/test_common_encode.py:
	  Add a test.
2010-04-13 07:37:01 +00:00
Thomas Vander Stichele
2e7a3974c4 * morituri/common/encode.py:
Add a vbr profile.
2010-04-11 17:14:37 +00:00
Thomas Vander Stichele
e124c79c64 * morituri/program/cdparanoia.py:
Add some debug.
	* morituri/common/encode.py:
	  Add more debug.
	  Handle the case where peak is full scale, and peakdB thus 0,
	  which triggered not setting self.peak.
2010-04-08 21:06:52 +00:00
Thomas Vander Stichele
98213c4196 * doc/release:
Document having clean test run.
	* morituri/common/encode.py:
	  Catch and properly stop on gst.QueryError.
	  Don't set peak in stop if we had an error.
	* morituri/test/test_common_encode.py:
	* morituri/test/test_common_renamer.py:
	* morituri/test/test_image_cue.py:
	  Clean up after tests.
2010-04-06 00:02:56 +00:00