Jump to content

AM's digital/analog polysynth project


AndrewMartens
 Share

Recommended Posts

IMPORTANT NOTE:

This design is in flux and the feature list is continually changing.  To get an idea of the current plan, start at the most recent post and work your way back to the beginning  :D

Original Post as follows:

One can never have too many projects on the go at once, so I decided to temporarily shelve my POKEY and PSG projects and start something even more ambitious!

The concept:  one MBHP Core board controls up to eight analogish synth voices.

Each voice contains a dedicated PIC that acts as a wavetable oscillator.  Each PIC should be capable of two oscillators running at different frequencies, and two suboscillators at -1 or -2 octaves (can be linked to either OSC1 or OSC2 freq).  Each of the four audio outputs will be envelope controlled via control voltage (CV).  The mixed audio output will run through a filter, most likely a Wasp Filter clone.  The filter is a multimode (switchable LP/BP/NP/HP) with a distortion stage, and both cutoff frequency and resonance will be CV controlled.  Finally, a dual VCA allows separate envelopes to mix pre- and post-distortion audio.

In theory, this could also be 8-part multitimbral.  There could also be a master stereo output with panning VCAs, individual outputs for each voice, etc.  Random details like that will be worked out down the road, but they're not that important now.

Some implementation details:

Each voice will have a digital board and an analog board.  The wave-PIC will be digitally controlled by the Core using the PIC's PSP function.  Unfortunately, this is only available on the 40-pin PICs.  Oscillator frequency, wave selection, and suboscillator settings will be controlled through this digital port.  This should avoid any tuning problems due to miscalibrated DACs or mis-scaled inputs from the PIC's ADC.

The only inexpensive parallel DAC I can find with a decent settling time happens to be a dual DAC, the TLC7628 (instead of a quad, which I would prefer).  Oscillator mixing will be handled by feeding the four CVs into the DAC's reference inputs.  We're looking at a 40-pin PIC plus two 20-pin DACs on each digital board.

The analog board will have an LM13700 OTA, a CD4069UB and an analog switch in the filter section. The dual VCA will use a single LM13700.  Given that I have existing schematics for each of these, the analog board should end up being the most straightforward section of the project.

On the MIOS side of things, I am proposing two ADSR envelopes and two LFOs per voice.  These can be routed to any of the 8 CVs (OSC 1-4 mix volumes, cutoff freq, resonance, VCA 1, VCA 2).  That said, we need 8 analog outputs per voice (in theory that's 64 for a full polysynth).  It may prove most practical (but more expensive) to locate two cheap-ish quad DACs (TLC7226, for example) on each digital board and address them via the digital bus.

Limitations:

This project may not work out - I may only be able to squeeze one oscillator out of the wave-PIC.  I think I could get three (as there are three 16-bit timers available), but I'm not shooting for that.  Also, it may only be possible to do four, or maybe only two voices - it depends on how many envelopes can be managed by MIOS.  It may turn out that my skills fall far short of my ambition, so don't start stocking up on parts :-)

It may turn out that I don't like the wasp filter (I haven't built one yet, but apparently they're neat, and the schematic is simple enough), so I may go for a standard Moog ladder.  Or maybe adapt Ken Stone's schematic for the Steiner/Parker Synthacon VCF...

Development plan:

That said, I'm hoping to start making progress on the wave-PIC soon.  It's the kind of thing that I can work on here and there (yay, assembly coding!) and should even be able to test in MPLAB before starting to build hardware and buy DACs.  First plan is to get the basic output of the wave-PIC working, then add some DACs and breadboard it.  After that, get the digital input going, and also check out oscillator mixing.  Then build the filter, VCA, and put it all on a chunk or two of perfboard.  Finally make some changes to MIOS to get a full prototype working.

Only then will I worry about the rest of the polyphonic setup, PCB layouts, cool features (ie, reprogramming the wave-PICs in system, etc.) and that sort of thing.

