web-dev-qa-db-ja.com

soxを使用して2つのモノラルファイルからステレオファイルを作成する

Centos6.0でsox14.2.0を使用しています。

私は2つのmono wavファイルを持っています、left.wavおよびright.wav。それらを1つにまとめる必要がありますstereo.oggファイル、left.wav左に80%パンし、right.wav右に80%パンします。

私はこれに必要なsoxオプションを思い付くことができませんでした。どうすればよいですか?

これは多くのファイルに対して繰り返し実行されるため、効率的なソリューションをお勧めします。私が理解していることから、1回のパス(1回のsoxの呼び出し)でそれを行う方法があるはずです。

5
haimg

方法は次のとおりです。

sox left.wav right.wav --channels 2 --combine mergestereo.oggミキサー0.8,0.2,0.2,0.8

4
haimg

haimgsコマンドは完全に正しくありません。従来は、1つのチャンネルの音量を下げることでパンします。つまり、信号を80%残したい場合、左チャンネルは元の音量を維持し、右チャンネルは元の音量の20%しか取得しません。少なくとも、それはソックスのパンニングコードが行ったことです(そしてステレオを発明したときにアランブルームラインが支持したようです)。

また、彼のコマンドはremix-optionを使用して短縮できます。

したがって、修正および短縮されたコマンドは次のとおりです。

sox left.wav right.wav stereo.ogg remix 1,2v0.2 1v0.2,2

haimgsコメントへの回答で編集:

soxは、クリッピングが発生した場合に警告します。しかし、はい、それは可能です。リミックスオプションを使用すると、すべてのチャンネルの音量が1/nの係数でスケーリングされます。ここで、nは入力チャンネルの数です。ただし、これは、出力チャネルにVULME OPTIONが指定されていない場合にのみ使用されます(したがって、100%+ 20%が正しい)。

soxには、明示的なボリューム情報なしで任意のチャネルをスケーリングするオプションもあります。「remix」の後に「-a」を追加するだけで(「remix-a 1,2v0.2 1v0.2,2」など)、ボリュームは50のようになります。 %+ 20%= 70%。それはかなり混乱していて、パンされたチャンネルのボリュームを1/nでスケーリングする必要があるかどうかは今のところわかりません。その結果、「remix -a 1,2v0.1 1v0.1,2」、つまり50%+になります。 10%= 60%。私はこの方向でさらに調査する必要があります。一方、soxのmanページのremix-sectionを読むことができます( soxホームページ でも入手できます)。

さらに反映した後に編集:

それについて考えた後、私はあなたがパンされたボリュームも1/nでスケーリングしなければならないことをかなり確信しています。

クリッピングの問題について:[〜#〜] all [〜#〜]をチャネル数で割ると、この問題は発生しません。ただし、信号のパワーは線形ではなく対数であるため、そのは信号の元のパワーを保持しません。ミックスするチャンネルが多いほど、信号は静かになります。そのため、soxには、ボリュームが1/sqrt(n)でスケーリングされるオプションもあります。これを使用するには、リミックス部分で「v」の代わりに「p」を取り、それに応じて値を調整し、リミックスステートメントの後に「-p」オプションを追加します。 1/nと1/sqrt(n) ここ によるスケーリングの違いを見ることができます。

以下は、正しい電力値を計算する方法です。チャネルごとに、20 * log_10(factor)を解く必要があります。 2の係数は〜6(dB)になり、0.5の係数は〜-6(dB)になります。それはまさにソックスのマニュアルが言っていることなので、私はこれが正しいと思います。

したがって、最後に、あなたの場合のコマンドは次のようになります。

sox left.wav right.wav stereo.ogg remix -p -a 1,2p-6 1p-6,2

このマシンにはsoxがないため、このコマンドの正しい構文をテストできません。問題があるかどうかを教えてください。同様の問題に直面するため、機会があればすぐにこの理論をすべてテストしますが、2つだけではなく、さらに多くのチャネルを混合する必要があるため、その信号電力を考え出しました。

4
causa prima

どういうわけか、上記のすべてが私のためにエラーを生成しました。これは私のために働いたものです(Ubuntu 14.04のSOX):

sox -M -c 1 lef.wav -c 1 right.wav output.mp3 
3
Roger

パンオプションを指定してsoxを使用し、1つのファイルを右にパンし、もう1つのファイルを左にパンします(それぞれ1と-1)。次に、soxmixを使用して2つを混ぜ合わせます。

0
albal