2016-10-19 1 views
0

Je suis nouveau à Naudio et l'utiliser pour obtenir des données PCM à partir de fichiers MP3, c'est mon code pour prendre PCM du fichier mono-canal, mais je ne sais pas comment le faire avec le fichier canal stéréocomment obtenir des données PCM à partir du canal stéréo mp3 en utilisant Naudio en C#

code:

Mp3FileReader file = new Mp3FileReader(op.FileName); 
int _Bytes = (int)file.Length; 
byte[] Buffer = new byte[_Bytes]; 
file.Read(Buffer, 0, (int)_Bytes); 
for (int i = 0; i < Buffer.Length - 2; i += 2) 
{ 
    byte[] Sample_Byte = new byte[2]; 
    Sample_Byte[0] = Buffer[i + 1]; 
    Sample_Byte[1] = Buffer[i + 2]; 
    Int16 _ConvertedSample = BitConverter.ToInt16(Sample_Byte, 0); 
} 

Comment puis-je obtenir PCM du canal stéréo fichier mp3?

Répondre

0

Dans un fichier stéréo, les échantillons sont intercalés: un échantillon de canal gauche suivi d'un canal droit, etc. Donc, dans votre boucle, vous pouvez passer par quatre octets à la fois de lire les échantillons.

Il y a aussi quelques bugs dans votre code. Vous devez utiliser la valeur de retour de lecture, pas la taille de la mémoire tampon, et vous avez un hors d'une erreur dans le code pour accéder aux échantillons. En outre, pas besoin de copier dans un tampon temporaire.

Quelque chose comme cela devrait fonctionner pour vous:

var file = new Mp3FileReader(fileName); 
int _Bytes = (int)file.Length; 
byte[] Buffer = new byte[_Bytes]; 

int read = file.Read(Buffer, 0, (int)_Bytes); 
for (int i = 0; i < read; i += 4) 
{ 
    Int16 leftSample = BitConverter.ToInt16(Buffer, i); 
    Int16 rightSample = BitConverter.ToInt16(Buffer, i + 2); 
} 
+0

Je voudrais vraiment si vous modifiez mon code question afin que d'autres personnes ne reçoivent pas miss-guidés par mon mauvais code, je ne peux pas le faire parce que je peux écrire quelque chose de mal à nouveau :) –