本文整理汇总了C++中WaveFile::Read方法的典型用法代码示例。如果您正苦于以下问题:C++ WaveFile::Read方法的具体用法?C++ WaveFile::Read怎么用?C++ WaveFile::Read使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WaveFile
的用法示例。
在下文中一共展示了WaveFile::Read方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteWaveData
// WriteWaveData
//
// Writes wave data to sound buffer. This is a helper method used by Create and
// ServiceBuffer; it's not exposed to users of the AudioStream class.
BOOL AudioStream::WriteWaveData (UINT size, UINT *num_bytes_written, int service)
{
HRESULT hr;
LPBYTE lpbuf1 = NULL;
LPBYTE lpbuf2 = NULL;
DWORD dwsize1 = 0;
DWORD dwsize2 = 0;
DWORD dwbyteswritten1 = 0;
DWORD dwbyteswritten2 = 0;
BOOL fRtn = SUCCESS;
unsigned char *uncompressed_wave_data;
*num_bytes_written = 0;
if ( size == 0 || m_bReadingDone ) {
return fRtn;
}
if ( !m_pdsb || !m_pwavefile ) {
return fRtn;
}
if ( service ) {
EnterCriticalSection(&Global_service_lock);
}
if ( service ) {
uncompressed_wave_data = Wavedata_service_buffer;
} else {
uncompressed_wave_data = Wavedata_load_buffer;
}
int num_bytes_read = 0;
// Lock the sound buffer
hr = m_pdsb->Lock (m_cbBufOffset, size, (void**)(&lpbuf1), &dwsize1, (void**)(&lpbuf2), &dwsize2, 0);
if (hr == DS_OK) {
// Write data to sound buffer. Because the sound buffer is circular, we may have to
// do two write operations if locked portion of buffer wraps around to start of buffer.
Assert(lpbuf1);
num_bytes_read = m_pwavefile->Read(uncompressed_wave_data, dwsize1+dwsize2,service);
if ( num_bytes_read == -1 ) {
// means nothing left to read!
num_bytes_read = 0;
m_bReadingDone = 1;
}
if ( num_bytes_read > 0 ) {
if ( (unsigned int)num_bytes_read > dwsize1 ) {
dwbyteswritten1 = dwsize1;
dwbyteswritten2 = num_bytes_read - dwsize1;
memcpy(lpbuf1, uncompressed_wave_data, dwsize1);
Assert(lpbuf2);
memcpy(lpbuf2, uncompressed_wave_data+dwsize1, num_bytes_read-dwsize1);
} else {
dwbyteswritten1 = num_bytes_read;
dwbyteswritten2 = 0;
memcpy(lpbuf1, uncompressed_wave_data, num_bytes_read);
}
}
// Update our buffer offset and unlock sound buffer
m_cbBufOffset = (m_cbBufOffset + dwbyteswritten1 + dwbyteswritten2) % m_cbBufSize;
*num_bytes_written = dwbyteswritten1 + dwbyteswritten2;
m_pdsb->Unlock (lpbuf1, dwsize1, lpbuf2, dwsize2);
}
else {
// Error locking sound buffer
nprintf(("SOUND", "SOUND ==> Error, unable to lock sound buffer in AudioStr\n"));
fRtn = FAILURE;
}
if ( service ) {
LeaveCriticalSection(&Global_service_lock);
}
return (fRtn);
}