Giter VIP home page Giter VIP logo

fynthesizer's Introduction

Fynthesizer

Fynthesizer is a 3xOSC-like FPGA synthesizer that generates waveforms using up to 3 oscillators and allows you to play up to 12 keys simultaneously. You can fine-tune various parameters, such as ADSR, pitch offset of secondary oscillators, volume, and more to shape the waveform.

A MIDI controller is supported, but you may need to modify the hard-coded MIDI messages in the top modules to adapt to your controller. This project uses the Native Instrument Komplete Kontrol M32.

We have provided a GUI panel in res/QtSynth.py. The panel interface is shown below, displaying the adjustable parameters.

For more details and specifications, please refer to Final_Report.pdf.

Environment

  • FPGA board: Nexys DDR4 (Nexys A7)
  • FPGA chip: xc7a100tcsg324-1
  • Operating system: Ubuntu 20.04 (full project with test cases), Windows 11 (partial test cases. To run on Windows, modify res/QtSynth.py which uses the pySerial library)
  • Development environment: Vivado 2020.2

Hardware Connection

setup_new

Recommendation: Use a single-channel-to-dual-channel 3.5mm jack to ensure both speakers play sound.

Usage

Clone this project and use the .bit and .bin files in the bitstream/ folder to program your device. Alternatively, download the project file from the GitHub Release and open the Vivado project directly.

To compile this project in Vivado:

  1. Add all files in src/hdl as source files.
  2. Add all files in src/xdc as constraint files.
  3. Choose one of the top module .vhd files in src/hdl/top_modules and set the corresponding .xdc file in src/xdc as target.

The provided top modules are:

  • Fynthesizer3x.vhd: 3xosc-like synthesizer (Recommended)
  • Fynthesizer3x_inst.vhd: 3xosc-like synthesizer with musical instrument waveforms (Recommended)
  • Fynthesizer.vhd: Single oscillator synthesizer
  • core_top.vhd: Test file for the synthesizer core, controlled by the 4 buttons and 16 switches on the board
  • instrument_top.vhd: Test file for the synthesizer core with instrument waveforms, controlled by the 4 buttons and 16 switches on the board

For the Python files provided in res:

cd res

First, install the dependencies:

pip install mido serial pyqt5

Then, to call the Qt panel:

# If you set Fynthesizer3x as the top module
python QtSynth.py

# If you set Fynthesizer3x_inst.vhd as the top module
python QtSynth_inst.py

These two panels only differ in the labels in the waveform selection boxes.

If you don’t have a MIDI controller, you can use the Virtual MIDI Piano Keyboard (vmpk) instead.

sudo apt install vmpk

To play a MIDI file directly to the synthesizer:

python play_midi_file.py

References

Thanks to the following projects for their inspiration and help:

Contributors

fynthesizer's People

Contributors

tangent-h avatar

Stargazers

 avatar

Watchers

 avatar 陈薇羽 avatar

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.