61 *ret_iface = &
This->IUnknown_iface;
62 IUnknown_AddRef(&
This->IUnknown_iface);
68 *ret_iface = &
This->dmobj.IDirectMusicObject_iface;
75 *ret_iface = &
This->dmobj.IPersistStream_iface;
103 if (
This->data) IStream_Release(
This->data);
129 if (wsmpl.
cSampleLoops > 1)
FIXME(
"Not implemented: found more than one wave loop\n");
157 if (
This->data) IStream_Release(
This->data);
216 TRACE(
"returning descriptor:\n");
288 *ret_iface = &
obj->dmobj.IDirectMusicObject_iface;
295 IDirectMusicObject *iface;
313 TRACE(
"*** Created DirectMusicWave %p\n",
This);
317 TRACE(
" - wFormatTag: %u\n",
This->format->wFormatTag);
318 TRACE(
" - nChannels: %u\n",
This->format->nChannels);
319 TRACE(
" - nSamplesPerSec: %lu\n",
This->format->nSamplesPerSec);
320 TRACE(
" - nAvgBytesPerSec: %lu\n",
This->format->nAvgBytesPerSec);
321 TRACE(
" - nBlockAlign: %u\n",
This->format->nBlockAlign);
322 TRACE(
" - wBitsPerSample: %u\n",
This->format->wBitsPerSample);
323 TRACE(
" - cbSize: %u\n",
This->format->cbSize);
327 TRACE(
" - sample: {size: %lu, unity_note: %u, fine_tune: %d, attenuation: %ld, options: %#lx, loops: %lu}\n",
328 This->sample->head.cbSize,
This->sample->head.usUnityNote,
329 This->sample->head.sFineTune,
This->sample->head.lAttenuation,
330 This->sample->head.fulOptions,
This->sample->head.cSampleLoops);
331 for (
i = 0;
i <
This->sample->head.cSampleLoops;
i++)
332 TRACE(
" - loops[%u]: {size: %lu, type: %lu, start: %lu, length: %lu}\n",
i,
333 This->sample->loops[
i].cbSize,
This->sample->loops[
i].ulType,
334 This->sample->loops[
i].ulStart,
This->sample->loops[
i].ulLength);
351 IDirectMusicObject *iface;
361 format->wBitsPerSample = 16;
390 TRACE(
"*** Created DirectMusicWave %p\n",
This);
394 TRACE(
" - wFormatTag: %u\n",
This->format->wFormatTag);
395 TRACE(
" - nChannels: %u\n",
This->format->nChannels);
396 TRACE(
" - nSamplesPerSec: %lu\n",
This->format->nSamplesPerSec);
397 TRACE(
" - nAvgBytesPerSec: %lu\n",
This->format->nAvgBytesPerSec);
398 TRACE(
" - nBlockAlign: %u\n",
This->format->nBlockAlign);
399 TRACE(
" - wBitsPerSample: %u\n",
This->format->wBitsPerSample);
400 TRACE(
" - cbSize: %u\n",
This->format->cbSize);
403 TRACE(
" - sample: {size: %lu, unity_note: %u, fine_tune: %d, attenuation: %ld, options: %#lx, loops: %lu}\n",
404 This->sample->head.cbSize,
This->sample->head.usUnityNote,
405 This->sample->head.sFineTune,
This->sample->head.lAttenuation,
406 This->sample->head.fulOptions,
This->sample->head.cSampleLoops);
407 for (
i = 0;
i <
This->sample->head.cSampleLoops;
i++)
408 TRACE(
" - loops[%u]: {size: %lu, type: %lu, start: %lu, length: %lu}\n",
i,
409 This->sample->loops[
i].cbSize,
This->sample->loops[
i].ulType,
410 This->sample->loops[
i].ulStart,
This->sample->loops[
i].ulLength);
458 buffer->info.dwNumOffsetTableEntries = 2;
465 buffer->wave.ulWaveDataIdx = 1;
466 buffer->wave.ulCopyrightIdx = 0;
467 buffer->wave.ulFirstExtCkIdx = 0;
470 WARN(
"Failed to read wave data from stream, hr %#lx\n",
hr);
472 WARN(
"Failed to download wave to port, hr %#lx\n",
hr);
474 *
id =
buffer->info.dwDLId;
486 .dwSize =
sizeof(
desc),
487 .dwBufferBytes =
This->data_size,
488 .lpwfxFormat =
This->format,
490 IDirectSoundBuffer *
buffer;
495 TRACE(
"%p, %p, %p\n",
This, dsound, ret_iface);
499 WARN(
"Failed to create direct sound buffer, hr %#lx\n",
hr);
506 WARN(
"Failed to read wave data from stream, hr %#lx\n",
hr);
512 WARN(
"Failed to download wave to dsound, hr %#lx\n",
hr);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const IPersistStreamVtbl wave_persist_stream_vtbl
static HRESULT WINAPI wave_object_ParseDescriptor(IDirectMusicObject *iface, IStream *stream, DMUS_OBJECTDESC *desc)
static const IDirectMusicObjectVtbl wave_object_vtbl
static HRESULT parse_wsmp_chunk(struct wave *This, IStream *stream, struct chunk_entry *chunk)
static HRESULT wave_read_data(struct wave *This, void *data, DWORD *data_size)
static HRESULT parse_wave_chunk(struct wave *This, IStream *stream, struct chunk_entry *parent)
static HRESULT WINAPI wave_QueryInterface(IUnknown *iface, REFIID riid, void **ret_iface)
HRESULT wave_create_from_chunk(IStream *stream, struct chunk_entry *parent, IDirectMusicObject **ret_iface)
HRESULT wave_get_duration(IDirectMusicObject *iface, REFERENCE_TIME *duration)
HRESULT wave_create(IDirectMusicObject **ret_iface)
HRESULT wave_download_to_port(IDirectMusicObject *iface, IDirectMusicPortDownload *port, DWORD *id)
static struct wave * impl_from_IPersistStream(IPersistStream *iface)
HRESULT wave_create_from_soundfont(struct soundfont *soundfont, UINT index, IDirectMusicObject **ret_iface)
static const IUnknownVtbl unknown_vtbl
HRESULT wave_download_to_dsound(IDirectMusicObject *iface, IDirectSound *dsound, IDirectSoundBuffer **ret_iface)
static HRESULT WINAPI wave_persist_stream_Load(IPersistStream *iface, IStream *stream)
static struct wave * impl_from_IUnknown(IUnknown *iface)
static struct wave * impl_from_IDirectMusicObject(IDirectMusicObject *iface)
static ULONG WINAPI wave_Release(IUnknown *iface)
static ULONG WINAPI wave_AddRef(IUnknown *iface)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
#define DMUS_DOWNLOADINFO_WAVE
#define DMUS_E_UNSUPPORTED_STREAM
#define DMUS_E_CHUNKNOTFOUND
HRESULT WINAPI dmobj_IDirectMusicObject_GetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
HRESULT stream_chunk_get_data(IStream *stream, const struct chunk_entry *chunk, void *data, ULONG size)
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
ULONG WINAPI dmobj_IDirectMusicObject_Release(IDirectMusicObject *iface)
HRESULT dmobj_parsedescriptor(IStream *stream, const struct chunk_entry *riff, DMUS_OBJECTDESC *desc, DWORD supported)
HRESULT WINAPI dmobj_IDirectMusicObject_QueryInterface(IDirectMusicObject *iface, REFIID riid, void **ret_iface)
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
HRESULT WINAPI dmobj_IDirectMusicObject_SetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
void dump_DMUS_OBJECTDESC(DMUS_OBJECTDESC *desc)
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
const char * debugstr_dmguid(const GUID *id)
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
ULONG WINAPI dmobj_IDirectMusicObject_AddRef(IDirectMusicObject *iface)
HRESULT stream_skip_chunk(IStream *stream, const struct chunk_entry *chunk)
HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
#define DMUS_OBJ_NAME_INFO
#define MAKE_IDTYPE(id, type)
#define IDirectMusicDownload_Release(p)
#define IDirectMusicPortDownload_GetDLId(p, a, b)
#define IDirectMusicPortDownload_Download(p, a)
#define IDirectMusicDownload_GetBuffer(p, a, b)
#define IDirectMusicPortDownload_AllocateBuffer(p, a, b)
#define DMUS_FOURCC_INFO_LIST
#define IDirectMusicObject_Release(p)
#define IDirectMusicObject_AddRef(p)
#define IDirectSoundBuffer_Unlock(p, a, b, c, d)
#define IDirectSoundBuffer_Lock(p, a, b, c, d, e, f, g)
#define IDirectSound_CreateSoundBuffer(p, a, b, c)
#define IDirectSoundBuffer_Release(p)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define mmioFOURCC(c0, c1, c2, c3)
D3D11_SHADER_VARIABLE_DESC desc
const GUID IID_IPersistStream
#define IsEqualIID(riid1, riid2)
#define offsetof(TYPE, MEMBER)
static __inline const char * debugstr_fourcc(unsigned int cc)
#define CONTAINING_RECORD(address, type, field)