Thursday, December 8, 2022

On Wavetables - Some Rambling Notes on Wavetable/Waveform Synths and VSTs

2048 samples @ 44.1 kHz = 4.64E-02 seconds = 21.53320313 Hz
If you do the maths 2048 samples per slot is close to the number of samples you have for a cycle at midi not f1@44.1Khz (or so). So you can sample a synth from f1 (+/- some cents) and voila you can use that sample as a slot for your wavetable. Wrong?

Serum uses up to 256, 2048 sample single cycle waves in a .wav file

Serum uses 32-bit floating-point wav, with 2048-length tables.

Serum FM Wavetable Studio http://glowshrimpsoftware.com/sfmwts.html

WaveEdit uses 16-bit fixed-point wav, with 64 x 256-length waveforms per bank. WaveEdit allows powerful creation and editing of wavetables for the E352 and E370 VCOs. Using standard WAV formats, the editor includes a full toolbox of shortcuts. An audio Preview is available to audition the waves before loading into the module. ROM A, ROM B, ROM C in the 'banks' directory.

https://synthtech.com/waveedit/

SynthMaster and SynthMaster One are already capable of loading any wavetable saved in Serum .wav format

Deluge supports Wavetables in WAV or AIFF files, with cycle sizes of at least 8 samples, and the cycle size must be a “power of two”, with 2048 being by far the most common. The number of cycles is only limited by the Deluge’s RAM. The files must be mono.

“for Serum”, and the Deluge can read these. Such files are in the WAV format, and include a tag named “clm” indicating that the file is a wavetable, and the cycle size.

Ableton User Wavetable format. Wavetable reads the first few seconds (up to 256 wavetables) from the file. It's downmixed to mono.
Wavetable ensures that there are at least 2 wavetables so that the position slider has something to cycle through. If the file was created using Serum, it's downsampled to 1024 samples per wavetable. This is because Serum use 2048 samples per wavetable.

Pigment Up to 256 positions exist in each wavetable. Each position holds a waveform containing 2048 samples. You can also load in a regular WAV file and Pigments will parse it into a wavetable for you. The first 2,048 samples will be placed in position 1, the second 2,048 samples will be placed in position 2, and so on, until the maximum of 256 positions has been filled. Only the first 524,288 samples will be used (256 x 2,048 = 524,288). If you load a file shorter than 524,288 samples, Pigments will only divide it into as many
positions as is necessary to “use up” those samples. For example, a file containing only 16,384 samples would be divided into eight positions (8 X 2,048 = 16,384).

The current 'frame-size' for Drambo's WaveTable oscillator is 2048 and WaveEdits frames are 256

modwave supports wavetables with up to 64 2048-sample-length. You can import tables in Serum and WaveEdit formats - just load them directly into the modwave Editor/Librarian. If there are more than 64 tables, the modwave will assume that it's a generated crossfade and drop some of the intermediate tables to create a 64-table version. The modwave native storage format is 32-bit floating-point, 2048-length.

“230 million wavetable variations out of the box”. In fact, if my math is correct, that’s one new wavetable variation per second, every day, for roughly 7.29 years. Just sayin’.

A wavetable in Surge XT consists of up to 512 single-cycle waveforms (frames), each of which can consist of up to 4096 samples. Using the Morph parameter it is possible to sweep across the waveforms in the wavetable.

Illustration 70: Wavetable

The individual waves are equidistant in the table. When the shape setting is between two individual waves, they will be mixed to ensure smooth travel. You can’t edit the wavetable contents directly within Surge XT, but it is possible to generate custom wavetables with external software.

Surge XT can also import wavetables containing a clm block to indicate loop size (as used by Serum), a cue block (as used by various products including Native Instruments) and a smpl block. Wavetable files without loop information are loaded as one-shots.

This effectively lets you import various wavetables from other products such as Serum. All those 3rd party wavetables that have been tested in Surge XT have been reported to work flawlessly. To import custom wavetables, use the wavetable selection bar at the bottom of the oscillator display. This is where you can also download additional wavetable content.  Alternatively, you can simply drag-and-drop any compatible wavetable file anywhere over the Surge interface to load it.

You can even create your own wavetables for Surge using wt-tool or WaveEdit.

The individual waves are equidistant in the table. When the shape setting is between two individual waves, they will be mixed to ensure smooth travel. You can’t edit the wavetable contents directly within Surge XT, but it is possible to generate custom wavetables with external software.

Surge XT can also import wavetables containing a clm block to indicate loop size (as used by Serum), a cue block (as used by various products including Native Instruments) and a smpl block. Wavetable files without loop information are loaded as one-shots.

This effectively lets you import various wavetables from other products such as Serum. All those 3rd party wavetables that have been tested in Surge XT have been reported to work flawlessly. To import custom wavetables, use the wavetable selection bar at the bottom of the oscillator display. This is where you can also download additional wavetable content.  Alternatively, you can simply drag-and-drop any compatible wavetable file anywhere over the Surge interface to load it.

You can even create your own wavetables for Surge using wt-tool or WaveEdit.
The original Adventure Kid waveforms are 600 samples.

Vital by Matt Tytel.
Vital has a detailed Wavetable editor which can import FLAC, WAV, and export to WAV and resample a preset to a wavetable !!!
Vital has a native Wavetable format which seems to be JSON with binary encoded data. The default/factory 2048 samples + 256 wavetables.

Vital Basic ($0) 75 presets +25 wavetables
Vital Plus ($25) 250 presets ​+ 70 wavetables
Vital Pro ($80) 400+ presets + 150 wavetables ​

Tutorials

Helm
Dual oscillators (12 different waveforms, Sin, Saw, Square, Ramp, Rev Ramp, Course Medium Fine Quantised Sine, Course Medium Fine Quantised Saw) with cross modulation and up to 15 unison oscillators each. Sub oscillator with shuffle waveshaping
32 voice polyphony

Synapse Audio Dune2/3 Wavetables can have a varying amount of waveforms stored in them, between 3 to 64 waveforms in Dune 2 and 1 and 256 waveforms in Dune 3. 

The 1010 Music Nanobox Fireball manual says the wavetables should consist of 512 waveforms, with length 2048 each. I checked the Factory wavetables and see they have a number of samples that is consistent with 508 waveforms, rather than 512 (or waveforms of length 2032, but visually it seems like it's the former). So I created some wavetables in this format (at 48kHz/24 bit, like the factory tables)

The Waldorf Quantum and Waldorf Iridium have quite liberal limitations. Current Quantum and Iridium firmware has a maximum of 2,000 waveforms per wavetable:

4096 sample period x 217 waveforms
2048 sample period x 430 waveforms
1024 sample period x 846 waveforms
512 sample period x 1,645 waveforms
256 sample period x 2,000 waveforms
128 sample period x 2,000 waveforms
64 sample period x 2,000 waveforms

Wavetables must come in a single channel WAV file with 64 waves next to each other, each with 128 (or 256) samples. The Waldorf Blofeld has 38 slots (from 80 to 118) for custom Wavetables, and each can have a 14 character ASCII name. A simple tool for transforming wavetables from a WAV file into Waldorf's Blofeld SysEx midi format on Github.  https://github.com/clrnd/wave2blofeld

Description of PPG Wave waveforms and wavetables. It’s available here. each waveform consists of 64 samples, and there are 256 waveforms total, we can determine that the waveform table is 16KiB long.

UVI Falcon
On Mac: ~/Documents/UVI/Falcon/User Data/Wavetable
On PC: Documents\UVI\Falcon\User Data\Wavetable
Slices will also be imported if slices are arranged one after the other within an audio file, and the number of samples per slice is specified at the end of the file name following an underscore (e.g. “MySweep_128.wav”).

Uh-e Zebra 2
You cannot import wavetables but you can design your own waveforms with up to 16 waveforms to morph through per OSC

Access Virus TI2 has 64 forms if you count the Sine and Tri waves) Classic Oscillator Spectral Waves,

Korg DW8000 Waveforms. 16 Waveforms


The Yamaha TX81Z has eight waveforms.  A few seem to be in the PreenFM2 (such as, of course, Wave 1)  But it's not entirely clear which ones are fully replicated in the PreenFM2 by default. It might be interesting to add waveforms from the TX81z and varying feedback levels for each waveform. This took a very long time to get right. Considering the TX waveforms are 4096 samples and the PFM2 has a max 1024 samples they aren't 1:1 but sound basically the same.
TX81Z Waveforms and Harmonics

