module ZXUtils::MusicBox::Multitrack
MusicBox Multitrack¶ ↑
A multi-track consists of the three tracks, each one for each of the AY-3-891x channels.
Each track of a multi-track is a MusicBox::Track class.
Before each multi-track command the tracks are being synchronized by applying wait command whenever the track falls behind other tracks in the number of execution ticks. To control synchronization see command: MultitrackCommands.synchronize_channels.
To create a custom multi-track you need to include the Multitrack module in your class representing the given multi-track.
class ChannelTracks1 include ZXUtils::MusicBox::Multitrack #... multi-track commands follow end
Such a multi-track can be included with the MusicBox::SongCommands.import_multitrack command of the Song.
Alternatively use MusicBox::SongCommands.multitrack command to define multi-tracks directly in the Song.
Commands¶ ↑
For the list of available commands see MultitrackCommands.
Attributes
An array containing compiled tracks for each channel.
A resolver used by the compilation process.
Public Class Methods
Instances of the derived classes are being created internally by the MusicBox::Song compilation process.
# File lib/zxutils/music_box/multitrack.rb, line 279 def initialize(resolver) @resolver = resolver @channel_tracks = Array.new(3) { |_| EmptyTrack.new(@resolver) } @ticks_behind_channels = [0...2**16, 0...2**16, 0...2**16] self.class.instance_variable_get('@channels'.freeze).each { |e| self << e } end
Public Instance Methods
Returns an instance of the compiled track for the given channel. A channel can be an integer: 0 to 2 or one of the symbols or strings: :a, :b, :c.
# File lib/zxutils/music_box/multitrack.rb, line 288 def channel_track(channel) channel = case channel when Symbol Resolver::CHANNEL_NAMES.index(channel) when Integer channel end raise ArgumentError, "unrecognized channel: #{channel}" unless channel @channel_tracks[channel] end