Class: Hindbaer::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/hindbaer/session.rb

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ Session

Returns a new instance of Session.



4
5
6
7
8
# File 'lib/hindbaer/session.rb', line 4

def initialize(file)
  ::File.open(file, 'r') do |file|
    @doc = Nokogiri::XML(file)
  end
end

Instance Method Details

#audio_poolObject



22
23
24
# File 'lib/hindbaer/session.rb', line 22

def audio_pool
  Hindbaer::AudioPool.new(@doc.at_css('AudioPool').dup.unlink)
end

#clipboard_groupsObject



30
31
32
# File 'lib/hindbaer/session.rb', line 30

def clipboard_groups
  @doc.css('Clipboard Group').map { |g| Hindbaer::Group.new(g.dup.unlink, self) }
end

#infoObject



18
19
20
# File 'lib/hindbaer/session.rb', line 18

def info
  Hindbaer::Info.new(@doc.at_css('Info').dup.unlink)
end

#lengthObject



38
39
40
41
42
43
44
45
46
47
# File 'lib/hindbaer/session.rb', line 38

def length
  regions = tracks.map do |t| 
    t.regions.last
  end.compact
  
  regions.map do |r| 
    Hindbaer.tc_to_secs(r.start_time) + 
    Hindbaer.tc_to_secs(r.length)
  end.max
end

#markersObject



34
35
36
# File 'lib/hindbaer/session.rb', line 34

def markers
  @doc.css('Markers Marker').map { |m| Hindbaer::Marker.new(m.dup.unlink) }
end

#sample_rateObject



14
15
16
# File 'lib/hindbaer/session.rb', line 14

def sample_rate
  @doc.at_css('Session')['Samplerate']
end

#software_versionObject



10
11
12
# File 'lib/hindbaer/session.rb', line 10

def software_version
  @doc.at_css('Session')['Version']
end

#to_xmlObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/hindbaer/session.rb', line 49

def to_xml
  Nokogiri::XML::Builder.new do |xml|
    xml.Session Version: software_version, Samplerate: sample_rate do
      xml.Info Subtitle: info.subtitle, Album: info.album, Composer: info.composer, Track: info.album_track, Genre: info.genre, Author: info.author, Link: info.link, Email: info.email, Description: info.description, Artist: info.artist, Date: info.date, Title: info.title, Explicit: info.explicit? ? 'YES' : 'NO', Copyright: info.copyright, Identifier: info.identifier, Keywords: info.keywords.join(', '), Reference: info.reference
      xml.AudioPool Path: audio_pool.path, Location: audio_pool.location do
        audio_pool.files.each do |file|
          xml.File Id: file.id, Name: file.name, Duration: file.duration, Channels: file.num_channels, Leq: file.leq do
            xml.MetaData OriginalPath: file.original_path
          end
        end
      end
      xml.Tracks do
        tracks.each do |track|
          xml.Track Name: track.name, Pan: track.pan do
            track.regions.each do |region|
              xml.Region Ref: region.reference.id, Name: region.name, Start: region.start_time, Length: region.length, Offset: region.offset, FadeIn: region.fade_in, FadeOut: region.fade_out, Gain: region.gain, Leq: region.leq do
                region.fades.each do |fade|
                  xml.Fade Start: fade.start_time, Length: fade.length, Gain: fade.gain
                end
              end
            end
            unless track.plugins.empty?
              xml.Plugins do
                track.plugins.each do |plugin|
                  case plugin.uid
                  when 'nheq'
                    xml.Plugin Id: plugin.id, Name: plugin.name, UID: plugin.uid, Bypass: plugin.bypass, LF_Freq: plugin.low_freq_freq, LF_Gain: plugin.low_freq_gain, LF_Q: plugin.low_freq_q, LF_Type: plugin.low_freq_type, MF_Freq: plugin.mid_freq_freq, MF_Gain: plugin.mid_freq_gain, MF_Q: plugin.mid_freq_q, HF_Freq: plugin.high_freq_freq, HF_Gain: plugin.high_freq_gain, HF_Q: plugin.high_freq_q, HF_Type: plugin.high_freq_type do
                      xml.cdata('')
                    end
                  when 'nhcl'
                    xml.Plugin Id: plugin.id, Name: plugin.name, UID: plugin.uid, Comp: plugin.comp
                  when 'nhlu'
                    xml.Plugin Id: plugin.id, Name: plugin.name, UID: plugin.uid
                  when 'nhft'
                    xml.Plugin Id: plugin.id, Name: plugin.name, UID: plugin.uid, LF_Freq: plugin.low_freq_freq, LF_Gain: plugin.low_freq_gain, LF_Q: plugin.low_freq_q, MF_Freq: plugin.mid_freq_freq, MF_Gain: plugin.mid_freq_gain, MF_Q: plugin.mid_freq_q, HF_Freq: plugin.high_freq_freq, HF_Gain: plugin.high_freq_gain, HF_Q: plugin.high_freq_q, HP_Freq: plugin.high_pass_freq, HP_Gain: plugin.high_pass_gain, Comp: plugin.comp
                  end
                end
              end
            end
          end
        end
      end
      xml.Clipboard do
        clipboard_groups.each do |group|
          xml.Group Caption: group.caption, Used: group.num_clips_used do
            group.clips.each do |clip|
              xml.Clip Ref: clip.reference.id, Name: clip.name, Length: clip.length, Leq: clip.leq
            end
          end
        end
      end
      xml.Markers do
        markers.each do |marker|
          xml.Marker Id: marker.id, Name: marker.name, Time: marker.time
        end
      end
    end
  end.to_xml
end

#tracksObject



26
27
28
# File 'lib/hindbaer/session.rb', line 26

def tracks
  @doc.css('Tracks Track').map { |t| Hindbaer::Track.new(t.dup.unlink, self) }
end