Kennt jemand eine Möglichkeit, die durchschnittliche Amplitude einer .wav-Datei mit C# zu erhalten (selbst wenn dies bedeutet, dass ein externes Befehlszeilenprogramm aufgerufen und die Ausgabe analysiert wird)? Vielen Dank!Mittlere Amplitude einer .wav in C#
Antwort
Hier ist ein Snip, der ein Stereo-Wav einliest und die Daten in zwei Arrays ablegt. Es ist nicht getestet, weil ich einige Codes zu entfernen hatte (Umwandlung einen gleitenden Durchschnitt auf Mono und berechnet)
/// <summary>
/// Read in wav file and put into Left and right array
/// </summary>
/// <param name="fileName"></param>
private void ReadWavfiles(string fileName)
{
byte[] fa = File.ReadAllBytes(fileName);
int startByte = 0;
// look for data header
{
var x = 0;
while (x < fa.Length)
{
if (fa[x] == 'd' && fa[x + 1] == 'a' &&
fa[x + 2] == 't' && fa[x + 3] == 'a')
{
startByte = x + 8;
break;
}
x++;
}
}
// Split out channels from sample
var sLeft = new short[fa.Length/4];
var sRight = new short[fa.Length/4];
{
var x = 0;
var length = fa.Length;
for (int s = startByte; s < length; s = s + 4)
{
sLeft[x] = (short)(fa[s + 1] * 0x100 + fa[s]);
sRight[x] = (short)(fa[s + 3] * 0x100 + fa[s + 2]);
x++;
}
}
// do somthing with the wav data in sLeft and sRight
}
Wenn die WAV-Datei mono ist, könnte ich einfach sRight [x] = (kurz) auskommentieren (fa [s + 3] * 0x100 + fa [s + 2]); Linie und ändern s = s + 4 bis s = s +2? Ich bin nicht sehr vertraut mit dem WAV-Format. Vielen Dank! – BarrettJ
Ich auch nicht, aber ich denke, du könntest sRight einfach überspringen. – Nifle
Nehmen Sie die oben aufgeführten Änderungen vor und deklarieren Sie sLeft als "var sLeft = new short [fa.Length/2];" funktioniert in der Tat für Mono-Dateien. – BarrettJ
Normalerweise wird die root-mean-squared Methode verwendet, um die "mittlere" Amplitude von sin (x) -ähnlichen Signalen zu berechnen.
Die NAudio-Bibliothek für .NET klingt wie Ihre beste Wette. Es ermöglicht den Zugriff auf die Wellenform einer Audiodatei, die zur Berechnung des Werts der mittleren Amplitude durchlaufen werden kann.
zu erwähnen vergessen, dass die .wav-mono ist, wenn, dass die Situation nicht leichter/von anderen unterscheidet. – BarrettJ