class Alda::Part

A part event. An Alda::EventContainer containing an Alda::Part can be derived using event list sugar. See Alda::EventList#method_missing.

A part can have nickname.

Alda::Score.new do
  piano_ 'player1'
  c4 d e e e1
  piano_ 'player2'
  e4 d g g g1
end

You can use Alda::EventContainer#/ to have a set of instruments.

Alda::Score.new do
  violin_/viola_
  c2 d4 e2_4
end

A set of instruments can also have nickname. You can also access an instruments from a set. See method_missing.

Alda::Score.new do
  violin_/viola_/cello_('strings')
  g1_1_1
  strings_.cello_
  c1_1_1
end

Attributes

arg[RW]

The nickname of the part. nil if none.

names[RW]

The names of the part. To be joined with / as delimiter.

Public Class Methods

new(names, arg=nil) → Alda::Part click to toggle source

Creates an Alda::Part.

# File lib/alda-rb/event.rb, line 633
def initialize names, arg = nil
  @names = names.map { |name| name.to_s.tr ?_, ?- }
  @arg = arg
end

Public Instance Methods

(component)_() → Alda::EventContainer or Alda::Part click to toggle source

Enables dot accessor.

Alda::Score.new do
  violin_/viola_/cello_('strings'); g1_1_1
  strings_.cello_; -o; c1_1_1
end.play
Calls superclass method
# File lib/alda-rb/event.rb, line 654
def method_missing name, *args
  str = name.to_s
  return super unless str[-1] == ?_
  str[-1] = ''
  @names.last.concat ?., str
  if args.size == 1
    unless @container
      @container = Alda::EventContainer.new nil, @parent
      @parent.events.delete self
      @parent.push @container
    end
    @container.event = Alda::Sequence.join self, args.first.tap(&:detach_from_parent)
    @container
  else
    @container || self
  end
end
to_alda_code() click to toggle source
# File lib/alda-rb/event.rb, line 638
def to_alda_code
  result = @names.join ?/
  result.concat " \"#{@arg}\"" if @arg
  result.concat ?:
end