AIY

Wavetable Oscillator project

Recommended Posts

Hello All,

 

I bought myself a couple of Papilios Pro's for work and really liked them so I decided to get one for myself with the retrocade megawing.

 

 

A couple of years back I ran into this site

http://www.adventurekid.se/akrt/waveforms/

 

Where this amazing and dedicated guy has collected single-cycle waveforms into a massive archive ~4300 Waveforms.

The samples are all supposed to be the same format, 44.1kHz, 16bit, 600 samples long. Sample taken at D2+1 (according to the site)

 

I propose to write a wavetable Oscillator with wishbone integration so that we can load waveforms into them just like Shruti for example.

 

This will need some VHDL programming for the oscillator itself (I can do that) as well as some c-programming to get the waves off an sd-card.

 

I'll start tonight by looking over the codes for the existing chips to how things interconnect

 

Tell me if you think

 

Regards

AIY

Share this post


Link to post
Share on other sites

oh wow! just what I'm looking for! I've just built a 496 voice synth (no filtering or LFO at the moment, just ADSR) and the only wave I have is a 1024 point / 16 bits sine. 

 

Can share code with you if you like...

Share this post


Link to post
Share on other sites

oh wow! just what I'm looking for! I've just built a 496 voice synth (no filtering or LFO at the moment, just ADSR) and the only wave I have is a 1024 point / 16 bits sine. 

 

Can share code with you if you like...

 

If you look at this post :

http://forum.gadgetfactory.net/index.php?/topic/1463-yet-another-synth/

 

you can found the github address of my project.

 

I have done a basic midi synthesiser, currently using one wave of 512 points. It is inspired from our work:

http://hamsterworks.co.nz/mediawiki/index.php/Synth

 

The waveform is a custom sinus with some additional harmonic that does a better sound than a pure sinus. But it sound possible to adapte other sample by preprocessing...

 

figure_1-kPZStRr9.png (http://picpaste.com/figure_1-kPZStRr9.png)

 

The last version (in branch) handle 128 voices@ 48Khz/ stereo. Also the dispatch of voice inside the fpga is handle by the PC that also send midi note to the fpga throw serial interface. I just failed to setup a fsm that handle the DPRAM with note on / note off event on one port and the generation stuff on the other port, so i let this part on the pc.

 

I have only 128 voices, i can increase to about 140 voices, and then i will need to review the clocking strategy. But most of midi file i used are rarely more than 32 simultaneous voices...

 

Now i would like to add the drum voice because it is missing to have good feelingwhen you listen a song. I plan to read a sample from an sdcard in a similar way that it is done on sk-synth project with another kind of storage chip.

Then i could use a similar mechanize to update wave patch stored on a sdcard but also use it to develop  ADSR and LFO LUT based.

But developing a fsm that read sdcard without a mcu is a little boring and i need motivation to continue :)

Share this post


Link to post
Share on other sites

So I started programming on the Wavetable Osc yesterday evening, starting from the sid chip.

I kept the ADSR, the filters and the 3-voice structure and it weighs in at about 800 LUTs compared to the SID at ~1200.

 

Unfortunately the usage of LUTs goes up to 99% when synthesis is made so there is room for little else (I added the wavetable thingy to the Retrocade wishbone bus).

 

I will start on the programming in ZAP to see that I can load some data into the wave memories and play them, I'll post some stuff here once I get something going in the lab with an oscilloscope and sound samples

 

Once that works I'll check if there is anything more to be done in terms of optimization and then (hopefully) I can post something back on git.

 

AIY

Share this post


Link to post
Share on other sites

How are you controling your wishbone interface ?

 

Well I started from the SID implementation and removed the oscillator parts and replaced them with my own. Then I added some data ports and address decoding to the wishbone block to allow the wavdata to be passed to the waveform BlockRAM.

 

I looked into the code for the filters by Alvieboy and I think I will attempt to make a separate Wishbone entity with the filters so that they can be shared between the sound generating elements.

 

Does anybody have any points/ideas or experience on how one would go about building a semi-modular design where we could soft-route the audio signals in an efficient way or is that idea complete folly?

 

AIY

Share this post


Link to post
Share on other sites

Well I started from the SID implementation and removed the oscillator parts and replaced them with my own. Then I added some data ports and address decoding to the wishbone block to allow the wavdata to be passed to the waveform BlockRAM.

 

I looked into the code for the filters by Alvieboy and I think I will attempt to make a separate Wishbone entity with the filters so that they can be shared between the sound generating elements.

 

Does anybody have any points/ideas or experience on how one would go about building a semi-modular design where we could soft-route the audio signals in an efficient way or is that idea complete folly?

 

AIY

 

I was thinking about this when I first started work on the RetroCade and I was thinking that maybe it would make sense to put general purpose filters in the audiomixer that could be applied to any of the inputs...

 

I'm excited to see the work you are doing here, it sounds like it is going to be really cool. Let me know when you have something, I'll be happy to test it out.

 

Jack.

Share this post


Link to post
Share on other sites

I tried the link to the Adventure Kid web site in the original post, but it's either offline or gone.  Does anyone have all of the samples downloaded somewhere?

 

(BTW, my first post here.  I ordered the papilio pro/retrocade combo today.  Can't wait to get them!)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now