Skip to main content

Topic: ReplayGain.dll interop issue (Read 3036 times) previous topic - next topic

0 Members and 1 Guest are viewing this topic.
  • Jebus
  • [*][*][*][*][*]
  • Developer
ReplayGain.dll interop issue
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?
  • Last Edit: 22 June, 2011, 11:07:37 AM by Jebus

  • Jebus
  • [*][*][*][*][*]
  • Developer
ReplayGain.dll interop issue
Reply #1
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).
  • Last Edit: 21 June, 2011, 11:24:56 PM by Jebus

  • pbelkner
  • [*][*][*][*]
ReplayGain.dll interop issue
Reply #2
Ever time I call GetTitleGain(), it returns 64.82.

Google for "site:hydrogenaudio.org wavegain 0x7fff".

  • Jebus
  • [*][*][*][*][*]
  • Developer
ReplayGain.dll interop issue
Reply #3
Thanks! I will log my issue in that thread (changing float to double and long to int as suggested didn't work)