#!/usr/bin/ruby -Ke =begin PC-98x1"ピポ"音生成 製作:爆竹銃 (http://baku.homeunix.net) 製作開始:2005/02/27 最終更新:2005/07/04 更新履歴: 2005/07/04 ★"ポ"が500Hzになっていたのを1kHzに訂正 参考文献: wav ファイルフォーマット http://www.kk.iij4u.or.jp/~kondo/wave/ =end # ********************************************************************** class Wave # ------------------------------------------------------------ def initialize @フォーマットID = 1 # リニアPCM @チャンネル数 = 1 @サンプリングレート = 44100 @データ速度 = 44100 @ブロックサイズ = 1 @サンプルあたりビット数 = 8 @data = [] end # ------------------------------------------------------------ def put_WAV ファイルサイズ = 4+4+4+4+4+16+4+4+data.size buff = '' buff << "RIFF" buff << [ファイルサイズ-8].pack("V") buff << "WAVE" buff << "fmt " buff << [16].pack("V") buff << [@フォーマットID].pack("v") buff << [@チャンネル数].pack("v") buff << [@サンプリングレート].pack("V") buff << [@データ速度].pack("V") buff << [@ブロックサイズ].pack("v") buff << [@サンプルあたりビット数].pack("v") buff << "data" buff << [@data.size].pack("V") buff << @data.pack("C*") return buff end attr_accessor :フォーマットID, :チャンネル数, :サンプリングレート, :データ速度, :ブロックサイズ, :サンプルあたりビット数, :data end # ********************************************************************** # main len = ARGV[0].to_i wav = Wave.new wav.サンプリングレート = 44100 wav.データ速度 = 44100 # Pi 半波長サンプル数 = wav.サンプリングレート/2000/2 (len*2).times { wav.data.concat [0]*半波長サンプル数 wav.data.concat [255]*半波長サンプル数 wav.data.concat [0]*半波長サンプル数 wav.data.concat [255]*半波長サンプル数 } #Po 半波長サンプル数 = wav.サンプリングレート/1000/2 len.times { wav.data.concat [0]*半波長サンプル数 wav.data.concat [255]*半波長サンプル数 wav.data.concat [0]*半波長サンプル数 wav.data.concat [255]*半波長サンプル数 } print wav.put_WAV