0
0

I use my maya44USB as an audio switch.this card uses 4 inputs and 4 outputs, i haven’t any problem to transfer the sound between the 2first inputs to any of the output i want, but i can’t use the other inputs(3 & 4), i use for create the sound thoses parameters :

define OUTPUTRATE (44100)

define NB_INPUT_SOUND (4)

FMOD_System_SetSoftwareFormat(system, OUTPUTRATE, FMOD_SOUND_FORMAT_PCMFLOAT, 4, 4, FMOD_DSP_RESAMPLER_LINEAR);

memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.numchannels = NB_INPUT_SOUND;
exinfo.format = FMOD_SOUND_FORMAT_PCMFLOAT;
//FMOD_SOUND_FORMAT_PCM16???;
exinfo.defaultfrequency = OUTPUTRATE;
exinfo.length = exinfo.defaultfrequency * sizeof(short) * exinfo.numchannels * 5;

FMOD_System_CreateSound(system, 0, FMOD_DEFAULT | FMOD_LOOP_NORMAL | FMOD_OPENUSER, &exinfo, &sound);

Thank you so much for your help, please don’t tell me that FMOD Ex doesn’t support more than 2(stereo) outputs ๐Ÿ˜ณ even if let me know what i can do . . .
aurel ๐Ÿ˜‰

  • You must to post comments
0
0

To play a sound in the other outputs, you have to use Channel::setSpeakerLevels (and use 0,1,2,3 as the speaker – cast the number to FMOD_SPEAKER), because it is just set to default to 2 speakers by default for playing a sound.

  • You must to post comments
0
0

ok i know that.
My question is on the INPUTS not on the OUTPUTS ๐Ÿ˜‰
thank you
aurel

  • You must to post comments
0
0

here is my program :

/*===============================================================================================
Multi Speaker Output Example
Copyright (c), Firelight Technologies Pty, Ltd 2004-2005.

This example shows how to play sounds in multiple speakers, and also how to even assign
sound subchannels, such as those in a stereo sound to different individual speakers.
===============================================================================================*/

include "../../api/inc/fmod.h"

include "../../api/inc/fmod_errors.h"

include <windows.h>

include <stdio.h>

include <conio.h>

//#define ASK_DRIVER_OUTPUT //if set the software will ask the configuration of the output
//#define ASK_DRIVER_INPUT //if set the software will ask the configuration of the input
//#define GET_INFO_CONFIG //if you want to see the configuration set after the initialisation

define DRIVERSELECTOUTPUT (1) //2

define DRIVERSELECTINPUT (0) //0

define OUTPUTRATE (44100)

define NBCHARDRIVER (128)

define NB_OUTPUT (4) //4

define NB_INPUT (4) //4

define LATENCY_TIME (200)

define NB_INPUT_SOUND (4)

void formatCheck(FMOD_SOUND_FORMAT format)
{
switch (format)
{
case FMOD_SOUND_FORMAT_NONE: printf("Unitialized / unknown\n");break;
case FMOD_SOUND_FORMAT_PCM8: printf("8bit integer PCM data\n");break;
case FMOD_SOUND_FORMAT_PCM16: printf("16bit integer PCM data\n");break;
case FMOD_SOUND_FORMAT_PCM24: printf("24bit integer PCM data\n");break;
case FMOD_SOUND_FORMAT_PCM32: printf("32bit integer PCM data\n");break;
case FMOD_SOUND_FORMAT_PCMFLOAT: printf("32bit floating point PCM data\n");break;
case FMOD_SOUND_FORMAT_GCADPCM: printf("Compressed GameCube DSP data\n");break;
case FMOD_SOUND_FORMAT_IMAADPCM: printf("Compressed IMA ADPCM / Xbox ADPCM data\n");break;
case FMOD_SOUND_FORMAT_VAG: printf("Compressed PlayStation 2 / PlayStation Portable ADPCM data\n");break;
case FMOD_SOUND_FORMAT_XMA: printf("Compressed Xbox360 data\n");break;
case FMOD_SOUND_FORMAT_MPEG: printf("Compressed MPEG layer 2 or 3 data\n");break;
case FMOD_SOUND_FORMAT_MAX: printf("Maximum number of sound formats supported\n");break;
};
}

void resamplerCheck(FMOD_DSP_RESAMPLER resampler)
{
switch (resampler)
{
case FMOD_DSP_RESAMPLER_NOINTERP: printf("FMOD_DSP_RESAMPLER_NOINTERP\n");break;
case FMOD_DSP_RESAMPLER_LINEAR: printf("FMOD_DSP_RESAMPLER_LINEAR\n");break;
case FMOD_DSP_RESAMPLER_CUBIC: printf("FMOD_DSP_RESAMPLER_CUBIC\n");break;
case FMOD_DSP_RESAMPLER_SPLINE: printf("FMOD_DSP_RESAMPLER_SPLINE\n");break;
case FMOD_DSP_RESAMPLER_MAX: printf("FMOD_DSP_RESAMPLER_MAX\n");break;
};
}

outputCheck(FMOD_OUTPUTTYPE output)
{
switch (output)
{
case FMOD_OUTPUTTYPE_AUTODETECT: printf("FMOD_OUTPUTTYPE_AUTODETECT\n");break;
case FMOD_OUTPUTTYPE_UNKNOWN: printf("FMOD_OUTPUTTYPE_UNKNOWN\n");break;
case FMOD_OUTPUTTYPE_NOSOUND: printf("FMOD_OUTPUTTYPE_NOSOUND\n");break;
case FMOD_OUTPUTTYPE_WAVWRITER: printf("FMOD_OUTPUTTYPE_WAVWRITER\n");break;
case FMOD_OUTPUTTYPE_NOSOUND_NRT: printf("FMOD_OUTPUTTYPE_NOSOUND_NRT\n");break;
case FMOD_OUTPUTTYPE_WAVWRITER_NRT: printf("FMOD_OUTPUTTYPE_WAVWRITER_NRT\n");break;
case FMOD_OUTPUTTYPE_DSOUND: printf("FMOD_OUTPUTTYPE_DSOUND\n");break;
case FMOD_OUTPUTTYPE_ASIO: printf("FMOD_OUTPUTTYPE_ASIO\n");break;
case FMOD_OUTPUTTYPE_MAX: printf("FMOD_OUTPUTTYPE_MAX\n");break;
case FMOD_OUTPUTTYPE_SOUNDMANAGER: printf("FMOD_OUTPUTTYPE_SOUNDMANAGER\n");break;
};
}

speakermodeCheck(FMOD_SPEAKERMODE mode)
{
switch (mode)
{
case FMOD_SPEAKERMODE_RAW: printf("FMOD_SPEAKERMODE_RAW\n");break;
case FMOD_SPEAKERMODE_MONO: printf("FMOD_SPEAKERMODE_MONO\n");break;
case FMOD_SPEAKERMODE_STEREO: printf("FMOD_SPEAKERMODE_STEREO\n");break;
case FMOD_SPEAKERMODE_QUAD: printf("FMOD_SPEAKERMODE_QUAD\n");break;
case FMOD_SPEAKERMODE_SURROUND: printf("FMOD_SPEAKERMODE_SURROUND\n");break;
case FMOD_SPEAKERMODE_5POINT1: printf("FMOD_SPEAKERMODE_5POINT1\n");break;
case FMOD_SPEAKERMODE_7POINT1: printf("FMOD_SPEAKERMODE_7POINT1\n");break;
case FMOD_SPEAKERMODE_PROLOGIC: printf("FMOD_SPEAKERMODE_PROLOGIC\n");break;
case FMOD_SPEAKERMODE_MAX: printf("FMOD_SPEAKERMODE_MAX\n");break;
};
}

void ERRCHECK(FMOD_RESULT result,int line)
{
if (result != FMOD_OK)
{
printf("FMOD error! (%d) %s in line %i\n", result, FMOD_ErrorString(result),line);
exit(-line);
//exit(-1);
}
}

