HydrogenAudio

Hydrogenaudio Forum => Scientific Discussion => Topic started by: Jebus on 2011-06-21 21:54:32

Title: ReplayGain.dll interop issue
Post by: Jebus on 2011-06-21 21:54:32
Hi everyone!

Its been years since I've posted. Not prepared to even say what i'm working on, but I'm trying to use replaygain.dll (off Rarewares) via C# interop. Ever time I call GetTitleGain(), it returns 64.82. From a quick google search, it seems that means i've encountered an error.


Here is my p/invoke signature:

Code: [Select]
[DllImport("replaygain.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern int InitGainAnalysis(long sampleFreq);

[DllImport("replaygain.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern int AnalyzeSamples(float[] leftSamples, float[] rightRamples, UIntPtr numSamples, int numChannels);
      
[DllImport("replaygain.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern float GetTitleGain();



and then i'm basically calling:


Code: [Select]
float[] leftSamples = new float[4096];
float[] rightSamples = new float[4096];

// Code to initialize the samples, somewhere between -1 and 1.

InitGainAnalysis(sampleRate)

AnalyzeSamples(leftSamples, rightSamples, new UIntPtr((ulong)sampleCount), 2);

float replaygain = GetTitleGain(); // Always returns 64.82 after at least 1 call to AnalyzeSamples.


Anyone else tried this from C#? Am I missing anything? Alternatively, is there another ReplayGain library to suggest, preferably with multi-channel and >48khz support?
Title: ReplayGain.dll interop issue
Post by: Jebus on 2011-06-22 03:35:49
So I'm pretty sure this is just a normalization issue... if my samples are in the range of -10 through 10, I get a more sane (but still wrong) result of around 2 dB. I'm expecting roughly -7 dB.


What does ReplayGain.dll expectfor the input samples? The documentation, such as it is, simply says that the samples are in floating-point format so I assumed a range of -1:+1. The code makes little sense to me, as I am not an audio engineer (or a very good C programmer).
Title: ReplayGain.dll interop issue
Post by: pbelkner on 2011-06-22 06:44:51
Ever time I call GetTitleGain(), it returns 64.82.

Google for "site:hydrogenaudio.org wavegain 0x7fff".
Title: ReplayGain.dll interop issue
Post by: Jebus on 2011-06-22 15:54:18
Thanks! I will log my issue in that thread (changing float to double and long to int as suggested didn't work)