Giter Club home page Giter Club logo

potatochips's Introduction

Potato Chips

Travis CI Build Status Latest Release VCV Library

These retro sound generators are so good, I eat 'em like they're potato chips. They're just so addicting!

Blocks Logo

Blocks is a port of the digital oscillator code from the Mutable Instruments Edges Module. Blocks contains four identical channels, each with a sine, triangle, quantized triangle, sample and hold, short LFSR, and long LFSR oscillator.

Blocks

Features

  • Quad wave generator: Quad 16-bit wave generators with six different shapes
  • Quantized triangle wave generator: Generate NES style triangle wave with 16 steps of quantization
  • Noise generator: generate pseudo-random numbers using sample and hold and short and long LFSRs

See the Manual for more information about the features of this module.

InfiniteStairs Logo

InfiniteStairs is an emulation of the Ricoh 2A03 audio processing unit from the Nintendo Entertainment System (NES). The 2A03 chip contains two pulse wave generators, a quantized triangle wave generator, and a noise generator. The original chip featured a DMC loader for playing samples that has been omitted in this emulation.

InfiniteStairs

Features

  • Dual pulse wave generator: Dual 8-bit pulse waves with four duty cycles: 12.5%, 25%, 50%, and 75%
  • Quantized triangle wave generator: Generate NES style triangle wave with 16 steps of quantization
  • Noise generator: generate pseudo-random numbers at 16 different frequencies
  • Linear Feedback Shift Register (LFSR): old-school 8-bit randomness!

See the Manual for more information about the features of this module.

Pulses Logo

Pulses is an emulation of the Sunsoft FME7 audio processing unit from the Nintendo Entertainment System (NES). The FME7 chip contains three pulse wave generators, a noise generator, and an envelope generator. Only the pulse wave generators are implemented currently.

Pulses

Features

  • Triple pulse wave generator: Triple 12-bit pulse waves with duty cycle of 50%
  • Amplitude modulation: Manual and CV control over the individual voice levels

See the Manual for more information about the features of this module.

StepSaw Logo

StepSaw is an emulation of the Konami VRC6 audio processing unit from the Nintendo Entertainment System (NES). The VRC6 chip contains two pulse wave generators, and a quantized saw wave generator.

StepSaw

Features

  • Dual pulse wave generator: Dual 8-bit pulse waves with eight duty cycles: 6.25%, 12.5%, 18.75%, 25%, 31.25%, 37.5%, 43.75%, and 50%
  • Quantized saw wave generator: Generate NES style saw wave with variable quantization including the overflow bug in the VRC6
  • Amplitude modulation: Manual and CV control over the individual voice levels

See the Manual for more information about the features of this module.

Jairasullator Logo

Jairasullator is an emulation of the General Instrument AY-3-8910 audio processing unit. The AY-3-8910 features three pulse waveform generators and a noise generator that is shared between the channels.

Jairasullator

Features

  • Triple pulse wave generator: Triple 12-bit pulse waves with duty cycle of 50%
  • Amplitude modulation: Manual and CV control over the individual voice levels
  • White noise: Generate noise using the frequency knob for channel 3
  • Tone/Noise control: CV and switch to control tone and noise for each channel

See the Manual for more information about the features of this module.

Pot Keys Logo

Pot Keys is an emulation of the Atari POKEY audio processing unit. The POKEY produces four pulse waveforms, but contains a variety of bonus controls, including extended frequency ranges, high-pass filters, and noise generators / distortion effects.

Pot Keys

Features

  • Quad pulse wave generator: Four pulse waves with 8-bit frequency value and 50% pulse width
  • Low-frequency mode: Change base clock of the chip from 64 KHz to 15 KHz
  • High-frequency mode: Change base clock of channels 1 and 3 from 64 KHz to 1.79 MHz
  • High-pass filter: High-pass filter channel 1 using channel 3 as a clock or high-pass channel 2 using channel 4 as a clock
  • Linear Feedback Shift Register (LFSR): old-school 8-bit randomness!
  • Noise/Distortion generator: generate per-channel pseudo-random numbers at 15 different frequencies as a distortion source
  • Amplitude modulation: 4-bit amplifier with linear amplitude modulation

See the Manual for more information about the features of this module.

Mega Tone Logo

Mega Tone is an emulation of the Texas Instruments SN76489 audio processing unit from the Sega Master System, Sega Mega Drive, and Sega Genesis. The SN76489 chip contains three pulse waveform generators and an LFSR-based noise generator that selects between pitched white-noise and static periodic noise.

Mega Tone

Features

  • Triple Pulse Waveform Generator Three 8-bit pulse waves with 50% duty cycle and 10-bit frequency parameter
  • Noise Generator Generate either pitched white-noise based on the frequency of oscillator three, or static periodic noise at one of three shift frequencies: N / 2048, N / 1024, N / 512 where N is the reference clock rate (which is something like 3579545Hz).
  • 4-bit Amplifier A 4-bit amplifier controls the output level of each oscillator with mixer sliders and CV inputs
  • Channel Mixer: Mix the voices together internally with hard clipping and aliasing.

See the Manual for more information about the features of this module.

Boss Fight Logo

Boss Fight is an emulation and re-envisioning of the Yamaha Yamaha YM2612 audio processing unit from the Sega Mega Drive & Sega Genesis. Boss Fight provides the key functionality of the 3rd channel of Yamaha YM2612, in addition to some hacks, omissions, and re-envisioned features, namely,

Boss Fight

Features

  • 16-bit Audio It's 8 bits better than the previous generation of chips! This is marketing! We're actually lying though -- the YM2612 produced a 14-bit PCM stream, and so does BossFight. You're not getting those 2 bits back; go cry about it.
  • 4-Operator FM Synthesis Full panel and CV control over the parameters for each of the four operators including envelopes, multipliers, rate scalings, tunings, gates, and LFO modulations.
  • 8 FM Algorithms 8 different arrangements of the four operators following the original chip implementation.
  • Operator 1 Feedback Feedback into operator one for interesting timbres or total wave destruction.
  • Individual Operator Frequencies Control the frequency of each operator to produce weird, harsh, and trashed noises.
  • Looping Envelopes Transform the one-shot envelope generators of individual operators into looping AD envelopes.
  • Aliasing Control The YM2612 hard clips the output signal when it gets too loud. This is both a musically useful effect for introducing high-order harmonics, as well as aliasing. Nyquist lied to you, aliasing is your friend. However, if you are not a fan of clipping and aliasing, aliasing control allows you to attenuate the output signal from the chip before it passes through the hard clipper to prevent fully saturating the 14-bit PCM stream.
  • VU Meter A VU meter tracks how hot the signal from BossFight is getting and makes it easy to visualize how much clipping is occurring.
  • Low-Frequency Oscillator A shared low-frequency sine oscillator controls amplitude modulation and frequency modulation of each operator.
  • Mono Output The original YM2612 was stereo, but only because it had six channels of synthesis. Boss Fight is a monophonic voice so there is no built-in stereo processing.
  • Semi-Modular Normalization Inputs are normalled forward across the operators to reduce the amount of patch cables for setting up simple patches quickly.

See the Manual for more information about the features of this module.

Mini Boss Logo

Mini Boss is an emulation and re-envisioning of the Yamaha Yamaha YM2612 audio processing unit from the Sega Mega Drive & Sega Genesis. Mini Boss provides the key functionality of a single operator from Yamaha YM2612, in addition to some hacks, omissions, and re-envisioned features, namely,

Mini Boss

Features

  • 16-bit Audio: It's 8 bits better than the previous generation of chips! This is marketing! We're actually lying though -- the YM2612 produced a 14-bit stream, and so does BossFight. You're not getting those 2 bits back; go cry about it.
  • Single Operator FM Synthesis: Full control over the parameters including envelopes, multipliers, rate scalings, tunings, gates, and internal LFO modulation.
  • Feedback: Feedback into the operator one for interesting timbres or total wave destruction and noise.
  • Looping Envelopes: Transform the one-shot envelope generator into a looping AD envelope.
  • Low-Frequency Oscillator: A shared low-frequency sine oscillator controls amplitude modulation and frequency modulation of each operator.
  • Mono Output: The original YM2612 was stereo, but only because it had six channels of synthesis. Mini Boss is a monophonic voice so there is no built-in stereo processing.

See the Manual for more information about the features of this module.

Name Corp Octal Wave Generator Logo

Name Corp Octal Wave Generator is an emulation of the Namco 163 audio processing unit from the Nintendo Entertainment System (NES). The Namco 163 chip contains eight channels of wave-table synthesis and 128 bytes of operational RAM. The wave-tables are 4-bit and can be as long as 63 samples. This module uses a bank of five 32-sample wave-tables to act as the waveform for all eight channels.

Name Corp Octal Wave Generator

