Avatar billede gotler Nybegynder
17. november 2010 - 13:45 Der er 2 kommentarer og
1 løsning

MP3 decoding til PCM byte stream

Jeg skal analysere lydfiler, og for at kunne gøre dette på mp3 filer bruger jeg en mp3-decoder ved navn MP3Stream, som extender Stream classen. Jeg bruger følgende kode til at få filens PCM data ud i et byte array:

string Mp3FilePath = @"C:\Users\gotler\Desktop\Zombie.mp3";
Mp3Stream stream = new Mp3Stream(Mp3FilePath);
// Create the buffer
int numberOfPcmBytesToReadPerChunk = 512;
byte[] buffer = new byte[numberOfPcmBytesToReadPerChunk];
List<byte> tempPCM = new List<byte>();

int bytesReturned = -1;
int totalBytes = 0;
while (bytesReturned != 0){
    bytesReturned = stream.Read(buffer, 0, buffer.Length);
    //Console.WriteLine(buffer[5]);
    tempPCM.AddRange(buffer);
    totalBytes += bytesReturned;
}

Herefter burde tempPCM indeholde min PCM byte stream. Men listen er alt for lang, med over 58 mio. pladser for en 331 sekunder sang ved 44100 hz samplerate. Og indholdet ligner bare støj, i stedet for "lyd-bølger".

På forhånd tak.
Avatar billede arne_v Ekspert
18. november 2010 - 02:06 #1
tempPCM.AddRange(buffer);

ser ihvertfald meget suspekt ud.

Du læser et antal mellem 1 og 512 bytes og uanset hvad putter du 512 bytes i din List<>.

Det kan vist ikke passe.
Avatar billede gotler Nybegynder
18. november 2010 - 09:09 #2
Det er rigtigt, men jeg læser altid 512 bytes, med mindre der er færre tilbage i streamen. bytesReturned er i hvert fald 512 alle gange undtagen sidste gang.
Avatar billede gotler Nybegynder
16. februar 2011 - 13:22 #3
Svaar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester