使用sox修剪Django表单类中的声音文件

时间:2017-08-19 22:40:00

标签: python django audio sox wavesurfer.js

我正在尝试构建一个允许用户编辑上传声音文件的应用程序。到目前为止,用户能够检索他们的声音并使用waveurfer js库显示为波形。我们的想法是获取所选waveurfer区域的起点和终点,并使用updateview将这些值传递给表单类(其中sox将修剪文件)。我点了安装pysox并在我的虚拟环境中安装了sox。这是我到目前为止我的urls.py:

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

my 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 个答案:

答案 0 :(得分:1)

  1. pysox模块不使用https://stackoverflow.com/users/440558/some-programmer-dude,但为每个要处理的音频文件创建子进程(源代码libsox)。它肯定有效,但是如果你的服务器处理超过100 QPS,那么你应该考虑创建和销毁进程的开销。

  2. 正如文档所说,你应该写

    tfm.build(&#39; path / to / input_audio&#39;,&#39; path / to / output_audio&#39;)

    应用效果后(在你的情况下为tfm.trim)。

    请记住,您应该在服务器上安装sox(apt / yum install sox),并且它不支持写入MP3 / M4A / OGG等,因此您可能需要额外调用lame / ffmpeg对输出进行编码以供下载。