NAME

Music::Percussion::Tabla - Play the tablas!

VERSION

version 0.0709

SYNOPSIS

use Music::Percussion::Tabla ();

my $t = Music::Percussion::Tabla->new;

for (1 .. $t->bars) {
  $t->strike('ta', $t->eighth); # write to the score
  $t->strike('ta', $t->eighth);
  $t->strike('dha');
  $t->strike('ge');
  $t->rest($t->quarter);
}

my @strikes; # optionally save the notes for other purposes

push @strikes, $t->strike(['ge', 'ke']); # double-strike

for (1 .. 2) {
  push @strikes, $t->strike('ke', $t->sixteenth) for 1 .. 3;
  push @strikes, $t->strike('ti', $t->sixteenth) for 1 .. 4;
}

print "Strikes: @strikes\n";

$t->rest($t->quarter);

$t->tirakita($t->sixteenth) for 1 .. 2;

push @strikes, $t->teentaal; # as above
$t->keherawa($t->eighth)  for 1 .. $t->bars;
$t->jhaptaal($t->eighth)  for 1 .. $t->bars;
$t->dadra($t->eighth)     for 1 .. $t->bars;
$t->rupaktaal($t->eighth) for 1 .. $t->bars;
$t->rupaktaal($t->eighth) for 1 .. $t->bars;
$t->ektaal;
$t->arachartaal;

$t->write; # save the score as a MIDI file

DESCRIPTION

Music::Percussion::Tabla provides named associations between tabla drum sounds and the included soundfont file (which is 4.1MB).

To use the soundfont file, with say fluidsynth, add it to the startup command, like this (on the mac):

fluidsynth -a coreaudio -m coremidi -g 2.0 ~/Music/soundfont/Tabla.sf2

Here are my "non-tabla player" descriptions of the sounds. And the proper "syllable" names for the items with a * are unknown to me, as of yet...

   # MIDI Description
  ...
   1  60  ringing mid
   2  61  muted low
*  3  62  slap
   4  63  ringing mid slap
   5  64  low knock
   6  65  muted ringing low
   7  66  lower
*  8  67  low-up
   9  68  muted slap
* 10  69  ringing low
  11  70  flam slap
  12  71  loud tap
  13  72  lowest mute
* 14  73  ringing low
* 15  74  muted low
  16  75  loud tap double
  17  76  high-low
  18  77  high slap
* 19  78  tap
  20  79  high knock
* 21  80  short low-up
  22  81  mid tap
  23  82  muted tap
  24  83  mid
* 25  84  muted
  26  85  loud mid double
  27  86  slightly more muted
  28  87  low mid
  29  88  ringing mid
...

To play patches by number instead of name (e.g. for the * unknown bols), do this to add the 84th MIDInum entry score:

$tabla->note($tabla->eighth, 84);

To play patches simultaneously, that would be:

$tabla->note($tabla->eighth, 84, 80);

ATTRIBUTES

soundfont

$soundfont = $tabla->soundfont;

The file location, where the tabla soundfont resides.

Default: dist_dir()/Tabla.sf2

patches

$patches = $tabla->patches;

Each bol can be 1 or more patch numbers.

Default single strike bol patches:

ge:   65 66 76
ke:   64 77 79
na:   78 81
ta:   71 75 85
ti:   61 68 70 72 82 86
tin:  60 63 83 87
tun:  88

Default double strike bols:

dha:  ge ta
dhin: ge tin
dhit: ge ti
dhun: ge tun

METHODS

new

$tabla = Music::Percussion::Tabla->new(%args);

Create a new Music::Percussion::Tabla object. This uses the constructor attributes of MIDI::Drummer::Tiny.

strike

$tabla->strikes($bol);
$tabla->strikes([$bol1, $bol2]);
$tabla->strikes($bol, $duration);

Add to the strike to the score and also return a MIDI note specification [$duration, @note_list] for external handling.

This method handles two types of strikes: single and double.

A named bol can have one or more patches associated with it. For single strikes, the method will play one of the bol patches at random.

A bol that is an array reference of two named bols, signifies a double-strike on the given members.

The duration is a note length like $tabla->eighth (or 'en' in MIDI-Perl notation).

(If specific patches are desired, use the note method, as shown above.)

1. Single strike bols:

ge, ke, na, ta, ti, tin, tun

2. Double strike bols:

dha, dhin, dhit, dhun

For a double strike, play both the baya and daya drums for the given bol and duration.

Each of the individual bol patches, comprising the double-strike, are chosen at random, as with the single-strike.

thekas

Traditional "groove patterns":

teentaal([$duration])

16 beats

keherawa([$duration])

8 beats

jhaptaal([$duration])

10 beats

dadra([$duration])

6 beats

rupaktaal([$duration])

7 beats

ektaal([$duration])

12 beats

arachartaal([$duration])

14 beats

tirakita([$duration])

4 beats

SEE ALSO

The t/01-methods.t and eg/* programs in this distribution.

Moo

File::ShareDir

List::Util

https://gleitz.github.io/midi-js-soundfonts/Tabla/Tabla.sf2 (4.1MB)

https://www.wikihow.com/Play-Tabla

https://www.taalgyan.com/theory/basic-bols-on-tabla/

https://kksongs.org/tabla/chapter02.html & https://kksongs.org/tabla/chapter03.html

AUTHOR

Gene Boggs <gene.boggs@gmail.com>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2023-2026 by Gene Boggs.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)