git-moss / ConvertWithMoss

Converts multisamples from a source format (WAV, multisample, KMP, wavestate, NKI, SFZ, SoundFont 2) to a different destination format.
https://www.mossgrabers.de/Software/ConvertWithMoss/ConvertWithMoss.html
GNU Lesser General Public License v3.0
190 stars 13 forks source link

"Sample chunks are not identical", the only change is the 'MIDI Unity Note' field #6

Closed ensonic closed 2 years ago

ensonic commented 2 years ago

For a bunch of conversions that fail, I get this error: https://github.com/git-moss/ConvertWithMoss/blob/6b5e05f47da06fd7dac19fc93bc8c3a4a2155fe8/src/main/java/de/mossgrabers/sampleconverter/de/mossgrabers/sampleconverter/file/wav/WaveFile.java#L210

I wrote a little python tool to dump the wav file and get this report:

 strings /tmp/wav.txt | grep Manuf | sort
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 36, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 36, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 42, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 42, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 48, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 48, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 54, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 54, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 60, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 60, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 66, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 66, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 72, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 72, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 78, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 78, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0

As you can see the sampled note is recorded to the MIDI Unity Note field. What do you think about ignoring this field in the comparison?

git-moss commented 2 years ago

Can you please post the original errors you see in the log? It seems to me that there are 2 mono files which could be combined to a stereo one. Maybe it is actually the detection which is not working? Ignoring the note is not helpful since you would have 2 different mono files in the stereo file which would playback with different pitch

ensonic commented 2 years ago
Analyzing: /home/ensonic/Samples/Sound Solutions/8-AnalogAge/d_seq-fx/tubular
Could not create multisample: Sample chunks are not identical.

then I do:

> cd /home/ensonic/Samples/Sound Solutions/8-AnalogAge
> for f in d_seq-fx/tubular/*.wav; do echo "$f"; python ~/projects/audio/riffinfo.py "$f"; done >/tmp/wav.txt
> strings /tmp/wav.txt | grep Manuf | sort
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 36, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 36, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 42, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 42, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 48, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 48, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 54, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 54, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 60, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 60, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 66, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 66, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 72, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 72, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 78, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 78, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 84, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0
Manufacturer: 71, Product 72, Sample Period: 22676, MIDI Unity Note: 84, MIDI Pitch Fraction: 0, SMPTE Format: 30, SMPTE Offset: 0, Num Loops: 8, Data: 0

> strings /tmp/wav.txt | grep .wav
d_seq-fx/tubular/tub_c1_l.wav
d_seq-fx/tubular/tub_c1_r.wav
d_seq-fx/tubular/tub_c2_l.wav
d_seq-fx/tubular/tub_c2_r.wav
d_seq-fx/tubular/tub_c3_l.wav
d_seq-fx/tubular/tub_c3_r.wav
d_seq-fx/tubular/tub_c4_l.wav
d_seq-fx/tubular/tub_c4_r.wav
d_seq-fx/tubular/tub_c5_l.wav
d_seq-fx/tubular/tub_c5_r.wav
d_seq-fx/tubular/tub_f#1_l.wav
d_seq-fx/tubular/tub_f#1_r.wav
d_seq-fx/tubular/tub_f#2_l.wav
d_seq-fx/tubular/tub_f#2_r.wav
d_seq-fx/tubular/tub_f#3_l.wav
d_seq-fx/tubular/tub_f#3_r.wav
d_seq-fx/tubular/tub_f#4_l.wav
d_seq-fx/tubular/tub_f#4_r.wav

I've reviewed more of the and also found a few where Manufacturer or Product is not set consistently (and I can write a tool to patch the files). The smpl chunk does not have any filed wrt number of channels and the sampel in this collection are all mono (with _l/_r in the filename).

git-moss commented 2 years ago

Did you try to set "_l" for the Mono->Stereo conversion? If yes, could you please send me these files for testing?

ensonic commented 2 years ago

Yep, I did set that. I share them in a minute via google drive (if that works for you).

git-moss commented 2 years ago

Thanks. I did change it to only check for same pitch. It is checked in if you want to build it yourself.

ensonic commented 2 years ago

Just tested and 4.0.1 was able to convert another 29 multisample. Thanks for the quick fix! Your tool also pointed me to some samples there badly named (from note names in the file-names)!