スクリプト集

GitHub時代に逆行

mixman.pl

  • 2つのWAVファイルを重ねあわせて保存する
  • 16bit, mono only
  • RIFFタグは44バイト固定
  • サンプリング周波数は合わせて下さい
  • 音声にノイズを合成するときなんかに使います
#! perl

# 音声を重ねがけ保存 (16bit mono only)
# mixman.pl inputfile mixsoundfile outputfile
# inputfile :    かける元のWAVファイル
# mixsoundfile : 重ね合わせるWAVファイル
# outputfile :   書き出されるWAVファイル

use strict;
use warnings;

my $input = $ARGV[0];
my $sound = $ARGV[1];
my $output = $ARGV[2];

open(IN, "<$input") or die("file open error");
binmode IN;

open(DATA, "<$sound") or die("file open error");
binmode DATA;

my @effect;
my $temp;

# riffタグスキップ
seek(DATA, 44, 0);

while(read(DATA, $temp, 2)) { # 2byte (short) read
  my $data = unpack("s", $temp);
  push(@effect, $data);
}

open(SAVE, ">$output") or die("file write error");
binmode SAVE;

# 元のファイルに加算していく
my $in_cnt = 0;
my $eff_cnt = $#effect;

# riffタグをコピー
for(my $i=0; $i<44; $i++) {
  read(IN, $temp, 1);
  print SAVE $temp;
}

while(read(IN, $temp, 2)) { # 2byte read
  my $data = unpack("s", $temp);
  print SAVE pack("s", ($data + $effect[$in_cnt % $eff_cnt]));
  $in_cnt++;
}

close(SAVE);
close(DATA);
close(IN);
トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS