amplitude média de um .wav em C #
Pergunta
Alguém sabe uma maneira de obter a amplitude média de um arquivo .wav usando C # (mesmo que isso signifique chamando um programa de linha de comando fora e analisando a saída)? Obrigado!
Solução
Aqui está um recorte que lê em um wav estéreo e coloca os dados em duas matrizes. É testado porque eu tinha que remover algum código (convertendo para mono e calcular uma média móvel)
/// <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
}
Outras dicas
O NAudio biblioteca for .NET soa como sua melhor aposta. Ela permite o acesso à forma de onda de um arquivo de áudio, que pode varrer para calcular o valor da ampltiude média.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow