class Sound
Attributes
mode[RW]
progress[RW]
side[RW]
state[RW]
track[RW]
tstmp_play_cur[RW]
tstmp_play_start[RW]
volume[RW]
Public Class Methods
new()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 4 def initialize @track = nil @track_data = nil @side = nil @pointer_left = nil @pointer_right = nil @state = "not playing" @tmp_playlist_left = nil @playlist_left = nil @playlist_left_bkp = nil @tmp_playlist_right = nil @progress = 0 @playlist_right = nil @playlist_right_bkp = nil @tstmp_play_start = nil @tstmp_play_cur = nil @tstmp_pause_start = nil @total_pause = 0 @volume = @@save_data[:volume] @play_dir = nil @play_dir_bkp = nil @tmp_dir = nil set_vol @mode = { next: @@save_data[:next], repeat: @@save_data[:repeat], shuffle: @@save_data[:shuffle] } @end = false @tracks_played = 0 end
Public Instance Methods
get_play_id(side)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 242 def get_play_id(side) case side when "left" return @pointer_left when "right" return @pointer_right end end
get_play_path(side)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 261 def get_play_path(side) #return "" if side != @side if @state == "playing" || @state == "paused" case side when "left" if @side == "left" return @track_data[:path] #return @playlist_left[@pointer_left][:path] else return "" end when "right" if @side == "right" return @track_data[:filename] #return @playlist_right[@pointer_right][:filename] else return "" end end else return "" end end
get_track()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 251 def get_track case @side when "left" return @playlist_left[@pointer_left] when "right" return @playlist_right[@pointer_right] end end
play_track()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 181 def play_track if SDL2::Mixer::MusicChannel.play? if SDL2::Mixer::MusicChannel.pause? @total_pause += SDL2.get_ticks - @tstmp_pause_start @state = "playing" case @side when "left" set_status("[PLAY] #{@playlist_left[@pointer_left][:filename]}") when "right" set_status("[PLAY] #{@playlist_right[@pointer_right][:filename]}") end SDL2::Mixer::MusicChannel.resume else @tstmp_pause_start = SDL2.get_ticks @state = "paused" case @side when"left" set_status("[PAUSE] #{@playlist_left[@pointer_left][:filename]}") when "right" set_status("[PAUSE] #{@playlist_right[@pointer_right][:filename]}") end SDL2::Mixer::MusicChannel.pause end end end
set_side(side)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 285 def set_side(side) @side = side end
set_tmp_playlist(pl, side, dir)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 320 def set_tmp_playlist(pl, side, dir) case side when "left" i = 0 pl = pl.map do |item| if !item[:dir_flag] && !item[:pl_flag] #item[:path] = File.join(dir, item[:filename]) item[:index] = i else item[:index] = nil end i += 1 item end @tmp_playlist_left = pl @tmp_dir = dir when "right" i = 0 pl = pl.map do |item| item[:index] = i i += 1 item end @tmp_playlist_right = pl @tmp_dir = dir set_playlist("right") end end
set_track(pointer, setter)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 149 def set_track(pointer, setter) @end = false set_playlist(@side) if setter case @side when "left" if setter pointer = @playlist_left.index { |song| song[:index] == pointer } else pointer = @pointer_left if pointer >= @playlist_left.length end @pointer_left = pointer @track_data = @playlist_left[pointer] SDL2::Mixer.open(@track_data[:sample].to_i, SDL2::Mixer::DEFAULT_FORMAT, 2, 512) set_vol @track = SDL2::Mixer::Music.load(@playlist_left[pointer][:path]) when "right" if setter pointer = @playlist_right.index { |song| song[:index] == pointer } else pointer = @pointer_right if pointer >= @playlist_right.length end @pointer_right = pointer @track_data = @playlist_right[pointer] SDL2::Mixer.open(@track_data[:sample].to_i, SDL2::Mixer::DEFAULT_FORMAT, 2, 512) set_vol @track = SDL2::Mixer::Music.load(@playlist_right[pointer][:path]) end #todo restore_playlist if fails to load end
set_vol()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 316 def set_vol SDL2::Mixer::MusicChannel.volume = @volume end
skip(type, offset)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 62 def skip(type, offset) stop_track return if @end case type when "next" # pointer correction case @side when "left" if @pointer_left+offset >= @playlist_left.length @end = true unless @mode[:repeat] @tracks_played = 0 @pointer_left = 0 offset = 0 end unless @playlist_left[@pointer_left+offset][:index] skip("next", offset+1) return end when "right" if @pointer_right+offset >= @playlist_right.length @end = true unless @mode[:repeat] @tracks_played = 0 @pointer_right = 0 offset = 0 end unless @playlist_right[@pointer_right+offset][:index] skip("next", offset+1) return end end # skip case @side when "left" set_track(@pointer_left+offset, false) @tracks_played += 1 start_track when "right" set_track(@pointer_right+offset, false) @tracks_played += 1 start_track end when "previous" # pointer correction case @side when "left" if @pointer_left-offset < 0 @end = true unless @mode[:repeat] @pointer_left = @playlist_left.length-1 offset = 0 end unless @playlist_left[@pointer_left-offset][:index] skip("previous", offset+1) return end when "right" if @pointer_right-offset < 0 @end = true unless @mode[:repeat] @pointer_right = @playlist_right.length-1 offset = 0 end unless @playlist_right[@pointer_right-offset][:index] skip("previous", offset+1) return end end return if @end # skip case @side when "left" set_track(@pointer_left-offset, false) start_track when "right" set_track(@pointer_right-offset, false) start_track end end end
start_track()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 226 def start_track @state = "playing" case @side when "left" set_status("[PLAY] #{@playlist_left[@pointer_left][:filename]}") @tstmp_play_start = SDL2.get_ticks @total_pause = 0 SDL2::Mixer::MusicChannel.play(@track, 1) when "right" set_status("[PLAY] #{@playlist_right[@pointer_right][:filename]}") @tstmp_play_start = SDL2.get_ticks @total_pause = 0 SDL2::Mixer::MusicChannel.play(@track, 1) end end
stop_track()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 207 def stop_track if @track set_status("[]") SDL2::Mixer::MusicChannel.halt if SDL2::Mixer::MusicChannel.play? SDL2::Mixer.close @track = nil @track_data = nil @state = "not playing" @progress = 0 case @side when "left" #@pointer_left = nil when "right" #@pointer_right = nil end end end
toggle_next()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 308 def toggle_next if @mode[:next] @mode[:next] = false else @mode[:next] = true end end
toggle_repeat()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 301 def toggle_repeat if @mode[:repeat] @mode[:repeat] = false else @mode[:repeat] = true end end
toggle_shuffle()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 289 def toggle_shuffle if @mode[:shuffle] @mode[:shuffle] = false restore_playlist("left") if @playlist_left restore_playlist("right") if @playlist_right else @mode[:shuffle] = true @playlist_left.shuffle! if @playlist_left @playlist_right.shuffle! if @playlist_right end end
update()
click to toggle source
# File lib/akane_sound/class.sound.rb, line 33 def update now = SDL2.get_ticks case @state when "playing" @tstmp_play_cur = (now - @tstmp_play_start) - @total_pause @progress = Util.get_percentage(@tstmp_play_cur, @track_data[:duration]) if @tstmp_play_cur >= @track_data[:duration] if @mode[:next] skip("next", 1) else if @mode[:repeat] case @side when "left" set_track(@pointer_left, false) when "right" set_track(@pointer_right, false) end start_track else stop_track end end end when "paused" when "not playing" when nil end end
Private Instance Methods
restore_playlist(side)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 371 def restore_playlist(side) case side when "left" @playlist_left = Array.new(@playlist_left_bkp) @play_dir = @play_dir_bkp when "right" @playlist_right = Array.new(@playlist_right_bkp) end end
set_playlist(side)
click to toggle source
# File lib/akane_sound/class.sound.rb, line 351 def set_playlist(side) case side when "left" @playlist_left = @tmp_playlist_left @playlist_left_bkp = Array.new(@playlist_left) @play_dir_bkp = @play_dir @play_dir = @tmp_dir if @mode[:shuffle] @playlist_left.shuffle! end when "right" @playlist_right = @tmp_playlist_right @playlist_right_bkp = Array.new(@playlist_right) if @mode[:shuffle] @playlist_right.shuffle! end end end