Again, this is a _very_ long-term project, so don't expect much anytime soon.  The reason I decided to set aside my POKEY/PSG projects is because sonically they will be similar to the SID, but less exciting.  This digital/analog polysynth captures my interest in analog synthesis and combines it with the power and flexibility of MIOS, and should be fun.  I hope.

Feel free to post any questions / comments!  :)

Update 12/08/04 at 23:11:46:

I figured out how to cut this back down to a 28-pin SDIP PIC:  use I2C/SPI to get the digital data to the PIC, and suddenly I don't need the PSP function anymore (and can save 8 pins to boot). 

I forgot to talk about the wavetables... it will be a bank of 64-sample waves (8 bits per sample).  The particular PIC that I choose will limit the different waveforms available.  The bare minimum will be the Digisound VCDO wavetable, with 32 different waveforms.  I also have a Wiard wavetable, with 256 waveforms (at 256 samples each, I would need to cut this back to 64)... copyright permitting, of course.

Also, I thought of a few possible things I may try:

- 3 oscillators + 1 suboscillator (after all, there are three 16-bit timers)

- a "lo-fi" feature that discards the 2- or 4- least significant bits of the wave sample... or I may just apply a bitmask to it

- a "de-rez" feature that reduces the number of samples per waveform to 32, 16, etc.

- it would be cool if lo-fi and de-rez were also modulation destinations  :)

Link to comment
Share on other sites

Hi,

this looks like a real promising project. Unfortunatly i have absolutly zero programming skills but i really like the idea of mixing digital control with analog sound prozessing. I am very keen on hearing the wavetable wave-PIC´s. Because even if the tuning of analog osci´s make often problems, the  sound of two at nearly the same frequency is quite impressiv...i can only compare virtual (vst´s, reaktor) and the SID osci´s with my analog ones though.

a few thoughts for the analog side:

The dual VCA will use a single LM13700

i have build quite a few vca´s from CA3080 to BA6110 designs i came up that the Lm13700 vca from Mike Sims is the best sounding, it just uses one Lm13700 for one vca. This is just one more cheap chip, but 50% sound improvement.

The mixed audio output will run through a filter, most likely a Wasp Filter clone

I build that filter (JH design) and it is very nice and simple but the notch section is mostly unusable. maybe one can improve this, and the distortion can improved as well. I heard a lot of good things about the Steiner/Parker VCF though.

The analog board will have an LM13700 OTA, a CD4069UB and an analog switch in the filter section

Do you thought about controlling the switch digitally. Since i have the MBSid synth i don´t want to miss the feature of storing the filtertype setting. This could be realized with a quad cv waveform selector, or even JH´s filter scanner.

Again, this is a _very_ long-term project, so don't expect much anytime soon

I like long term projects, when TK is building a box in 2 month i need 2 years for that.

Looking forward for the next steps with this project.

chriss

Link to comment
Share on other sites

i have build quite a few vca´s from CA3080 to BA6110 designs i came up that the Lm13700 vca from Mike Sims is the best sounding, it just uses one Lm13700 for one vca. This is just one more cheap chip, but 50% sound improvement.

Sound improvement is important.  As I have yet to experiment with the various designs that I have come across, I'll definitely keep this in mind.

I build that filter (JH design) and it is very nice and simple but the notch section is mostly unusable. maybe one can improve this, and the distortion can improved as well. I heard a lot of good things about the Steiner/Parker VCF though.

Good ol' JH.  Since Digikey doesn't carry the CA3080 anymore, I've had to revise that part of the design to use the LM13700 instead.  Regarding the Steiner/Parker VCF, I haven't heard a sample of it - all I really know about it is that it "has a lot of character".

Do you thought about controlling the switch digitally. Since i have the MBSid synth i don´t want to miss the feature of storing the filtertype setting. This could be realized with a quad cv waveform selector, or even JH´s filter scanner.

