fix sound on platforms where 'unsigned long' is only 32 bits wide #173
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Commit 1d5f921 introduced a bit shift
that is too wide on 32 bit platforms. This results in the volume of
all channels being set to zero in the internal mixer.
Problem observed on a Raspberry Pi Zero W, where the compiler also
complains:
libgambatte/src/sound.cpp:106:63:
warning: right shift count >= width of type [-Wshift-count-overflow]
ch1_.update(buf, (soChVol_[0] * soVol_ * 0x1999999A) >> 32, cycles);
^~
Fix this problem by expanding the constant 0x1999999A to unsigned long long
via the 'ULL' suffix. This results in all values in the expression being
promoted to 'unsigned long long', which is 64 bit wide everywhere.