Exemplo n.º 1
0
BOOL WinSound::start(USER_CALLBACK pUserCallback) {
	userCallback = pUserCallback;
	// bufferSize is number of bytes per buffer
	bufferSize = (((WINSOUND_BUFFERLEN * WINSOUND_RATE) / 1000) * WINSOUND_SAMPLE_BYTES * WINSOUND_CHANNELS) / WINSOUND_BUFFERCOUNT;
	WAVEFORMATEX wfx;
	wfx.wFormatTag = WAVE_FORMAT_PCM;
	wfx.nChannels = WINSOUND_CHANNELS;
	wfx.nSamplesPerSec = WINSOUND_RATE;
	wfx.wBitsPerSample = WINSOUND_CHANNEL_DEPTH;
	wfx.nBlockAlign = wfx.nChannels * WINSOUND_SAMPLE_BYTES;
	wfx.nAvgBytesPerSec = wfx.nBlockAlign + wfx.nSamplesPerSec;
	wfx.cbSize = 0;
	MMRESULT errCode = waveOutOpen(&waveOut, WAVE_MAPPER, &wfx, (DWORD) waveOutProc, (DWORD) this, (DWORD) CALLBACK_FUNCTION);
	if (errCode != MMSYSERR_NOERROR) {
		return FALSE;
	}
	int i;
	for (i = 0; i < WINSOUND_BUFFERCOUNT; i++) {
		soundBuffer[i] = malloc(bufferSize);
		memset(&waveHeader[i], 0, sizeof(WAVEHDR));
	}
	// Fill all the sound buffers
	currentBuffer = 0;
	isStarted = TRUE;
	for (i = 0; i < WINSOUND_BUFFERCOUNT; i++) {
		fillNextBuffer();
	}
	return TRUE;
}
Exemplo n.º 2
0
void updatePlayback()
{
    for(int i=0; i<BufferCount; i++){
        if(! _buffers[i].isUsed){
            //printf("%c", 'A'+i);
            fillNextBuffer(_buffers[i].samples);
            writeBuffer(&_buffers[i]);
        }
    }
}
Exemplo n.º 3
0
bool CMMSoundSubSystem::open(USER_CALLBACK pUserCallback,long totalBufferedSoundLen) {
		m_pUserCallback = pUserCallback;
		m_bufferSize = ((totalBufferedSoundLen * REPLAY_RATE) / 1000) * REPLAY_SAMPLELEN;
		m_bufferSize /= REPLAY_NBSOUNDBUFFER;

		WAVEFORMATEX	wfx;
		wfx.wFormatTag = 1;		// PCM standart.
		wfx.nChannels = 2;		// Mono
		wfx.nSamplesPerSec = REPLAY_RATE;
		wfx.nAvgBytesPerSec = REPLAY_RATE*REPLAY_SAMPLELEN;
		wfx.nBlockAlign = REPLAY_SAMPLELEN;
		wfx.wBitsPerSample = REPLAY_DEPTH;
		wfx.cbSize = 0;
		MMRESULT errCode = waveOutOpen(	&m_hWaveOut,
										WAVE_MAPPER,
										&wfx,
										(DWORD)waveOutProc,
										(DWORD)this,					// User data.
										(DWORD)CALLBACK_FUNCTION);
		if (errCode != MMSYSERR_NOERROR) {
			printf(" -> OSME::sound callback-errCode : %d\n", errCode);
			return FALSE;
		}
		// Alloc the sample buffers.
		for (int i=0;i<REPLAY_NBSOUNDBUFFER;i++) {
			m_pSoundBuffer[i] = malloc(m_bufferSize);
			memset(&m_waveHeader[i],0,sizeof(WAVEHDR));
			memset(m_pSoundBuffer[i],0,m_bufferSize);
		}

		// Fill all the sound buffers
		m_currentBuffer = 0;
		for (int i=0;i<REPLAY_NBSOUNDBUFFER;i++) {
			fillNextBuffer();
		}

		return TRUE;
}