The initial plan was to latch in a data value from the digital bus for the switch, which would switch the analog input (I think I may have misused the term "analog switch" there).  In the past few hours I changed things around (now the switch control lines are output from the wave-PIC), but it will still definitely be controlled by MIOS at the core.

That was one of the key reasons for doing a digital/analog hybrid:  all of the patch settings will be stored & restored by MIOS.

Link to comment
Share on other sites

  • 1 month later...

Hi, nice ideas i cant wait to hear the osc when finished!

Steiner/Parker VCF, I haven't heard a sample of it - all I really know about it is that it "has a lot of character".

i'm planning my own midi-controlled/analog sound box, in which i'll probably use this filter (if i like it as much as i think i'm gonna.) I'm going to get the pcb any day now, and have the parts all here;  If jou want i can send you some mp3's when i'm finished, i will let you hear what the simultaneous LP/BP/HP can do (1signal to all inputs--> "the result is reminiscent of a phaser", different sounds/signals to different band inputs-->"then you get a frequency based "interpolating scanner", where panning between different sound sources is possible, though also subject to the frequency at which they are running.", and plain old filtering)

cheers

Link to comment
Share on other sites

@DrBunsen:  I haven't looked into the DSPics yet, but I'll check it out.  Mostly I was thinking what I could do with parts on hand that I know my cheap PIC programmer can handle :-)

@ illogik:  one day, some day, I'll have an osc sample available.  I got it to pseudocode a while back, but since then I've been distracted by home improvement projects, wedding plans (those last two go together), and Sid Meier's Pirates! when I have any extra time.  Part of the home improvement projects includes organizing the den (well under way), which means I'll end up with my studio and electronics equipment setup again.

Link to comment
Share on other sites

  • 5 months later...

Well, it's been a long time since I posted anything about my development projects.  Luckily, I actually had time the other day to fiddle around with the PIC-as-wavetable-oscillator concept.

I tried two sets of wavetables:  the first was the 2kB (32 waveforms at 64 samples each) ROM from the Digisound VCDO, and the second was the 64kB (256 waveforms at 256 samples each) "new.256" ROM from Wiard that I found on the net somewhere.  I decided on 8 kHz as the sample output rate, because I'm not going for super high fidelity here - otherwise I would go out and buy a commercial synth and be done with it.  Each oscillator has a 16-bit phase accumulator, of which the upper 8 bits determine the current sample to play.

Rather than actually going and spending tons of time writing code for the PIC to handle this, I just threw together some Labview code. It reads in the wavetables, lets me select the note frequency and waveform, and then does table lookups with a 16-bit accumulator and outputs audio at 8 kHz, 8-bit mono to the soundcard.  I found that the 256-byte waveforms sounded great and appeared to stay in tune throughout the musical scale.  However, there was some noticable aliasing present in the 64-byte waveforms (and a bit present when I downgraded the 256-byte waves to 128 bytes).  There appeared to be some tuning issues with the 64-byte waveforms, but now that I think about it, I think I made a slight coding error that reduced the accumulator to 14 bits - I wrapped the accumulator high byte at >= 64, instead of shifting it right by two bits to select the appropriate waveform.  Okay, well, that should fix the tuning issue.

Once I had the successful proof-of-concept that I was happy to listen to, I've started writing up some code for the PIC.  The planned target is the 18F252 (or newer 28-pin), but I will probably do my prototyping on the 18F452.  The plan is to control the prototype through the parallel slave port (PSP) to load values into synth registers.  I can use a simple USB multifunction DAQ to do that with Labview, and then read the waveform back into the computer.  That will allow me to run a frequency analysis and check that the tuning of the hardware device is behaving as expected.

I still haven't decided exactly what extra features should go on the board, or whether I should just develop this as a two-chip (PIC+DAC) wavetable oscillator solution and let others add filters / envelopes / etc. to it.  The current plan is to use an inexpensive TLC7226 quad 8-bit DAC - two channels for audio (OSC1+sub, OSC2+sub), and two control voltages (filter cutoff, filter resonance) - and then a 4-bit resistor ladder output to control the post-filter volume (like the SID does).  However, some people might prefer to use the AOUT board to get more flexibility with MIOS (more envelopes, LFOs, etc.) and build their own filter + VCA board.  That's still a ways down the road, so I'm not that concerned yet.

I'll probably post some Labview-generated audio samples of the concept in the next few days.  More will be forthcoming once I have some hardware that works.

Link to comment
Share on other sites

Since I'm having fun with this project (for a change), I'm going to post updates here.  Most of you probably don't really care, but someone might be curious, or might be able to make useful suggestions, so this is what I'm going to do.

Yesterday I analyzed "Jarek's AVR Synth" and got a few ideas from it.  Well, three main ideas.  The first: since I'm probably going to have MIOS core unit updating all of the envelopes (still pending, since I still might be able to cram those into the PIC), I may as well do all of the mixing in the PIC as well, and just output an audio stream (no CV).  The second:  since I'm just outputting audio and no CV - and doing all of the mixing in the PIC - why not just use a resistor ladder output?  It's a lot cheaper than a DAC!  The third:  ooh, a simple filter!  Neat-o!  The filter sound is pretty basic, but it's much better than no filter.  I'm going to do some more experimenting with the filter sound and see if I can improve it a bit.  Also, I was looking at the Droid-3 synth and hopefully I can implement something similar to their boost and distortion modes.

The tuning issue I mentioned yesterday was a result of just using a 16-bit phase accumulator, so I increased that to 24 bits.  It only takes a handful more cycles, and it improves tuning from about +/- 0.5 cents (according to the frequency analysis) to about +/- 0.01 cents, and possibly better.  I wasn't running the analysis on really long samples, so the short sampling time probably resulted for a bit of that error.

While I'm not happy with the sound yet, I did post a screenshot of the testing interface I threw together.  This is all still software running in Labview at the moment, but it really works well for determining what sounds good and what doesn't - without having to mess with the code / burn / test cycle in hardware.  Screenshot is here:  http://www.andrewmartens.com/images/DPS-dev01.jpg (1280x994, 224 kB, JPEG 80% quality).

Link to comment
Share on other sites

hey andrew,

a very interesting and ambitious synthesizer indeed. this one surely has a lot of future!

looking at the screenshot:

am I right to think this filter you made is in the digital domain in some way? would you be kind enough to explain? :)

some ideas from my side:

1. setting up the sample's length - go from 256 samples to 255, 254, ...

(256 samples would be great from the point of view of a midi controller knob! coincidence? :) )

this would change the wave's length, so we'd have to think of a way to re-calculate the timings to keep the wave's frequencies.

2. two-dimensional, 3-dimensional or 4-dimensional WT index

i guess this one would be easy? :)

3. "wave loops" - two shots of one wave, three shots of another wave, and you got a new waveform. 16 shots would be totally great.

4. "lag": when you play the wave you start out at the first sample as usually. but then, when changing to the level of the next sample, you can see if it's inside some kind of boundary: for example, if its level is 8 "units" higher. if it's less than 8 "units" higher, go to that level immediately. if it's over 8 "units" higher, go up only 8 "units" (and this is your "current" position which is output to the dac). then, do the same comparing that previous step's "current" position and the new step's entry in the rom.

you could make those settings separate for the "up" and for the "down" motion. this could make the waveforms more like a "rising ramp" or "falling ramp" waveform. i'm extremely, totally curious of how this one would work out, sound-wise! perhaps like a low-pass filter? or a comb filter? what if you only lagged the "up" or "down" motion - would that only affect the odd/even harmonics of the wave?

i surely wish i had labview (and most of all, knew how to operate it) to check it out myself!