The Roland JD-800 employs Linear Arithmetic synthesis (introduced and made famous by the Roland D-50), which combines sample playback with digital synthesis. The JD-800 has 108 built-in waveforms, which can be expanded via PCM cards. Roland JD-800 3 MB of PCM ROM with 108 waveforms + 1 MB expansion, 4 waveforms (tones) per patch
SL-JD80-01 Drums & Percussion STANDARD
SL-JD80-02 Drums & Percussion DANCE
SL-JD80-03 Rock Drums
SL-JD80-04 Strings Ensemble
SL-JD80-05 Brass Section
SL-JD80-06 Grand Piano
SL-JD80-07 Guitar Collection
SL-JD80-08 Accordion

AudioTerm Tutorial
"The wavetables generated by the KTERM wavetable generator can be used with the following
products (other products may also work):
Terratec Komplexer (direct *.WT format support)
ImageLine Harmor (import *.WT file as image to Harmor)
Vemberaudio Surge (direct *.WT format support)
VAZ Modular /2010 (direct format support)
Wusik Wusikstation (use loop position modulation on a KTERM wavetable)
Camel Audio Alchemy (import KTERM wavetable as *.WAV)
Native Instruments Reaktor (use loop position modulation on a KTERM wavetable)
Waldorf Blofeld (direct *.SYX format support)
Ensoniq Eps16+ (direct *.EFE format support)
Ensoniq ASR series (direct *.EFE format support)
PPG WaveGenerator (direct *.wts format support)
Synapse Audio Dune2 (direct *.WT format support)
Xfer Serum (direct format support)"
AudioTerm by Mathias Gurk
Post by HighLordFixer » Fri Jan 26, 2018 2:24 pm

Other Wavetable Synths
  • Hardware (Wavetables)
    • Hydrasynth
  • Hardware (Waveforms)
    • TX81Z
    • Access Virus TI wavetables ?
  • Software
    • Spectrasonic Omnisphere
    • U-he Zebra 2
    • Native Instruments MassiveX
    • Camel Audio Alchemy
    • Sonic Academy Node (wavetable maker) + ANA2 (3 OSC + Noise 6 voice)
    • Steinberg Wavelab
    • UVI Falcon3
Wavetable Datasources










Tuesday, October 11, 2022

Garmin Battery Life Observation 2022

I did a fair bit of research into expected battery life for the current Garmin latest release watches as I was not sure which I should go for mainly because all the battery info is pretty confusing. But basically if you work out how much tine you spend as smart watch and how much activities at what level you can estimate your use case.

Forerunner® 935 Forerunner® 955 fÄ“nix® 7S – Sapphire Solar Edition fÄ“nix® 7 – Sapphire Solar Edition fÄ“nix® 7X – Sapphire Solar Edition epix™ (Gen 2)
Smart Watch 7.14% 6.67% 9.09% 5.56% 3.57% 6.25%
Smart Watch Solar 7.14% 4.55% 2.70%
GPS Only 8.33% 4.76% 5.41% 3.51% 2.25% 4.76%
All Sat 10.00% 7.69% 5.00% 3.17% 6.25%
All Sat Multi 23.53% 13.33% 8.70% 5.56% 10.00%
Rainforest (est) 7.36% 4.80% 3.07% 5.29%

Note: Smart watch are % per day as claimed by Garmin. GPS Activities% per hour as claimed by Garmin. Rainforest estimate activities are for maxed out  all sat multi real world activity observed in reviews.

To work out your use case, count the number of Smart Watch hours and activity hours and multiple it by the appropriate rate.  eg my fenix 7X SS and routine over 2 days is 46 hours Smart watch and 2 hours running. Average per day = (46/24 x 3.57 + 2 * 3.07)/2  = 6.49125% per day (100/6.49125 =15.4 days).

I have had some hassles with Fitbit batteries so I data log battery use. I have adapted that to monitor my Garmins. I data log every percent loss in smart watch mode and the battery level at the start and end of any activity in a spreadsheet. This allows me to monito day to day and activity battery use separately.

