# Figurate Numbers for Sonic Pi (New Ruby gem for infinite number sequences and patterns)

**URL:** <https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962>\
**Category:** Creations & Ideas\
**Created:** [June 19, 2024, 5:45am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962 "2024-06-19T05:45:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [June 19, 2024, 5:45am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/1 "2024-06-19T05:45:11Z")

</div>

## 1. Introduction

Hello everyone!  
Do you want to play with infinite sequences of figurative numbers in Sonic Pi?

 ![sonic_pi_threads_figurate_numbers](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/d/d0c75522dd25e592d5805e612b2610fc23213edb.png)

I have been developing **115** figurate number sequences ( **planar** , **spatial** , and **multidimensional** ) from the phenomenal book Figurate Numbers (2012) by Elena Deza and Michel Deza for use in Sonic Pi.

## 2. Installation, source code and instructions

1. [Install Gem via rubygems.org page](https://rubygems.org/gems/figurate_numbers)
2. [Github: Complete list of number sequences implemented and source code](https://github.com/edelveart/figurate_numbers)

## 3. How to use this sequences in Sonic Pi?

1. Locate or download the file in the path lib/figurate\_numbers.rb
2. Drag the file to a buffer in Sonic Pi (this generates the `<PATH>`)

```rb
run_file "<PATH>"

pol_num = FigurateNumbers.polygonal_numbers(8)
80.times do
  play pol_num.next % 12 * 7 # Some mathematical function or transformation
  sleep 0.25
end

```

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 3, 2024, 2:45am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/2 "2024-07-03T02:45:51Z")

</div>

Hi there,

> **[GitHub - edelveart/figurate\_numbers: Figurate Numbers generates 239 infinite...](https://github.com/edelveart/figurate_numbers)**
>
> Figurate Numbers generates 239 infinite sequences of plane, space, and multidimensional figurate numbers based on the book ‘Figurate Numbers’ (2012) by Elena Deza and Michel Deza. The methods are i...

`figurate_numbers` now has **206** infinite sequences with version 1.0.0. All implemented sequences are on github.  
You can download it as a gem from:  
[https://rubygems.org/gems/figurate\_numbers](https://rubygems.org/gems/figurate_numbers)

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 3, 2024, 5:39am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/3 "2024-07-03T05:39:08Z")

</div>

Hello Edgar @EdgarDelgadoVega and thanks for your post!..But, I don’t understand very well, how can we “play” concretely with these numbers in the SP interface 🤔? Thanks for attention 😃

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 3, 2024, 9:17pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/4 "2024-07-03T21:17:21Z")

</div>

Thanks for your attention @beryann, I will make a short **video tutorial** soon!!!

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 5, 2024, 11:13pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/5 "2024-07-05T23:13:11Z")

</div>

# Hello everyone!

This is the video tutorial for using Sonic Pi (click on link or in image)

[Video Tutorial Figurate Numbers in Sonic Pi](https://youtu.be/X9riUHbxBpQ)

[![](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/6/6c54b8866014e01636e5c343d65497036d18246d.jpeg)](https://youtu.be/X9riUHbxBpQ)

@Ko-peInefable  
@beryann  
@halloworld  
@mrbombmusic  
@Relaxnow  
@tuned

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 6, 2024, 8:11am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/6 "2024-07-06T08:11:16Z")

</div>

Hello Edgar…I have seen your video, thanks for it!. I am going now to explore this on my SPi!I’ll feedback! 😀  
Warmly

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 6, 2024, 10:48am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/7 "2024-07-06T10:48:31Z")

</div>

Hi Edgar @EdgarDelgadoVega I have tried your recommendations in the video but on my Windows 11, my terminal doesn’t accept the term “install” (I am not a specialist of the terminal!) …I am going to try it again on my Mac…a priori, is it for the 2 systems? Thanks for attention! 😃

---

<div class="post-metadata">

**Author:** ![alicesmokesgas](https://avatars.discourse-cdn.com/v4/letter/a/57b2e6/32.png) [@alicesmokesgas](https://in-thread.sonic-pi.net/u/alicesmokesgas)\
**Post date:** [July 6, 2024, 4:15pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/8 "2024-07-06T16:15:47Z")

</div>

Do you have rubygems installed? If not those terminal commands won’t work.

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 6, 2024, 4:35pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/9 "2024-07-06T16:35:39Z")

</div>

ok Alice @alicesmokesgas I’ll try this! thanks a lot… 👍

---

<div class="post-metadata">

**Author:** ![alicesmokesgas](https://avatars.discourse-cdn.com/v4/letter/a/57b2e6/32.png) [@alicesmokesgas](https://in-thread.sonic-pi.net/u/alicesmokesgas)\
**Post date:** [July 6, 2024, 4:48pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/10 "2024-07-06T16:48:28Z")

</div>

No problem, I think there’s a package or something that installs both ruby and rubygems. It’s been a while since I’ve installed though so I can’t remember, just check out [rubygems.org](http://rubygems.org)

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 6, 2024, 6:35pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/11 "2024-07-06T18:35:53Z")

</div>

Hi @beryann , `gem install figurate_numbers` works if you have Ruby installed (not just Sonic Pi): [Ruby Programming Language](https://www.ruby-lang.org/en/)  
You can check if you have the package manager installed with the command  
`which gem`.

---

<div class="post-metadata">

**Author:** ![robin.newman](https://avatars.discourse-cdn.com/v4/letter/r/76d3ee/32.png) [@robin.newman](https://in-thread.sonic-pi.net/u/robin.newman)\
**Post date:** [July 6, 2024, 10:05pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/12 "2024-07-06T22:05:54Z")

</div>

Hi Edgar  
Got the gemin installed and working. Using your example in the video plays OK but it seems to clobber Sonic PI sound out…possibly because the latter numbers generate very high frequencies. I need to restart before I can run it again.

I modified the program as below:

```ruby
run_file "/Users/rbn/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/figurate_numbers-1.0.0/lib/figurate_numbers.rb"
sleep 1 #to allow figurate_numbers to complete load and setup otherwise first run can give error
seq = FigurateNumbers.octahedral_numbers
live_loop :seq_numbers do
  tick
  use_synth :bass_foundation
  n = seq.next
  stop if n > 127
  play n, release: 1
  sleep 1  
end

```

EDIT I suppose you could use n = (seq.next/)%127 as well which would leave it running

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 7, 2024, 1:56am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/13 "2024-07-07T01:56:15Z")

</div>

Hi dear @robin.newman,

Indeed, the values ​​must be truncated for all sequences, so that the mapping remains “audible” according to the chosen musical parameter. It’s also great to truncate to `% 127` (MIDI values), I used to use it more with `% 7` or `% 12`. On the other hand, I appreciate that you introduced `sleep 1` for the first time loading the module.

It’s a matter of exploring other operations that maintain an audible and executable range by SP.  
I will soon upload another video with a couple of basic examples developed.

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 7, 2024, 5:55am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/14 "2024-07-07T05:55:15Z")

</div>

# Figurate Numbers in Sonic Pi (Large numbers)

This is the second short tutorial explaining how large sequence values ​​can be included in other parameters. Click the following link:

[Deal with large numbers generated by figurate numbers (Example)](https://www.youtube.com/watch?v=nZMe3sPH_Z8)

 ![](https://europe1.discourse-cdn.com/flex017/uploads/sonic_pi/original/2X/d/d6767b9a9d0cf2b8b712542f553d1b902988f48b.jpeg)

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 7, 2024, 2:45pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/15 "2024-07-07T14:45:55Z")

</div>

Hi there! @robin.newman @alicesmokesgas @EdgarDelgadoVega  
Everything is fine now (on my windows 11, not on my old mac Big Sur I don’t know why)  
I notice this: the different sequences are sometimes very short and sometimes “look” very similar. How to use them in SPi, that’s the question of the day lol but I’ll try to do something with it by trying different types of numbers in different loops to see if it can work. Thanks to the “stop if n \> 127” of @robin.newman we effectively avoid nasty clicks at the end of the pattern…Thank you all 🖐 to be continued… 😁

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 7, 2024, 3:01pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/16 "2024-07-07T15:01:12Z")

</div>

Here’s the rest… I started with Robin’s patch to arrive at this with a few modifications… It’s a simple unpretentious experiment. Try it for yourself, you will probably be able to improve it 😉

```ruby
run_file "C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/figurate_numbers-1.0.0/lib/figurate_numbers.rb"

sleep 1
#to allow figurate_numbers to complete load and setup otherwise first run can give error

live_loop :all do
  with_fx :reverb, mix: 0.8 do
    seq1 = FigurateNumbers.six_dimensional_hypercube_numbers
    live_loop :seq_numbers do
      tick
      use_synth :bass_foundation
      n = seq1.next
      stop if n > 127
      play n, release: 1
      sleep 1
    end
    
    seq2 = FigurateNumbers.stella_octangula_numbers
    live_loop :seq_numbers2 do
      use_octave 3
      tick
      use_synth :piano
      n = seq2.next
      stop if n > 127
      play n, release: 1
      sleep 1
    end
    
  end
  sleep 2
end

```

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 7, 2024, 8:13pm UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/17 "2024-07-07T20:13:10Z")

</div>

Hi @beryann,  
You can do a thousand things with the sequences, it depends on what you imagine. You can put the sequences in any parameter that accepts numbers (remember to do operations so that the values ​​fit).  
I share another basic example on the fly that can be done:

```ruby
run_file "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/figurate_numbers-1.0.0/lib/figurate_numbers.rb"
sleep 1

seq1 = FigurateNumbers.centered_hyperoctahedral_numbers
seq2 = FigurateNumbers.mgonal_prism_numbers(6)
s = FigurateNumbers.six_dimensional_hypercube_numbers.take(35)[2]

use_random_seed s + seq2.take(7)[4]
live_loop :seq_num do
  tick
  use_synth [:dtri, :chiplead, :subpulse, :fm][seq2.next % 5]
  play seq1.next % 7 * 10 + rand_i(20),
    amp: seq2.next % 5,
    release: 0.125
  sleep 0.125
end

```

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 8, 2024, 6:30am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/18 "2024-07-08T06:30:04Z")

