/*
 * 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
 */

#pragma makedep register

[
    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; }
