Newer
Older
padparadscha / ruby / cut.rb
@honosuke honosuke on 3 Dec 2018 960 bytes add script cut wavfile
#!/usr/bin/ruby
# -*- coding: utf-8 -*-

require 'rubygems'
require 'wav-file'
require './read_oto.rb'
require './ut.rb'

y = 0
vbpath = "./vb/leilvcv2/"
oto = readOto(vbpath + "oto.ini")

lyric = "- ど"

#切り出しは1番から3番
#ノート頭は4番
#固定範囲は1番から2番
#伸縮範囲は2番から(1番+|3番|)
#オーバーラップの値何に使うんだっけ5番

f = open(vbpath + oto[lyric][0])
format = WavFile::readFormat(f)
dataChunk = WavFile::readDataChunk(f)
f.close

bit = 's*' if format.bitPerSample == 16
bit = 'c*' if format.bitPerSample == 8

wavs = dataChunk.data.unpack(bit)
owavs = Array.new
#dataChunk.data = wavs.reverse.pack(bit)

lblank = oto[lyric][1]
rblank = oto[lyric][3]
vlength = lblank + rblank.abs

vtop = msc2smp(lblank).round
vend = msc2smp(vlength).round

owavs = wavs[vtop..vend]

dataChunk.data = owavs.pack(bit)

open("output.wav", "w"){|out|
  WavFile::write(out, format,[dataChunk])
}

#p wavs.length