/*
 * Copyright (c) 2015 Andrew Eikum
 *
 * 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
 */

import "unknwn.idl";

[
    uuid(cac1105f-619b-4d04-831a-44e1cbf12d57)
]
coclass AudioVolumeMeter {
    interface IUnknown;
}

[
    uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2)
]
coclass AudioVolumeMeter20 {
    interface IUnknown;
}

[
    uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1)
]
coclass AudioVolumeMeter21 {
    interface IUnknown;
}

[
    uuid(f5ca7b34-8055-42c0-b836-216129eb7e30)
]
coclass AudioVolumeMeter22 {
    interface IUnknown;
}

[
    uuid(e180344b-ac83-4483-959e-18a5c56a5e19)
]
coclass AudioVolumeMeter23 {
    interface IUnknown;
}

[
    uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c)
]
coclass AudioVolumeMeter24 {
    interface IUnknown;
}

[
    uuid(2139e6da-c341-4774-9ac3-b4e026347f64)
]
coclass AudioVolumeMeter25 {
    interface IUnknown;
}

[
    uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27)
]
coclass AudioVolumeMeter26 {
    interface IUnknown;
}

[
    uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
]
coclass AudioReverb {
    interface IUnknown;
}

[
    uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063)
]
coclass AudioReverb20 {
    interface IUnknown;
}

[
    uuid(f4769300-b949-4df9-b333-00d33932e9a6)
]
coclass AudioReverb21 {
    interface IUnknown;
}

[
    uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51)
]
coclass AudioReverb22 {
    interface IUnknown;
}

[
    uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c)
]
coclass AudioReverb23 {
    interface IUnknown;
}

[
    uuid(8bb7778b-645b-4475-9a73-1de3170bd3af)
]
coclass AudioReverb24 {
    interface IUnknown;
}

[
    uuid(d06df0d0-8518-441e-822f-5451d5c595b8)
]
coclass AudioReverb25 {
    interface IUnknown;
}

[
    uuid(cecec95a-d894-491a-bee3-5e106fb59f2d)
]
coclass AudioReverb26 {
    interface IUnknown;
}