Features

  • Wave-table synthesis: 8 channels of wave-table synthesis with bit depth of 4 bits and table size of 32 samples
  • Waveform morph: 5 banks of wave-tables to morph between using 32-bit floating point linear interpolation (not very retro, but it sounds nice)
  • Frequency control: 18-bit frequency control with linear frequency modulation
  • Amplitude modulation: 4-bit amplifier with linear amplitude modulation
  • Namco 163 compute limitation: activating each additional channel (up to 8) reduces the amount of compute available for all channels. This causes all channels to drop in frequency when additional channels are activated.

See the Manual for more information about the features of this module.

Pallet Town Waves System Logo

Pallet Town Waves System is an emulation of the Nintendo GameBoy Sound System (GBS) audio processing unit. The GBS is similar to the Ricoh 2A03, but replaces the triangle waveform generator with a wave-table synthesizer.

Pallet Town Waves System

Features

  • Dual pulse wave generator: Dual 8-bit pulse waves with four duty cycles: 12.5%, 25%, 50%, and 75%
  • Wave-table synthesis channel: wave-table synthesis with bit depth of 4 bits and table size of 32 samples. 5 pages of wave-tables can be interpolated between using CV
  • Noise generator: generate pseudo-random numbers at 7 different frequencies
  • Linear Feedback Shift Register (LFSR): old-school 8-bit randomness!

See the Manual for more information about the features of this module.

Super ADSR Logo

Super ADSR is an emulation of the ADSR from the Sony S-SMP audio processing unit in the Super Nintendo Entertainment System (SNES). The envelope generator has three stages, (1) an attack stage that ramps up linearly to the total level, (2) a decay stage that ramps down exponentially to a sustain level, and (3) a sustain/release stage that ramps down exponentially from the sustain level to zero.

Super ADSR provides the key features of the ADSR envelope generator of the S-SMP chip, namely,

  • Stereo Processing: Two envelope generators on one module for stereo modulation, cross modulation, or both!
  • Total Level Control: Control over the overall level of the envelope generator, including inversion for ducking effects.
  • Stage Length Control: Control over stage timings using sliders and control voltages.

Super ADSR

Features

See the Manual for more information about the features of this module.

Super VCA Logo

Super VCA is an emulation of the BRR filter & Gaussian interpolation filter from the Sony S-SMP audio processing unit in the Super Nintendo Entertainment System (SNES). The four BRR filter modes were applied to BRR sample blocks on the SNES and the Gaussian interpolation filter was applied to output audio and removed high-frequency content from the signal.

Super VCA provides the key features of the BRR filter and Gaussian filter of the S-SMP chip, namely,

  • Stereo Processing: Dual processing channels for stereo effects or other create multi-tracking applications.
  • 4 BRR Filter Modes: 4 filter modes from the BRR sample playback engine that act as low-pass filters.
  • Gaussian Interpolation Filter: A filter that removes high-frequency content and adds subtle distortion. This filter provides the muffling character that fans of SNES audio will find familiar.

Super VCA

Features

See the Manual for more information about the features of this module.

Super Echo Logo

Super Echo is a Eurorack module that emulates the echo effect from the S-SMP sound chip on the Super Nintendo Entertainment System (SNES).The Echo effect of the S-SMP chip has 15 different delay levels of 16ms each, a 64KB echo buffer, an 8-tap FIR filter for shaping the sound of the echo, parameterized feedback, and parameterized dry / wet mix level. The echo buffer is stereo, although the echo parameters and coefficients of the FIR filter are the same for both channels.

Super Echo provides the key features of the echo module of the S-SMP chip, namely,

  • Stereo Processing: Echo buffer for two independent inputs in stereo configuration. The parameters are the same for both inputs, but the inputs have their own dedicated echo buffers.
  • Expanded Delay: The 15 levels of delay has been upgraded to 31 levels that each add an additional 16ms of delay (up to roughly 500ms). 31 levels of delay is able to fit in the RAM of the original S-SMP, but the instruction set does not normally support the addressing of 31 levels.
  • Feedback: Additive and subtractive feedback following the original implementation
  • Surround Effect: Stereo mixer with the ability to invert the phase of either channel resulting in odd Haas effects.
  • 8-tap FIR Filter: Fully parameterized 8-tap FIR filter for shaping the sound of the echo. The filter can be parameterized as low-pass, high-pass, band-pass, band-stop, etc. and includes presets with filter parameters from popular SNES games.

