68 lines
2.4 KiB
Diff
68 lines
2.4 KiB
Diff
From 7ea3f9d8746000cc82c016d0b5d48452bb80e9fe Mon Sep 17 00:00:00 2001
|
|
From: Michael Panzlaff <michael.panzlaff@fau.de>
|
|
Date: Sat, 28 Apr 2018 23:21:34 +0200
|
|
Subject: [PATCH 1/1] src/wav.c: Fix WAV Sampler Chunk tune parsing
|
|
|
|
Fix parsing of instrument fine tuning instrument field. There is still
|
|
a possible rounding error involved which might require further
|
|
investigation at some stage.
|
|
|
|
Update the test as well.
|
|
|
|
Signed-off-by: chenmaodong <chenmaodong@huawei.com>
|
|
---
|
|
src/wav.c | 9 +++++----
|
|
tests/command_test.c | 1 -
|
|
2 files changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/wav.c b/src/wav.c
|
|
index dc97545..04bf844 100644
|
|
--- a/src/wav.c
|
|
+++ b/src/wav.c
|
|
@@ -1282,7 +1282,7 @@ static int
|
|
wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen)
|
|
{ char buffer [512] ;
|
|
uint32_t thisread, bytesread = 0, dword, sampler_data, loop_count ;
|
|
- uint32_t note, start, end, type = -1, count ;
|
|
+ uint32_t note, pitch, start, end, type = -1, count ;
|
|
int j, k ;
|
|
|
|
chunklen += (chunklen & 1) ;
|
|
@@ -1299,10 +1299,10 @@ wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen)
|
|
bytesread += psf_binheader_readf (psf, "4", ¬e) ;
|
|
psf_log_printf (psf, " Midi Note : %u\n", note) ;
|
|
|
|
- bytesread += psf_binheader_readf (psf, "4", &dword) ;
|
|
- if (dword != 0)
|
|
+ bytesread += psf_binheader_readf (psf, "4", &pitch) ;
|
|
+ if (pitch != 0)
|
|
{ snprintf (buffer, sizeof (buffer), "%f",
|
|
- (1.0 * 0x80000000) / ((uint32_t) dword)) ;
|
|
+ (1.0 * 0x80000000) / ((uint32_t) pitch)) ;
|
|
psf_log_printf (psf, " Pitch Fract. : %s\n", buffer) ;
|
|
}
|
|
else
|
|
@@ -1408,6 +1408,7 @@ wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen)
|
|
} ;
|
|
|
|
psf->instrument->basenote = note ;
|
|
+ psf->instrument->detune = (int8_t)(pitch / (0x40000000 / 25.0) + 0.5) ;
|
|
psf->instrument->gain = 1 ;
|
|
psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ;
|
|
psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ;
|
|
diff --git a/tests/command_test.c b/tests/command_test.c
|
|
index f879659..c3e7c86 100644
|
|
--- a/tests/command_test.c
|
|
+++ b/tests/command_test.c
|
|
@@ -768,7 +768,6 @@ instrument_test (const char *filename, int filetype)
|
|
** write_inst struct to hold the default value that the WAV
|
|
** module should hold.
|
|
*/
|
|
- write_inst.detune = 0 ;
|
|
write_inst.key_lo = write_inst.velocity_lo = 0 ;
|
|
write_inst.key_hi = write_inst.velocity_hi = 127 ;
|
|
write_inst.gain = 1 ;
|
|
--
|
|
1.8.3.1
|
|
|