Если вы просто используете функции waveOut в Windows API, третий параметр waveOutOpen
- это указатель на структуру WAVEFORMATEX
:
MMRESULT waveOutOpen(
LPHWAVEOUT phwo,
UINT_PTR uDeviceID,
LPWAVEFORMATEX pwfx,
DWORD_PTR dwCallback,
DWORD_PTR dwCallbackInstance,
DWORD fdwOpen
);
Структура WAVEFORMATEX
позволяет вам указать формат, и Windows должна иметь возможность выполнять u-Law без необходимости устанавливать что-либо.
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
}WAVEFORMATEX;
Установите wFormatTag
на WAVE_FORMAT_MULAW
или 0x0007. Убедитесь, что вы правильно заполнили другие параметры для 1 канала с 8000 выборками / с и 8 битами / выборкой.
Если это не помогло, пожалуйста, отправьте код, где вы открываете аудиоустройство и воспроизводите файл. Или вот реализация delphi декодирования u-Law в линейный PCM (ulawDecode
), так что вы можете декодировать его самостоятельно:
http://www.koders.com/delphi/fidEAA58384F59968FEDD0670F6EABF09DF3A5C58A5.aspx?s=algorithm#L19