Super Echo

Features

See the Manual for more information about the features of this module.

potatochips's People

Contributors

anlexmatos avatar kautenja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

potatochips's Issues

[BossFight,MiniBoss] Add Nuked-OPN2 Yamaha YM3438 Emulation Engine

Right now, the 2612 emulation in the Boss Fight and Mini Boss modules miss out on some subtle sound quirks like the ladder effect in the original 2612. Nuked-OPN2 is a highly accurate emulation core that accurately models such quirks. I'm not sure if its possible to integrate it into this codebase, but if possible, that would be really cool.

[2612] Performance is trash

Pretty self explanatory. The performance from 2612 at the moment is absolute garbage. Compared to the TercerBrazo module, it's clocking in at 25.0% (5.6us) vs 1.1% (0.23us). It's playable, but consumes a lot of valuable space that other modules will need. This needs to be addressed.

VCA Module

Many of these chips contain simple 4 or 5 bit amplifiers modeled directly from hardware. It may be cool to build an amplifiers module that integrates all the amplifiers models into a single amplifier for use with other oscillators.

Sony S-SMP (SNES)

Several modules can be made from the S-SMP emulations for different uses:

  • S-SMP(Echo): echo effect + FIR filter
  • S-SMP(ADSR): ADSR Envelope generator
  • S-SMP(Gauss): Guassian filter + low-pass gate
  • S-SMP(Sampler/WTO): A 32KHz, BRR-based sampler engine & wavetable oscillator based on looped single-cycle BRR waveforms
  • S-SMP(BRR): distortion effect (downsampler / bitcrusher) based on BRR encoding / decoding (w/ filtering)
  • S-SMP the full S-SMP chip as a semi-modular synthesizer with BRR sample/WTO engine, envelope /w gain, gaussian filter, echo, FIR filter, etc., for more authentic emulation than the individual modules will provide

Links:

YM2612 Triggers fail sometimes in SSG mode

Describe the bug

Sometimes the triggers to YM2612-based modules in SSG mode fail.

To Reproduce

Steps to reproduce the behavior:

  1. put MinIBoss into a polyphonic mode with a MIDI controller using 4+ channels
  2. place the envelope generator into SSG with a fast cycle
  3. turn on "prevent clicks" from the context menu (behavior happens in both modes)
  4. press buttons on a MIDI controller to trigger notes until a trigger failure occurs

Expected behavior

Retriggering in SSG mode should always behave like an LFO with hard reset. Sometimes this fails and a one-shot note leaks through using the envelope generator settings.

Additional context

Patch file

