[libwin32] r564 committed - fix longstanding Win32::Sound::Volume bug (RT #28113 and #43776)

2 views
Skip to first unread message

libw...@googlecode.com

unread,
Jul 22, 2011, 3:05:06 PM7/22/11
to libwin32...@googlegroups.com
Revision: 564
Author: aldo.c...@gmail.com
Date: Fri Jul 22 12:04:11 2011
Log: fix longstanding Win32::Sound::Volume bug (RT #28113 and #43776)
http://code.google.com/p/libwin32/source/detail?r=564

Modified:
/trunk/Win32-Sound/Sound.pm
/trunk/Win32-Sound/Sound.xs

=======================================
--- /trunk/Win32-Sound/Sound.pm Fri Jun 13 18:12:25 2008
+++ /trunk/Win32-Sound/Sound.pm Fri Jul 22 12:04:11 2011
@@ -94,9 +94,9 @@

sub Volume {
my(@in) = @_;
- # Allows '0%'..'100%'
- $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*100/255) }ex if defined $in[0];
- $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*100/255) }ex if defined $in[1];
+ # Allows '0%'..'100%'
+ $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*65535/100) }ex if defined $in[0];
+ $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*65535/100) }ex if defined $in[1];
_Volume(@in);
}

@@ -134,9 +134,9 @@

sub Volume {
my(@in) = @_;
- # Allows '0%'..'100%'
- $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*255/100) }ex if defined $in[0];
- $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*255/100) }ex if defined $in[1];
+ # Allows '0%'..'100%'
+ $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*65535/100) }ex if defined $in[0];
+ $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*65535/100) }ex if defined $in[1];
_Volume(@in);
}

=======================================
--- /trunk/Win32-Sound/Sound.xs Wed Feb 27 18:23:59 2008
+++ /trunk/Win32-Sound/Sound.xs Fri Jul 22 12:04:11 2011
@@ -348,8 +348,8 @@
if(mmr == MMSYSERR_NOERROR) {
if(GIMME == G_ARRAY) {
EXTEND(SP, 2);
- XST_mIV(0, (long) volume & 0x00FF);
- XST_mIV(1, (long) (volume & 0xFF00) >> 8);
+ XST_mIV(0, (long) volume & 0x0000FFFF);
+ XST_mIV(1, (long) (volume >> 16) & 0x0000FFFF);
XSRETURN(2);
} else {
XSRETURN_IV(volume);
@@ -360,7 +360,7 @@
}
break;
case 1:
- volume = SvIV(ST(0)) | SvIV(ST(0)) << 8;
+ volume = SvIV(ST(0)) | SvIV(ST(0)) << 16;
mmr = waveOutSetVolume((HWAVEOUT) WAVE_MAPPER, volume);
if(mmr == MMSYSERR_NOERROR) {
XSRETURN_YES;
@@ -370,7 +370,7 @@
}
break;
default:
- volume = SvIV(ST(0)) | SvIV(ST(1)) << 8;
+ volume = SvIV(ST(0)) | SvIV(ST(1)) << 16;
mmr = waveOutSetVolume((HWAVEOUT) WAVE_MAPPER, volume);
if(mmr == MMSYSERR_NOERROR) {
XSRETURN_YES;

Reply all
Reply to author
Forward
0 new messages