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.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);
|
||||
|
||||
|
@ -77,7 +84,21 @@ bool DivSample::save(const char* path) {
|
|||
}
|
||||
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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue