Open source high-quality pro audio sample rate converter library released from Voxengo

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

Thanks for yet another update. :cool: And keep 'm coming! :D

Meanwhile I have repeated my profiling tests on a Core i7-4770 3.40 GHz, and these are the results (although again, YMMV):

v0.6 default is ~15% faster than v0.5 default
v0.6 14:22 is ~25% faster than v0.6 default
v0.7 default is ~10% faster than v0.6 default
v0.7 14:41 is ~20% faster than v0.7 default

Post

*bump* v0.8 was released a couple of days ago. Changes:
Removed unused variable for interpolator.
The CDSPResampler now features the getInterpolator() function, for the case destination sample rate is required to be varied.

Minimum-phase filters are fully working now.
And today v0.9 was released. Changes:
Changed Doxygen markup to a more uniform look (e.g. from \brief to @brief).

Minor changes to the documentation.

Minor documentation changes. Removed unnecessary template<> from most functions. The static global object of CDSPFracDelayFilterBank class is now created automatically by the compiler.

Warning: changed the order of parameters of the CDSPResampler class constructor! Added CDSPResampler16 and CDSPResampler24 for easier selection of optimal resolution parameters.
I have just pulled in v0.9, and I like the new CDSPResampler16 and CDSPResampler24. However, they won't compile on Mac OS X (Xcode v3.2.6; GCC v4.0.1 and v4.2.1). I get the following errors (for both 16 and 24):
Class 'r8b::CDSPResampler16' does not have any field named 'CDSPResampler'
'r8b::CDSPResampler<CInterpClass>::CDSPResampler() [with CInterpClass = r8b::CDSPFracInterpolator<14, 41, 9>]' is private
I have fixed this with the following patch, which seems to work on both MSVC and GCC:

Code: Select all

--- a/r8brain/CDSPResampler.h
+++ b/r8brain/CDSPResampler.h
@@ -414,8 +414,10 @@ private:
  * details.
  */
 
+typedef CDSPResampler< CDSPFracInterpolator< 14, 41, 9 > > CDSPResampler14_41;
+
 class CDSPResampler16 :
-	public CDSPResampler< CDSPFracInterpolator< 14, 41, 9 > >
+	public CDSPResampler14_41
 {
 public:
 	/**
@@ -431,7 +433,7 @@ public:
 
 	CDSPResampler16( const double SrcSampleRate, const double DstSampleRate,
 		const int MaxInLen, const double ReqTransBand = 2.0 )
-		: CDSPResampler( SrcSampleRate, DstSampleRate, MaxInLen, ReqTransBand,
+		: CDSPResampler14_41( SrcSampleRate, DstSampleRate, MaxInLen, ReqTransBand,
 			98.0, fprLinearPhase, true )
 	{
 	}
@@ -445,8 +447,10 @@ public:
  * the r8b::CDSPResampler class for details.
  */
 
+typedef CDSPResampler< CDSPFracInterpolator< 20, 197, 9 > > CDSPResampler20_197;
+
 class CDSPResampler24 :
-	public CDSPResampler< CDSPFracInterpolator< 20, 197, 9 > >
+	public CDSPResampler20_197
 {
 public:
 	/**
@@ -462,7 +466,7 @@ public:
 
 	CDSPResampler24( const double SrcSampleRate, const double DstSampleRate,
 		const int MaxInLen, const double ReqTransBand = 2.0 )
-		: CDSPResampler( SrcSampleRate, DstSampleRate, MaxInLen, ReqTransBand,
+		: CDSPResampler20_197( SrcSampleRate, DstSampleRate, MaxInLen, ReqTransBand,
 			146.0, fprLinearPhase, true )
 	{
 	}

Post

Thanks for checking! I'll simply change

: CDSPResampler(

to

: CDSPResampler< CDSPFracInterpolator< 20, 197, 9 > >(

That should work without introducing a new typedef.
Image

Post

Yeah, that will also work. Thanks for fixing. :)

Post

*bump* Anything new on the horizon? If not, I'd say it's time to change the development stage to beta (or RC if you consider v0.9 to be beta already). ;)

Post

Considerable improvements are on the way.
Image

Post

Cool, thanks.

I am currently trying to decide whether to do release versions of ComboV&F with r8brain-free-src v0.9, or to wait for future updates... I guess I will wait.

Post

OK, I've released v1.0, which is a bit more faster.

I've had to remove minimum-phase filters though, as the min-phase transform works poorly with optimal equripple filters (power-raised Kaiser window function is now used to obtain optimal low-pass filters).
Image

Post

It seems that I was chosing too low attenuation and filter length values. For example, 96 dB attenuation for 16-bit signals is adequate for non-stationary signals, but for stationary signals at least 136 dB attenuation and SNR is required.

Quite the same applies to 24-bit signals. While they have approximately 144 dB dynamic range, stationary signals have approximately 180 dB dynamic range - and even more if a longer averaging window is used.

I will release one more update to address these facts, but unfortunately this will reduce conversion speed.

I'll have to increase the resolution to avoid any user confusion in case they'll want to analyze resampler's quality using stationary signals.
Image

Post

Added CDSPResampler16IR class for impulse response resampling.
Image

Post

Thanks for the updates, and yay for v1.0. :)

Post

I hope Reaper developers will get note of this. It would be so nice to have it in Reaper.
It is no measure of health to be well adjusted to a profoundly sick society. - Jiddu Krishnamurti

Post

Yep, even if just as an additional "render" option, this SRC could benefit a lot of Reaper users. CDSPResampler24 with the default 2% transition band would probably be the best single option (1% transition band is unnecessarily steep). No need for CDSPResampler16 as it is not that much faster anyway.

(CDSPResampler16 can be used when importing 16-bit audio *with* resampling, for a bit of added speed)
Image

Post

Wow thanks! Very generous. I have used r8brain for years now. :)

Post

This looks great. Sorry if i missed it, but is there a compiled version with basic manual?

Post Reply

Return to “DSP and Plugin Development”