New Audio Based Juce Module Available - dRowAudio


#1

New Audio Based Juce Module Available - dRowAudio

Hi all, I’ve just finished up the first draft of a collection of audio visual classes I’ve been developing, all bundled up nicely in a module thanks to the great re-structuring of the library.

This is still in beta stage so please be kind, any bug-spots will be greatly received and any suggestions/fixes even more so.

I’ve created a demo to showcase most of this stuff and give an example of how to set it up. It should be pretty straightforward, but the cURL stuff requires some extra linking and pre-processor macros, look at the Introjucer file for guidance, you’ll also have to add the network/curl/lib folder to the includes path if using MSVC as this can’t be set with the Introjucer currently.

So heres a quick rundown of the features:

Audio:

  • AudioFilePlayer
    Wrapper for audio transport and audio sources with a listener interface for notifying of changes to files and settings. Easily sub-classable for custom control, see AudioFilePlayerExt.
  • Filtering and Looping audio sources
    Audio sources containing 3-band EQ and looping capabilities
  • SoundTouchAudioSource
    Audio source wrapper for the SoundTouch library for independent pitch and tempo adjustments
  • Buffer
    Buffer class with with listener interface. Useful for holding wavetables or transfer functions.
  • FFT classes
    Simple to use FFT classes which use Accelerate on the Mac or RealFFT on Windows.
  • Misc conversion and utility functions

GUI:

  • AudioThumbnailImage classes
    Classes to render an audio thumbnail on a background thread to an Image and then control transport through positioning or dragging.
  • Audio UI classes
    AudioOscilliscope, Spectroscope, Sonogram, Meters etc.
  • ColumFileBrowser
    Similar to OSX’s Finder
  • MusicLibraryTable
    Full featured music library table which can easily combine with the iTunes Library classes to display, search and act as a drag source for your audio library.
  • Utility
    Some helpful utility classes such as clocks and cpu meters

Maths:

  • Lots of useful helper methods for interpolation, conversion and bezier curve generation

Network:

  • cURL classes for RIAA multithreaded, multiprotocol network transfers

Utility:

  • iTunesLibrary
    iTunes Library parser into ValueTree which can merge with an old library tree to maintain any added metadata.
  • Lots of handy comparators, xml helpers and constants

[attachment=2]dRowAudio Demo 1.png[/attachment]
[attachment=1]dRowAudio Demo 2.png[/attachment]
[attachment=0]dRowAudio Demo 3.png[/attachment]

I know the demo colour scheme is a bit drab at the moment but it made the design decisions easier.

This is being constantly developed in a public Git repository so follow it to keep up to date. Its available here: https://github.com/drowaudio/drowaudio
Please ignore the plugin and non-demo apps there for now, they are very old and need updating.

There is a prebuilt demo download here: https://github.com/downloads/drowaudio/drowaudio/Library%20&%20Demo%20v0.5.zip

I have also added a page to the Wiki with some screenshots http://www.rawmaterialsoftware.com/wiki/index.php/DRowAudio. Maybe we could add a new page for modules, there’s a couple floating around now, would be nice to have a centralised place for them.

Hope this is useful to people!
Dave.


#2

Sounds really interesting !

However, I have some issues with the demo for Windows XP. The demo seems to use almost 20% of my CPU, and the behaviour of the EQ controls is not right. The output distorts if I try to increase their initial values. I have seen also that the sound is cut off if the mid knob is set at 0.

Else, I really like what you’ve done with FFT :mrgreen:


#3

Excellent work Dave!!!


#4

Yeah really nice man, gonna take a further look soon!


#5

Thanks for the comments guys.

Is the 20% being shown from the in-demo audio cpu display or the Windows Task manager? The demo is a rough and ready example of the classes and could be optimised more, for example it performs 2 separate FFTs for the displays, all this could be streamlined.

Cheers for the heads up. I’ve spent all day on this and can’t figure out why the FilteringAudioSource class wont work in the AudioFilePlayerExt chain. The class itself does work as I’ve moved it outside now and it works as expected. Try the v0.5.1 from GitHub, to test it.

I’ve also noticed that the NativeImages (Win) don’t scale as well as the CoreGraphics one on the Mac, the result is less than optimal. Perhaps the Windows2D renderer will help this in the future or probably better still I might make them use OpenGL for the best performance. You can see the difference below:
[attachment=0]Software and Native.png[/attachment]

For info the Wiki page now has a better layout of the images.

Cheers, Dave.


