2362N/A * or visit www.oracle.com if you need additional information or have any
0N/A#ifndef WIN32_EXTRA_LEAN
0N/A#ifndef WIN32_LEAN_AND_MEAN
0N/A#include <mmsystem.h>
0N/A#ifdef __cplusplus
0N/A #include "DirectAudio.h"
0N/A#ifdef __cplusplus
0N/A#ifdef USE_DEBUG_SILENCING
0N/A for (i = 0; i < g_cacheCount; i++) {
0N/A for (i = 0; i < g_cacheCount; i++) {
0N/A g_cacheCount++;
0N/A///// implemented functions of DirectAudio.h
0N/A if (!DS_lockCache()) {
0N/A if (g_lastCacheRefreshTime == 0
0N/A || (UINT64) timeGetTime() > (UINT64) (g_lastCacheRefreshTime + WAIT_BETWEEN_CACHE_REFRESH_MILLIS)) {
0N/A if (cacheIndex == 0) {
0N/A return g_mixerCount;
0N/AINT32 DAUDIO_GetDirectAudioDeviceDescription(INT32 mixerIndex, DirectAudioDeviceDescription* desc) {
0N/A if (!DS_lockCache()) {
0N/A/* multi-channel info: http://www.microsoft.com/whdc/hwdev/tech/audio/multichaud.mspx */
0N/A//static UINT32 sampleRateArray[] = { 8000, 11025, 16000, 22050, 32000, 44100, 48000, 56000, 88000, 96000, 172000, 192000 };
0N/A#ifndef _LITTLE_ENDIAN
0N/A /* size of the read/write-ahead, as specified by Java */
0N/A case DSERR_ALLOCATED:
0N/A case DSERR_CONTROLUNAVAIL:
0N/A case DSERR_INVALIDPARAM:
0N/A case DSERR_INVALIDCALL:
0N/A case DSERR_GENERIC:
0N/A case DSERR_PRIOLEVELNEEDED:
0N/A case DSERR_OUTOFMEMORY:
0N/A case DSERR_BADFORMAT:
0N/A case DSERR_UNSUPPORTED:
0N/A case DSERR_NODRIVER:
0N/A case DSERR_ALREADYINITIALIZED:
0N/A case DSERR_NOAGGREGATION:
0N/A case DSERR_BUFFERLOST:
0N/A case DSERR_OTHERAPPHASPRIO:
0N/A case DSERR_UNINITIALIZED:
0N/A // won't delete startEvent/startedEvent/crit_sect
2974N/A ::CoUninitialize();
0N/A if (!isInitialized()) {
0N/A#ifndef _WAVEFORMATEXTENSIBLE_
0N/A#if !defined(WAVE_FORMAT_EXTENSIBLE)
0N/A#if !defined(DEFINE_WAVEFORMATEX_GUID)
0N/A#define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
0N/A int sampleRate,
0N/A int significantBits) {
0N/A format->Format.nBlockAlign = (WORD)((format->Format.wBitsPerSample * format->Format.nChannels) / 8);
0N/A if (fromWritePos) {
0N/A DEBUG_SILENCING2(" DS_clearBuffer: DS playPos=%d myWritePos=%d", (int) playCursor, (int) info->writePos);
0N/A if ((int) playCursor >= info->dsBufferSizeInBytes) playCursor -= (DWORD) info->dsBufferSizeInBytes;
0N/A if (!fromWritePos) {
0N/A DEBUG_SILENCING2(" silencedBytes=%d, my writePos=%d\n", (int)info->silencedBytes, (int)info->writePos);
0N/A float sampleRate,
0N/A int sampleSizeInBits,
0N/A int bufferSizeInBytes) {
0N/A (int) sampleRate,
0N/A ERROR1("DS_createSoundBuffer: ERROR: Failed to create sound buffer: %s", TranslateDSError(res));
0N/A ERROR0("DAUDIO_Open: ERROR: Cache is corrupt: cannot open the device in specified isSource mode!\n");
0N/A#ifdef _LITTLE_ENDIAN
0N/A // this may occur after Stop(), when writeCursor decreases (real valid data size > bufferSizeInBytes)
0N/A // workaround: sometimes DirectSound report writeCursor is less (for several bytes) then playCursor
0N/A processing = 0;
0N/A if (fromPlayCursor) {
0N/A int currWriteAhead = DS_getDistance(info, fromPlayCursor ? (int)*playCursor : (int)*writeCursor, info->writePos);
0N/A if (fromPlayCursor) {
0N/A if (fromPlayCursor) {
0N/A if (newReadPos < 0) {
0N/A while (--bufferLostTrials > 0) {
0N/A available = DS_GetAvailable(info, &playCursor, &writeCursor, &bufferSize, FALSE /* fromPlayCursor */);
0N/A DEBUG_SILENCING2("DAUDIO_Write: writing from %d, count=%d\n", (int) thisWritePos, (int) byteSize);
0N/A } else buffer1len = 0;
0N/A } else buffer2len = 0;
0N/A available = DS_GetAvailable(info, &captureCursor, &readCursor, &bufferSize, FALSE /* fromCaptureCursor? */);
0N/A thisReadPos = 0;
0N/A } else buffer1len = 0;
0N/A } else buffer2len = 0;
0N/A available = DS_GetAvailable(info, &playCursor, &writeCursor, &bufferSize, TRUE /* fromPlayCursor */);
0N/A ret = DS_GetAvailable(info, &playCursor, &writeCursor, &bufferSize, /*fromPlayCursor?*/ FALSE);
0N/AINT64 estimatePositionFromAvail(DS_Info* info, INT64 javaBytePos, int bufferSize, int availInBytes) {
0N/A available = DS_GetAvailable(info, &playCursor, &writeCursor, &bufferSize, /*fromPlayCursor?*/ TRUE);