akane_sound 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,108 @@
1
+ class SectionDir < UpperSectionBase
2
+ attr_accessor :focus_flag
3
+ def initialize(x, y, w, h, col)
4
+ @focus_flag = @@save_data[:focus_left]
5
+ if @@debug_flag
6
+ @dir = @@config[:root_dir_debug]
7
+ else
8
+ @dir = @@config[:root_dir]
9
+ end
10
+ @dir = @@save_data[:cur_dir] if @@save_data[:cur_dir]
11
+ @dir_stack = Array.new
12
+ @dir_stack.push @dir
13
+ @dir_stack = @@save_data[:dir_stack] if @@save_data[:dir_stack]
14
+ @tracks = 0
15
+ @playlist = Array.new
16
+ @playlist = set_playlist(@dir_stack.join(nil), false)
17
+ @tracks_played = 0
18
+ @playlist_state = nil
19
+ @cache_flag = false
20
+ @pointer = @@save_data[:pointer_left]
21
+ @page = @@save_data[:page_left]
22
+ @offset_left = 8
23
+ @offset_right = 4
24
+ @title = @dir
25
+ super
26
+ end
27
+
28
+ def update
29
+ super
30
+ if @focus_flag
31
+ if @@inp.refresh == 1
32
+ @pointer = 0
33
+ @playlist = set_playlist(@dir_stack.join(nil), true)
34
+ update_element_strings
35
+ set_page
36
+ update_element_positions
37
+ end
38
+ if @@inp.accept == 1
39
+ # play song :)
40
+ if !@playlist[@pointer][:dir_flag] && !@playlist[@pointer][:pl_flag]
41
+ @@sound.set_side("left")
42
+ @@sound.stop_track
43
+ @@sound.set_track(@pointer, true)
44
+ @@sound.start_track
45
+ end
46
+ # switch directory
47
+ if @playlist[@pointer][:dir_flag]
48
+ if @playlist[@pointer][:filename] == '../'
49
+ @dir_stack.pop
50
+ else
51
+ @dir_stack.push @playlist[@pointer][:filename]
52
+ end
53
+ @playlist = set_playlist(@dir_stack.join(nil), false)
54
+ @pointer = 0
55
+ @page = 1
56
+ @title = @dir_stack.join(nil)
57
+ @title = @@font.render_blended(@title, @txt_color)
58
+ @title_rect =
59
+ SDL2::Rect[8, @element_h/2-@title.h/2, @title.w, @title.h]
60
+ update_element_strings
61
+ set_page
62
+ update_element_positions
63
+ end
64
+ # set playlist
65
+ if @playlist[@pointer][:pl_flag]
66
+ @@sec_pl.set_playlist(File.join(@dir_stack.join(nil),
67
+ @playlist[@pointer][:filename]))
68
+ end
69
+ end
70
+ if @@inp.append == 1 || @@inp.append_r == 1
71
+ if !@playlist[@pointer][:pl_flag]
72
+ if @playlist[@pointer][:dir_flag]
73
+ if @@inp.append_r == 1
74
+ @@sec_pl.append(@playlist[@pointer], true, @dir_stack, true)
75
+ else
76
+ @@sec_pl.append(@playlist[@pointer], true, @dir_stack, false)
77
+ end
78
+ else
79
+ @@sec_pl.append(@playlist[@pointer], false, @dir_stack, false)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ def update_size(x, y, w, h)
87
+ super
88
+ end
89
+
90
+ def draw
91
+ super
92
+ end
93
+
94
+ #return: Array of Hash { filename: , dir_flag:, duration: }
95
+ def set_playlist(dir, refresh)
96
+ set_status("Loading directory playlist from cache...")
97
+ ar = get_cache(dir)
98
+ if ar && !refresh
99
+ set_status("Playlist loaded.")
100
+ else
101
+ ar = get_playlist(dir)
102
+ set_status("Playlist set.")
103
+ end
104
+ @@sound.set_tmp_playlist(ar, "left", dir)
105
+ return ar
106
+ end
107
+
108
+ end
@@ -0,0 +1,87 @@
1
+ class SectionPlaylist < UpperSectionBase
2
+ attr_accessor :focus_flag, :playlist
3
+ def initialize(x, y, w, h, col)
4
+ @focus_flag = @@save_data[:focus_right]
5
+ unless @@save_data[:cur_pl]
6
+ @playlist = Array.new
7
+ else
8
+ @playlist = @@save_data[:cur_pl]
9
+ @@sound.set_tmp_playlist(@playlist, "right", "")
10
+ end
11
+ @pointer = @@save_data[:pointer_right]
12
+ @page = @@save_data[:page_right]
13
+ @offset_left = 4
14
+ @offset_right = 8
15
+ @title = "Playlist"
16
+ super
17
+ end
18
+
19
+ def update
20
+ super
21
+ if @focus_flag
22
+ if @@inp.accept == 1 && @playlist.length > 0
23
+ @@sound.set_side("right")
24
+ @@sound.stop_track
25
+ @@sound.set_track(@pointer, true)
26
+ @@sound.start_track
27
+ end
28
+ end
29
+ end
30
+
31
+ def update_size(x, y, w, h)
32
+ super
33
+ end
34
+
35
+ def draw
36
+ super
37
+ end
38
+
39
+ def append(track, dir_flag, dir_stack, recursive_flag)
40
+ dir = dir_stack.join(nil)
41
+ unless dir_flag
42
+ track[:filename] = File.join(dir, track[:filename])
43
+ @playlist.push(track)
44
+ else
45
+ #Util.p File.join(dir, track[:filename])
46
+ ar = get_cache(File.join(dir, track[:filename]))
47
+ ar = get_playlist(File.join(dir, track[:filename])) unless ar
48
+ @playlist += ar
49
+ if recursive_flag
50
+ #dir_stack.push(track[:filename])
51
+ stack_copy = Array.new(dir_stack)
52
+ stack_copy.push(track[:filename])
53
+ ar.each do |sel|
54
+ if sel[:dir_flag] && sel[:filename] != "../"
55
+ append(sel, true, stack_copy, true)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ @playlist = @playlist.select { |sel| !sel[:dir_flag] && !sel[:pl_flag] }
61
+ @@sound.set_tmp_playlist(@playlist, "right", dir)
62
+
63
+ update_element_strings
64
+ set_page
65
+ update_element_positions
66
+ end
67
+
68
+ def set_playlist(fn)
69
+ clear
70
+ @playlist = YAML.load(File.open(fn))
71
+ @@sound.set_tmp_playlist(@playlist, "right", "")
72
+ update_element_strings
73
+ set_page
74
+ update_element_positions
75
+ end
76
+
77
+ def clear
78
+ @playlist = Array.new
79
+ if (@@sound.state == "playing" || @@sound.state == "paused") &&
80
+ @@sound.side == "right"
81
+ @@sound.stop_track
82
+ end
83
+ update_element_strings
84
+ set_page
85
+ update_element_positions
86
+ end
87
+ end
@@ -0,0 +1,223 @@
1
+ class SectionStatus < ViewBase
2
+ attr_accessor :msg, :msg_rect
3
+ def initialize(x, y, w, h, col)
4
+ @txt_color = Util.to_col_ar(@@config[:text_color])
5
+ @vol_rect
6
+ @vol_texture
7
+ @vol_text_rect
8
+ @timer_passed_texture
9
+ @timer_passed_rect
10
+ @timer_total_texture
11
+ @timer_total_rect
12
+ @progress_bar_rect
13
+ @shuffle_on = @@font_bold.render_blended('[SHUFFLE]', @txt_color)
14
+ @shuffle_off = @@font.render_blended('[SHUFFLE]', @txt_color)
15
+ @repeat_on = @@font_bold.render_blended('[REPEAT]', @txt_color)
16
+ @repeat_off = @@font.render_blended('[REPEAT]', @txt_color)
17
+ @next_on = @@font_bold.render_blended('[NEXT]', @txt_color)
18
+ @next_off = @@font.render_blended('[NEXT]', @txt_color)
19
+ super
20
+ set_view
21
+ set_status("Welcome to Akane")
22
+ update_volume_rect
23
+ update_volume_texture
24
+ update_data
25
+ end
26
+
27
+ def update
28
+ if @@inp.pause == 1
29
+ @@sound.play_track
30
+ end
31
+ if @@inp.stop == 1
32
+ @@sound.stop_track
33
+ end
34
+ if @@inp.vol_down == 1 || @@inp.vol_down >= 20
35
+ @@sound.volume -= 1
36
+ if @@inp.vol_down == 22
37
+ @@inp.vol_down = 20
38
+ end
39
+ @@sound.volume = 0 if @@sound.volume < 0
40
+ update_volume_rect
41
+ update_volume_texture
42
+ @@sound.set_vol
43
+ end
44
+ if @@inp.vol_up == 1 || @@inp.vol_up >= 20
45
+ @@sound.volume += 1
46
+ if @@inp.vol_up == 22
47
+ @@inp.vol_up = 20
48
+ end
49
+ @@sound.volume = 128 if @@sound.volume > 128
50
+ update_volume_rect
51
+ update_volume_texture
52
+ @@sound.set_vol
53
+ end
54
+ if @@inp.toggle_shuffle == 1
55
+ @@sound.toggle_shuffle
56
+ end
57
+ if @@inp.toggle_repeat == 1
58
+ @@sound.toggle_repeat
59
+ end
60
+ if @@inp.toggle_next == 1
61
+ @@sound.toggle_next
62
+ end
63
+ if @@sound.state != "not playing"
64
+ if @@inp.next == 1
65
+ @@sound.skip("next", 1)
66
+ end
67
+ if @@inp.prev == 1
68
+ @@sound.skip("previous", 1)
69
+ end
70
+ end
71
+ update_timers
72
+ update_progress_bar
73
+ update_data
74
+ end
75
+
76
+ def update_size(x, y, w, h)
77
+ super
78
+ set_view
79
+ update_volume_rect
80
+ update_volume_texture
81
+ update_progress_bar
82
+ update_data
83
+ end
84
+
85
+ def draw
86
+ super
87
+ @@renderer.viewport = @view_base
88
+ @@renderer.fill_rect(SDL2::Rect[0, 0, @view_base.w, @view_base.h])
89
+
90
+ # draw status stuff
91
+ @@renderer.viewport = @view
92
+ @@renderer.copy(@@renderer.create_texture_from(@@msg), nil, @@msg_rect)
93
+ # draw volume
94
+ @@renderer.copy(@vol_texture, nil, @vol_text_rect)
95
+ if @@sound.volume < 101
96
+ @@renderer.draw_color = [@@config[:volume_bar_color][:red],
97
+ @@config[:volume_bar_color][:green],
98
+ @@config[:volume_bar_color][:blue],
99
+ @@config[:volume_bar_color][:alpha]]
100
+ else
101
+ @@renderer.draw_color = [@@config[:volume_bar_max_color][:red],
102
+ @@config[:volume_bar_max_color][:green],
103
+ @@config[:volume_bar_max_color][:blue],
104
+ @@config[:volume_bar_max_color][:alpha]]
105
+ end
106
+ @@renderer.fill_rect(@vol_rect)
107
+
108
+ # draw timers
109
+ @@renderer.copy(@timer_passed_texture, nil,
110
+ @timer_passed_rect)
111
+ @@renderer.copy(@timer_total_texture, nil,
112
+ @timer_total_rect)
113
+ # draw track info
114
+ # sampling rate
115
+ @@renderer.copy(@sampling_rate_texture, nil, @sampling_rate_rect)
116
+ # bps
117
+ @@renderer.copy(@bps_texture, nil, @bps_rect)
118
+ # draw flags
119
+ if @@sound.mode[:shuffle]
120
+ @@renderer.copy(@@renderer.create_texture_from(@shuffle_on), nil,
121
+ SDL2::Rect[210, 18, @shuffle_on.w, @shuffle_on.h])
122
+ else
123
+ @@renderer.copy(@@renderer.create_texture_from(@shuffle_off), nil,
124
+ SDL2::Rect[210, 18, @shuffle_off.w, @shuffle_off.h])
125
+ end
126
+ if @@sound.mode[:repeat]
127
+ @@renderer.copy(@@renderer.create_texture_from(@repeat_on), nil,
128
+ SDL2::Rect[210+@shuffle_on.w+2, 18,
129
+ @repeat_on.w, @repeat_on.h])
130
+ else
131
+ @@renderer.copy(@@renderer.create_texture_from(@repeat_off), nil,
132
+ SDL2::Rect[210+@shuffle_on.w+2, 18,
133
+ @repeat_off.w, @repeat_off.h])
134
+ end
135
+ if @@sound.mode[:next]
136
+ @@renderer.copy(@@renderer.create_texture_from(@next_on), nil,
137
+ SDL2::Rect[210+@shuffle_on.w+2+@repeat_on.w+2, 18,
138
+ @next_on.w, @next_on.h])
139
+ else
140
+ @@renderer.copy(@@renderer.create_texture_from(@next_off), nil,
141
+ SDL2::Rect[210+@shuffle_on.w+2+@repeat_on.w+2, 18,
142
+ @next_off.w, @next_off.h])
143
+ end
144
+
145
+ # draw progess bar
146
+ @@renderer.draw_color = [@@config[:prog_bar_color][:red],
147
+ @@config[:prog_bar_color][:green],
148
+ @@config[:prog_bar_color][:blue],
149
+ @@config[:prog_bar_color][:alpha]]
150
+ @@renderer.fill_rect(@progress_bar_rect)
151
+ end
152
+
153
+ private
154
+
155
+ def set_view
156
+ @view = SDL2::Rect[@view_base.x+8,
157
+ @view_base.y+8,
158
+ @view_base.w-16,
159
+ @view_base.h-16]
160
+ end
161
+
162
+ def update_progress_bar
163
+ @progress_bar_rect =
164
+ SDL2::Rect[0, 36, @view.w * @@sound.progress / 100, 20]
165
+ end
166
+
167
+ def update_data
168
+ if @@sound.state == "playing" || @@sound.state == "paused"
169
+ track = @@sound.get_track
170
+ str1 = "["+track[:sample]+"Hz]"
171
+ str2 = "["+(track[:bps]/1000).to_s+" kbps]"
172
+ else
173
+ str1 = "[]"
174
+ str2 = "[]"
175
+ end
176
+ sur = @@font.render_blended(str1, @txt_color)
177
+ @sampling_rate_texture = @@renderer.create_texture_from(sur)
178
+ @sampling_rate_rect = SDL2::Rect[84, 18, sur.w, sur.h]
179
+ sur.destroy
180
+ sur = @@font.render_blended(str2, @txt_color)
181
+ @bps_texture = @@renderer.create_texture_from(sur)
182
+ @bps_rect = SDL2::Rect[148, 18, sur.w, sur.h]
183
+ sur.destroy
184
+ end
185
+
186
+ def update_timers
187
+ if @@sound.state == "playing" || @@sound.state == "paused"
188
+ str1 = "["+Util.ms_to_time_str(@@sound.tstmp_play_cur)+"]"
189
+ track = @@sound.get_track
190
+ str2 = "["+track[:pl_time]+"]"
191
+ else
192
+ str1 = "[]"
193
+ str2 = "[]"
194
+ end
195
+ sur = @@font.render_blended(str1, @txt_color)
196
+ @timer_passed_texture = @@renderer.create_texture_from(sur)
197
+ @timer_passed_rect = SDL2::Rect[0, 18, sur.w, sur.h]
198
+ sur.destroy
199
+ sur = @@font.render_blended(str2, @txt_color)
200
+ @timer_total_texture = @@renderer.create_texture_from(sur)
201
+ @timer_total_rect = SDL2::Rect[42, 18, sur.w, sur.h]
202
+ sur.destroy
203
+ end
204
+
205
+ def update_volume_texture
206
+ int = @@sound.volume
207
+ str = int.to_s
208
+ str.prepend('0') if int < 100
209
+ str.prepend('0') if int < 10
210
+ str.prepend('Volume: ')
211
+ str += "%"
212
+ sur = @@font.render_blended(str, @txt_color)
213
+ @vol_texture = @@renderer.create_texture_from(sur)
214
+ @vol_text_rect = SDL2::Rect[@view.w-212, 18, sur.w, sur.h]
215
+ sur.destroy
216
+ end
217
+
218
+ def update_volume_rect
219
+ if @@msg_rect
220
+ @vol_rect = SDL2::Rect[@view.w-128, 18, @@sound.volume, @@msg_rect.h]
221
+ end
222
+ end
223
+ end
@@ -0,0 +1,60 @@
1
+ class Setup < AkaneSound
2
+ def self.init(arg)
3
+ @@pref_dir = SDL2.preference_path("ruby_app", "akane_sound")
4
+ if arg == "debug"
5
+ @@debug_flag = true
6
+ File.delete(File.open(@@pref_dir+'config.yaml')) if File.exist?(@@pref_dir+'config.yaml')
7
+ #File.delete(File.open(@@pref_dir+'save_data.yaml'))
8
+ end
9
+ str = (@@debug_flag) ? "cache_debug.yaml" : "cache.yaml"
10
+ if File.exist?(File.join(@@pref_dir, str))
11
+ @@cache = YAML.load(File.open(File.join(@@pref_dir, str)))
12
+ end
13
+ Setup::prepare_config
14
+ Setup::prepare_save_data
15
+ #Setup::prepare_binary_data('akane_bg.png')
16
+ #Setup::prepare_binary_data('NotoSansCJKjp-Regular.otf')
17
+ #Setup::prepare_binary_data('NotoSansCJKjp-Medium.otf')
18
+ #Setup::prepare_binary_data('NotoSansCJKjp-Bold.otf')
19
+ end
20
+
21
+ def self.prepare_config
22
+ unless File.file?(@@pref_dir+"config.yaml")
23
+ file = File.open("data/config.yaml", "r")
24
+ contents = file.read
25
+ file.close
26
+ #contents.sub! 'FILE_PATH_BG', @@pref_dir+'akane_bg.png'
27
+ #contents.sub! 'FILE_PATH_FONT_BIG', @@pref_dir+'NotoSansCJKjp-Medium.otf'
28
+ #contents.sub! 'FILE_PATH_FONT_BIG', @@pref_dir+'NotoSansCJKjp-Bold.otf'
29
+ #contents.sub! 'FILE_PATH_FONT', @@pref_dir+'NotoSansCJKjp-Regular.otf'
30
+ contents.sub! 'FILE_PATH_ROOT', Dir.home
31
+
32
+ File.open(@@pref_dir+'config.yaml', 'w') { |file| file.write(contents) }
33
+ @@config = YAML.load(File.open(@@pref_dir+'config.yaml'))
34
+ else
35
+ @@config = YAML.load(File.open(@@pref_dir+'config.yaml'))
36
+ end
37
+ @@config[:root_dir] += '/' unless @@config[:root_dir][-1] == '/'
38
+ end
39
+
40
+ def self.prepare_save_data
41
+ unless File.file?(@@pref_dir+"save_data.yaml")
42
+ file = File.open("data/save_data.yaml", "r")
43
+ contents = file.read
44
+ file.close
45
+
46
+ File.open(@@pref_dir+'save_data.yaml', 'w') do |file|
47
+ file.write(contents)
48
+ end
49
+ @@save_data = YAML.load(File.open(@@pref_dir+'save_data.yaml'))
50
+ else
51
+ @@save_data = YAML.load(File.open(@@pref_dir+'save_data.yaml'))
52
+ end
53
+ end
54
+
55
+ def self.prepare_binary_data(filename)
56
+ unless File.file?(@@pref_dir+filename)
57
+ Util.binary_copy(@@pref_dir, filename)
58
+ end
59
+ end
60
+ end