#6

Hello Dave !

I was looking for the Windows Task Manager.

I have tried the new version, the result seems to be better (with no more distortion). However, what the filters do is wrong. Have you developed your own filters, or do you use an existing class ? They all sound the same, increasing only bass frequencies when you increase the knob value, and filtering the bass frequencies as a high pass filter when you decrease the knob, until there is no more sound… I think you need to implement, say a parametric filter for medium with a fixed Q and a fixed cutoff frequency, then lowpass and highpass filters for the other controls, with the IIRFilter class of Juce for example.

Moreover, there is a bug with the buttons in the top-right border of the window. Their repainting behaviour don’t seem to be right, because artefacts appear when there is another window covering them, and these artefacts disappear when their MouseEnter method is called.

Last thing, it’s “additional buffers” in the label of the Distortion demo :mrgreen:

Good work !


#7

Hi Wolfen, thanks for all the info, really helpful feedback!

Yeh, I’m not sure how useful these things are, if you’re running a completely empty system then it will take up a fair bit of juice, there’s a lot of DSP happening under the hood and the FFTReal library isn’t vectorised to my knowledge. I might add support for FFTW which is vectorised so should be abut 4x faster but the licensing is stricter than FFTReal’s WTFPL.
On my Mac it shows 80% of CPU but if I start converting some music with iTunes this will go down.

Oops! this was an epic copy and paste school boy error in the FilteringAudioSource class. Should be fixed now. This class just uses 3 Juce IIRFilters (well, 6 for stereo) and passes the audio through them. Its useful for basic DJ-type mixers and the default Cf’s are based on the Pioneer DJM-800 at 70Hz, 1KHz, & 13KHz with some guesswork for the Q factors. I’ll add some options for these soon so its completely customisable.

Well, what a wasted day, this did always work as expected, it was the BufferTransformAudioSource that had the bug! I wasn’t clipping the input to the buffer interpolate function so was just reading random memory when the input was greater than 1 (as would be the case if the filters were turned up). This is fixed now and the FilteringAudioSource is back where it should be!

Stange, I’ll take a look.

I did mean additionally because its an additional feature of the Buffer class :D.

Again, thanks for all the feedback, really appreciated! v0.5.2 is up now with the fixes.


#8

For the last point, I was talking about orthograph, because you’ve written “aditionally Buffers” instead of “additional buffers” :mrgreen:

Another thing I have seen on the last version, I have tried the looping functionnalities with a drum loop (WAV file). I have specified using the first waveform a loop from the beginning to the end (I can’t move more the controls on each side). However, when the reading starts again at the beginning, I don’t hear the first samples and there is a click instead…


#9

I think the silence at the beginning is due to the background thread on which the audio is read not having time to fill up before being requested. If I remove the BufferingAudioSource as the input to the audio chain the first samples are played. Perhaps I can sort this by re-organising the chain.

The click will be a combination of the above (so it gets silence and then some block of samples once the buffering source fills) and that there is no crossfade between loop points at the moment, this is something I will add when I get time.

Cheers.


#10

Hi Dave, I posted you a private message, not sure if you picked it up.


#11

Dave, could you add a flag to enable/disable curl support? So we don’t need to include the curl lib if we don’t need it…


#12

Yeh, I just added those flags last night actually, wil do a check in soon, just got to check they work properly.

(Edit) Should be working now if you grab the tip.


#13

Is this code MIT Licensed?


#14

GPL v2, same as the main JUCE library.


#15

This brings no benefits to those who are using JUCE under its commercial license…


#16

Commercial licences for closed source projects are available if required.


#17

Dave, I got a crash with the demo - not related to the audio stuff - which should be quite simple to solve.

  • go to the curl demo page
  • find an audio file in the filebrowser and drag it onto the “drop tracks here to begin” area

Again, it’s nothing crucial but I think it’s always best to give the right impression when it comes to demos :smiley:


#18

Hi masshacker, cheers for the heads up! I agree with you on the demo front.

It was just a silly assumption that you could access a single (non-array) var with [0]. Ive checked in a fix to the repo, I’ll update the pre-built’s when I get a chance.

Thanks again!


#19

Hello Dave,

Just tested your dRowAudio Module.
Great work.

The only thing that took some time was to make it compile with VS2008. But now its running fine.

Cheers,
//Martin


#20

Thanks Alatar, glad you like it.

I haven’t actually tested it on 2008 yet. Thanks for the heads up, I’ll download it and take a look soon.