support saving 8-bit samples as-is
This commit is contained in:
parent
cdbcf7fcd3
commit
4d44c577e7
|
@ -51,7 +51,14 @@ bool DivSample::save(const char* path) {
|
||||||
|
|
||||||
si.channels=1;
|
si.channels=1;
|
||||||
si.samplerate=rate;
|
si.samplerate=rate;
|
||||||
si.format=SF_FORMAT_PCM_16|SF_FORMAT_WAV;
|
switch (depth) {
|
||||||
|
case 8: // 8-bit
|
||||||
|
si.format=SF_FORMAT_PCM_U8|SF_FORMAT_WAV;
|
||||||
|
break;
|
||||||
|
default: // 16-bit
|
||||||
|
si.format=SF_FORMAT_PCM_16|SF_FORMAT_WAV;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
f=sf_open(path,SFM_WRITE,&si);
|
f=sf_open(path,SFM_WRITE,&si);
|
||||||
|
|
||||||
|
@ -77,7 +84,21 @@ bool DivSample::save(const char* path) {
|
||||||
}
|
}
|
||||||
sf_command(f, SFC_SET_INSTRUMENT, &inst, sizeof(inst));
|
sf_command(f, SFC_SET_INSTRUMENT, &inst, sizeof(inst));
|
||||||
|
|
||||||
sf_writef_short(f,data16,samples);
|
switch (depth) {
|
||||||
|
case 8: {
|
||||||
|
// convert from signed to unsigned
|
||||||
|
unsigned char* buf=new unsigned char[length8];
|
||||||
|
for (size_t i=0; i<length8; i++) {
|
||||||
|
buf[i]=data8[i]^0x80;
|
||||||
|
}
|
||||||
|
sf_write_raw(f,buf,length8);
|
||||||
|
delete[] buf;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
sf_write_raw(f,data16,length16);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
sf_close(f);
|
sf_close(f);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue