diff --git a/src/dsdiff/DsdiffParser.ts b/src/dsdiff/DsdiffParser.ts index ae40c053c..0efeca874 100644 --- a/src/dsdiff/DsdiffParser.ts +++ b/src/dsdiff/DsdiffParser.ts @@ -77,8 +77,8 @@ export class DsdiffParser extends BasicParser { break; case 'DSD': - const duration = header.chunkSize * 8 / (this.metadata.format.numberOfChannels * this.metadata.format.sampleRate); // ToDO: not sure if this is correct - this.metadata.setFormat('duration', duration); + this.metadata.setFormat('numberOfSamples', header.chunkSize * 8 / this.metadata.format.numberOfChannels); + this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate); break; } diff --git a/test/samples/dsdiff/DSD64.dff b/test/samples/dsdiff/DSD64.dff new file mode 100644 index 000000000..7e62268a8 Binary files /dev/null and b/test/samples/dsdiff/DSD64.dff differ diff --git a/test/test-dsdiff.ts b/test/test-dsdiff.ts new file mode 100644 index 000000000..ae45f5f64 --- /dev/null +++ b/test/test-dsdiff.ts @@ -0,0 +1,35 @@ +import {assert} from 'chai'; +import * as mm from '../src'; +import * as path from 'path'; + +describe('Parse Philips DSDIFF', () => { + + const dsdiffamplePath = path.join(__dirname, 'samples', 'dsdiff'); + + it('parse: DSD64.dff', async () => { + + const filePath = path.join(dsdiffamplePath, 'DSD64.dff'); + + const {format, common} = await mm.parseFile(filePath, {duration: false}); + + // format chunk information + assert.strictEqual(format.dataformat, 'DSDIFF/DSD'); + assert.deepEqual(format.lossless, true); + assert.deepEqual(format.tagTypes, ['ID3v2.3']); + assert.deepEqual(format.numberOfChannels, 2, 'format.numberOfChannels'); + assert.deepEqual(format.bitsPerSample, 1, 'format.bitsPerSample'); + assert.deepEqual(format.sampleRate, 2822400, 'format.sampleRate [Hz]'); + assert.deepEqual(format.numberOfSamples, 300800, 'format.numberOfSamples'); + assert.deepEqual(format.duration, 300800 / 2822400, 'format.duration'); + assert.deepEqual(format.bitrate, 5644800, 'format.bitrate'); + assert.deepEqual(format.tagTypes, ['ID3v2.3'], 'TAG headers'); + + // ID3v2 chunk information + assert.strictEqual(common.artist, 'CANTUS (Tove Ramlo-Ystad) & Frode Fjellheim', 'common.artist'); + assert.strictEqual(common.title, 'Kyrie', 'common.title'); + assert.strictEqual(common.album, 'SPES', 'common.album'); + assert.deepEqual(common.genre, ['Choral'], 'common.genre'); + assert.deepEqual(common.track, {no: 4, of: 12}, 'common.track'); + }); + +});