Ik heb een applicatie die een wave-bestand uitleest:
Het bestandsformaat is als volgt:
m_buffer.constData() is een char, en ik wil er dus een qint16* uit krijgen zodat die gecast kan worden naar een qint16 waarmee ik kan plotten.
Iemand een schop in de juiste richting?
C++:
In deze QByteArray staat dus nu de volledige inhoud van de file. Nou wil ik echter deze file uit gaan lezen. Hij bestaat uit 16bit integers. De Wave-header heb ik een functie voor:1
| QByteArray m_buffer = m_wavfile->readAll(); |
C++:
m_wavfile->headerLength() is een uint64 en moet dus gecast worden, op zich wel te doen. De bedoelig is dat er na de header de data van 1 spoor wordt uitgelezen. De snelheid is 44000 Hz, en het is dus 16 bit PCM.1
2
3
4
5
| for (int i=0; i<m_wavfile->size() - (m_wavfile->headerLength() / m_format.channels() / 2); ++i) { const qint16* ptr = m_buffer.constData() + i * m_format.channels(); const qint16 pcmValue = *ptr; // Gebruik pcmValue voor plotten } |
Het bestandsformaat is als volgt:
code:
Waar ik nu op stuk loop hoe ik een pointer krijg naar de m_buffer op bijvoorbeeld regel 2 en 4 uit het bovenstaande stukje.1
2
3
4
5
6
| Header: lengte is headerLength() int16 links (kanaal 1) int16 recht (kanaal 2) int16 links (kanaal 1) int16 recht (kanaal 2) ..etc tot eof |
m_buffer.constData() is een char, en ik wil er dus een qint16* uit krijgen zodat die gecast kan worden naar een qint16 waarmee ik kan plotten.
Iemand een schop in de juiste richting?
Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!