49 |
switch(Format & 0xF) { |
switch(Format & 0xF) { |
50 |
case SF_FORMAT_PCM_S8: |
case SF_FORMAT_PCM_S8: |
51 |
case SF_FORMAT_PCM_U8: |
case SF_FORMAT_PCM_U8: |
|
case SF_FORMAT_PCM_16: |
|
52 |
case SF_FORMAT_DPCM_8: |
case SF_FORMAT_DPCM_8: |
53 |
|
FrameSize = ChannelCount; |
54 |
|
break; |
55 |
|
case SF_FORMAT_PCM_16: |
56 |
case SF_FORMAT_DPCM_16: |
case SF_FORMAT_DPCM_16: |
57 |
FrameSize = sizeof(short) * ChannelCount; |
FrameSize = 2 * ChannelCount; |
58 |
|
break; |
59 |
|
case SF_FORMAT_PCM_24: |
60 |
|
case SF_FORMAT_DWVW_24: |
61 |
|
FrameSize = 3 * ChannelCount; |
62 |
break; |
break; |
63 |
default: |
default: |
64 |
FrameSize = sizeof(int) * ChannelCount; |
FrameSize = 2 * ChannelCount; |
65 |
} |
} |
66 |
TotalFrameCount = sfInfo.frames; |
TotalFrameCount = sfInfo.frames; |
67 |
|
|
70 |
|
|
71 |
SampleFile::~SampleFile() { |
SampleFile::~SampleFile() { |
72 |
Close(); |
Close(); |
73 |
|
ReleaseSampleData(); |
74 |
} |
} |
75 |
|
|
76 |
void SampleFile::Open() { |
void SampleFile::Open() { |
145 |
|
|
146 |
long SampleFile::Read(void* pBuffer, unsigned long FrameCount) { |
long SampleFile::Read(void* pBuffer, unsigned long FrameCount) { |
147 |
Open(); |
Open(); |
148 |
if(FrameSize == sizeof(short) * ChannelCount) { |
int bytes = sf_read_raw(pSndFile, pBuffer, FrameCount * GetFrameSize()); |
149 |
return sf_readf_short(pSndFile, (short*)pBuffer, FrameCount); |
return bytes / GetFrameSize(); |
|
} else { |
|
|
return sf_readf_int(pSndFile, (int*)pBuffer, FrameCount); |
|
|
} |
|
150 |
} |
} |
151 |
|
|
152 |
unsigned long SampleFile::ReadAndLoop ( |
unsigned long SampleFile::ReadAndLoop ( |
156 |
) { |
) { |
157 |
// TODO: |
// TODO: |
158 |
SetPos(pPlaybackState->position); |
SetPos(pPlaybackState->position); |
159 |
Read(pBuffer, FrameCount); |
unsigned long count = Read(pBuffer, FrameCount); |
160 |
pPlaybackState->position = GetPos(); |
pPlaybackState->position = GetPos(); |
161 |
|
return count; |
162 |
} |
} |
163 |
|
|
164 |
void SampleFile::ReleaseSampleData() { |
void SampleFile::ReleaseSampleData() { |