LoginSignup
2
1

More than 5 years have passed since last update.

SoXのrepeatエフェクトの回数指定に要注意

Posted at

音声処理といえばSoX (Sound eXchange)

音声ファイルを切り出したりつなげたりフォーマット変換したり(以下略)
そんな音声処理に欠かせないSoXですが。
最近、とある機能の使い方でハマってしまったのでメモしときます。

repeatエフェクトで音声を繰り返す

SoXの機能として、1つの音声ファイルを指定した回数だけ繰り返す repeat というエフェクトがあります。
但しこれがちょっと曲者です。

繰り返されるのはN+1回

まず無音の音声ファイルを作ります。分かりやすいように長さは1秒で。

terminal
$ sox -n -r 44100 -c 1 -b 16 -e signed-integer silence.wav trim 0.0 1.0
$ soxi silence.wav

Input File     : 'silence.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:01.00 = 44100 samples = 75 CDDA sectors
File Size      : 88.2k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

続いて、これを5回繰り返して5秒間の音声ファイルを作りたいと思います。

terminal
$ sox silence.wav out.wav repeat 5
$ soxi out.wav

Input File     : 'out.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:06.00 = 264600 samples = 450 CDDA sectors
File Size      : 529k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

え、6秒になってる?
実はrepeatエフェクト、指定した回数+1回繰り返した音声を出力するのです。
このことは man sox にも載っています。original audio と別にN回続けるんですって。

repeat [count (1)]
       Repeat the entire audio count times, or once if count is not given.  Requires  tem‐
       porary  file  space  to  store  the audio to be repeated.  Note that repeating once
       yields two copies: the original audio and the repeated audio.

よって、「5回繰り返した音声」を作成したい場合は「4」を指定するのが正しい使い方です。
一般に、「N回繰り返した音声」を作成したい場合は「N-1」を指定することになります。

余談

いつだったか「16回までしかrepeatできない」という現象に見舞われた記憶があります。
SoXのバージョン自体は古かったと思います(確かCentOS 6上のsox 14.2.0)が、あまり鮮明に覚えてないのと、当時同じSoXのバージョンでも別のマシンで試したらうまくいったということで、結局解決せずに終わってしまいました。
心当たりのある方がいらっしゃいましたらご一報いただければ幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1