</div>

Hello Edgar! @EdgarDelgadoVega  
Thanks for your patch, I see now and I am going to experiment this.  
Can you just tell me what this does?:

```ruby
play seq1.next % 7 * 10 + rand_i(20)

```

I understand of course the play and rand\_i (for integers) but what does the modulo exactly? Is “next” like a .tick?  
Thanks 😃

---

<div class="post-metadata">

**Author:** ![EdgarDelgadoVega](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/edgardelgadovega/32/3083_2.png) [@EdgarDelgadoVega](https://in-thread.sonic-pi.net/u/EdgarDelgadoVega)\
**Post date:** [July 8, 2024, 8:28am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/19 "2024-07-08T08:28:26Z")

</div>

Hi @beryann ,  
Thanks for the question. The `%` symbol means that you are going to take an integer from the sequence and reduce it modulo another integer. The simplest idea is to think of clocks. On a 12 hour clock, 17 hours are equivalent to 5 hours, i.e. `17 % 12` produces `5`. In the example you are using a 7 hour clock. If the number in the sequence is 15, then `15 % 7 = 1`.  
In that sense, `%` is not an iterator and just reduces the value of the number produced by the sequence.

---

<div class="post-metadata">

**Author:** ![beryann](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/beryann/32/3133_2.png) [@beryann](https://in-thread.sonic-pi.net/u/beryann)\
**Post date:** [July 8, 2024, 10:06am UTC](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962/20 "2024-07-08T10:06:05Z")

</div>

ok I have understood, Thanks a lot Edgar!! @EdgarDelgadoVega

[Next page](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962.md?page=2)