My observations thus far, the Garmin smart watch battery life is over estimated and real world activity performance is better than the claimed Garmin values. I am seeing a Smart watch of 4-5% per day and activity rate of about 3% per hour on my fenix 7X SS.

Monday, July 18, 2022

Synth Block Diagram Research and Design Patterns

 What started as a few random investigations seems to have given me quite some insight into synth design.

I would be interested to hear anyone's thoughts on and how you use block diagrams and any hybrid synths (soft or hard) that I have overlooked and should check out.

Sunday, December 5, 2021

Notion Block List

Just thought I would post what I am learning about Notion since it has become a viable free option with the removal of the 1000 block limit. 

I had a lot of hope for this as an alternative to Evernote but I think its fit is more of a challenge to the various CMS platforms out there. If I were, Atlassian. I would be nervous on many levels.

One thing I found difficult to find out is what are the available blocks. I am only new but I hope this list is correct.

  • Basic Blocks
    • Text - Just start writing with plain text
    • Page - Embed a sub-page inside this page
    • To-do List - Track tasks with a to-do list
    • Heading 1 - Big Section heading
    • Heading 2 - Medium section heading
    • Heading 3 - Small section heading
    • Table - Add a simple table to this page
    • Bulleted List - create a simple bulleted list
    • Numbered list - create a list with numbering
    • Toggle list - Toggles can hide and show content inside
    • Quote - Capture a quote
    • Divider - Visually divides blocks
    • Link to page - Link to an existing page
    • Callout - Make writing stand out
  • Inline Blocks
    • Mention a person - Ping someone so they get a notification
    • Mention a page - Mention a page and place in text
    • Date or reminder - Insert a date or reminder in text
    • Emoji - Search for an emoji to place in text
    • Inline equation - Insert mathematical symbols in text
  • Database Blocks
    • Table database - Inline - Add a table database to this page
    • Board database - Inline - Add a Board database to this page
    • Gallery database-Inline - Add a Gallery database to this page
    • List database Inline - Add a List database to this page
    • Timeline database Inline - Add a Timeline database to this page
    • Table database - Full Page - Add a table database as a sub-page
    • Board database - Full Page - Add a Board database as a sub-page
    • Gallery database-Full Page - Add a Gallery database as a sub-page
    • List database Full Page - Add a List database as a sub-page
    • Timeline database Full Page - Add a Timeline database as a sub-page
    • Create linked database - Add an existing database to this page
  • Media Blocks
    • Image - Upload or embed with a link
    • Web bookmark - Save a link as a visual bookmark
    • Video - Embed from YouTube, Vimeo...
    • Audio - embed from Soundcloud, Spotify...
    • Code - Capture a code snippet
    • File - Upload or embed with a link
  • Embed(s) Blocks
    • Embed -  For FDF's Google Map, and more.
    • Google Drive - Embed Google Doc, Google Sheet...
    • Tweet - Embed a Tweet
    • GitHub Gist - Embed a Gist from GitHub
    • Google Maps - Embed a Google Map
    • Figma - Embed a Figma file
    • Abstract - Embed an Abstract project
    • Invision - Embed an Invision project
    • Framer - Embed a Framer prototype
    • Whimsical - Embed a Whimsical board
    • Miro - Embed a Miro board
    • Sketch - Embed a Sketch document
    • Excalidraw - Embed an Excalidraw whiteboard
    • PDF - Embed a PDF
    • Loom - Embed a Loom recording
    • Typeform - Embed a Typeform
    • CodePen - Embed a CodePen
    • Replit - Embed a repl
  • Advanced Blocks
    • Table of contents - Show an outline of your page
    • Block equation - Display a standalone math equation
    • Template button - Duplicate blocks with a click
    • Breadcrumb - Show the current page location
    • Synced block - Sync content across pages
The screen grab of the blocks menu as of 6 Dec 2021.


Wednesday, April 14, 2021

KX Studio + Seq24, Seq64 and SAMBA Network Shares on Raspberry Pi

This all started with me trying to balance music books against the TV behind my setup. Being a somewhat skilled(?) engineer, I soon surmised this was not working and wouldn't it be nice if by some magic my music was on the TV .....

