Title: | Manipulate and Play 'ProTracker' Modules |
---|---|
Description: | 'ProTracker' is a popular music tracker to sequence music on a Commodore Amiga machine. This package offers the opportunity to import, export, manipulate and play 'ProTracker' module files. Even though the file format could be considered archaic, it still remains popular to this date. This package intends to contribute to this popularity and therewith keeping the legacy of 'ProTracker' and the Commodore Amiga alive. This package is the successor of 'ProTrackR' providing better performance. |
Authors: | Pepijn de Vries [aut, cre] , Olav Sørensen [aut] (Developer of the ProTracker 2.3d clone) |
Maintainer: | Pepijn de Vries <[email protected]> |
License: | GPL (>= 3) |
Version: | 0.0.4 |
Built: | 2024-10-25 21:22:29 UTC |
Source: | https://github.com/pepijn-devries/ProTrackR2 |
Functions to select and assign elements to ProTracker modules.
See vignette('s3class')
for an overview of ProTrackR2 S3 class objects. See vignette('sel_assign')
for practical guidance on selecting and assigning elements of ProTrackR2 class objects.
## S3 method for class 'pt2mod' x$i, ... ## S3 replacement method for class 'pt2mod' x$i <- value ## S3 method for class 'pt2mod' x[[i, ...]] ## S3 method for class 'pt2patlist' x[i, ...] ## S3 method for class 'pt2patlist' x[[i, ...]] ## S3 replacement method for class 'pt2patlist' x[[i]] <- value ## S3 method for class 'pt2samplist' x[i, ...] ## S3 method for class 'pt2samplist' x[[i, ...]] ## S3 method for class 'pt2pat' x[i, j, ...] ## S3 replacement method for class 'pt2pat' x[i, j, ...] <- value
## S3 method for class 'pt2mod' x$i, ... ## S3 replacement method for class 'pt2mod' x$i <- value ## S3 method for class 'pt2mod' x[[i, ...]] ## S3 method for class 'pt2patlist' x[i, ...] ## S3 method for class 'pt2patlist' x[[i, ...]] ## S3 replacement method for class 'pt2patlist' x[[i]] <- value ## S3 method for class 'pt2samplist' x[i, ...] ## S3 method for class 'pt2samplist' x[[i, ...]] ## S3 method for class 'pt2pat' x[i, j, ...] ## S3 replacement method for class 'pt2pat' x[i, j, ...] <- value
x |
Object to apply S3 method to. See 'usage' section for allowed object types. |
i , j
|
Indices for extracting or replacing ProTrackR2 object elements |
... |
Passed on to other methods. |
value |
Replacement value for the selected element(s). |
Returns the selected object in case of a selection ([
, [[
, or $
) operator. Returns the
updated object x
in case of an assignment (<-
) operator.
OpenMpt is a popular modern music tracker. This function allows
you to format a pattern such that it can be pasted directly into OpenMPT.
On Windows you can use writeClipboard()
for this purpose.
as_modplug_pattern(pattern, ...)
as_modplug_pattern(pattern, ...)
pattern |
An object of class |
... |
Ignored |
Returns a character
object formatted such that it can be copied into OpenMPT
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) mp_pat <- as_modplug_pattern(pt2_pattern(mod, 0L))
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) mp_pat <- as_modplug_pattern(pt2_pattern(mod, 0L))
Implementation of basic S3 methods, such as, format
, print
, as.raw
and as.character
(
see usage section for a complete overview). See vignette('s3class')
for an overview
of ProTrackR2 S3 class objects. See usage section for an overview of available methods.
## S3 method for class 'pt2mod' format(x, ...) ## S3 method for class 'pt2mod' print(x, ...) ## S3 method for class 'pt2pat' format( x, padding = " ", empty_char = "-", fmt = getOption("pt2_cell_format"), ... ) ## S3 method for class 'pt2pat' print(x, sep = " ", show_header = TRUE, show_row = TRUE, ...) ## S3 method for class 'pt2pat' as.character(x, ...) ## S3 method for class 'pt2celllist' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2celllist(x, compact = TRUE, ...) ## S3 method for class 'pt2pat' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2pat(x, compact = TRUE, ...) ## S3 method for class 'pt2cell' format( x, padding = " ", empty_char = "-", fmt = getOption("pt2_cell_format"), ... ) ## S3 method for class 'pt2cell' print(x, ...) ## S3 method for class 'pt2cell' as.character(x, ...) ## S3 method for class 'pt2cell' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2cell(x, compact = TRUE, ...) ## S3 method for class 'pt2samp' format(x, ...) ## S3 method for class 'pt2samp' print(x, ...) ## S3 method for class 'pt2patlist' format(x, ...) ## S3 method for class 'pt2patlist' print(x, ...) ## S3 method for class 'pt2celllist' format(x, ...) ## S3 method for class 'pt2celllist' print(x, ...) ## S3 method for class 'pt2samplist' format(x, ...) ## S3 method for class 'pt2samplist' print(x, ...) ## S3 method for class 'pt2mod' as.raw(x, ...) ## S3 method for class 'pt2samp' as.raw(x, ...) ## S3 method for class 'pt2samp' as.integer(x, ...)
## S3 method for class 'pt2mod' format(x, ...) ## S3 method for class 'pt2mod' print(x, ...) ## S3 method for class 'pt2pat' format( x, padding = " ", empty_char = "-", fmt = getOption("pt2_cell_format"), ... ) ## S3 method for class 'pt2pat' print(x, sep = " ", show_header = TRUE, show_row = TRUE, ...) ## S3 method for class 'pt2pat' as.character(x, ...) ## S3 method for class 'pt2celllist' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2celllist(x, compact = TRUE, ...) ## S3 method for class 'pt2pat' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2pat(x, compact = TRUE, ...) ## S3 method for class 'pt2cell' format( x, padding = " ", empty_char = "-", fmt = getOption("pt2_cell_format"), ... ) ## S3 method for class 'pt2cell' print(x, ...) ## S3 method for class 'pt2cell' as.character(x, ...) ## S3 method for class 'pt2cell' as.raw(x, ...) ## S3 method for class 'logical' as.raw.pt2cell(x, compact = TRUE, ...) ## S3 method for class 'pt2samp' format(x, ...) ## S3 method for class 'pt2samp' print(x, ...) ## S3 method for class 'pt2patlist' format(x, ...) ## S3 method for class 'pt2patlist' print(x, ...) ## S3 method for class 'pt2celllist' format(x, ...) ## S3 method for class 'pt2celllist' print(x, ...) ## S3 method for class 'pt2samplist' format(x, ...) ## S3 method for class 'pt2samplist' print(x, ...) ## S3 method for class 'pt2mod' as.raw(x, ...) ## S3 method for class 'pt2samp' as.raw(x, ...) ## S3 method for class 'pt2samp' as.integer(x, ...)
x |
Object to apply S3 method to. See 'usage' section for allowed object types. |
... |
Passed on to other methods. |
padding |
A |
empty_char |
A |
fmt |
Experimental feature to format a |
sep |
A separator |
show_header |
A |
show_row |
A |
compact |
Should the pattern be formatted using a compact notation (as used for
file storage), or a none-compact format as used by the player? This can be
set with the |
The following is returned by the different methods:
format
: a formatted character
representation of the object
print
: same as format
as.character
: same as format
as.raw
: a raw
representation of the object. In many cases it inherits the same
class as x
as.integer
: converted raw
8 bit sample data to signed pulse code modulation integer
values between -128 and +127.
Renders a ProTracker module as audio::audioSample()
and plays it.
## S3 method for class 'pt2mod' play(x, duration = NA, options = pt2_render_options(), position = 0L, ...)
## S3 method for class 'pt2mod' play(x, duration = NA, options = pt2_render_options(), position = 0L, ...)
x |
Object to be played. |
duration |
Duration of the rendered output in seconds. When set to |
options |
A list of options used for rendering the audio. Use
|
position |
Starting position in the pattern sequence table ( |
... |
Arguments passed to |
Returns an [audio::
$.audioInstance]
object which
allows you to control the playback (pause, resume, rewind).
Pepijn de Vries
## Not run: mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) ## ctrl will contain the audioInstance that will let you control the audio playback: ctrl <- play(mod) ## End(Not run)
## Not run: mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) ## ctrl will contain the audioInstance that will let you control the audio playback: ctrl <- play(mod) ## End(Not run)
A cell is an element at a specific row and column (channel). It holds information
aboute the note to be played, the instrument (sample) number and the effect to be applied.
For mor information about cells (class pt2cell
) consult vignette("s3class")
.
For more information about selecting elements from ProTrackR2 class objects check out
vignette("select_opts")
.
pt2_cell(pattern, i, j, ...)
pt2_cell(pattern, i, j, ...)
pattern |
A |
i , j
|
Indices for extracting or replacing ProTrackR2 object elements. The indices starts at 0, for consistency with ProTracker! |
... |
Ignored |
Returns a cell object from the table as class pt2cell
.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_cell(mod$patterns[[1]], 0L, 0L)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_cell(mod$patterns[[1]], 0L, 0L)
How long a module will play depends on several aspects such as
the length of the pattern sequence table (pt2_pattern_table()
, pt2_length()
),
the speed and tempo at which the patterns are defined,
loops, pattern breaks and delay effects. The duration in seconds of the
module is calculated by this function.
pt2_duration(x, options = pt2_render_options(), position = 0L, ...)
pt2_duration(x, options = pt2_render_options(), position = 0L, ...)
x |
Object for which to determine the duration. Should be of class |
options |
A list of options used for rendering the audio. Use
|
position |
Starting position in the pattern sequence table ( |
... |
Ignored |
The duration in seconds (as a difftime
class object)
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_duration(mod)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_duration(mod)
Obtain information about a protracker module or embedded samples.
pt2_length(mod, ...) pt2_length(mod, ...) <- value pt2_n_pattern(mod, ...) pt2_pattern_table(mod, ...) pt2_name(x, ...) ## S3 method for class 'pt2mod' pt2_name(x, ...) ## S3 method for class 'pt2samp' pt2_name(x, ...) pt2_n_sample(mod, ...)
pt2_length(mod, ...) pt2_length(mod, ...) <- value pt2_n_pattern(mod, ...) pt2_pattern_table(mod, ...) pt2_name(x, ...) ## S3 method for class 'pt2mod' pt2_name(x, ...) ## S3 method for class 'pt2samp' pt2_name(x, ...) pt2_n_sample(mod, ...)
... |
Ignored |
value |
New length of a module in number of patterns in the pattern sequence table. |
x , mod
|
A |
Returns information about the specified ProTracker module
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_length(mod) pt2_n_pattern(mod) pt2_n_sample(mod) pt2_pattern_table(mod) pt2_name(mod)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_length(mod) pt2_n_pattern(mod) pt2_n_sample(mod) pt2_pattern_table(mod) pt2_name(mod)
Creates an empty ProTracker module, it is returned as a pt2mod
class object.
pt2_new_mod(name, ...)
pt2_new_mod(name, ...)
name |
Name for the new module. It will be truncated if longer than 20 characters. |
... |
Ignored |
A pt2mod
class module, with no samples and one empty pattern.
Pepijn de Vries
mod <- pt2_new_mod("my_song")
mod <- pt2_new_mod("my_song")
Creates a new ProTracker pattern, consisting of four channels and 64 rows.
pt2_new_pattern(..., compact = TRUE)
pt2_new_pattern(..., compact = TRUE)
... |
Currently ignored |
compact |
Should the pattern be formatted using a compact notation (as used for
file storage), or a none-compact format as used by the player? This can be
set with the |
Returns a new clean pt2pat
object.
Pepijn de Vries
pt2_new_pattern()
pt2_new_pattern()
Get a pattern table (sequence of notes and effects on each of the 4 channels) at a specific index from a ProTracker module.
pt2_pattern(mod, i, ...)
pt2_pattern(mod, i, ...)
mod |
A |
i |
The index ( |
... |
Ignored |
A pt2pat
object representing the pattern.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_pattern(mod, 0L)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_pattern(mod, 0L)
Functions to read and write ProTracker module. The read function will read a number of mod files that are compatible with ProTracker, this includes files compressed with PowerPacker (PP). The write function will only write modules conform ProTracker specifications.
pt2_read_mod(file, ...) pt2_write_mod(mod, file, ...)
pt2_read_mod(file, ...) pt2_write_mod(mod, file, ...)
file |
Filename of the file to read from or write to. |
... |
Ignored |
mod |
An object of class |
pt2_read_mod()
returns a pt2mod
class object when successful.
pt_write_mod()
returns NULL
invisibly.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2"))
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2"))
Functions to read and write ProTracker audio samples. Reading is supported for common types of WAV, IFF and AIFF files. Writing is supported for WAV and IFF files.
pt2_read_sample(file, ...) pt2_write_sample(sample, file, ...)
pt2_read_sample(file, ...) pt2_write_sample(sample, file, ...)
file |
Filename of the file to read from or write to. For |
... |
Ignored |
sample |
An object of class |
pt2_read_sample()
returns a pt2samp
class object when successful.
pt_write_sample()
returns NULL
invisibly.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) my_sample <- pt2_sample(mod, 1L) my_sample_file <- tempfile(fileext = ".iff") pt2_write_sample(my_sample, my_sample_file)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) my_sample <- pt2_sample(mod, 1L) my_sample_file <- tempfile(fileext = ".iff") pt2_write_sample(my_sample, my_sample_file)
Renders a 16bit pulse-code modulation waveform from a ProTracker module. The rendered format can be played on a modern machine.
pt2_render(x, duration = NA, options = pt2_render_options(), ...) ## S3 method for class 'pt2mod' pt2_render( x, duration = NA, options = pt2_render_options(), position = 0L, ... )
pt2_render(x, duration = NA, options = pt2_render_options(), ...) ## S3 method for class 'pt2mod' pt2_render( x, duration = NA, options = pt2_render_options(), position = 0L, ... )
x |
The object to be rendered |
duration |
Duration of the rendered output in seconds. When set to |
options |
A list of options used for rendering the audio. Use
|
... |
Ignored |
position |
Starting position in the pattern sequence table ( |
Rendered audio inheriting the audio::audioSample()
class.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) aud <- pt2_render(mod)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) aud <- pt2_render(mod)
Retrieve options for rendering ProTracker modules. See also
pt2_render()
.
pt2_render_options(...)
pt2_render_options(...)
... |
Specify custom options. |
Returns a named list
of options that can be used for rendering
ProTracker modules (see pt2_render()
and play()
).
It contains the following elements:
sample_rate
: an integer value specifying the sample rate of the output in Hz.
stereo_separation
: an integer percentage determining how much the
tracker channels will be separated to the left and right stereo output channels.
amiga_filter
: a character
string specifying the hardware filter to be emulated.
Can be "A500"
for emulating Amiga 500 hardware filters, or "A1200"
for emulating
Amiga 1200 hardware filters.
speed
: An integer value specifying the initial speed of the module measured in 'ticks'
per row. Should be in range of 1
and 31
.
tempo
: An integer value specifying the initial tempo of the module. When speed is set
to 6
, it measures the tempo as beats per minute. Should be in the range of 32
and 255
led_filter
: A logical
value specifying the state of the hardware LED filter to be emultated.
Pepijn de Vries
pt2_render_options(stereo_separation = 100)
pt2_render_options(stereo_separation = 100)
Obtain sample data and info from a ProTracker module at a specific index. ProTracker modules can hold up to 31 samples. The index should range from 0 to 30.
pt2_sample(mod, i, ...)
pt2_sample(mod, i, ...)
mod |
An object of class |
i |
The index of the requested sample (between 0 and 30). |
... |
Ignored. |
Returns a sample object of class pt2samp
.
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) smp <- pt2_sample(mod, 0L)
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) smp <- pt2_sample(mod, 0L)
Check aspects of S3 class objects for validity. For samples for instance it is checked if all parameters (volume, finetune, etc.) are within ProTracker specifications.
pt2_validate(x, ...) ## S3 method for class 'pt2samp' pt2_validate(x, ...)
pt2_validate(x, ...) ## S3 method for class 'pt2samp' pt2_validate(x, ...)
x |
object to be validated |
... |
Ignored |
A logical
value indicating whether the object is valid or not
Pepijn de Vries
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_validate(mod$samples[[1]])
mod <- pt2_read_mod(system.file("mod.intro", package = "ProTrackR2")) pt2_validate(mod$samples[[1]])