FMOD_Channel_SetSpeakerMyMix(FMOD_CHANNEL *channel,float output1,float output2,float output3,float output4)
{
FMOD_Channel_SetSpeakerMix(channel, output1, output2, output3, output4, 1.0f, 1.0f, 1.0f, 1.0f);
}

int main(int argc, char argv[])
{
FMOD_SYSTEM *system,
system2;
FMOD_SOUND *sound = 0;
FMOD_SOUND *sound2 = 0;
FMOD_CHANNEL *channel = 0;
FMOD_CHANNEL *channel2 = 0;
FMOD_RESULT result;
FMOD_SPEAKERMODE speakermode;
int key;
unsigned int version;

FMOD_CREATESOUNDEXINFO exinfo;


memset(&amp;exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
exinfo.cbsize           = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.numchannels      = NB_INPUT_SOUND;
exinfo.format           = FMOD_SOUND_FORMAT_PCMFLOAT;//FMOD_SOUND_FORMAT_PCM16;
exinfo.defaultfrequency = OUTPUTRATE;
exinfo.length           = exinfo.defaultfrequency * sizeof(short) * exinfo.numchannels * 5;


/*
    Create a System object and initialize.
*/
result = FMOD_System_Create(&amp;system);
ERRCHECK(result,__LINE__);

result = FMOD_System_GetVersion(system, &amp;version);
ERRCHECK(result,__LINE__);
if (version &lt; FMOD_VERSION)
{
    printf(&quot;Error!  You are using an old version of FMOD %08x.  This program requires %08x\n&quot;, version, FMOD_VERSION);
    return 0;
}
/* 
   Choose the speaker mode selected by the Windows control panel.
*/
result = FMOD_System_GetDriverCaps(system, 0, 0, 0, 0, &amp;speakermode);
ERRCHECK(result,__LINE__);

//**************************************************************************

/////////////////////////- outputs definition -///////////////////////////////////
result = FMOD_System_SetOutput(system, FMOD_OUTPUTTYPE_ASIO);
ERRCHECK(result,LINE);

ifdef ASK_DRIVER_OUTPUT

{
    unsigned int i,nbDriver,driver = 0;
    char driverName[NBCHARDRIVER];

    result = FMOD_System_GetNumDrivers(system,&amp;nbDriver);
    ERRCHECK(result,__LINE__);
    printf(&quot;%i driver on this computer\n&quot;,nbDriver);

    for(i = 0 ; i &lt; nbDriver ; i++)
    {
        printf(&quot;driver %i :&quot;,i);
        result = FMOD_System_GetDriverName(system,i,driverName,NBCHARDRIVER);
        ERRCHECK(result,__LINE__);
        printf(&quot;%s\n&quot;,driverName);
    }
    printf(&quot;---------------------------------------------------------\n&quot;);
    _getch();
    exit(0);
}

endif

    result = FMOD_System_SetDriver(system, DRIVERSELECTOUTPUT);
    ERRCHECK(result,__LINE__);

/////////////////////////- inputs definition -///////////////////////////////////

ifdef ASK_DRIVER_INPUT

{
    int i,nbDriver,driver = 0;
    char driverName[NBCHARDRIVER];

    result = FMOD_System_GetRecordNumDrivers(system,&amp;nbDriver);
    ERRCHECK(result,__LINE__);
    printf(&quot;%i record driver on this computer\n&quot;,nbDriver);

    for(i = 0 ; i &lt; nbDriver ; i++)
    {
        printf(&quot;record driver %i :&quot;,i);
        result = FMOD_System_GetDriverName(system,i,driverName,NBCHARDRIVER);
        ERRCHECK(result,__LINE__);
        printf(&quot;%s\n&quot;,driverName);
    }
    printf(&quot;---------------------------------------------------------\n&quot;);
    _getch();
    exit(0);
}

endif

result = FMOD_System_SetRecordDriver(system, DRIVERSELECTINPUT);
ERRCHECK(result,__LINE__);

result = FMOD_System_SetSoftwareFormat(system, OUTPUTRATE, FMOD_SOUND_FORMAT_PCMFLOAT, NB_OUTPUT, NB_INPUT, FMOD_DSP_RESAMPLER_LINEAR);
ERRCHECK(result,__LINE__);

result = FMOD_System_Init(system, 32, FMOD_INIT_NORMAL,NULL);
ERRCHECK(result,__LINE__);

ifdef GET_INFO_CONFIG

{
    int rsamplerate,routput,rinput,rbits;
    FMOD_SOUND_FORMAT   rformat;
    FMOD_DSP_RESAMPLER  rsamplemethod;
    FMOD_OUTPUTTYPE     rvoutput;
    FMOD_SPEAKERMODE    rspeakermode;

    result = FMOD_System_GetSoftwareFormat(system,&amp;rsamplerate,&amp;rformat,&amp;routput,&amp;rinput,&amp;rsamplemethod,&amp;rbits);
    ERRCHECK(result,__LINE__);

    result = FMOD_System_GetOutput(system,&amp;rvoutput);
    ERRCHECK(result,__LINE__);

    result = FMOD_System_GetSpeakerMode(system, &amp;rspeakermode);
    ERRCHECK(result,__LINE__);

    printf(&quot;data read after Init :\nSample rate : %i  |  Nb Outputs : %i | Nb Inputs : %i | Nb Bits : %i\n&quot;,rsamplerate,routput,rinput,rbits);

    speakermodeCheck(rspeakermode);
    speakermode = rspeakermode;
    formatCheck(rformat);
    resamplerCheck(rsamplemethod);
    outputCheck(rvoutput);

    {
        int rnum2d,rnum3d,rtotal;

        result = FMOD_System_GetHardwareChannels(system,&amp;rnum2d,&amp;rnum3d,&amp;rtotal);
        ERRCHECK(result,__LINE__);

        printf(&quot;num2d : %i | num3d : %i | total : %i\n&quot;,rnum2d,rnum3d,rtotal);
    }
}

endif

//**************************************************************************

result = FMOD_System_CreateSound(system, 0, FMOD_DEFAULT | FMOD_LOOP_NORMAL | FMOD_OPENUSER, &amp;exinfo, &amp;sound);
ERRCHECK(result,__LINE__);

printf(&quot;==============================================================================\n&quot;);
printf(&quot;                          SWITCH AUDIO                                        \n&quot;);
printf(&quot;==============================================================================\n&quot;);
printf(&quot;\n&quot;);

printf(&quot;Press 's' to stop the acquisition of the sound.\n\n&quot;);

printf(&quot;Press 'u' to play the sound on output 1.\n&quot;);
printf(&quot;Press 'i' to play the sound on output 2.\n&quot;);
printf(&quot;Press 'o' to play the sound on output 3.\n&quot;);
printf(&quot;Press 'p' to play the sound on output 4.\n&quot;);

printf(&quot;\n\n&quot;);

printf(&quot;Press 'Esc' to quit\n&quot;);
printf(&quot;\n&quot;);

/*
    Main loop.
*/
do
{
    if (_kbhit())
    {
        key = _getch();

        switch (key)
        {
        case '7':
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);
                Sleep(LATENCY_TIME);          // Give it some time to record something
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, TRUE, &amp;channel);
                ERRCHECK(result,__LINE__);
                //Clear out all speakers first.
                result = FMOD_Channel_SetSpeakerMix(channel, 0, 0, 0, 0, 0, 0, 0, 0);
                ERRCHECK(result,__LINE__);
                //Put the left channel of the sound in the right speaker.
                {
                    float  levels[2] = { 0, 1.0f};    // This array represents the source stereo sound.  l/r

                    result = FMOD_Channel_SetSpeakerLevels(channel, 0, levels, 2);
                    ERRCHECK(result,__LINE__);
                }
                //Put the right channel of the sound in the left speaker.
                {
                    float  levels[2] = { 1.0f, 0};    // This array represents the source stereo sound.  l/r 

                    result = FMOD_Channel_SetSpeakerLevels(channel, 1, levels, 2);
                    ERRCHECK(result,__LINE__);
                }

                result = FMOD_Channel_SetPaused(channel, FALSE);
                ERRCHECK(result,__LINE__);

                break;
            }
        case '8':
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);
                Sleep(LATENCY_TIME);          // Give it some time to record something
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, TRUE, &amp;channel);
                ERRCHECK(result,__LINE__);
                //Clear out all speakers first.
                result = FMOD_Channel_SetSpeakerMix(channel, 0, 0, 0, 0, 0, 0, 0, 0);
                ERRCHECK(result,__LINE__);
                //Put the left channel of the sound in the right speaker.
                {
                    float  levels[2] = { 0, 1.0f};    // This array represents the source stereo sound.  l/r

                    result = FMOD_Channel_SetSpeakerLevels(channel, 0, levels, 2);
                    ERRCHECK(result,__LINE__);
                }
                //Put the right channel of the sound in the left speaker.
                {
                    float  levels[2] = { 1.0f, 0};    // This array represents the source stereo sound.  l/r 

                    result = FMOD_Channel_SetSpeakerLevels(channel, 1, levels, 2);
                    ERRCHECK(result,__LINE__);
                }

                result = FMOD_Channel_SetPaused(channel, FALSE);
                ERRCHECK(result,__LINE__);

                break;
            }   
            case '9' :
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);

                Sleep(LATENCY_TIME);          // Give it some time to record something

                //result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, 0, &amp;channel);
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, TRUE, &amp;channel);
                ERRCHECK(result,__LINE__);

                //Clear out all speakers first.
                result = FMOD_Channel_SetSpeakerMix(channel, 0, 0, 0, 0, 0, 0, 0, 0);
                ERRCHECK(result,__LINE__);

                //Put the left channel of the sound in the right speaker.
                {
                    float  levels[4] = { 0, 0, 1.0f, 0};    // This array represents the source stereo sound.  l/r

                    result = FMOD_Channel_SetSpeakerLevels(channel, 2, levels, 4);
                    ERRCHECK(result,__LINE__);
                }
                //Put the right channel of the sound in the left speaker.
                {
                    float  levels[4] = { 0, 1.0f, 0 , 0 };    // This array represents the source stereo sound.  l/r 

                    result = FMOD_Channel_SetSpeakerLevels(channel, 3, levels, 4);
                    ERRCHECK(result,__LINE__);
                }

                result = FMOD_Channel_SetPaused(channel, FALSE);
                ERRCHECK(result,__LINE__);

                break;
            }
            case 's' :
            {
                result = FMOD_System_RecordStop(system);
                ERRCHECK(result,__LINE__);

                if(channel)
                {
                    result = FMOD_Channel_Stop(channel);
                    ERRCHECK(result,__LINE__);
                    channel = 0;
                }
                if(channel2)
                {
                    result = FMOD_Channel_Stop(channel2);
                    ERRCHECK(result,__LINE__);
                    channel2 = 0;
                }
                break;
            }
            case 'p' :
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);

                Sleep(LATENCY_TIME);          /* Give it some time to record something */
                //FMOD_Sound_SetMode();
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, 0, &amp;channel);
                ERRCHECK(result,__LINE__);

                result = FMOD_Channel_SetSpeakerMyMix(channel, 1.0f, 0, 0, 0);
                ERRCHECK(result,__LINE__);
                break;
            }
            case 'o' :
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);

                Sleep(LATENCY_TIME);        /* Give it some time to record something */
                //FMOD_Sound_SetMode();
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, 0, &amp;channel);
                ERRCHECK(result,__LINE__);

                result = FMOD_Channel_SetSpeakerMyMix(channel, 0, 1.0f, 0, 0);
                ERRCHECK(result,__LINE__);
                break;
            }
            case 'i' :
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);

                Sleep(LATENCY_TIME);                         /* Give it some time to record something */
                //FMOD_Sound_SetMode();
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, 0, &amp;channel);
                ERRCHECK(result,__LINE__);

                result = FMOD_Channel_SetSpeakerMyMix(channel, 0, 0, 1.0f, 0);
                ERRCHECK(result,__LINE__);
                break;
            }
            case 'u' :
            {
                result = FMOD_System_RecordStart(system, sound, TRUE);
                ERRCHECK(result,__LINE__);

                Sleep(LATENCY_TIME);                         /* Give it some time to record something */
                //FMOD_Sound_SetMode();
                result = FMOD_System_PlaySound(system, FMOD_CHANNEL_REUSE, sound, 0, &amp;channel);
                ERRCHECK(result,__LINE__);

                result = FMOD_Channel_SetSpeakerMyMix(channel, 0, 0, 0, 1.0f);
                ERRCHECK(result,__LINE__);
                break;
            }
        }
    }

    FMOD_System_Update(system);

    {
        unsigned int ms = 0;
        unsigned int lenms = 0;
        int          playing = FALSE;
        int          paused = FALSE;
        int          channelsplaying = 0;

        if (channel)
        {
            FMOD_SOUND *currentsound = 0;

            result = FMOD_Channel_IsPlaying(channel, &amp;playing);
            if ((result != FMOD_OK) &amp;&amp; (result != FMOD_ERR_INVALID_HANDLE) &amp;&amp; (result != FMOD_ERR_CHANNEL_STOLEN))
            {
                ERRCHECK(result,__LINE__);
            }

            result = FMOD_Channel_GetPaused(channel, &amp;paused);
            if ((result != FMOD_OK) &amp;&amp; (result != FMOD_ERR_INVALID_HANDLE) &amp;&amp; (result != FMOD_ERR_CHANNEL_STOLEN))
            {
                ERRCHECK(result,__LINE__);
            }

            result = FMOD_Channel_GetPosition(channel, &amp;ms, FMOD_TIMEUNIT_MS);
            if ((result != FMOD_OK) &amp;&amp; (result != FMOD_ERR_INVALID_HANDLE) &amp;&amp; (result != FMOD_ERR_CHANNEL_STOLEN))
            {
                ERRCHECK(result,__LINE__);
            }

            FMOD_Channel_GetCurrentSound(channel, &amp;currentsound);
            if (currentsound)
            {
                result = FMOD_Sound_GetLength(currentsound, &amp;lenms, FMOD_TIMEUNIT_MS);
                if ((result != FMOD_OK) &amp;&amp; (result != FMOD_ERR_INVALID_HANDLE) &amp;&amp; (result != FMOD_ERR_CHANNEL_STOLEN))
                {
                    ERRCHECK(result,__LINE__);
                }
            }
        }

        FMOD_System_GetChannelsPlaying(system, &amp;channelsplaying);

        printf(&quot;Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r&quot;, ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? &quot;Paused &quot; : playing ? &quot;Playing&quot; : &quot;Stopped&quot;, channelsplaying);
    }

    Sleep(10);

} while (key != 27);

