Artifact
9927a59e4371333cbe42d083708253de2e786c47873c9e569a3596f9dc652eb2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Alternate Implementations — Bitrhythm's literate documentation</title>
<link href="_static/css/theme.css" rel="stylesheet" />
<link href="_static/css/index.c5995385ac14fb8791e8eb36b4908be2.css" rel="stylesheet" />
<link rel="stylesheet"
href="_static/vendor/fontawesome/5.13.0/css/all.min.css">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinx-book-theme.e8e5499552300ddf5d7adccae7cc3b70.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" />
<link rel="preload" as="script" href="_static/js/index.1c5a1a01449ed65a7b51.js">
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx-book-theme.12a9622fbb08dcb3a2a40b2c02b83a57.js"></script>
<script src="_static/analytics.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Saving / Recording / Streaming" href="saving.html" />
<link rel="prev" title="Code Walkthrough" href="main.html" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="docsearch:language" content="en" />
</head>
<body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
<div class="container-fluid" id="banner"></div>
<div class="container-xl">
<div class="row">
<div class="col-12 col-md-3 bd-sidebar site-navigation show" id="site-navigation">
<div class="navbar-brand-box">
<a class="navbar-brand text-wrap" href="index.html">
<h1 class="site-logo" id="site-title">Bitrhythm's literate documentation</h1>
</a>
</div><nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
<div class="bd-toc-item active">
<p class="caption">
<span class="caption-text">
Table of Contents
</span>
</p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1">
<a class="reference internal" href="what.html">
What is bitrhythm about ?
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="source-code.html">
Source Code and License
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="demo.html">
Getting Started
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="samples.html">
Samples
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="tweaking.html">
Core Features
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="early-attempts.html">
Early Attempts
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="changelog.html">
Changelog
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="main.html">
Code Walkthrough
</a>
</li>
<li class="toctree-l1 current active">
<a class="current reference internal" href="#">
Alternate Implementations
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="saving.html">
Saving / Recording / Streaming
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="credits.html">
Credits
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="bookmarks.html">
Bookmarks
</a>
</li>
</ul>
</div>
</nav> <!-- To handle the deprecated key -->
<div class="navbar_extra_footer">
<a target="_blank" href="/">Bitrhythm App Home</a><br>
<a target="_blank" href="https://xyzzyapps.link">Xyzzy Apps Home</a><br>
<p class='custom-nav-footer'>(c) Xyzzy Apps, 2021</p>
</div>
</div>
<main class="col py-md-3 pl-md-4 bd-content overflow-auto" role="main">
<div class="topbar container-xl fixed-top">
<div class="topbar-contents row">
<div class="col-12 col-md-3 bd-topbar-whitespace site-navigation show"></div>
<div class="col pl-md-4 topbar-main">
<button id="navbar-toggler" class="navbar-toggler ml-0" type="button" data-toggle="collapse"
data-toggle="tooltip" data-placement="bottom" data-target=".site-navigation" aria-controls="navbar-menu"
aria-expanded="true" aria-label="Toggle navigation" aria-controls="site-navigation"
title="Toggle navigation" data-toggle="tooltip" data-placement="left">
<i class="fas fa-bars"></i>
<i class="fas fa-arrow-left"></i>
<i class="fas fa-arrow-up"></i>
</button>
<!-- Source interaction buttons -->
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
data-placement="bottom" onclick="toggleFullScreen()" aria-label="Fullscreen mode"
title="Fullscreen mode"><i
class="fas fa-expand"></i></button></a>
<!-- Launch buttons -->
</div>
<!-- Table of contents -->
<div class="d-none d-md-block col-md-2 bd-toc show">
<div class="tocsection onthispage pt-5 pb-3">
<i class="fas fa-list"></i> Contents
</div>
<nav id="bd-toc-nav">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#elementary">
Elementary
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div id="main-content" class="row">
<div class="col-12 col-md-9 pl-md-3 pr-md-0">
<div>
<div class="section" id="alternate-implementations">
<h1>Alternate Implementations<a class="headerlink" href="#alternate-implementations" title="Permalink to this headline">¶</a></h1>
<p>Here’s some more demo songs from other systems</p>
<ul class="simple">
<li><p><a href="https://www.youtube.com/watch?v=xXNB1BbKY8A">Foxdot and Python</a></p></li>
<li><p><a href="https://www.youtube.com/watch?v=ALrgudRS2AQ">Csound</a></p></li>
</ul>
<p>The core ideas of bitrhythm are transferable to other languages as well. At most all you need is a music loop and samples to get started.</p>
<p>A basic port to JUCE can be found <a class="reference external" href="https://xyzzyapps.link/bitrhythm-alt">here</a>.</p>
<p>Here’s a demo by SunVox’s author ?</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/8r8wsvHUbCo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>An example in C with raylib</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>brew install raylib
cc ray.c `pkg-config --libs --cflags raylib` -o ray
</pre></div>
</div>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"raylib.h"</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf"><stdio.h></span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf"><time.h></span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf"><stdlib.h></span><span class="cp"></span>
<span class="kt">void</span> <span class="nf">setTimeout</span><span class="p">(</span><span class="kt">int</span> <span class="n">milliseconds</span><span class="p">)</span>
<span class="p">{</span>
<span class="c1">// If milliseconds is less or equal to 0</span>
<span class="c1">// will be simple return from function without throw error</span>
<span class="k">if</span> <span class="p">(</span><span class="n">milliseconds</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Count milliseconds for timeout is less or equal to 0</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// a current time of milliseconds</span>
<span class="kt">int</span> <span class="n">milliseconds_since</span> <span class="o">=</span> <span class="n">clock</span><span class="p">()</span> <span class="o">*</span> <span class="mi">1000</span> <span class="o">/</span> <span class="n">CLOCKS_PER_SEC</span><span class="p">;</span>
<span class="c1">// needed count milliseconds of return from this timeout</span>
<span class="kt">int</span> <span class="n">end</span> <span class="o">=</span> <span class="n">milliseconds_since</span> <span class="o">+</span> <span class="n">milliseconds</span><span class="p">;</span>
<span class="c1">// wait while until needed time comes</span>
<span class="k">do</span> <span class="p">{</span>
<span class="n">milliseconds_since</span> <span class="o">=</span> <span class="n">clock</span><span class="p">()</span> <span class="o">*</span> <span class="mi">1000</span> <span class="o">/</span> <span class="n">CLOCKS_PER_SEC</span><span class="p">;</span>
<span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">milliseconds_since</span> <span class="o"><=</span> <span class="n">end</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">InitAudioDevice</span><span class="p">();</span> <span class="c1">// Initialize audio device</span>
<span class="n">Sound</span> <span class="n">fxWav</span> <span class="o">=</span> <span class="n">LoadSound</span><span class="p">(</span><span class="s">"Music/Kick01.wav"</span><span class="p">);</span>
<span class="n">Sound</span> <span class="n">fxWav2</span> <span class="o">=</span> <span class="n">LoadSound</span><span class="p">(</span><span class="s">"Music/Clap01.wav"</span><span class="p">);</span>
<span class="kt">int</span> <span class="n">bpm</span><span class="p">;</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"Enter bpm: "</span><span class="p">);</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">bpm</span><span class="p">);</span>
<span class="kt">float</span> <span class="n">time_per_beat</span> <span class="o">=</span> <span class="p">(</span><span class="mf">60.0</span> <span class="o">/</span> <span class="n">bpm</span><span class="p">)</span> <span class="o">*</span> <span class="mi">4</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">delay</span> <span class="o">=</span> <span class="p">(</span><span class="n">time_per_beat</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">)</span> <span class="o">/</span> <span class="mi">16</span><span class="p">;</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">delay</span><span class="p">);</span>
<span class="k">while</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o"><=</span> <span class="mi">16</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">9</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">13</span><span class="p">))</span> <span class="p">{</span>
<span class="n">PlaySound</span><span class="p">(</span><span class="n">fxWav</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">13</span><span class="p">))</span> <span class="p">{</span>
<span class="n">PlaySound</span><span class="p">(</span><span class="n">fxWav2</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">setTimeout</span><span class="p">(</span><span class="n">delay</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">UnloadSound</span><span class="p">(</span><span class="n">fxWav</span><span class="p">);</span> <span class="c1">// Unload sound data</span>
<span class="n">UnloadSound</span><span class="p">(</span><span class="n">fxWav2</span><span class="p">);</span> <span class="c1">// Unload sound data</span>
<span class="n">CloseAudioDevice</span><span class="p">();</span> <span class="c1">// Close audio device</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="section" id="elementary">
<h2>Elementary<a class="headerlink" href="#elementary" title="Permalink to this headline">¶</a></h2>
<p>Elementary is a javascript runtime - <a class="reference external" href="https://github.com/nick-thompson/elementary">https://github.com/nick-thompson/elementary</a>.</p>
<p>The following is a basic incomplete example that makes use of the sample. Need to update it to the latest Elementary version to simplify tick logic.</p>
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="kd">const</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'@nick-thompson/elementary'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">kick02</span> <span class="o">=</span> <span class="s1">'./Music/Kick01.wav'</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">hh02</span> <span class="o">=</span> <span class="s1">'./Music/HH02.wav'</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">clap01</span> <span class="o">=</span> <span class="s1">'./Music/Clap01.wav'</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">voices</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'60'</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">kick02</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">'v1'</span><span class="p">},</span>
<span class="s1">'61'</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">hh02</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">'v2'</span><span class="p">},</span>
<span class="s1">'62'</span><span class="o">:</span> <span class="p">{</span><span class="nx">gain</span><span class="o">:</span> <span class="mf">0.6</span><span class="p">,</span> <span class="nx">gate</span><span class="o">:</span> <span class="mf">0.0</span><span class="p">,</span> <span class="nx">path</span><span class="o">:</span> <span class="nx">clap01</span><span class="p">,</span> <span class="nx">key</span><span class="o">:</span> <span class="s1">'v3'</span><span class="p">},</span>
<span class="p">};</span>
<span class="kd">function</span> <span class="nx">updateVoiceState</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">e</span> <span class="o">&&</span> <span class="nx">e</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'type'</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">'noteOn'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">voices</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">voices</span><span class="p">[</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">].</span><span class="nx">gate</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">e</span> <span class="o">&&</span> <span class="nx">e</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'type'</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">'noteOff'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">voices</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">voices</span><span class="p">[</span><span class="nx">e</span><span class="p">.</span><span class="nx">noteNumber</span><span class="p">].</span><span class="nx">gate</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kd">function</span> <span class="nx">samplerVoice</span><span class="p">(</span><span class="nx">voice</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">gate</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="kd">const</span><span class="p">({</span><span class="nx">key</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">gate</span><span class="p">});</span>
<span class="k">return</span> <span class="nx">el</span><span class="p">.</span><span class="nx">mul</span><span class="p">(</span><span class="nx">voice</span><span class="p">.</span><span class="nx">gain</span><span class="p">,</span> <span class="nx">el</span><span class="p">.</span><span class="nx">sample</span><span class="p">({</span><span class="nx">path</span><span class="o">:</span> <span class="nx">voice</span><span class="p">.</span><span class="nx">path</span><span class="p">},</span> <span class="nx">gate</span><span class="p">));</span>
<span class="p">}</span>
<span class="nx">elementary</span><span class="p">.</span><span class="nx">core</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'load'</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">step</span> <span class="o">=</span> <span class="mf">0</span><span class="p">;</span>
<span class="kd">function</span> <span class="nx">function2</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">step</span> <span class="o">=</span> <span class="nx">i</span> <span class="o">%</span> <span class="mf">16</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">step</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">4</span> <span class="o">==</span> <span class="mf">0</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">'noteOn'</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">'60'</span><span class="p">});</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">'noteOff'</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">'60'</span><span class="p">});</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">((</span><span class="nx">i</span> <span class="o">!==</span> <span class="mf">0</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">8</span> <span class="o">==</span> <span class="mf">0</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">'noteOn'</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">'62'</span><span class="p">});</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">updateVoiceState</span><span class="p">({</span><span class="nx">type</span><span class="o">:</span> <span class="s1">'noteOff'</span><span class="p">,</span> <span class="nx">noteNumber</span><span class="o">:</span> <span class="s1">'62'</span><span class="p">});</span>
<span class="p">}</span>
<span class="kd">let</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">voices</span><span class="p">).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">samplerVoice</span><span class="p">(</span><span class="nx">voices</span><span class="p">[</span><span class="nx">n</span><span class="p">]);</span>
<span class="p">}));</span>
<span class="kd">let</span> <span class="nx">filtered</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="nx">lowpass</span><span class="p">(</span><span class="mf">1800</span><span class="p">,</span> <span class="mf">1.414</span><span class="p">,</span> <span class="nx">out</span><span class="p">);</span>
<span class="nx">elementary</span><span class="p">.</span><span class="nx">core</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="nx">filtered</span><span class="p">,</span> <span class="nx">filtered</span><span class="p">);</span>
<span class="nx">i</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">setInterval</span><span class="p">(</span><span class="nx">function2</span><span class="p">,</span> <span class="mf">60000</span> <span class="o">/</span> <span class="mf">120.0</span> <span class="o">/</span> <span class="mf">2</span><span class="p">);</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class='prev-next-bottom'>
<a class='left-prev' id="prev-link" href="main.html" title="previous page">Code Walkthrough</a>
<a class='right-next' id="next-link" href="saving.html" title="next page">Saving / Recording / Streaming</a>
</div>
</div>
</div>
<footer class="footer mt-5 mt-md-0">
<div class="container">
<p>
By Xyzzy Apps<br/>
© Copyright (c) Xyzzy Apps, 2021.<br/>
</p>
</div>
</footer>
</main>
</div>
</div>
<script src="_static/js/index.1c5a1a01449ed65a7b51.js"></script>
</body>
</html>