Work around lack of scikits.audiolab support on Python 3.

This commit is contained in:
Ben Sturmfels 2019-09-12 19:58:32 +10:00
parent 8f18381bbc
commit 97dcfe3725
No known key found for this signature in database
GPG Key ID: 023C05E2C9C068F0
2 changed files with 29 additions and 1 deletions

View File

@ -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 not compile it with alsa support. Alsa support is not necessary for the GNU
MediaGoblin application. 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 ./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 Add ``[[mediagoblin.media_types.audio]]`` under the ``[plugins]`` section in your
``mediagoblin.ini`` and restart MediaGoblin. ``mediagoblin.ini`` and restart MediaGoblin.

View File

@ -44,6 +44,31 @@ try:
import scikits.audiolab as audiolab import scikits.audiolab as audiolab
except ImportError: except ImportError:
print("WARNING: audiolab is not installed so wav2png will not work") 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 import subprocess
class AudioProcessingException(Exception): class AudioProcessingException(Exception):