best regards,

d.

Link to comment
Share on other sites

a very interesting and ambitious synthesizer indeed. this one surely has a lot of future!

Thanks!  I'm hoping that someone will want to build a MIDIBox DPS (Digital PIC Synth, what I've currently dubbed this project) once I'm done.

looking at the screenshot:

am I right to think this filter you made is in the digital domain in some way? would you be kind enough to explain? :)

I was never very good at my signal-processing courses at university, so I haven't been able to come up with anything very clever.  However, from Jarek's AVR Synth code at http://www.jarek.synth.net/AVRSYN.asm he had some code for his Simplest Low Pass Filter Ever, which wasn't fancy but it worked and definitely filtered the sound.  Then "Krue" tidied up the code a bit and also was working on implementing a HPF, and his code is at http://krue.net/avrsyn/avrsyn.asm .  The equation in question is just:  y[n] =  y[n-1] + m * (x[n] - y[n-1]).  In english, that's:  OutputValue = PreviousOutputValue + CutoffCoeficcient * ( WaveValue - PreviousOutputValue).  My existing Labview implementation of the filter looks like this:  http://www.andrewmartens.com/images/DPS-filter01.jpg

There's some clipping issues with the output waveform, but that's because I still have some U8->I16->U8 issues that I haven't bothered to fix yet.

On a different note, I'd like to point out the "De-Rez" feature that I added.  It was initially intended to reduce the bit depth of a given waveform, ie from 8-bit to 4-bit resolution, or whatever.  I decided to just take the 8-bit De-Rez value and AND it with the waveform sample.  Someone might be able to do something clever by modulating this value.

some ideas from my side:

Those are some intriguing ideas that you have.  Right now I'm concentrating mostly on getting the sound mixing happily and tweaking the filter a little bit, including the distortion modes.  After that I'm going to look at doing the envelopes and making those work.  Once I have that making noise on a PIC, I'll probably release a 0.5 version to everyone so that people can start fiddling around with MIOS or whatever.  But still, here's my comments on them...

1.  Sample length feature:  this would be difficult to handle in the DPS itself, as it would require recalculating of the 24-bit phase accumulator delta on the fly - and I'm currently doing a table lookup to correlate MIDI note number & pitchbend to the delta value.  I suppose that could be offloaded to the MIOS application, but then it would require calculating a 24-bit number whenever the wavelength value is modified.

2.  Waveform number (for each oscillator) is just an 8-bit parameter passed to the DPS.  This could be modulated by the MIOS app in however many dimensions you wanted, it would just depend on the wavetable layout.

3.  Is this like sequencing a wavetable?  Again, this could be done in MIOS.

4.  This sounds like a digital version of a slew-rate limiter.  It could be calculated on the fly in the DPS, but it might require more processing power than I will have remaining - I think it'll already be a bit tight getting the envelopes in there.

i surely wish i had labview (and most of all, knew how to operate it) to check it out myself

Labview isn't too difficult to get the hang of, it just takes a bit of time.  I haven't really had any formal training with it, but I can get by.  The only real limiting factor to using it for hobbyist purposes is the very-steep price tag (a single seat of the Full license that we have at work costs $2395 USD)!!!  My current diagram is here:  http://www.andrewmartens.com/images/DPS-main-diagram.jpg

Link to comment
Share on other sites

Don't know if this will be of interest to you or not but...

Magic Sine Waves

Basically using a string of pulse (square) waves to simulate the harmonics of a sine wave.  Sounds at first reading like it might be a more code-efficient way of generating sines than trig calculations.

A new class of mathematical functions that promise to significantly improve the efficient generation of power digital sinewaves ...

  All digital and highly low end micro friendly.

  As few as five values stored per amplitude.

  Precise control of amplitude and frequency.

  Best suited for low audio frequencies.

There are lots and lots of tutorials, guides, source code and calculators on the site, and the first sample chips he's shipping are PIC 16s. 

