Just to say I've pushed another change to the repo, which improves the tuning. I'm only using AudioAnalyzeNoteFrequency to check, but assuming that's about right the tuning is both better than before, and significantly better than the original...
OK, a little less efficient than doing a full 32-bit transfer, but workable enough! Might as well set 32-bit mode and be done with it.
I'll get onto the control code over Easter. It shouldn't be too hard - just a couple of changes to the code...
Less efficient for sure, but it’s a simple non-breaking change to the F32 library, and means a separate TDM_F32 doesn’t (immediately) need to be developed and maintained. If it gets pulled in and I get some encouragement to do so then it’s fairly...
Pulled in, seems to be working fine for me.
I've done a bit of work on the F32 library and put in PR #27 which adds conversion of an F32 audio stream to / from two I16 ones containing the MS and LSwords. This can be used to get 24-bit TDM I/O -...
That all sounds great - thanks so much for your effort on this, I hope it turns out to be worth it.
The multi-TDM code doesn’t directly support larger transfers, though as noted above it could be coerced into doing it using pairs of 16-bit...
Good news! I’m chuffed myself that you reminded me that I had been working on this, it might have been forgotten for ages otherwise. And I wouldn’t have necessarily thought about the modulation input at all.
Hmm … I’m not sure the note stopping...
Yes, repeated noteOn() without noteOff() was definitely causing a nasty audio block leak, which was a bug, and as you say was wedging the whole audio library. All fixed now, anyway ... hope you manage to get the high priority tasks done in a...
OK, the "what" is straightforward ... At noteOn(), a calculation is made as to how many samples are needed for the requested pitch, bent down as far as the current frequencyModulation() has been set. That's rounded up to the next highest block...
Bug fixed and inputs swapped, new commit pushed - see what you think. I added a "mandolin mode" to my test sketch which just repeats noteOn() calls at a CC-dependent interval; it broke the old code as expected, but the new code seems OK, so I'm...
I'll give HPF() a go at some point - thanks.
I don't think there's a way to avoid using 32 (which is available on a back pad of Teensy 4.0). According to the Reference Manual there's only 2 ball-out options, only one of which is brought out on...
I've updated the hardware repo with the full Rev K schematics. The only difference is the added BCLK/LRCLK buffers and removal of the series resistors for DI/DO (as above).
I will add the PCBA files after the initial run of boards has been tested.
Not quite right, though my brain is also struggling a bit because one chip’s output is another’s input … and you’ve labelled your signals from the codecs’ POV, whereas I seem to think from Teensy’s!
So, Teensy outs need to be 7+32, and ins are...
Hi Mark … glad you’re enjoying it
To answer your questions in order
quite possibly, the input order was arbitrary anyway. I’ll do that
I did mention in post #10, but it’s 22 blocks for C0. It uses enough for the played note plus the currently...
The problem with using any AudioStream-derived object is that it’ll get linked into the update list at construction time, so there’s no way to run it independently apart from something like the bodge I posted in #2, which tramples on the audio...
Yes, the AudioPlaySdWav is only in there because you said you were starting from a WAV file, so it seemed the easiest and most relevant way to put the demo together. If you're starting from an existing buffer of samples, you'd probably replace...
@JayShoe Basically, whatever Paul's licence on his Teensy products is, that's what mine will be.
Syncing with an external clock isn't on the cards for Teensy, AFAIK. It's a whole other level of complexity, probably better to use the Teensy to...
For info, here is the “world clock” thread. I think there’s two separate issues here:
can TDM be made to work using an external source of MCLK/BCLK/LRCLK, and
can the above clocks be regenerated from a studio’s world clock
I have no answer for...
Some time ago I wrote an "update grabber" which takes over the audio system so you can graph or log its output in slower than real time. Here's an example I hacked together quickly - not sure if it's along the lines you were thinking, and I...
Input testing:
Yellow and green traces are generated on board 0 and board 5, received on inputs on board 0 and board 2, and output on board 0. Far from rigorous, but I'm happy the multi-TDM code is working!
Although there are 8 boards...
I'm thinking I could address >16-bit sampling in my playback and recording updates, but have been holding off until I have some idea whether there's any chance of the existing code being pulled into the official Teensyduino distro (1.60 beta has...
Hmmm. I’ve just taken a look at the F32 library, and it appears that minor tweaks to AudioConvert_I16toF32 and AudioConvert_F32toI16, and another to the TLV control object, would allow 24-bit I/O.
The converters need two inputs for I16toF32, and...
@mattybrad that’s an awesome project! A hardware version of my soft-patchable synth, but based on Teensy 3.6. I guess the Teensy 4.x one stalled for some reason? Maybe this new board can resurrect the idea…
My updated multi-TDM doesn’t support...
Slightly surprised that you're surprised by the "audible interruptions", given that your audio file fades in at the start and out at the end, so there's about 0.5s of near-silence if it's looped without setting start and finish points.
Here's an...
Note that it must be possible for us to drop your posted code into the Arduino IDE and compile and run it to reproduce your initial result. Short code fragments will not be useful, they often omit relevant information.
Perhaps you could start by posting a short example of code that doesn't work as you'd expect, saying what you expected and what actually happened. At the very least you should also tell us something about the sample data you're trying to play...
All righty then ... I think we have a result ... or at least have got to the penalty shoot-out.
As before, the revised code is in my repo branch. Features are:
two inputs to the object:
input 0 is "drive": feed this with audio to keep the...
I think I might have made some progress, though I haven't ported my concept across to Teensy code as yet - it's still in the form of a Python simulation, which is way easier to interrogate. You can find an incomplete mess on the relevant branch...
Sadly the 12 pin input and output IDC cables are going to interfere with getting the SD card to the edge of the PCB. Those committed to (or for?) big numbers of channels could always put some kind of a cutaway at the top corner of the case to...
You’re very likely right about use cases above 32x32 - it’s just daft poms that try that sort of thing! And maybe artists who aren’t unduly concerned with sound quality, as long as they can fill a darkened space with 80 independent sound...
I’ll get to the full 80o32i :cool:, just need to figure out the geometry to keep the wiring as short as possible. Plus, recover a bit from that build, it was pretty fiddly.
Yes, I’m pleased the multi-TDM works as well as it does. I’d done some...
Getting steadily more bonkers. 64 output channels, with a different frequency / waveform combination on each one. As shown it's taking 22% CPU and 64 audio blocks, plus ~770mA from the USB ( :eek: ). I can reduce the CPU to 5% by using sine and...
With my current build, there are no serial outputs in an ISR except for a serious fault condition, (missing a count) which has never occurred in 18 months. So now, there are no serial outputs in an ISR under normal operation. All my serial...
Well … I may be misunderstanding what you’re saying, but … The Rules are: don’t use any sort of Serial access in an ISR. If you use “less”, all you’ve done is to increase the interval between crashes. The next one will probably happen when you’re...
I generally drop it into a spreadsheet, ensuring the address columns are set to text (mayhem ensues otherwise), then filter and sort as needed. It’s not easy, though :mad:
Yes, definitely avoid serial output from within an ISR. Even sprintf...
That output usually means the access violation occurred in a library function - those don’t tend to have debug information available. You should find a .sym file in the same folder as the .elf, with a bit of digging around you should be able to...
Hmmm ... on second reading, you're probably right - it's kind of not a digital loopback at all, it's an analogue loopback that goes through the digital processing. I read it as anything the Teensy sends out digitally is looped back in.
@Pio...
As shown here. Also, the scope is rated at 200MHz bandwidth, so don’t read too much into the apparent 4ns rise time … plus as @AndyA says the connection quality has a significant effect at these speeds.
Can I enter a plea for my PR #673 to be given some consideration for Teensyduino 1.60, please? If not that exact change (minor though it seems to me to be), then some further addressing of the fact that startup can hang with some combinations of...
Not a major issue, just making the point (badly) that the essence of debugging tends to be to strip things back to the bare minimum, so it’s obvious to all that it should work … just that it doesn’t. Often that results in your finding out where...
Yes, I agree. I didn’t want to hijack this thread, but I know y’all are on the cutting edge here, and I was hoping to get a sense of the library’s current state. When I have more to contribute, I’ll start a new thread dedicated to my project...
May be best on a separate thread? If you could give some indication there of what you’re up to, like the codec in use, that would help us help you :)
The “master” branch you linked to I try to keep synced up with Paul’s upstream repo, so...
I too have been tinkering with it, and confess I'm fairly stumped with something as basic as making the algorithm work with a buffer that's longer than needed for the starting frequency. That seems to be pretty fundamental to me, because you need...