coefont cloudのサンプルレート

coefontでダウンロードした音声ファイルを、soxで結合しようとしたが、エラーが出てしまい、つまずいてしまったので、そのメモです。

Input files must have the same sample-rate

というエラーが出ている状況

 

soxで結合するコマンドは、

sox ivr*.wav output.wav

でいけるはずだが、エラーが、Input files must have the same sample-rate と出てしまい進まない。

エラー理由がちゃんと書いているけど、なぜ一緒にダウンロードした音声ファイルのサンプルレートが違うのか、よく分からない。coefontは書き出しする毎に、最適なサンプルレートを選択するのかな。

結合する前に、サンプルレートを合わせないといけない。AsteriskのIVRで使用するので、8000にすればいい話だけど、一つ一つ、サンプルレートを変更するのもな。

まずは、現在のサンプルレートを確認する

soxi ivr1.wav

とすると、

Input File : 'ivr1.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:02.20 = 52800 samples ~ 165 CDDA sectors
Sample Encoding: 16-bit Signed Integer PC

と表示される。一つ一つ確認するのも面倒なので、コマンドを作る

for file in ivr*.wav; do soxi “$file”; done

とした。

Input File : 'ivr1.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:02.20 = 52800 samples ~ 165 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr2.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:04.76 = 114300 samples ~ 357.188 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr3.wav'
Channels : 1
Sample Rate : 44100
Precision : 16-bit
Duration : 00:00:05.24 = 230975 samples = 392.815 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr4.wav'
Channels : 1
Sample Rate : 44100
Precision : 16-bit
Duration : 00:00:04.10 = 180810 samples = 307.5 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr6.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:04.86 = 116700 samples ~ 364.688 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr7.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:04.86 = 116700 samples ~ 364.688 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr8.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:01.86 = 44700 samples ~ 139.688 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM


Input File : 'ivr9.wav'
Channels : 1
Sample Rate : 24000
Precision : 16-bit
Duration : 00:00:03.48 = 83400 samples ~ 260.625 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM

そうすると、Sample Rate : 24000と44100が混在していることが分かった。結合でエラーが出た原因が明確化された。保存時に、サンプルレートが変わる点はcoefontさんに聞くしかない。coefontからのダウンロード時に結合することも出来るんだけど、別々で必要に応じて結合するのが、利便性が良い。

サンプルレートの変換

サンプルレートは、どちらかに合わせても良いけど、最終的には8000にするから、ここでやってしまう。

sox ivr1.wav -r 8000 output.wav

で行ける。ここで、また一括処理をするコマンドを作る。

for file in ivr*.wav; do sox “$file” -r 8000 “$file”; done

とした。しかし、これは失敗。同じファイル名に保存できないのかも。ファイルが壊れたので、Linuxへのダウンロードからやり直し。

for file in ivr*.wav; do sox “$file” -r 8000 out”$file”; done
として、別名のファイルに保存した。

音声ファイルの結合

sox outivr*.wav output.wav

はい、これでエラーも出ずに、書き出しが終わった。

あとは、Asteriskで使用する形式に変換していく

以前のここの記事でも行っていたので、見ながら進める

wavからu-lawに変更する。
8000Hz,1チャンネルで(無指定だと失敗する)

sox output.wav -r 8000 -c 1 -t ul output.ulaw

サンプルレートが8000だと、音質が悪いね。これは、ulawのコーデックを使用している為の制限。
そろそろ、もう少しいいコーデックでの接続もしていかなければな。研究の余地有り。

コメントする

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload the CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください