App-MHFS

 view release on metacpan or  search on metacpan

share/public_html/static/music_inc/src/miniaudio.h  view on Meta::CPAN

    if (pConverter == NULL) {
        return 0;
    }

    if (pConverter->hasResampler) {
        return ma_resampler_get_expected_output_frame_count(&pConverter->resampler, inputFrameCount);
    } else {
        return inputFrameCount;     /* 1:1 */
    }
}

MA_API ma_uint64 ma_data_converter_get_input_latency(ma_data_converter* pConverter)
{
    if (pConverter == NULL) {
        return 0;
    }

    if (pConverter->hasResampler) {
        return ma_resampler_get_input_latency(&pConverter->resampler);
    }

    return 0;   /* No latency without a resampler. */
}

MA_API ma_uint64 ma_data_converter_get_output_latency(ma_data_converter* pConverter)
{
    if (pConverter == NULL) {
        return 0;
    }

    if (pConverter->hasResampler) {
        return ma_resampler_get_output_latency(&pConverter->resampler);
    }

    return 0;   /* No latency without a resampler. */
}



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

Channel Maps

**************************************************************************************************************************************************************/
static void ma_get_standard_channel_map_microsoft(ma_uint32 channels, ma_channel* pChannelMap)
{
    /* Based off the speaker configurations mentioned here: https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ksmedia/ns-ksmedia-ksaudio_channel_config */
    switch (channels)
    {
        case 1:
        {
            pChannelMap[0] = MA_CHANNEL_MONO;
        } break;

        case 2:
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
        } break;

        case 3: /* Not defined, but best guess. */
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
        } break;

        case 4:
        {
#ifndef MA_USE_QUAD_MICROSOFT_CHANNEL_MAP
            /* Surround. Using the Surround profile has the advantage of the 3rd channel (MA_CHANNEL_FRONT_CENTER) mapping nicely with higher channel counts. */
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
            pChannelMap[3] = MA_CHANNEL_BACK_CENTER;
#else
            /* Quad. */
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_BACK_LEFT;
            pChannelMap[3] = MA_CHANNEL_BACK_RIGHT;
#endif
        } break;

        case 5: /* Not defined, but best guess. */
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
            pChannelMap[3] = MA_CHANNEL_BACK_LEFT;
            pChannelMap[4] = MA_CHANNEL_BACK_RIGHT;
        } break;

        case 6:
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
            pChannelMap[3] = MA_CHANNEL_LFE;
            pChannelMap[4] = MA_CHANNEL_SIDE_LEFT;
            pChannelMap[5] = MA_CHANNEL_SIDE_RIGHT;
        } break;

        case 7: /* Not defined, but best guess. */
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
            pChannelMap[3] = MA_CHANNEL_LFE;
            pChannelMap[4] = MA_CHANNEL_BACK_CENTER;
            pChannelMap[5] = MA_CHANNEL_SIDE_LEFT;
            pChannelMap[6] = MA_CHANNEL_SIDE_RIGHT;
        } break;

        case 8:
        default:
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
            pChannelMap[3] = MA_CHANNEL_LFE;
            pChannelMap[4] = MA_CHANNEL_BACK_LEFT;
            pChannelMap[5] = MA_CHANNEL_BACK_RIGHT;
            pChannelMap[6] = MA_CHANNEL_SIDE_LEFT;
            pChannelMap[7] = MA_CHANNEL_SIDE_RIGHT;
        } break;
    }

    /* Remainder. */
    if (channels > 8) {
        ma_uint32 iChannel;
        for (iChannel = 8; iChannel < channels; ++iChannel) {
            if (iChannel < MA_MAX_CHANNELS) {
                pChannelMap[iChannel] = (ma_channel)(MA_CHANNEL_AUX_0 + (iChannel-8));
            } else {
                pChannelMap[iChannel] = MA_CHANNEL_NONE;
            }
        }
    }
}

static void ma_get_standard_channel_map_alsa(ma_uint32 channels, ma_channel* pChannelMap)
{
    switch (channels)
    {
        case 1:
        {
            pChannelMap[0] = MA_CHANNEL_MONO;
        } break;

        case 2:
        {
            pChannelMap[0] = MA_CHANNEL_LEFT;
            pChannelMap[1] = MA_CHANNEL_RIGHT;
        } break;

        case 3:
        {
            pChannelMap[0] = MA_CHANNEL_FRONT_LEFT;
            pChannelMap[1] = MA_CHANNEL_FRONT_RIGHT;
            pChannelMap[2] = MA_CHANNEL_FRONT_CENTER;
        } break;

        case 4:



( run in 0.710 second using v1.01-cache-2.11-cpan-98e64b0badf )