class Haematite::MusFile

Overview

Represents a MUS file.

Defined in:

haematite/musfile.cr

Constant Summary

MUS_COEFF_RAPTOR = 1 / 70
MUS_MAGIC = Bytes['M'.ord.to_u8, 'U'.ord.to_u8, 'S'.ord.to_u8, 26_u8]

"Magic" bytes for the MUS format.

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class Haematite::SequencedFile

length : Int64 length, messages : Array(Message) messages, times : Array(Int64) times

Constructor methods inherited from class Haematite::SequencedFile

load(path : String | Path) : SequencedFile load

Constructor Detail

def self.new(filename : String | Path, *, loopPoint : Int32 = 0, headerAlreadyRead : Bool = false, alternateTiming : Bool = false) #

Creates a new MusFile instance by loading a MUS file from the given filename. A loopPoint greater than zero specifies the point in the MUS file at which it should loop (otherwise it's assumed to loop at the end).

When #alternateTiming is true, then the timings are calculated against a 70Hz tic rate, otherwise 140Hz is used. This alternate tic rate is used only by the game Raptor: Call of The Shadows. All other games use the 140Hz tic rate.


def self.new(stream : IO, *, headerAlreadyRead : Bool = false, alternateTiming : Bool = false) #

Creates a new MusFile instance by loading a MUS file from the given stream.

When #alternateTiming is true, then the timings are calculated against a 70Hz tic rate, otherwise 140Hz is used. This alternate tic rate is used only by the game Raptor: Call of The Shadows. All other games use the 140Hz tic rate.


def self.new(stream : IO, *, loopType : MidiFileLoopType, headerAlreadyRead : Bool = false, alternateTiming : Bool = false) #

Creates a new MusFile instance by loading a MUS file from the given stream. loopType specifies how any loop point messages are interpreted.

When #alternateTiming is true, then the timings are calculated against a 70Hz tic rate, otherwise 140Hz is used. This alternate tic rate is used only by the game Raptor: Call of The Shadows. All other games use the 140Hz tic rate.


Class Method Detail

def self.validMusFile(io : IO) : Bool #

Attempts to determine if the data in io is valid MUS data. If it is, this returns true, otherwise it returns false.

If this is true, then the header in the io has already been read, and you should pass headerAlreadyRead: true when calling one of the constructors.


Instance Method Detail

def alternateTiming : Bool #

When true, then alternative timing calculations were used when this file was loaded.


def instruments : Array(UInt16) #

The list of instrument patches used by a loaded song.