I wonder if the same principle could be applied to simulation of other wave shapes.

Link to comment
Share on other sites

Great work and progress Andrew!!  ;D

Keep it coming!!

Bye, Moebius

p.s. Digisound VCDOs waveforms probably should have a bit nasty character (aliasing). The original design used 741 opamp for the output amp, because it's "bad" slew rate creates a sort of lowpass filtering.  ;)

Link to comment
Share on other sites

Basically using a string of pulse (square) waves to simulate the harmonics of a sine wave.  Sounds at first reading like it might be a more code-efficient way of generating sines than trig calculations.

The beauty of using a wavetable is that I have a 64 (or 256) sample sinewave in there (and a lot of other waveforms, with and without harmonics, etc.).  The trick is to keep an accurate accumulator so that you know which index to output to the DAC.  That way, there's no trig calculations whatsoever.  The most computationally-intensive part of the whole thing is mixing the waveforms and running them through the filter.

Link to comment
Share on other sites

  Great work and progress Andrew!!  ;D

Thanks!  I'll probably post some sounds once I have the Labview proof-of-concept finished (two weeks?  three weeks?)  Then I'll start working on getting everything going in the PIC - I'm doing a bit of that in parallel, just to make sure that I'm not doing anything that requires too many processor cycles, but the full transition will still be a challenge.

p.s. Digisound VCDOs waveforms probably should have a bit nasty character (aliasing). The original design used 741 opamp for the output amp, because it's "bad" slew rate creates a sort of lowpass filtering.  ;)

I remember seeing that in the VCDO schematic... "use a 741 to smooth out the noise!".  I'm a bit tempted to actually use a 741 on the output, though I'm sure a TL074 might sound fine.  I suppose the actual hardware shakedown will be the true test :-)

The design I'm using will probably have a different character than the Digisound.  A proper ROM-based wavetable oscillator just cycles the address at (frequency * samples_per_waveform) and writes it to the DAC.  What I'm doing is just outputting audio at a fixed frequency (8 kHz is my current target, though I may be able to push that higher) and using the top 8 bits of the accumulator to determine the sample number (or 6 bits in the case of a 64-sample waveform, like the Digisound).  Initially I was going to interpolate between samples using the middle 8 bits of the accumulator, but then I realized that (a) it would require a few multiplies, and (b) the impact on the sound wasn't that dramatic - but we'll see, by the time I'm done the basic featureset there might be enough cycles remaining to do it, and it might clear up some of the aliasing.

And heck, if a bit of a gritty digital sound isn't bad, I might just decimate the "new.256" table down to 64 samples per waveform as well.  That way I could potentially have a number of waveform tables available in the DPS:  the "new.256" 256x64 table (16kB), the Digisound VCDO 32x64 table (2kB), something else (there should be another 4 or 8kB free), and possibly a software-loadable wavetable in the onboard EEPROM (the 18F2525 has 1024 bytes of EEPROM, which would allow for a 16 waveform user table).

Link to comment
Share on other sites

hey andrew!

great that you're making so much progress.

yes, indeed, what i'm talking about would be a kind of slew-rate limiter, but are you sure it would be that cost-inefficient? IF the tables were stored in an "incremental" way, then you'd just need to 1. compare the "lag" factor to the increment of the next step of the waveform and 2. use the one that's smaller. however, i don't know how the internals of your code work, so i'm not going to leave the judgement of that idea to you.

vca and filter: wouldn't that be done better outside? much more code-efficient ;)

also, in my opinion some analog stuff would be nice in a synth like that - to keep the balance of the sound in a way.

alternatively - do you think it would be possible to feed the VCOs to another pic where the filtering and perhaps other fx could be done?

