
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      
        <link rel="prev" href="ssf.html">
      
      
        <link rel="next" href="standard_uniforms.html">
      
      
      <link rel="icon" href="../src/images/logo_square.png">
      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.19">
    
    
      
        <title>SSF Audio Uniforms - Synesthesia Docs</title>
      
    
    
      <link rel="stylesheet" href="../assets/stylesheets/main.7e37652d.min.css">
      
      


    
    
      
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
      <link rel="stylesheet" href="../stylesheets/sass_output.css">
    
    <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      

    
    
    
  </head>
  
  
    <body dir="ltr">
  
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#ssf-audio-uniforms" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

  

<header class="md-header md-header--shadow" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href="../index.html" title="Synesthesia Docs" class="md-header__button md-logo" aria-label="Synesthesia Docs" data-md-component="logo">
      
  <img src="../src/images/logo_square.png" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            Synesthesia Docs
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              SSF Audio Uniforms
            
          </span>
        </div>
      </div>
    </div>
    
    
      <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
    
    
    
      
      
        <label class="md-header__button md-icon" for="__search">
          
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
        </label>
        <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
          
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
      
    
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    



<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../index.html" title="Synesthesia Docs" class="md-nav__button md-logo" aria-label="Synesthesia Docs" data-md-component="logo">
      
  <img src="../src/images/logo_square.png" alt="logo">

    </a>
    Synesthesia Docs
  </label>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
  
  
  
  
    <li class="md-nav__item">
      <a href="../index.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Introduction
    
  </span>
  

      </a>
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
        
          
          <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    Quick Links
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2">
            <span class="md-nav__icon md-icon"></span>
            Quick Links
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
    
  
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          
  
  
  <span class="md-ellipsis">
    SSF Audio Uniforms
    
  </span>
  

          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="audio_uniforms.html" class="md-nav__link md-nav__link--active">
        
  
  
  <span class="md-ellipsis">
    SSF Audio Uniforms
    
  </span>
  

      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#data-textures" class="md-nav__link">
    <span class="md-ellipsis">
      Data Textures
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#level" class="md-nav__link">
    <span class="md-ellipsis">
      Level
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#hits" class="md-nav__link">
    <span class="md-ellipsis">
      Hits
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#time" class="md-nav__link">
    <span class="md-ellipsis">
      Time
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#presence" class="md-nav__link">
    <span class="md-ellipsis">
      Presence
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#beat" class="md-nav__link">
    <span class="md-ellipsis">
      Beat
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#bpm" class="md-nav__link">
    <span class="md-ellipsis">
      BPM
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#large-features" class="md-nav__link">
    <span class="md-ellipsis">
      Large Features
    </span>
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="standard_uniforms.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    SSF Standard Uniforms
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="functions.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    SSF Functions
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="json.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    JSON Configuration
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
        
          
          <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    FAQ
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_3">
            <span class="md-nav__icon md-icon"></span>
            FAQ
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/index.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    General
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/troubleshooting.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Troubleshooting
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/license.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    License
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/audio.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Audio
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/video.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Video
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/settings.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Settings
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../faq/midi_osc.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    MIDI & OSC
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
    
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
        
          
          <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    SSF Documentation
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
          <label class="md-nav__title" for="__nav_4">
            <span class="md-nav__icon md-icon"></span>
            SSF Documentation
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="ssf.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Synesthesia Shader Format (SSF)
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
    
  
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          
  
  
  <span class="md-ellipsis">
    SSF Audio Uniforms
    
  </span>
  

          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="audio_uniforms.html" class="md-nav__link md-nav__link--active">
        
  
  
  <span class="md-ellipsis">
    SSF Audio Uniforms
    
  </span>
  

      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#data-textures" class="md-nav__link">
    <span class="md-ellipsis">
      Data Textures
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#level" class="md-nav__link">
    <span class="md-ellipsis">
      Level
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#hits" class="md-nav__link">
    <span class="md-ellipsis">
      Hits
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#time" class="md-nav__link">
    <span class="md-ellipsis">
      Time
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#presence" class="md-nav__link">
    <span class="md-ellipsis">
      Presence
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#beat" class="md-nav__link">
    <span class="md-ellipsis">
      Beat
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#bpm" class="md-nav__link">
    <span class="md-ellipsis">
      BPM
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#large-features" class="md-nav__link">
    <span class="md-ellipsis">
      Large Features
    </span>
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="standard_uniforms.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    SSF Standard Uniforms
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="functions.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    SSF Functions
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="libraries.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    External Libraries
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="json.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    JSON Configuration
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="script.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    JavaScript Scripting
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="best_practices.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Best Practices
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
        
          
          <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    Synesthesia Manual
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_5">
            <span class="md-nav__icon md-icon"></span>
            Synesthesia Manual
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../manual/control_hotkeys.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Control Hotkeys
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../manual/osc.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    OSC
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
        
          
          <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    Tutorials
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_6">
            <span class="md-nav__icon md-icon"></span>
            Tutorials
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/links.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    External Links
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/quickstart_guide.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Quickstart Guide
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/first_scene.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Creating Your First Scene
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/presets_favslots_playlists.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    How to Use Presets, Favslots, and Playlists
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/control_hotkeys.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    How to Use Control Hotkeys
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/livestream.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    How to Add Audio Reactive Visuals to a Livestream with OBS
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/shadertoy_conversion.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    How to Manually Convert from Shadertoy.com to SSF
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/1.19_javascript.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    How to Update Controls and Use Event Handlers with JavaScript
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../tutorials/1.16_walkthrough.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    v1.16 Feature Walkthrough
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
        
          
          <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
            
  
  
  <span class="md-ellipsis">
    Resources
    
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_7">
            <span class="md-nav__icon md-icon"></span>
            Resources
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../resources/syn_installers.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Synesthesia Installers
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../resources/changelogs.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Synesthesia Changelogs
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../resources/syn_resources.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    Synesthesia Resources
    
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../resources/glsl_resources.html" class="md-nav__link">
        
  
  
  <span class="md-ellipsis">
    GLSL Resources
    
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#data-textures" class="md-nav__link">
    <span class="md-ellipsis">
      Data Textures
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#level" class="md-nav__link">
    <span class="md-ellipsis">
      Level
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#hits" class="md-nav__link">
    <span class="md-ellipsis">
      Hits
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#time" class="md-nav__link">
    <span class="md-ellipsis">
      Time
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#presence" class="md-nav__link">
    <span class="md-ellipsis">
      Presence
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#beat" class="md-nav__link">
    <span class="md-ellipsis">
      Beat
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#bpm" class="md-nav__link">
    <span class="md-ellipsis">
      BPM
    </span>
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#large-features" class="md-nav__link">
    <span class="md-ellipsis">
      Large Features
    </span>
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  



