Hallo zusammen,
für ein Microcontrollerprojekt muss ich eine MP3-Datei stark abspecken, damit der kleine Controller nicht überfordert ist.
Mittels MP3Sharp dekodiere ich die MP3-Datei in ihre PCM-Rohdaten.
Dann durchlaufe ich diese Daten und versuche sie entsprechend zu filtern.
Der Schritt Stereo --> Mono hat nach einigen Testen auch gut geklappt, allerdings kriege ich das 16Bit --> 8 Bit nicht hin.
Wenn ich die Datei mit CoolEditPro öffne, wird sie im Intel 16bit-PCM Format (LSB, MSB) korrekt abgespielt, also dachte ich mir, dass mir im zweiten Schritt einfach nur jedes zweites Byte (immer das MSB) nehmen kann um damit eine 8Bit-Version zu erschaffen.
Hier mein Code:
Habt ihr da vielleicht irgendwelche Ideen oder Vorschläge?
für ein Microcontrollerprojekt muss ich eine MP3-Datei stark abspecken, damit der kleine Controller nicht überfordert ist.
Mittels MP3Sharp dekodiere ich die MP3-Datei in ihre PCM-Rohdaten.
Dann durchlaufe ich diese Daten und versuche sie entsprechend zu filtern.
Der Schritt Stereo --> Mono hat nach einigen Testen auch gut geklappt, allerdings kriege ich das 16Bit --> 8 Bit nicht hin.
Wenn ich die Datei mit CoolEditPro öffne, wird sie im Intel 16bit-PCM Format (LSB, MSB) korrekt abgespielt, also dachte ich mir, dass mir im zweiten Schritt einfach nur jedes zweites Byte (immer das MSB) nehmen kann um damit eine 8Bit-Version zu erschaffen.
Hier mein Code:
C#:
byte[] audioLinkBuffer = new byte[1000];
while (m_MP3Stream.Read(audioLinkBuffer, 0, audioLinkBuffer.Length) != 0)
{
byte[] b = new byte[audioLinkBuffer.Length / 2];
int k = 0;
for (int i = 1; i < audioLinkBuffer.Length; i += 4)
{
for (int j = 0; j <= 1; j++)
{
b[k] = audioLinkBuffer[i + j - 1]; // Aus Stereo mach Mono
k++;
}
}
k = 0;
byte[] c = new byte[b.Length / 2];
for (int i = 0; i + 1 < c.Length; i += 2)
{
c[k] = b[i + 1]; // Nur High-Byte filtern (funktioniert nicht)
k++;
}
outputStream.Write(c, 0, c.Length);
}
outputStream.Flush();
outputStream.Close();
Habt ihr da vielleicht irgendwelche Ideen oder Vorschläge?