{
  "version": "1.dev.476a49b",
  "modules": [
    {
      "id": 1,
      "plugin": "Core",
      "version": "1.1.6",
      "model": "AudioInterface",
      "params": [],
      "leftModuleId": 154,
      "data": {
        "audio": {
          "driver": 1,
          "deviceName": "default",
          "offset": 0,
          "maxChannels": 8,
          "sampleRate": 44100,
          "blockSize": 512
        }
      },
      "pos": [
        57,
        0
      ]
    },
    {
      "id": 2,
      "plugin": "Fundamental",
      "version": "1.4.0",
      "model": "VCMixer",
      "params": [
        {
          "id": 0,
          "value": 1.0
        },
        {
          "id": 1,
          "value": 1.0
        },
        {
          "id": 2,
          "value": 1.0
        },
        {
          "id": 3,
          "value": 1.0
        },
        {
          "id": 4,
          "value": 1.0
        }
      ],
      "leftModuleId": 142,
      "rightModuleId": 150,
      "pos": [
        24,
        0
      ]
    },
    {
      "id": 5,
      "plugin": "Core",
      "version": "1.1.6",
      "model": "MIDIToCVInterface",
      "params": [],
      "rightModuleId": 142,
      "data": {
        "channels": 4,
        "polyMode": 0,
        "clockDivision": 24,
        "lastPitch": 8192,
        "lastMod": 0,
        "midi": {
          "driver": -11,
          "deviceName": "QWERTY keyboard (US)",
          "channel": -1
        }
      },
      "pos": [
        0,
        0
      ]
    },
    {
      "id": 142,
      "plugin": "KautenjaDSP-PotatoChips",
      "version": "1.10.1",
      "model": "MiniBoss",
      "params": [
        {
          "id": 0,
          "value": 15.0
        },
        {
          "id": 1,
          "value": 100.0
        },
        {
          "id": 2,
          "value": 31.0
        },
        {
          "id": 3,
          "value": 5.0
        },
        {
          "id": 4,
          "value": 7.0
        },
        {
          "id": 5,
          "value": 0.0
        },
        {
          "id": 6,
          "value": 1.0
        },
        {
          "id": 7,
          "value": 0.0
        },
        {
          "id": 8,
          "value": -1.18500173
        },
        {
          "id": 9,
          "value": 0.0
        },
        {
          "id": 10,
          "value": 0.0
        },
        {
          "id": 11,
          "value": 0.0
        },
        {
          "id": 12,
          "value": 0.0
        },
        {
          "id": 13,
          "value": 1.0
        },
        {
          "id": 14,
          "value": 3.0
        },
        {
          "id": 15,
          "value": 127.0
        }
      ],
      "leftModuleId": 5,
      "rightModuleId": 2,
      "data": {
        "prevent_clicks": true
      },
      "pos": [
        8,
        0
      ]
    },
    {
      "id": 150,
      "plugin": "Bogaudio",
      "version": "1.1.35",
      "model": "Bogaudio-VU",
      "params": [],
      "leftModuleId": 2,
      "rightModuleId": 154,
      "data": {},
      "pos": [
        34,
        0
      ]
    },
    {
      "id": 154,
      "plugin": "Bogaudio",
      "version": "1.1.35",
      "model": "Bogaudio-Analyzer",
      "params": [
        {
          "id": 0,
          "value": 0.0
        },
        {
          "id": 1,
          "value": 0.385500133
        },
        {
          "id": 2,
          "value": 1.0
        },
        {
          "id": 3,
          "value": 0.0
        },
        {
          "id": 4,
          "value": 1.0
        },
        {
          "id": 5,
          "value": 0.0
        }
      ],
      "leftModuleId": 150,
      "rightModuleId": 1,
      "data": {
        "frequency_plot": "log",
        "amplitude_plot": "decibels_140"
      },
      "pos": [
        37,
        0
      ]
    },
    {
      "id": 156,
      "plugin": "KautenjaDSP",
      "version": "1.0.0",
      "model": "Oscilloscope",
      "params": [
        {
          "id": 0,
          "value": 0.0
        },
        {
          "id": 1,
          "value": 0.0
        },
        {
          "id": 2,
          "value": 0.0
        },
        {
          "id": 3,
          "value": 0.0
        },
        {
          "id": 4,
          "value": 14.0
        },
        {
          "id": 5,
          "value": 0.0
        },
        {
          "id": 6,
          "value": 0.0
        },
        {
          "id": 7,
          "value": 0.0
        }
      ],
      "data": {
        "lissajous": 0,
        "external": 0
      },
      "pos": [
        0,
        1
      ]
    }
  ],
  "cables": [
    {
      "id": 1408,
      "outputModuleId": 2,
      "outputId": 1,
      "inputModuleId": 1,
      "inputId": 0,
      "color": "#0986ad"
    },
    {
      "id": 1317,
      "outputModuleId": 2,
      "outputId": 1,
      "inputModuleId": 150,
      "inputId": 0,
      "color": "#0986ad"
    },
    {
      "id": 1316,
      "outputModuleId": 150,
      "outputId": 0,
      "inputModuleId": 154,
      "inputId": 0,
      "color": "#0986ad"
    },
    {
      "id": 1428,
      "outputModuleId": 2,
      "outputId": 1,
      "inputModuleId": 1,
      "inputId": 1,
      "color": "#0986ad"
    },
    {
      "id": 1429,
      "outputModuleId": 5,
      "outputId": 1,
      "inputModuleId": 142,
      "inputId": 6,
      "color": "#c9b70e"
    },
    {
      "id": 1430,
      "outputModuleId": 5,
      "outputId": 6,
      "inputModuleId": 142,
      "inputId": 7,
      "color": "#c9b70e"
    },
    {
      "id": 1431,
      "outputModuleId": 5,
      "outputId": 0,
      "inputModuleId": 142,
      "inputId": 8,
      "color": "#c9b70e"
    },
    {
      "id": 1432,
      "outputModuleId": 142,
      "outputId": 0,
      "inputModuleId": 2,
      "inputId": 1,
      "color": "#0986ad"
    },
    {
      "id": 1434,
      "outputModuleId": 2,
      "outputId": 2,
      "inputModuleId": 154,
      "inputId": 1,
      "color": "#c91847"
    },
    {
      "id": 1320,
      "outputModuleId": 154,
      "outputId": 0,
      "inputModuleId": 156,
      "inputId": 0,
      "color": "#0986ad"
    },
    {
      "id": 1470,
      "outputModuleId": 142,
      "outputId": 0,
      "inputModuleId": 142,
      "inputId": 9,
      "color": "#0986ad"
    }
  ]
}

