/*
 * COM Classes for dmime
 *
 * Copyright 2010 Alexandre Julliard
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

[
    threading(both),
    progid("Microsoft.DirectMusicPerformance.1"),
    vi_progid("Microsoft.DirectMusicPerformance"),
    uuid(d2ac2881-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicPerformance { interface IDirectMusicPerformance; }

[
    threading(both),
    progid("Microsoft.DirectMusicSegment.1"),
    vi_progid("Microsoft.DirectMusicSegment"),
    uuid(d2ac2882-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicSegment { interface IDirectMusicSegment; }

[
    threading(both),
    progid("Microsoft.DirectMusicSegmentState.1"),
    vi_progid("Microsoft.DirectMusicSegmentState"),
    uuid(d2ac2883-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicSegmentState { interface IDirectMusicSegmentState; }

[
    threading(both),
    progid("Microsoft.DirectMusicGraph.1"),
    vi_progid("Microsoft.DirectMusicGraph"),
    uuid(d2ac2884-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicGraph { interface IDirectMusicGraph; }

[
    threading(both),
    progid("Microsoft.DirectMusicTempoTrack.1"),
    vi_progid("Microsoft.DirectMusicTempoTrack"),
    uuid(d2ac2885-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicTempoTrack { interface IDirectMusicTempoTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicSeqTrack.1"),
    vi_progid("Microsoft.DirectMusicSeqTrack"),
    uuid(d2ac2886-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicSeqTrack { interface IDirectMusicSeqTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicSysExTrack.1"),
    vi_progid("Microsoft.DirectMusicSysExTrack"),
    uuid(d2ac2887-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicSysExTrack { interface IDirectMusicSysExTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicTimeSigTrack.1"),
    vi_progid("Microsoft.DirectMusicTimeSigTrack"),
    uuid(d2ac2888-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicTimeSigTrack { interface IDirectMusicTimeSigTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicSong.1"),
    vi_progid("Microsoft.DirectMusicSong"),
    uuid(aed5f0a5-d972-483d-a384-649dfeb9c181)
]
coclass DirectMusicSong { interface IDirectMusicSong; }

[
    threading(both),
    progid("Microsoft.DirectMusicParamControlTrack.1"),
    vi_progid("Microsoft.DirectMusicParamControlTrack"),
    uuid(4be0537b-5c19-11d3-8bdc-00600893b1b6)
]
coclass DirectMusicParamControlTrack { interface IDirectMusicParamControlTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicMarkerTrack.1"),
    vi_progid("Microsoft.DirectMusicMarkerTrack"),
    uuid(55a8fd00-4288-11d3-9bd1-8a0d61c88835)
]
coclass DirectMusicMarkerTrack { interface IDirectMusicMarkerTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicLyricsTrack.1"),
    vi_progid("Microsoft.DirectMusicLyricsTrack"),
    uuid(995c1cf5-54ff-11d3-8bda-00600893b1b6)
]
coclass DirectMusicLyricsTrack { interface IDirectMusicLyricsTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicSegTriggerTrack.1"),
    vi_progid("Microsoft.DirectMusicSegTriggerTrack"),
    uuid(bae4d665-4ea1-11d3-8bda-00600893b1b6)
]
coclass DirectMusicSegTriggerTrack { interface IDirectMusicSegTriggerTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicAudioPath.1"),
    vi_progid("Microsoft.DirectMusicAudioPath"),
    uuid(ee0b9ca0-a81e-11d3-9bd1-0080c7150a74)
]
coclass DirectMusicAudioPath { interface IDirectMusicAudioPath; }

[
    threading(both),
    progid("Microsoft.DirectMusicWaveTrack.1"),
    vi_progid("Microsoft.DirectMusicWaveTrack"),
    uuid(eed36461-9ea5-11d3-9bd1-0080c7150a74)
]
coclass DirectMusicWaveTrack { interface IDirectMusicWaveTrack; }