<div><h1 id="ssf-audio-uniforms">SSF Audio Uniforms</h1>
<p>Synesthesia analyzes whatever music is playing in real-time, providing a large set of audio reactive uniforms. These uniforms are automatically updated every frame, making it easy to create reactive visuals without performing any of your own audio analysis.</p>
<p>Many of the uniforms rely on <a href="link:www.dataq.com/data-acquisition/general-education-tutorials/fft-fast-fourier-transform-waveform-analysis.html">FFT analysis</a>, splitting the audio spectrum into 4 main bands: Bass, Mid, MidHigh, and High.</p>
<h3 id="data-textures">Data Textures</h3>
<p>There are two textures which store different audio data in each channel. Here is a visualization of these 1DSamplers from the built-in Audio Indicators scene:</p>
<p><a href="../src/images/audio_samplers.gif"><img alt="Audio Samplers" src="../src/images/audio_samplers.gif"></a></p>
<ul>
<li><code>syn_Spectrum</code> stores FFT and audio waveform data. This is useful for creating audio reactive shapes and direct music visualizers.<ul>
<li><code>r channel</code> - <strong>Raw FFT</strong>. Unprocessed audio frequency data <em>(first in visualization from bottom to top)</em></li>
<li><code>g channel</code> - <strong>Juiced FFT</strong>. This data is processed to look much better than the Raw FFT -- this should be your default when working with FFT sampling. It incorporates bin smoothing, temporal smoothing, logarithmic frequency scaling, and high-end boosting to make the FFT look consistent and smooth across all frequencies <em>(second in visualization)</em></li>
<li><code>b channel</code> - <strong>Smooth FFT</strong>. This channel represents the FFT with much less frequency resolution, creating a smoother shape. It incoporates the same smoothing and scaling as the Juiced FFT <em>(third in visualization)</em></li>
<li><code>a channel</code> - <strong>Waveform</strong>. The raw audio waveform data, which changes every frame. <em>(fourth in visualization)</em></li>
</ul>
</li>
<li><code>syn_LevelTrail</code> stores the level of frequency bands over time. This is useful for creating trails that react to music <em>(top in visualization)</em><ul>
<li><code>r channel</code> - <strong>Whole Spectrum Level</strong></li>
<li><code>g channel</code> - <strong>Bass Level</strong></li>
<li><code>b channel</code> - <strong>Mid Level</strong></li>
<li><code>a channel</code> - <strong>High Level</strong></li>
</ul>
</li>
</ul>
<h3 id="level">Level</h3>
<p>These uniforms track the level (loudness) of specific frequency bands, with some added smoothing to reduce jitter. They are normalized to the range <code>0.0</code> to <code>1.0</code>.</p>
<ul>
<li><code>syn_Level</code> <em>(whole spectrum)</em></li>
<li><code>syn_BassLevel</code></li>
<li><code>syn_MidLevel</code></li>
<li><code>syn_MidHighLevel</code></li>
<li><code>syn_HighLevel</code></li>
</ul>
<!-- - **SPECIAL**: `syn_RawLevel` *(the )* -->