[GBS] LFSR input breaks noise generator

Describe the bug

spamming the LFSR trigger input causes the noise generator to 0 out and stop working after a point.

To Reproduce

Steps to reproduce the behavior:

  1. spam LFSR trigger input
  2. observe noise generator break at some point

Expected behavior

noise generator should always produce noise (up to the amplifier at least)

[106,GBS] Right Click to insert Basic Waveforms

An ability to right-click the waveform editor and insert basic waveforms would be nice:

  • ramp up/down (maybe with various slopes, log, exp, lin)
  • triangle (maybe with various heights)
  • pulse (maybe with various PWMs)
  • sine / cose

[FME7] Noise

The FME7 has a noise generator like the AY-3-8910 that is not currently implemented in the module.

[2612] Envelope Viewer

A way to visualize the envelope for each operator like is done by ChipsynthMD would be cool.

Yamaha YM2413

A module that provides access to the Yamaha YM2413 emulator would be awesome.

Amiga Paula Module

The Paula is the sound chip on the Amiga personal computer that produces audio from a 512KB bank of sample data. An existing project, WinUAE, emulates the Amiga PC in C++, and may have portions of DSP code that can be ported over into a VCV module, either as a sound generator (sample player), or complex audio effect (downsampling, quantization, and other eccentricities due to hardware or software bugs in the chip).

undefined symbol _ZN15WaveTableEditorIhE11ColorBorderE on armv7l

Describe the bug

i'm maintaining armv7l (32bit) and aarch64 (64bit) builds of vcvrack and the open source plugins at https://github.com/hexdump0815/vcvrack-dockerbuild-v1 - when i build the PotatoChips plugin it compiles fine on armv7l but when i start rack i get "undefined symbol _ZN15WaveTableEditorIaE11ColorBorderE" and the plugin will not load - the same build works fine on aarch64 and x86-64 ... i guess this is a armv7l specific problem and not really a problem of your plugin, but maybe you have an idea where it might come from ... could it be a 32 vs 64 bit issue maybe? any help would be welcome as i'm not that familiar with the c++ details

To Reproduce

build and run the latest version of your plugin on armv7l

Expected behavior

it works

Screenshots

not needed

Environment

  • ubuntu 18.04 on armv7l with gcc/g++ 8.4.0

Additional context

already given in the initial description

Konami SCC

A module that provides access to the Konami SCC emulator would be cool.

Vectorized Engines for Improved Polyphonic Performance

Is your feature request related to a problem? Please describe.

Current serial processing of engines for polyphonic cases causes over-usage of computational resources.

Describe the solution you'd like

In some cases, replacing serial loops over polyphonic channels with vectorized code can improve the performance for polyphonic use cases.

Additional context

VCV specific solutions can be implemented using rack::simd. More generic implementations can be forged using a linear algebra and vectorization framework like Eigen.

Yamaha YM2151

It would be cool to add module that emulates OPM chip (which was in Yamaha CX5M/II MSX computer, Sharp X68000, Sega System 16 and some others). It is a 4-operator FM chip, similar to YM2612 (OPN2), but more 'primitive' in a way, more raw sounding. It can produce some very interesting vintage digital synth sounds (here is example video). There are some excellent open source libraries (NukedOPM, an implementation from MAME), which can be used to implement module. YM2151 parameters are mostly the same as in Boss Fight module, so not much to change :)

Invalid tag in `plugin.json`

[KautenjaDSP-PotatoChips] Validating plugin.json...FAILED
[KautenjaDSP-PotatoChips] Issues found in `plugin.json`:

S_SMP: invalid module tags: Echo
-- Valid tags are defined in https://raw.githubusercontent.com/VCVRack/Rack/v1/src/tag.cpp

Normalled Inputs

Normalled inputs โ€“ e.g., for VOCT, Volume, etc. โ€“ can help reduce the number of patch cables needed

  • 106
  • 2A03
  • AY-3-8910
  • FME7
  • GBS
  • POKEY
  • SCC
  • SN76489
  • TurboGrafx16
  • VRC6

[2612/2413] Single-operator module with audio input for arbitrary FM

