I have managed to get DOSBox to utilize SDL_sound
support win32. Originally if one tried to do this 3
things would occur:
VS.NET would die explaining that there was a non-
existant function lround() in cdrom_image.cpp. This is
because the mathematical library Microsoft provides
does not contain lround().
VS.NET would die explaining there was an error
containing a ) after :: in cdrom_image.cpp.
VS.NET would die about a linking error due to missing
sdl_sound.lib (due to the fact SDL sound support was
not enabled originally requiring modification of the
Solution file).
I have managed to fix all this and it compiles
beautifully on Visual Studio .NET 2005 Professional
Final. Included is a patch that fixes the 2 code
errors in cdrom_image.cpp that VS.NET does not
understand, however it does not show the modifications
to the solutions file since I converted the one
included with DOSBox to Visual Studio .NET 2005
Professional.
An example of a successfully built DOSBox from CVS is
at http://www.prometheus-
designs.net/projects/dosbox/DOSBox-0.63.1-
Installer.msi which includes the new SDL_sound.dll and
built on VS.NET 2005. Enjoy!
SDL_sound code fix
Logged In: YES
user_id=1045474
Why not just use floor(...+.5) for all platforms? floor is ANSI C. No need to #ifdef anything.
Logged In: YES
user_id=1391319
This is true, I hadn't thought of it at the time since it
was a half-arsed patch. I should probably update it anyway
since Microsoft Visual Studio has to have the includes in
cdrom_image.cpp funny in order to compile. Proof:
include <limits.h>
MSVC 2005 cannot understand this include due to changes in
the std namespace. Solution fix is this:
include <limits>
After which it works perfectly fine.
Logged In: YES
user_id=218084
Speaking of which... that reminds me, we should be using
Sound_GetDuration() instead of trying to seek into the
sound until it fails.
At least under Windows, and using MP3 files, SDL_sound
always succeeds at seeking, and this makes the mounting of
MP3/CUE files impossible.
I think the universal and working function should be:
int CDROM_Interface_Image::AudioFile::getLength()
{
int length = Sound_GetDuration(sample);
return floor((double)length * 176.4f + 0.5f);
}
That function works under Windows and also it's a lot
faster than seeking.