diff --git a/.changeset/fix-pitch-bend-signed.md b/.changeset/fix-pitch-bend-signed.md new file mode 100644 index 0000000..64b767b --- /dev/null +++ b/.changeset/fix-pitch-bend-signed.md @@ -0,0 +1,7 @@ +--- +"@9c5s/node-tcnet": patch +--- + +pitchBendを符号付き16bitで読み取るよう修正 + +`readUInt16LE`を`readInt16LE`に変更し、負のピッチ値が正しく負の数値として返されるようにした。 diff --git a/src/network.ts b/src/network.ts index 26b4dc2..9ad0639 100644 --- a/src/network.ts +++ b/src/network.ts @@ -574,7 +574,7 @@ export class TCNetDataPacketMetrics extends TCNetDataPacket { speed: this.buffer.readUInt32LE(40), beatNumber: this.buffer.readUInt32LE(57), bpm: this.buffer.readUInt32LE(112), - pitchBend: this.buffer.readUInt16LE(116), + pitchBend: this.buffer.readInt16LE(116), trackID: this.buffer.readUInt32LE(118), }; } diff --git a/tests/packet-parsers.test.ts b/tests/packet-parsers.test.ts index 0930cff..6618833 100644 --- a/tests/packet-parsers.test.ts +++ b/tests/packet-parsers.test.ts @@ -544,7 +544,7 @@ describe("TCNetDataPacketMetrics", () => { buffer.writeUInt32LE(100000, 40); // speed buffer.writeUInt32LE(4, 57); // beatNumber buffer.writeUInt32LE(14000, 112); // bpm (= 140.00 BPM * 100) - buffer.writeUInt16LE(40000, 116); // pitchBend (32768=100%) + buffer.writeInt16LE(600, 116); // pitchBend (+6.00%) buffer.writeUInt32LE(777, 118); // trackID const packet = new TCNetDataPacketMetrics(); @@ -564,7 +564,7 @@ describe("TCNetDataPacketMetrics", () => { expect(packet.data!.speed).toBe(100000); expect(packet.data!.beatNumber).toBe(4); expect(packet.data!.bpm).toBe(14000); - expect(packet.data!.pitchBend).toBe(40000); + expect(packet.data!.pitchBend).toBe(600); expect(packet.data!.trackID).toBe(777); }); @@ -580,9 +580,11 @@ describe("TCNetDataPacketMetrics", () => { }); it.each([ - { value: 0, label: "最小値" }, - { value: 32768, label: "100%基準" }, - { value: 65535, label: "最大値" }, + { value: 0, label: "ピッチ変更なし" }, + { value: 600, label: "+6.00%" }, + { value: -600, label: "-6.00%" }, + { value: 32767, label: "最大値" }, + { value: -32768, label: "最小値" }, ])("pitchBend=$value ($label) を正しくパースする", ({ value }) => { const buffer = Buffer.alloc(122); buffer.writeUInt8(3, 2); @@ -590,7 +592,7 @@ describe("TCNetDataPacketMetrics", () => { buffer.writeUInt8(200, 7); buffer.writeUInt8(2, 24); buffer.writeUInt8(1, 25); - buffer.writeUInt16LE(value, 116); + buffer.writeInt16LE(value, 116); const packet = new TCNetDataPacketMetrics(); packet.buffer = buffer; packet.header = createHeader(buffer);