Is your feature request related to a problem? Please describe.

I'd love to use Algomorph in conjunction with the operators of a 2612 (or 2413), but their individual FM (phase) inputs and audio outputs are inaccessible.

Describe the solution you'd like

It would be really neat to have a module something like the Bogaudio FM-OP, but containing an oscillator of one of these classic Yamaha FM chips. My thinking is that maybe the module could work by emulating two 2612/2413 operators, with the phase of one of them (the modulator) hijacked to be driven by external audio input rather than the chip's internal sine table. Ideally the other (carrier) operator would also have access to feedback. Like FM-OP, this theoretical module could also contain a built-in emulated 2612/2413 amplitude envelope.

I don't have any experience coding anything DSP or emulation related (besides noodling with the RAM in RackNES and the audio routing & cross-fading in Algomorph), so while I've taken a brief look into the 2612 code in this repository I'm not sure how feasible this module would actually be. What do you think?

Oscillator Hard Sync

Some of the chips may support reseting the phase of an oscillator. Can this be used to introduce a sync function?

  • Mega Tone (previously SN76489)
    • feature not available
  • Boss Fight (previously 2612)
    • feature not available
  • Jairasullator (previously Ay-3-8910)
    • feature not available
  • Troglocillator (previously POKEY)
    • feature not available
  • Escillator (previously VRC6)
    • feature not available
  • Gleeokillator (previously FME7)
    • feature not available
  • Buzzy Beetle (previously 2A03)
  • Name Corp Octal Wave Generator (previously 106)
  • Pallet Town Waves System (previously GBS)
  • S-SMP(BRR)

[2612] Special Mode

There is a special mode where channel 3 allows individual frequencies for each operator that is not currently implemented on the panel. The logic does exist in the engine, but the class will need updated to allow addressing the extra frequency registers.

Appropriate Error Handling

In many cases, debug assertions can be replace with exceptions in runtime code with no cost (assuming they never throw). In particular, errors can be thrown when:

  • attempting to set an output buffer for a nonexistent oscillator (i.e., index out of bounds error)
  • attempting to write data to a nonexistent register / RAM address (i.e., index of out bounds error)
  • time underflow (time should never underflow in bug-free code)

This isn't useful for VCV Rack, but is useful when using the dsp code as a library in other projects. It's also more readable and clear.

[2612] Frequency Knob

a knob for controlling the base frequency in addition to the VOCT input for each of the 6 voices could be useful

Control over low-pass equalization

all the oscillator modules in this plugin utilize a low-pass equalization algorithm. A simple way to achieve parameterization over this component is to implement a basic EQ as an expander module. This module would contain the parameters of the blip_eq_t object with CV inputs.

Pitch 2600

The Atari 2600 had only 2 voices, making it difficult to play chords. A solution that is popular is to use a fast appegio to produce a chord-like effect.

Since there are only two voices on the Atari, it's difficult to play chords. But you can use fast arpeggios to give the effect of playing chords on only one voice. You just step through each note of the chord quickly which gives the essence of the chord. Typically I do a note per step in my music driver. I have tried running arpeggios at a note per frame (60 per second) but it sounds bad when it gets that fast. You introduce 60Hz noise at that speed.

A module that provides this functionality (with some bonus stuff) would be useful for distorting and lightly mangling VOCT signals.

[Expander] Mixer Output

all the oscillator modules in this plugin feature several output ports. A simple way to achieve a mix-out (for treating the chip like a single voice) is to implement a basic mixer as an expander module. This module would contain a single output port that sums the outputs from the neighboring chip module.

Reset

All the chips feature a "reset" function.

  • should this be fired when a module is being reset, or is it sufficient to just reset all parameters?
  • is it useful to have button or CV control over this?

2612 initializes with noise sometimes

Describe the bug

Some of the oscillator voices on 2612 are initialized in a state that produces noise when there should be none.

To Reproduce

Steps to reproduce the behavior:

  1. initialize a 2612
  2. mess around with gates in polyphonic mode to try to find a noisy voice

Expected behavior

Voices do not produce undue noise (without being parameterized to be noisy), i.e., the default patch should always sound the same, but sometimes a voice has noise in it.

Polyphony

supporting polyphony would be nice.

Roadmap

