Use audio icon when spectrogram fails. Add note to doc:media-types.
authorJorge <mediagoblin@gybs.wa>
Fri, 10 Feb 2017 22:18:19 +0000 (23:18 +0100)
committerBen Sturmfels <ben@sturm.com.au>
Thu, 2 Apr 2020 05:58:11 +0000 (16:58 +1100)
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 <ben@sturm.com.au>
Author: Jorge <mediagoblin@gybs.waa>

docs/source/siteadmin/media-types.rst
mediagoblin/media_types/audio/processing.py

index e06739ec8f5c71cb1312b0ca080c8fd867d9e6ae..57d967eb8df4064e8c5ef7aa70392784c3c85213 100644 (file)
@@ -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.
index 427309de5f212cdf9d34789c68b0ea6db4e01363..19254aa85ef3d36b66b52078030216f0d74e6e66 100644 (file)
@@ -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,