0

我正在尝试构建一个允许用户编辑他们上传的声音文件的应用程序。到目前为止,用户可以使用 wavesurfer js 库检索他们的声音并显示为波形。这个想法是获取所选 wavesurfer 区域的起点和终点,然后使用 updateview 将这些值传递给表单类(sox 将在其中修剪文件)。我在我的虚拟环境中安装了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 文档,但仍然不完全清楚该怎么做。我应该将声音文件作为参数传递给变压器吗?任何帮助深表感谢。

4

1 回答 1

1
  1. pysox 模块不使用libsox,而是为要处理的每个音频文件创建一个子进程(此处为源代码)。它确实有效,但如果您的服务器处理超过 100 QPS,那么您应该考虑创建和销毁进程的开销。

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

    tfm.build('path/to/input_audio', 'path/to/output_audio')

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

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

于 2017-08-19T22:57:13.463 回答