APU code has been pulled from blargg's libraries for the chips below:

  • Ricoh 2A03 (Nintendo NES)
  • Konami VRC6 (Nintendo NES)
  • Sunsoft FME7 (Nintendo NES)
  • Namco 106 (Nintendo NES)
  • Nintendo GBS (Gameboy)
    • convert DPCM to wavetable voice
  • Sony S-SMP (Nintendo SNES)
    • echo effect
    • sampler module?
    • convert to wavetable voices?
  • Yamaha YM2413 (Sega Master Sysem)
  • Yamaha YM2612 (Sega Mega Drive)
  • Texas Instruments SN76489 (Sega Master System)
  • Konami SCC
  • General Instrument Ay-3-8910
  • Atari Pokey
  • NEC Turbo Grafx 16

[POKEY] Frequency control in high-frequency mode

The frequency knob in high-frequency mode (Ch 1 and 3) has a large portion of range that does nothing. The frequency also reaches the inaudible range at some portions and becomes silent. This is intended functionality of the chip, but can be confusing to the end-user when a channel stops making noise for unknown reasons. The frequency should be capped such that it always makes noise. When the high-frequency mode is engaged, the calculation of frequency from the parameter knob will need to be updated to provide a more appropriate range of control.

Support for Polyphony

Polyphony would be a good add, though #7 will need to be resolved first; the current code will not scale very nicely.

road map:

  • 2A03
  • VRC6
  • 106
  • GBS
  • AY-3-8910
  • POKEY
  • SN76489
  • FME7

2612 sounds different at different sampling rates

Describe the bug

2612 sounds different at different sample rates.

To Reproduce

Steps to reproduce the behavior:

  1. set the engine sample rate to different values
  2. play the same note
  3. observe the output being at a different frequency for the different sample rates

Expected behavior

The notes should sound the same in terms of frequency between all sample rates.

VCV Rack v2 transition

I'd like to encourage you to make the change.
I miss your modules in Rack V2 library.
Best regards, Andras

NEC TurboGrafx16

A module that provides access to the NEC TurboGrafx16 would be sweet.

Some oscillators generate impulse on startup

Describe the bug

When loading a patch with certain modules, an impulse is emitted on patch load

To Reproduce

Steps to reproduce the behavior:

  1. create a patch with
    • 2A03 with Pulse 1 output connected to plots, audio interface, etc.
    • a MIDI-CV gate connected to the volume input for Pulse 1
  2. save the patch then reload the patch
  3. observe an impulse generated by the oscillator voice

this occurs for most oscillators in a similar configuration as 2A03

Expected behavior

The oscillator is quiet on initialization if an empty cable is connected to the volume / amplifier level input.

Oscillators Initialized perfectly out of phase

Describe the bug

Some oscillators are being initialized perfectly out of phase such they cancel each other out and produce silence.

To Reproduce

Steps to reproduce the behavior:

  1. non-deterministic. occurs on 2A03, VRC6, etc.

Expected behavior

All oscillators should initialize in phase and stay in phase (assuming they are tuned to the same frequency)

High CPU Usage

can performance be improved? Code from Famitracker may be worth looking at. The DSP foundation is still the Blargg BlipBuffer code, but the chip emulations are different and have a more music friendly API. There are also emulations of the remaining NES chips in the Famitracker codebase.

[106] Better Default Waveforms

Using a sine wave as the default wave in all the wavetables means the wavetable knob is useless when first placing the module. It seems better to default each waveform to a different basic shape: sine, ramp up, ramp down, pulse, triangle.

[POKEY] 16-bit mode

16-bit mode is implemented in the POKEY back-end, but isn't producing results that are useful or make sense. The hardware documentation of this feature is sparse to begin with, but my understanding is that it essentially enables a 16-bit frequency by sharing frequency registers between neighboring oscillators (1+2, 3+4). The panel logic to turn the feature on is in place, but currently disabled until the back-end issues are resolved.

Duplicate Code

there is a lot of duplicate code that can be reduced to global functions.

  • getAudioOut
  • onSampleRateChange
  • constructors that initialize APUs and BLIPBuffers
  • frequency, period, and volume parameter converters
    • many of these can move to static functions within the chip emulator class
  • polyphony loops

2612 CPU overload even when idle

Describe the bug

It starts at about 25% and quickly goes all the way up to 95-97%

To Reproduce

Steps to reproduce the behavior:

  1. foo
  2. bar

Expected behavior

A clear and concise description of what you expected to happen.

Screenshots

Screen Shot 2020-10-14 at 10 34 51

Environment

Mac os 10.5.5 macbook pro 16"

Additional context

Add any other context about the problem here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.