From 2b487fc16de2fc7c961f8df725c5ece0e5f56e3a Mon Sep 17 00:00:00 2001 From: Jorge Date: Fri, 10 Feb 2017 23:18:19 +0100 Subject: [PATCH] Use audio icon when spectrogram fails. Add note to doc:media-types. In addition to side-stepping spectrograms completely in Python 3 in 1038aea8, this commit adds some fallbacks that will help with potential issues in Python 2. Fixes Issue #5457 Signed-off-by: Ben Sturmfels Author: Jorge --- docs/source/siteadmin/media-types.rst | 9 ++-- mediagoblin/media_types/audio/processing.py | 51 ++++++++++++++------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/docs/source/siteadmin/media-types.rst b/docs/source/siteadmin/media-types.rst index e06739ec..57d967eb 100644 --- a/docs/source/siteadmin/media-types.rst +++ b/docs/source/siteadmin/media-types.rst @@ -133,10 +133,13 @@ To install these on Debianoid systems, run:: If you're running Python 2, install ``scikits.audiolab`` for the spectrograms:: - ./bin/pip install scikits.audiolab +.. code-block:: bash + + ./bin/pip install numpy==1.9.1 + ./bin/pip install scikits.audiolab==0.10.2 -Audio spectrograms are currently not available on Python 3, since scikits.audiolab -does not provide Python 3 support. +For Python 3 ``scikits.audiolab`` has no package yet. Instead of the cool +specrogram image a static icon is used until we found a replacement. (#5467) Add ``[[mediagoblin.media_types.audio]]`` under the ``[plugins]`` section in your ``mediagoblin.ini`` and restart MediaGoblin. diff --git a/mediagoblin/media_types/audio/processing.py b/mediagoblin/media_types/audio/processing.py index 427309de..19254aa8 100644 --- a/mediagoblin/media_types/audio/processing.py +++ b/mediagoblin/media_types/audio/processing.py @@ -148,22 +148,34 @@ class CommonAudioProcessor(MediaProcessor): _log.info('Creating OGG source for spectrogram') self.transcoder.transcode(self.process_filename, wav_tmp, mux_name='oggmux') + spectrogram_tmp = os.path.join(self.workbench.dir, self.name_builder.fill( '{basename}-spectrogram.jpg')) - self.thumbnailer.spectrogram( - wav_tmp, - spectrogram_tmp, - width=max_width, - fft_size=fft_size) - - _log.debug('Saving spectrogram...') - store_public(self.entry, 'spectrogram', spectrogram_tmp, + + try: + self.thumbnailer.spectrogram( + wav_tmp, + spectrogram_tmp, + width=max_width, + fft_size=fft_size) + + _log.debug('Saving spectrogram...') + store_public(self.entry, 'spectrogram', thumbnail, self.name_builder.fill('{basename}.spectrogram.jpg')) - file_metadata = {'max_width': max_width, + file_metadata = {'max_width': max_width, 'fft_size': fft_size} - self.entry.set_file_metadata('spectrogram', **file_metadata) + self.entry.set_file_metadata('spectrogram', **file_metadata) + + except IndexError: + _log.warn( + 'Your version of Numpy is too new to create the waveform thumbnail (#5457). ' + "Try\n\t./bin/pip install numpy==1.9.1\n\t./bin/pip install scikits.audiolab==0.10.2") + + except Exception as exc: + _log.warn('Failed to create spectrogram: ' + + '{0}'.exc) def generate_thumb(self, size=None): if not size: @@ -178,13 +190,18 @@ class CommonAudioProcessor(MediaProcessor): '{basename}-thumbnail.jpg')) # We need the spectrogram to create a thumbnail - spectrogram = self.entry.media_files.get('spectrogram') - if not spectrogram: - _log.info('No spectrogram found, we will create one.') - self.create_spectrogram() - spectrogram = self.entry.media_files['spectrogram'] - - spectrogram_filepath = mgg.public_store.get_local_path(spectrogram) + try: + spectrogram = self.entry.media_files.get('spectrogram') + if not spectrogram: + _log.info('No spectrogram found, we will create one.') + self.create_spectrogram() + spectrogram = self.entry.media_files['spectrogram'] + + spectrogram_filepath = mgg.public_store.get_local_path(spectrogram) + + except: + _log.warn('Failed to create spectrogram, using default audio image instead.') + spectrogram_filepath = 'mediagoblin/static/images/media_thumbs/audio.png' self.thumbnailer.thumbnail_spectrogram( spectrogram_filepath, -- 2.25.1