Article ID: 153866
Article Last Modified on 5/11/2007
#define WAVE_FORMAT_GSM610 (0x0031)
typedef struct gsm610waveformat_tag
{
WAVEFORMATEX wfx;
WORD wSamplesPerBlock;
} GSM610WAVEFORMAT;
typedef GSM610WAVEFORMAT FAR *LPGSM610WAVEFORMAT;
Declare a handle for memory allocation and a pointer to a GSM610WAVEFORMAT
struct similar to the following:
HANDLE hgsmwavefmt; LPGSM610WAVEFORMAT pgsmwavefmt;Allocate and lock memory for the GSM610WAVEFORMAT struct similar to the following:
hgsmwavefmt = GlobalAlloc(GMEM_MOVEABLE,
(UINT)(sizeof(GSM610WAVEFORMAT)));
pgsmwavefmt = (LPGSM610WAVEFORMAT)GlobalLock(hgsmwavefmt);
Fill in the GSM610WAVEFORMAT struct's members using the values shown in
assigning data to the struct's members. The exception is that pgsmwavefmt-
>wfx.nSamplesPerSec can be a rate other than 8000, in which case
pgsmwavefmt->wfx.nAvgBytesPerSec is computed as (pgsmwavefmt-
>wfx.nSamplesPerSec)/320*65. When using a value for pgsmwavefmt-
>wfx.nSamplesPerSec other than 8000, be sure it is a multiple of the 320
block size, and falls within the limits supported by the sound card. For
example, pgsmwavefmt->wfx.nSamplesPerSec = 9920 is valid because it is a
multiple of 320 and does not fall below the minimum sampling rate of 8000
found on many sound cards:
pgsmwavefmt->wfx.wFormatTag = WAVE_FORMAT_GSM610; pgsmwavefmt->wfx.nChannels = 1; pgsmwavefmt->wfx.nSamplesPerSec = 8000; pgsmwavefmt->wfx.nAvgBytesPerSec = 1625; pgsmwavefmt->wfx.nBlockAlign = 65; pgsmwavefmt->wfx.wBitsPerSample = 0; pgsmwavefmt->wfx.cbSize = 2; pgsmwavefmt->wSamplesPerBlock = 320;Call waveInOpen() with the WAVE_MAPPER option, and be sure the third parameter is just the address of the GSM610WAVEFORMAT struct's WAVEFORMATEX struct:
waveInOpen(&hwavein, (UINT)WAVE_MAPPER,
(LPWAVEFORMATEX)&(pgsmwavefmt->wfx),
(DWORD)(UINT)hwnd, (DWORD)NULL, CALLBACK_WINDOW);
Additional query words: 3.51 4.00
Keywords: kbmm KB153866