ID Number: Q71150
1.00
WINDOWS
Summary:
An application that allocates buffers for data to be passed to the
waveOutPrepareHeader and waveOutWrite functions should use the
GlobalAlloc function and specify the GMEM_MOVEABLE and GMEM_SHARE
attributes. GMEM_MOVEABLE is required due to a problem with Microsoft
Windows version 3.0 that causes fixed memory blocks to be page locked.
(This problem has been fixed in Windows 3.1.) GMEM_SHARE is required
so that the application will be compatible with future versions of
Windows.
MS-DOS I/O (input and output) performance is often better when buffer
memory is allocated by the GlobalDosAlloc function. However,
GlobalDosAlloc memory is very limited because it is allocated from the
physical memory addressed below 1 MB (MS-DOS memory). Because most of
this memory is used by MS-DOS, terminate-and-stay-resident programs
(TSRs), and Windows itself, very little memory is available for
application program use. Allocations of more than 4K are likely not to
succeed. This small limit is in direct conflict with the 32K optimum
read size for a CD-ROM device.
To achieve acceptable performance with the large amounts of data
associated with CD-ROM based applications, it is necessary to use
large (32K) buffers. Use the GlobalAlloc function to allocate the
buffer.
In the present implementation of the Multimedia Extensions to
Microsoft Windows, the waveOut* functions accept memory blocks
allocated with GlobalDosAlloc. However, this behavior is not
guaranteed and may change in future versions of Windows.
Additional reference words: 1.00