Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: ReplayGain.dll interop issue (Read 4118 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

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?

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


 

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)