After iterating through a few more balancing acts (no iPads were harmed mostly) .... the penny dropped. Perhaps a Raspberry Pi connected to the TV would work .....

Requirements

  • Network sharing to my windows computer to view my music books.
  • Extended Goal  1 - can USB MIDI just work out of the box????
  • Extended Goal 2 - what it does ?!?! get me a sequencer!!
  • Extended Goal 3 - World domination

Installing CIFS/Samba support

ref: https://www.raspberrypi.org/documentation/remote-access/samba.md

By default, Raspberry Pi OS does not include CIFS/Samba support, but this can easily be added. The following commmands will install all the required components for using Samba as a server or a client.

sudo apt update
sudo apt install samba samba-common-bin smbclient cifs-utils

Mount the folder on the Raspberry Pi

Mounting in Linux is the process of attaching a folder to a location, so firstly we need that location.

mkdir windowshare

Now, we need to mount the remote folder to that location. The remote folder is the host name or IP address of the Windows PC, and the share name used when sharing it. We also need to provide the Windows username that will be used to access the remote machine.

sudo mount.cifs //<hostname or IP>/share /home/pi/windowshare -o user=<name>

You should now be able to view the content of the Windows share on your Raspberry Pi.

Remove CIFS Drives

ref: https://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount

sudo umount -a -t cifs -l

USB MIDI out of the Box & Sequencers for ARM/RPi

I have a Kronos 2011 and using Raspberry Pi OS Buster 10 (2021-03-04-raspios-buster-armhf-full.zip) just worked. Some more googling around brought up two easy sequencer options

Seq24 - abandoned(?) but working basic sequencer. Last release Seq24-0.8.7 (2006-8-13)
Sequencer64 - an updated version of Seq24. Current release 0.96.8 (2020-07-05).

Good news and bad news. Seq24 just installed and worked. Seq64 did not! I also installed QjackCtl.
Sudo apt-get install seq24 qjackctl
Some more googling around pointed to Sequencer 64 working with KX Studio repository installed.

What the %^&$ is KXStudio:Repository?

Never heard of it ... but its something to do with Linux Audio and seems to be an initiative that groups together some well-behaving Linux programs and plugins for audio and video creatives. 

You can follow the instructions on the project page for the up to date instructions but it is currently (as of 2021-04-15) something similar to this;

# Install required dependencies if needed

sudo apt-get install apt-transport-https gpgv

# Remove legacy repos

sudo dpkg --purge kxstudio-repos-gcc5

# Download package file

wget https://launchpad.net/~kxstudio-debian/+archive/kxstudio/+files/kxstudio-repos_10.0.3_all.deb

# Install it

sudo dpkg -i kxstudio-repos_10.0.3_all.deb

But wait ... there is more. Some more detailed instructions found here on what to do after installing KXStudio Repository.  

sudo apt-get update
Everyone do this one.
sudo apt-get install kxstudio-default-settings

You are actually done installing kxstudio specific stuff. All the tweaks and basic tools are now in place, it's just a matter of what programs/packages you want. You could install just the programs that you want to use singly, or use the following command to add hundreds of pieces of studio software to your computer. (Note if you're going to install single programs from here on out, skip down to the last command. Adding user to audio group is a MUST!)

sudo apt-get install kxstudio-meta-all

The above assumes the easiest way to get EVERYTHING studio related in one shot. 

If you want to pick and choose your packages, go for it! But for beginers it's nice to get it all and sort out what you like in your setup. I didn't install everything. I did some research to see the structure of these repositories and found an option to install Applications Only.

sudo apt-get install kxstudio-meta-audio-application

This left me will all these apps on my ARM Raspberry Pi  .... but still no Seq64!!!

One more command before a restart. You're going to add your user to the audio group, which will be very important to make things run the way you want them to. From the terminal enter:

sudo addgroup `whoami` audio

After the reboot you're done!

Now what about Sequencer64?

Now this was 100% wild guess ... after reboot & the repository install ... perhaps this would work.

sudo apt-get install sequencer64

It did! Now I can get back to procrastinating & generally avoiding improving my musical talent.

Thursday, December 24, 2020

Dice Storage & Transport Design incl TTRPG play, dice towers, trays, etc.