this could be great - this way, you could make the oscillators really powerful, i can already think of a few things you could do with wavetables :D (especially if you use two different waves as an input - basic operations like "use bigger" "use smaller" "use x samples of first and the rest from second wave" - but i digress, and i guess this last one could be done in the MIOS way you've been talking about, no?)

length of waveforms: don't bother with that just yet - i'm sure there will be a way to load new wavetables on the fly :) (there must be! 8) )

cheers, and keep up the good work!

Link to comment
Share on other sites

vca and filter: wouldn't that be done better outside? much more code-efficient ;)

also, in my opinion some analog stuff would be nice in a synth like that - to keep the balance of the sound in a way.

alternatively - do you think it would be possible to feed the VCOs to another pic where the filtering and perhaps other fx could be done?

My initial plan (reading back) was to use a multi-channel DAC to output the waveforms separately, and then do some CV mixing / filtering / envelope / etc.  The downside was that I wanted to make a fairly simple low-chip-count module (similar to the SID), which got me thinking about the software filters of the Droid-3, Jarek's AVR Synth, etc.  That's why I decided to try and take those features out of hardware and move them into software - then I could even just get away with an R-2R resistor ladder output instead of bothering with a DAC.

That said, perhaps I should just shelve the mixing / filter / envelope development for now, and just get the oscillators working in a PIC.  I'm sure that there are a lot of people out there who would be perfectly happy with a two-chip module (PIC + quad DAC) that could take a parallel or SPI input and just generate sound.  Perfect for the modular analog enthusiast, and so on.  Heck, with a multiplying DAC, you could easily have external CV control of each DCO's output volume!

For now this might be the best way to go... I think I'll use the parallel slave port interface on a 40-pin 18F4620, which gives 64kB flash for program and wavetables.  Anyone who wants to start fiddling with a MIOS application should be able to do so with a pair of shift registers, like the MBHP_SID module.  Alternately I could use a 28-pin 18F2620 and go with SPI, but I'll have to delve into the MIOS code a bit more to see what changes would need to be made.

Current task list:

- set aside mixing / filter code

- work on oscillator detuning

- order PIC & DAC (probably 18F4620 and TLC7226)

- code up PIC oscillator using PSP interface, test & debug (tuning and frequency analysis)

- test maximum audio output rate

- post a copy of the firmware,  basic test schematic and register mapping interface

On a side note, one could probably use an 18F452 (since we're using them anyways for the CORE modules) and just use a subset of the wavetable.  Likewise, the microprocessor interface is going to be the same for most parallel DACs, so one could substitute in an AD7226, AD7225, MAX506, or MAX505 depending on the features you want and the price you are willing to pay.  I'm hoping the TLC7226 sounds "good enough", since it's less than 1/4 the price of those other DACs.

Link to comment
Share on other sites

I'm still working on this.  Hopefully next week sometime (?) I'll have an opportunity to post some sounds from the test application that I developed.  I temporarily removed the envelopes and filter stuff that I was working on, but instead I got pitchbend to work reasonably well.  Right now I need a less computationally-intensive method of doing it (right now it has a 16-bit signed divide, ugh), but it's still making some progress.

There's a few personal issues causing trouble right now:  my mother-in-law's cancer returned and is probably inoperable this time, and I'm also very close to having a different job that won't drive me crazy every day.  So that's a bit of turmoil that's keeping me from doing as much development as I would like...

Link to comment
Share on other sites

Update!  Here are two small .WAV files (8-bit mono at 8 kHz, since that's what is generated by the oscillators) with all oscillators mixed equally.  This is generated by my Labview testbench application, but should be fairly close to what would be produced by the PIC.  The files are hosted on my personal website, so try not to hammer it too hard.

http://www.andrewmartens.com/music/dps-test2.wav - four DCOs with different waveforms playing a chord, pitchbent to a different chord and then back.

http://www.andrewmartens.com/music/dps-test4.wav - four DCOs playing the same chord, DCO1 is swept through about 120 different waveforms.

Next step is to get this transferred over to a PIC!

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...