printf(&quot;\n&quot;);

/*
    Shut down
*/
result = FMOD_Sound_Release(sound);
ERRCHECK(result,__LINE__);
result = FMOD_System_Close(system);
ERRCHECK(result,__LINE__);
result = FMOD_System_Release(system);
ERRCHECK(result,__LINE__);
return 0;

}

THANK YOU again !

  • You must to post comments
0
0

im pretty sure recording goes to 2 channels only

  • You must to post comments
0
0

it means that FMOD can’t record different inputs in ASIO Mode ?

  • You must to post comments
0
0

if FMod recording goes to 2 channels only, i don’t see how you can consider that FMOD use ASIO, because the main purpose of ASIO is using multiple Inputs Outputs . . . !

  • You must to post comments
0
0

For a start, it goes to as many ASIO [i:3kyuh5co]outputs[/i:3kyuh5co] as you want, and the other reason is that it is low latency. The fact that playback and recording are locked together makes it very useful for low latency recording / effect / playback processing. (ie realtime voice effects).

Directsound allows you to do multiple outputs as well, so asio is not special in this. There is probably some limitation with recording greater than stereo at the moment in FMOD but thats a very low priority compared to some of the things we are doing at the moment so we’ll let you know when we get around to it.

  • You must to post comments
Showing 7 results
Your Answer

Please first to submit.