1 #include "nwavestream.h"
2 #include "../nSoundBag.h"
6 nWaveStream::nWaveStream(QIODevice *device, nSoundFormat format, int frequency, int channels, QObject *parent)
7 : nSoundStream(parent),
10 _frequency(frequency),
14 if(format == SF_WAVE_HEADER)
17 unsigned char header[44];
19 device->read(reinterpret_cast<char*>(header), 44);
20 _channels = header[22];
21 _frequency = header[24] + (((int)header[25])<<8) + (((int)header[26])<<16) + (((int)header[27])<<24);
22 _format = (_channels == 1?
23 (header[34]==16? SF_16BIT_MONO : SF_8BIT_MONO):
24 (header[34]==16? SF_16BIT_STEREO : SF_8BIT_STEREO)
26 int chunkSize = header[40] + (((int)header[41])<<8) + (((int)header[42])<<16) + (((int)header[43])<<24);
27 _totalFrames = chunkSize / nSoundFormat_getFramesize(_format);
31 if(channels < 0) channels = (format == SF_8BIT_STEREO || format == SF_16BIT_STEREO)? 2 : 1;
35 nSoundBag *nWaveStream::createSoundBag(QObject *parent)
37 nSoundBag * bag = new nSoundBag( _format, _totalFrames, _frequency );
38 read(bag->m_data, _totalFrames);
43 void nWaveStream::rewind()
48 quint64 nWaveStream::read(void *data, unsigned long frames)
50 return _device->read( (char *) data, nSoundFormat_getFramesize(_format) * frames ) / nSoundFormat_getFramesize(_format);