2017-08-19 8 views
0

アップロードされたサウンドファイルを編集できるアプリケーションを作成しようとしています。これまでのところ、ユーザはwavesurfer jsライブラリを使用してサウンドを取得し、波形として表示することができます。アイデアは、選択された波乗り領域の開始点と終了点を取得し、それらの値をフォームビュー(soxがファイルをトリムする)に渡すことです。私はpipをpysoxにインストールし、私の仮想環境にsoxをインストールしました。これは私が私のurls.pyで、これまで持っているものです。soxを使ってDjangoフォームクラス内のサウンドファイルをトリミングする

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.このフォームを作成するには、フォームクラスに何を追加する必要がありますか?私はソックスの文書を見て、やっていることを完全にはっきりさせていません。サウンドファイルをトランスフォーマの引数として渡すべきですか?どんな助けでも大歓迎です。

答えて

1
  1. pysoxモジュールはlibsoxを使用するが、工程(ソースコードhere)各オーディオファイルのサブプロセスを作成しません。これは確実に機能しますが、サーバーが100 QPS以上の処理を行う場合は、プロセスの作成と破棄のオーバーヘッドを考慮してください。ドキュメントが経つにつれ、あなたは効果(tfm.trimを適用した後

    tfm.build( 'パス/に/ input_audio'、 'パス/に/ output_audio')

    を書くべき

  2. あなた場合)。

    サーバにsox(apt/yum install sox)をインストールする必要があります。また、MP3/M4A/OGGなどへの書き込みをサポートしていないので、おそらくlame /ダウンロードのために出力をエンコードするffmpeg。

+0

お返事ありがとうございます!ソックスの仕組みを理解するのに本当に役立ちました。パスについて私が持っている1つの質問は、あなたはdjango形式のコンテキスト内で、どのようにパスを指定するか知っていますか?入力パスを具体的には、 '音'フィールドをつかむ 'ファイル'変数をプラグインするだけですか? –

+1

おそらく、サウンドデータをローカルファイルに書き込む必要があります。 SoXは標準入力からのオーディオの読み込みをサポートしていますが、不都合なことに、pysoxはそうではありません。また、リモートURLからフェッチすることもできません。 –

関連する問題