Quelqu'un sait-il un moyen d'obtenir l'amplitude moyenne d'un fichier .wav en utilisant C# (même si cela signifie appeler un programme de ligne de commande à l'extérieur et l'analyse syntaxique de la sortie)? Merci!amplitude moyenne d'un .wav en C#
Répondre
Voici un snip qui lit dans un wav stéréo et met les données dans deux tableaux. Il est non testé parce que je devais retirer un peu de code (conversion en mono et calculer une moyenne mobile)
/// <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
}
Si le fichier wav est mono, serais-je capable de commenter le sRight [x] = (court) (fa [s + 3] * 0x100 + fa [s + 2]); ligne et changez s = s + 4 à s = s +2? Je ne suis pas très familier avec le format wav. Merci! – BarrettJ
Pas moi non plus mais je pense que vous pourriez juste sauter sRight. – Nifle
Faire les changements que j'énumérés ci-dessus et en déclarant sLeft comme "var = new sLeft court [fa.Length/2];" fonctionne en effet pour les fichiers mono. – BarrettJ
Normalement, la méthode root-mean-squared est utilisée pour calculer la « moyenne » amplitude de sin (x) des signaux -comme.
La bibliothèque NAudio pour .NET sonne comme votre meilleur pari. Il permet d'accéder à la forme d'onde d'un fichier audio, qui peut faire une boucle pour calculer la valeur de l'amplitude moyenne.
oublié de mentionner que le .wav est mono, si cela rend la situation plus facile/différente. – BarrettJ