Method: Radio#record

Defined in:
lib/rbtune/radio.rb

#record(filename, sec, quiet: false, dt: DateTime.now) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/rbtune/radio.rb', line 122

def record(filename, sec, quiet: false, dt: DateTime.now)
	begin
		uri = channel_to_uri
		raise 'not tuned yet.' unless uri

		puts "record: #{uri}"
		# $stderr.puts "play: #{sec}, #{filename}, #{quiet}"
		player      = create_player uri
		remain_sec  = sec
		rtime       = 0
		minimum_sec = 60   # 残り録音時間がこれ以下ならば、録音が中断してもやり直さない
		datetimes   = []
		begin
			rtime += Benchmark.realtime do
				dt = datetime dt
				datetimes << dt
				tmpfile = make_tmpfile @channel, dt
				player.rec tmpfile, remain_sec, quiet
			end
			remain_sec -= rtime
			dt = DateTime.now
		end while remain_sec >= minimum_sec

	rescue Interrupt, Errno::EPIPE
		# do nothing

	ensure
		# 最後にまとめて convert する
		datetimes.each do |dt|
			tmpfile = make_tmpfile @channel, dt
			recfile = make_recfile(filename, dt)
			convert tmpfile, recfile
		end
	end
end