From: Ben Sturmfels Date: Thu, 12 Sep 2019 09:58:32 +0000 (+1000) Subject: Work around lack of scikits.audiolab support on Python 3. X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=97dcfe3725d11bd4d2212a232c156c25810322a2;p=mediagoblin.git Work around lack of scikits.audiolab support on Python 3. --- diff --git a/docs/source/siteadmin/media-types.rst b/docs/source/siteadmin/media-types.rst index 8f9239be..e06739ec 100644 --- a/docs/source/siteadmin/media-types.rst +++ b/docs/source/siteadmin/media-types.rst @@ -131,10 +131,13 @@ To install these on Debianoid systems, run:: not compile it with alsa support. Alsa support is not necessary for the GNU MediaGoblin application. -Then install ``scikits.audiolab`` for the spectrograms:: +If you're running Python 2, install ``scikits.audiolab`` for the spectrograms:: ./bin/pip install scikits.audiolab +Audio spectrograms are currently not available on Python 3, since scikits.audiolab +does not provide Python 3 support. + Add ``[[mediagoblin.media_types.audio]]`` under the ``[plugins]`` section in your ``mediagoblin.ini`` and restart MediaGoblin. diff --git a/extlib/freesound/audioprocessing.py b/extlib/freesound/audioprocessing.py index 7ef8d5d4..b9a96a97 100644 --- a/extlib/freesound/audioprocessing.py +++ b/extlib/freesound/audioprocessing.py @@ -44,6 +44,31 @@ try: import scikits.audiolab as audiolab except ImportError: print("WARNING: audiolab is not installed so wav2png will not work") + + # Hack to prevent errors when uploading audio files. The issue is that + # scikits.audiolab does not support Python 3. By replacing it with a mock + # implementation here, we can accept audio files, but we won't get the nice + # waveform image. + import six + if six.PY3: + class MockSndfile(object): + def __init__(self, *args, **kwargs): + self.nframes = 0 + self.channels = 1 + self.samplerate = 44100 + + def read_frames(self, *args): + return [] + + def seek(self, *args): + return + + def close(self): + return + import unittest.mock as mock + audiolab = mock.Mock() + audiolab.Sndfile = MockSndfile + import subprocess class AudioProcessingException(Exception):