New Audio Based Juce Module Available - dRowAudio

30 posts / 0 new
Last post
dave96
Offline
Last seen: 2 hours 20 min ago
Joined: 27 Dec 2008 - 20:29
New Audio Based Juce Module Available - dRowAudio

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.

Edited by: user1 on 15 Aug 2013 - 01:44
Wolfen
Offline
Last seen: 2 days 19 hours ago
Joined: 13 Jan 2005 - 18:05
Re: New Audio Based Juce Module Available - dRowAudio

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:

masshacker
Offline
Last seen: 2 weeks 1 day ago
Joined: 8 Jan 2009 - 09:53
Re: New Audio Based Juce Module Available - dRowAudio

Excellent work Dave!!!

Anima
Offline
Last seen: 16 hours 15 min ago
Joined: 16 Dec 2010 - 14:32
Re: New Audio Based Juce Module Available - dRowAudio

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

dave96
Offline
Last seen: 2 hours 20 min ago
Joined: 27 Dec 2008 - 20:29
Re: New Audio Based Juce Module Available - dRowAudio

Thanks for the comments guys.

Wolfen wrote:
The demo seems to use almost 20% of my CPU

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.

Wolfen wrote:
the behaviour of the EQ controls is not right

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.

Wolfen
Offline
Last seen: 2 days 19 hours ago
Joined: 13 Jan 2005 - 18:05
Re: New Audio Based Juce Module Available - dRowAudio

Hello Dave !

Quote:
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.

I was looking for the Windows Task Manager.

Quote:
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 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 !

dave96
Offline
Last seen: 2 hours 20 min ago
Joined: 27 Dec 2008 - 20:29
Re: New Audio Based Juce Module Available - dRowAudio

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

Wolfen wrote:
I was looking for the Windows Task Manager.

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.

Wolfen wrote:
They all sound the same, increasing only bass frequencies when you increase the knob value

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.

dave96 wrote:
I've spent all day on this and can't figure out why the FilteringAudioSource class wont work in the AudioFilePlayerExt chain.

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!

Wolfen wrote:
Moreover, there is a bug with the buttons in the top-right border of the window.

Stange, I'll take a look.

Wolfen wrote:
Last thing, it's "additional buffers"

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.

Wolfen
Offline
Last seen: 2 days 19 hours ago
Joined: 13 Jan 2005 - 18:05
Re: New Audio Based Juce Module Available - dRowAudio

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...

dave96
Offline
Last seen: 2 hours 20 min ago
Joined: 27 Dec 2008 - 20:29
Re: New Audio Based Juce Module Available - dRowAudio

Wolfen wrote:
I don't hear the first samples and there is a click instead

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.

justin
Offline
Last seen: 2 days 12 hours ago
Joined: 19 May 2008 - 13:37
Re: New Audio Based Juce Module Available - dRowAudio

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

masshacker
Offline
Last seen: 2 weeks 1 day ago
Joined: 8 Jan 2009 - 09:53
Re: New Audio Based Juce Module Available - dRowAudio

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...

Pages