wavファイルを左チャンネルのみ、右チャンネルのみにする
wavファイルをrubyでいじって、左チャンネルだけ消して右だけ聞こえるようにする。右を消して左だけにしたファイルも書き出す。
http://d.hatena.ne.jp/shokai/20091102/1257189122 のWavFile.rbを使う。
splitChannelWav.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # wavファイルを左だけ、右だけに分ける require 'WavFile' if ARGV.size < 2 puts 'ruby splitChannelWav.rb input.rb output_left.wav output_right.wav' exit 1 end f = open(ARGV.shift) format, chunks = WavFile::readAll(f) f.close puts format.to_s dataChunk = nil chunks.each{|c| puts "#{c.name} #{c.size}" dataChunk = c if c.name == 'data' # 波形の入っているchunkを探す } if dataChunk == nil puts 'no data chunk' exit 1 end bit = 's*' if format.bitPerSample == 16 # int16_t bit = 'c*' if format.bitPerSample == 8 # signed char wavs = dataChunk.data.unpack(bit) # 16bit or 8bitずつbinaryから読み出し off = 32768 if format.bitPerSample == 16 off = 128 if format.bitPerSample == 8 for i in 0..1 do # LRそれぞれoffにして保存 wavs_mono = wavs.dup for j in 0..wavs_mono.size-1 do if j%2 != i wavs_mono[j] = off # LRLRLR.. と交互なので end end dataChunk.data = wavs_mono.pack(bit) open(ARGV.shift, "w"){|out| WavFile::write(out, format, [dataChunk]) } end