# Are there any c interface examples?

**URL:** https://qa.fmod.com/t/are-there-any-c-interface-examples/14282
**Category:** FMOD Engine
**Created:** [January 6, 2019, 2:09pm UTC](https://qa.fmod.com/t/are-there-any-c-interface-examples/14282 "2019-01-06T14:09:30Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![ed\_welch](https://avatars.discourse-cdn.com/v4/letter/e/8baadc/32.png) [@ed\_welch](https://qa.fmod.com/u/ed_welch)
#### Post date: [January 6, 2019, 2:09pm UTC](https://qa.fmod.com/t/are-there-any-c-interface-examples/14282/1 "2019-01-06T14:09:30Z")

</div>

I am having trouble initialising fmod using the c interface. The problem is that all the examples are for the c++ interface only.

---

<div class="post-metadata">

### Author: ![Derek\_Burnheim](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/derek_burnheim/32/261_2.png) [@Derek\_Burnheim](https://qa.fmod.com/u/Derek_Burnheim)
#### Post date: [January 11, 2019, 3:57am UTC](https://qa.fmod.com/t/are-there-any-c-interface-examples/14282/2 "2019-01-11T03:57:42Z")

</div>

Hi Ed

Unfortunately we don’t ship any C examples, but converting any of our C++ examples to C is a pretty straight forward process.

Generally where in C++ you have a class or structure type FMOD::Classname the C type will be FMOD\_CLASSNAME, and for FMOD::Studio::Classname it’s FMOD\_STUDIO\_CLASSNAME.

For member functions FMOD::Classname::memberFn becomes FMOD\_Classname\_MemberFn and FMOD::Studio::Classname::memberFn becomes FMOD\_Studio\_Classname\_MemberFn. And for member functions you pass the instane pointer explicitly in C where C++ would pass it as the this pointer.

Just making those changes will mostly let you compile our examples using the C API. One or two functions like FMOD\_Studio\_System\_Create need an extra parameter because the C++ API uses a default value, check the docs if you get a compilation error after changing a function to the C version.

If you run into any problems doing this or would like an example of one of our APIs in C which isn’t covered by any of the shipped examples just ask.

As an example, I ported our simple\_event example from the C++ API to the C API (note that you still have to compile this as C++ because our example framework is written in C++, otherwise this should be legal C code):

```
/*==============================================================================
Simple Event Example
Copyright (c), Firelight Technologies Pty, Ltd 2012-2019.

This example demonstrates the various ways of playing an event.

#### Explosion Event ####
This event is played as a one-shot and released immediately after it has been
created.

#### Looping Ambience Event ####
A single instance is started or stopped based on user input.

#### Cancel Event ####
This instance is started and if already playing, restarted.

==============================================================================*/
#include "fmod_studio.h"
#include "fmod.h"
#include "common.h"

int FMOD_Main()
{
    void *extraDriverData = NULL;
    FMOD_STUDIO_SYSTEM* system = NULL;
    FMOD_SYSTEM* lowLevelSystem = NULL;
    FMOD_STUDIO_BANK* masterBank = NULL;
    FMOD_STUDIO_BANK* stringsBank = NULL;
    FMOD_STUDIO_BANK* sfxBank = NULL;
    FMOD_STUDIO_EVENTDESCRIPTION* loopingAmbienceDescription = NULL;
    FMOD_STUDIO_EVENTINSTANCE* loopingAmbienceInstance = NULL;
    FMOD_STUDIO_EVENTDESCRIPTION* cancelDescription = NULL;
    FMOD_STUDIO_EVENTINSTANCE* cancelInstance = NULL;
    FMOD_STUDIO_EVENTDESCRIPTION* explosionDescription = NULL;

    Common_Init(&extraDriverData);

    ERRCHECK( FMOD_Studio_System_Create(&system, FMOD_VERSION) );

    /* The example Studio project is authored for 5.1 sound, so set up the system output mode to match */
    ERRCHECK( FMOD_Studio_System_GetLowLevelSystem(system, &lowLevelSystem) );
    ERRCHECK( FMOD_System_SetSoftwareFormat(lowLevelSystem, 0, FMOD_SPEAKERMODE_5POINT1, 0) );

    ERRCHECK( FMOD_Studio_System_Initialize(system, 1024, FMOD_STUDIO_INIT_NORMAL, FMOD_INIT_NORMAL, extraDriverData) );

    ERRCHECK( FMOD_Studio_System_LoadBankFile(system, Common_MediaPath("Master Bank.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank) );
    ERRCHECK( FMOD_Studio_System_LoadBankFile(system, Common_MediaPath("Master Bank.strings.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank) );
    ERRCHECK( FMOD_Studio_System_LoadBankFile(system, Common_MediaPath("SFX.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &sfxBank) );

    /* Get the Looping Ambience event */
    ERRCHECK( FMOD_Studio_System_GetEvent(system, "event:/Ambience/Country", &loopingAmbienceDescription) );
    ERRCHECK( FMOD_Studio_EventDescription_CreateInstance(loopingAmbienceDescription, &loopingAmbienceInstance) );

    /* Get the 4 Second Surge event */
    ERRCHECK( FMOD_Studio_System_GetEvent(system, "event:/UI/Cancel", &cancelDescription) );
    ERRCHECK( FMOD_Studio_EventDescription_CreateInstance(cancelDescription, &cancelInstance) );

    /* Get the Single Explosion event */
    ERRCHECK( FMOD_Studio_System_GetEvent(system, "event:/Weapons/Explosion", &explosionDescription) );

    /* Start loading explosion sample data and keep it in memory */
    ERRCHECK( FMOD_Studio_EventDescription_LoadSampleData(explosionDescription) );

    do
    {
        Common_Update();
    
        if (Common_BtnPress(BTN_ACTION1))
        {
            /* One-shot event */
            FMOD_STUDIO_EVENTINSTANCE* eventInstance = NULL;
            ERRCHECK( FMOD_Studio_EventDescription_CreateInstance(explosionDescription, &eventInstance) );

            ERRCHECK( FMOD_Studio_EventInstance_Start(eventInstance) );

            /* Release will clean up the instance when it completes */
            ERRCHECK( FMOD_Studio_EventInstance_Release(eventInstance) );
        }

        if (Common_BtnPress(BTN_ACTION2))
        {
            ERRCHECK( FMOD_Studio_EventInstance_Start(loopingAmbienceInstance) );
        }

        if (Common_BtnPress(BTN_ACTION3))
        {
            ERRCHECK( FMOD_Studio_EventInstance_Stop(loopingAmbienceInstance, FMOD_STUDIO_STOP_IMMEDIATE) );
        }

        if (Common_BtnPress(BTN_ACTION4))
        {
            /* Calling start on an instance will cause it to restart if it's already playing */
            ERRCHECK( FMOD_Studio_EventInstance_Start(cancelInstance) );
        }

        ERRCHECK( FMOD_Studio_System_Update(system) );

        Common_Draw("==================================================");
        Common_Draw("Simple Event Example.");
        Common_Draw("Copyright (c) Firelight Technologies 2012-2019.");
        Common_Draw("==================================================");
        Common_Draw("");
        Common_Draw("Press %s to fire and forget the explosion", Common_BtnStr(BTN_ACTION1));
        Common_Draw("Press %s to start the looping ambience", Common_BtnStr(BTN_ACTION2));
        Common_Draw("Press %s to stop the looping ambience", Common_BtnStr(BTN_ACTION3));
        Common_Draw("Press %s to start/restart the cancel sound", Common_BtnStr(BTN_ACTION4));
        Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT));

        Common_Sleep(50);
    } while (!Common_BtnPress(BTN_QUIT));

    ERRCHECK( FMOD_Studio_Bank_Unload(sfxBank) );
    ERRCHECK( FMOD_Studio_Bank_Unload(stringsBank) );
    ERRCHECK( FMOD_Studio_Bank_Unload(masterBank) );

    ERRCHECK( FMOD_Studio_System_Release(system) );

    Common_Close();

    return 0;
}
```

---

<div class="post-metadata">

### Author: ![ed\_welch](https://avatars.discourse-cdn.com/v4/letter/e/8baadc/32.png) [@ed\_welch](https://qa.fmod.com/u/ed_welch)
#### Post date: [January 11, 2019, 9:32am UTC](https://qa.fmod.com/t/are-there-any-c-interface-examples/14282/3 "2019-01-11T09:32:33Z")

</div>

Thanks for the answer Derek, that example is quite helpful 😄