<h3 id="hits">Hits</h3>
<p>These uniforms detect 'hits' within specific frequency bands, spiking in value during the isolated transients. Great for tracking drum hits or percussive action. They are normalized to the range <code>0.0</code> to <code>1.0</code>.</p>
<ul>
<li><code>syn_Hits</code> <em>(whole spectrum)</em></li>
<li><code>syn_BassHits</code></li>
<li><code>syn_MidHits</code></li>
<li><code>syn_MidHighHits</code></li>
<li><code>syn_HighHits</code></li>
</ul>
<h3 id="time">Time</h3>
<p>These uniforms are clocks that move forward when the volume of a specific frequency band is high. Use these uniforms to make a scene move more when the music picks up, or to create pulsing movement (like a camera that moves forward on each kick). Note that these <em>do not</em> normalize between <code>0</code> and <code>1</code> and are similar scale to the <code>TIME</code> uniform.</p>
<ul>
<li><code>syn_Time</code> <em>(whole spectrum)</em></li>
<li><code>syn_BassTime</code></li>
<li><code>syn_MidTime</code></li>
<li><code>syn_MidHighTime</code></li>
<li><code>syn_HighTime</code></li>
<li><strong>SPECIAL</strong>: <code>syn_CurvedTime</code> <em>(similar to</em> <code>syn_Time</code>, <em>but responds to volume increases with much higher acceleration)</em></li>
</ul>
<h3 id="presence">Presence</h3>
<p>These uniforms track the 'presence' of specific frequency bands, detecting rising or falling action without reacting to each individual sound. For example, <code>syn_BassPresence</code> will be high when "there is a significant bass presence in the song right now."</p>
<ul>
<li><code>syn_Presence</code> <em>(whole spectrum)</em></li>
<li><code>syn_BassPresence</code></li>
<li><code>syn_MidPresence</code></li>
<li><code>syn_MidHighPresence</code></li>
<li><code>syn_HighPresence</code></li>
</ul>
<h3 id="beat">Beat</h3>
<p>These uniforms use beat detection to change a variety of variables on beat.</p>
<table>
<thead>
<tr>
<th>Uniform</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>syn_OnBeat</code></td>
<td>Returns <code>1.0</code> immediately when a beat is detected, then quickly falls back to zero.</td>
</tr>
<tr>
<td><code>syn_ToggleOnBeat</code></td>
<td>Returns <code>0.0</code> until a beat is detected, then stays at <code>1.0</code> until another beat is detected, then toggles back to <code>0.0</code>, etc. Smoothly transitions between values using a logistic curve.</td>
</tr>
<tr>
<td><code>syn_RandomOnBeat</code></td>
<td>Returns a new random float in the range <code>0.0</code> to <code>1.0</code> whenever a beat is detected. Smoothly transitions using a logistic curve.</td>
</tr>
<tr>
<td><code>syn_BeatTime</code></td>
<td>A clock that increments by <code>1.0</code> whenever a beat is detected.</td>
</tr>
</tbody>
</table>
<h3 id="bpm">BPM</h3>
<p>These uniforms are separate from the preceding beat detection uniforms and give different results, as they are based on a continuous analysis of the song's BPM. Good for detecting a groove and moving with it consistently.</p>
<table>
<thead>
<tr>
<th>Uniform</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>syn_BPM</code></td>
<td>The actual BPM, ranging from <code>50</code> to <code>220</code>.</td>
</tr>
<tr>
<td><code>syn_BPMConfidence</code></td>
<td>Estimates the stability of the BPM in the current song. If the song is very consistent, this will be close to <code>1.0</code>. If the BPM is shifting frequently, it will stay close to <code>0.0</code>.</td>
</tr>
<tr>
<td><code>syn_BPMTwitcher</code></td>
<td>A clock that increments every beat. In contrast to <code>syn_BeatTime</code>, it exponentially "jumps" in value to the next beat, allowing smoother action in the scene. To get <em>just</em> a clock like <code>syn_BeatTime</code>, use <code>floor(syn_BPMTwitcher)</code>. To get <em>just</em> the jittery action on each beat, use <code>fract(syn_BPMTwitcher)</code>.</td>
</tr>
<tr>
<td><code>syn_BPMSin</code></td>
<td>A sine wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to the current BPM and a phase that is usually synced to the beat.</td>
</tr>
<tr>
<td><code>syn_BPMSin2</code></td>
<td>A sine wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to <strong>HALF</strong> of the current BPM for slower action.</td>
</tr>
<tr>
<td><code>syn_BPMSin4</code></td>
<td>A sine wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to <strong>ONE QUARTER</strong> of the current BPM for slower action.</td>
</tr>
<tr>
<td><code>syn_BPMTri</code></td>
<td>A triangle wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to the current BPM and a phase that is usually synced to the beat.</td>
</tr>
<tr>
<td><code>syn_BPMTri2</code></td>
<td>A triangle wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to <strong>HALF</strong> of the current BPM for slower action.</td>
</tr>
<tr>
<td><code>syn_BPMTri4</code></td>
<td>A triangle wave that oscillates between <code>0.0</code> and <code>1.0</code>, with a frequency equal to <strong>ONE QUARTER</strong> of the current BPM for even slower action.</td>
</tr>
</tbody>
</table>
<h3 id="large-features">Large Features</h3>
<table>
<thead>
<tr>
<th>Uniform</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>syn_FadeInOut</code></td>
<td>Slowly rises to <code>1.0</code> as music starts, then slowly falls to <code>0.0</code> as the music ends. Great for fading in and out of a scene like a movie would.</td>
</tr>
<tr>
<td><code>syn_Intensity</code></td>
<td>Similar to <code>syn_FadeInOut</code>, but slowly accumulates to <code>1.0</code> depending on the intensity of the song.</td>
</tr>
</tbody>
</table></div>












                
              </article>
            </div>
          
          
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
        </div>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
  
    Made with
    <a href="link:squidfunk.github.io/mkdocs-material" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    
    
      
      <script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
    
    
      <script src="../assets/javascripts/bundle.92b07e13.min.js"></script>
      
    
  </body>
</html>