Использование sox для обрезки звукового файла в классе форм Django

Я пытаюсь создать приложение, которое позволяет пользователям редактировать свои загруженные звуковые файлы. До сих пор пользователь мог извлекать свои звуки и отображать их в виде сигнала с помощью библиотеки JS WaveSfer. Идея состоит в том, чтобы захватить начальную и конечную точки в выбранной области waveurfer и передать эти значения в класс формы (где sox будет обрезать файл), используя updateview. Я установил pysox и установил sox в моей виртуальной среде. Это то, что я до сих пор с моим urls.py:

url(r'^update_sound/(?P<pk>[\w-]+)$', UpdateSound.as_view(), name='update_sound'),

мой forms.py:

import sox
class UpdateSound(forms.ModelForm):
def trim_sound(self):
    file = self.cleaned_data.get('sound', False)
    tfm = sox.Transformer(file)
    tfm.trim(0,0.3)



class Meta:
    model = Sounds
    fields = [
    'sound',
    ]

И вид обновления

class UpdateSound(UpdateView):      
    model = Sounds
    form_class = UpdateSound    
    template_name= 'sound_detail.html'

Мой главный вопрос: 1. Это хороший способ редактирования звуковых файлов и 2. Что я должен добавить в свой класс формы, чтобы эта работа работала? Я просмотрел документы sox и до сих пор не совсем понял, что делать. Должен ли я передавать звуковой файл в качестве аргумента преобразователю? Буду признателен за любую оказанную помощь.

1 ответ

Решение
  1. Модуль pysox не использует libsox, но создает подпроцесс для обработки каждого аудиофайла (исходный код здесь). Это, безусловно, работает, но если ваш сервер обрабатывает больше, чем, скажем, 100 QPS, то вам следует принять во внимание затраты на создание и уничтожение процессов.

  2. Как документ идет, вы должны написать

    tfm.build('путь / к /input_audio', 'путь / к /output_audio')

    после применения эффектов (тфм.трим в вашем случае).

    Имейте в виду, что вы должны установить sox (apt/yum install sox) на ваш сервер, и он не поддерживает запись в MP3/M4A/OGG и т. Д., Поэтому вам, вероятно, понадобится дополнительный вызов lame / ffmpeg для кодирования выход для скачивания.

Другие вопросы по тегам