Inspired by r/DicePorn/ and dice storage on Esty. I thought I would run a design experiment on what would make the best portable dice and TTRPG storage folio with an integrated dice tower.

My initial interest was perked and the array of options astounding. I focused on a design but at the price I question would it really do everything I wanted. Ans there were some niggling questions. So it lead down this path.

  • I compared it to what I currently have for dice storage which are two Sistema 1.7L plastic containers. The box I was interested in was smaller than these ....
    So I wondered if I could make a bigger version, say the same size to fit with my existing containers.
  • I started to layout the design in 2d to get a feel for a layout
  • I next extruded my 2d design to 3d so I could generate some reference dimensions to check against my lego prototype.

  • When I was happy with the layout. I build a Lego prototype to test my dice mechanism and storage potential. The original design looked a bit narrow at about 25mm clearance in the storage and dice shoot, so I wanted to %test how 40mm would go.


  • Building a prototype was a really good exploration. especially testing but the 40mm and 25mm slots. It does not sound like much difference but significant differences in usability were found.
    • 40mm is easier to load in a handful of dice.
    • 25mm is a more compact feel, more secure dice storage and works okay for feeding in one dice at a time rather than a handful.
    • leaving a side of my dice tray allows a drive tower to feed into the tray.


    40mm Wide test
    25mm Wide Test
     
  • I also did a quick study of how many dice can fit in a 100mm equilateral triangle, 25mm high. Two sets apparently, almost in one layer but definitely within 25mm. All of my storage slots are bigger then this 100mm triangle.


  • Then I saw a folio and wondered if I could fit a character sheet In somewhere. The only option really is somethign around A5 size sitting on top of the storage with some clearance or recessed into the lid. Any clearance would have to not allow dice to fall in from the dice shoot.
This left me in a bit of a quandary as I like the idea of having a complete all in one box of tricks.  This meant I needed to dive into the design a bit more. My next three steps;
  • Think about design patters and what makes a good all in one RPG box of tricks.
  • Document where I have gotten to in my thinking
  • Seek input to consider things I have overlooked,
Don't forget to scroll down and see the features I think are important in considering a Box of Tricks.

Design Patterns
A quick visual summary and some initial thoughts I had on the various tropes.


    Pattern
    Thoughts
    Image
    Simple Tray There is something to be said for the utility of a simple nested box.
    Pen Case I like the minimalist nature of this ... it might be channelling some old school pencil case memorties.
    Slotted Tray Pencil case on steroids.
    Dice Box For the totally organised
    Dice Case The minimalist solution again.
    Modular The organised minimalist?
    Rolled Folio Olde world charm but nos sure if overly useful. Might work well with a dice towner in a  backpack.
    Folio Screen Screen with built-in dice towers
    Dice Tower Portable. Folding design. Some storage.
    Storage & Dice Tower Removable multipurpose tray. Built-in dice tower.
    Hex Slotted Individual compartments.
    Octogon with Dice Tray Interal perimeter slot for dice storage surrounding a central tray area. About 9x9"outside. 1x1/2"slot around 6x6x1" tray. 100+ dice Storage. Note only 33 around the outer slot.

So what are the design features I like?

  • Explicit design features
    • dice storage with integrated dice tower.
      • single layer. single dice pockets, single dice set row
      • dice capture/containment, tray?
    • Other item storage. Pens, eraser, mobile phone stand, etc
    • storage for papers.
      • character sheets
      • note pad
      • writing surface>
    • Other Features
      • trackers, hitpoints, initiative.
      • Whiteboard areas
      • Miniatures
      • Status indicators
    • Materials
      • Solid wood
      • Laminates
      • Plastic
      • Metal?
      • Other features
        • Rare earth magnets
        • decorative hardware, latches, hinges, etc
        • felt, cloth, foam
  • Implicit design features
    • Lightweight
    • Does it protect dice from damage?
    • robust, wear resistant ?
    • Modular 
      • remove the bits your don't need.
      • customise the layout of compartments.
    • Small enough as to not impact other players
    • Noise ... pleasant or annoying?
    • Feel of materials. Plesant or cheap.
    • Sustainability
      • Economical use of sustainable materials
      • Ethical labour
      • Local sourced, slow transport
      • Ethically run free-trade business