void SG_validate__ensure__trim(
    SG_context* pCtx,
    const char* szValue,
    SG_uint32   uMin,
    SG_uint32   uMax,
    const char* szInvalids,
    SG_bool     bControls,
    SG_error    uError,
    const char* szName,
    char**      ppTrimmed
)
{
    SG_uint32 uResult   = 0u;
    char*     szTrimmed = NULL;

    SG_ERR_CHECK(  SG_validate__check__trim(pCtx, szValue, uMin, uMax, szInvalids, bControls, &uResult, &szTrimmed)  );
    SG_ERR_CHECK(  _check_result(pCtx, uResult, uError, szName, uMin, uMax, szInvalids)  );

    if (ppTrimmed != NULL)
    {
        *ppTrimmed = szTrimmed;
        szTrimmed = NULL;
    }

fail:
    SG_NULLFREE(pCtx, szTrimmed);
    return;
}
Ejemplo n.º 2
0
// ------------------  opensl env -------------------------
static bool 
sl_init () {
    if(ENV._is_init)
        return true;

    SLresult result;

    memset(&ENV, 0, sizeof(ENV));

    source_buffer_init(&ENV.source_record);

    ENV.last_error_code = SL_RESULT_SUCCESS;
    SLEnvironmentalReverbSettings v = SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR;
    ENV.reverbSettings = v;

    // create engine
    result = slCreateEngine(&ENV.engineObject, 0, NULL, 0, NULL, NULL);
    _check_result(result);

    // realize the engine
    result = (*ENV.engineObject)->Realize(ENV.engineObject, SL_BOOLEAN_FALSE);
    _check_result(result);

    // get the engine interface, which is needed in order to create other objects
    result = (*ENV.engineObject)->GetInterface(ENV.engineObject, SL_IID_ENGINE, &ENV.engineEngine);
    _check_result(result);

    // create output mix, with environmental reverb specified as a non-required interface
    const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB};
    const SLboolean req[1] = {SL_BOOLEAN_FALSE};
    result = (*ENV.engineEngine)->CreateOutputMix(ENV.engineEngine, &ENV.outputMixObject, 1, ids, req);
    _check_result(result);

    // realize the output mix
    result = (*ENV.outputMixObject)->Realize(ENV.outputMixObject, SL_BOOLEAN_FALSE);
    _check_result(result);

    result = (*ENV.outputMixObject)->GetInterface(ENV.outputMixObject, SL_IID_ENVIRONMENTALREVERB,
            &ENV.outputMixEnvironmentalReverb);
    _check_result(result);

    if (SL_RESULT_SUCCESS == result) {
        result = (*ENV.outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties(
                ENV.outputMixEnvironmentalReverb, &ENV.reverbSettings);
        _check_result(result);
    }


    ENV._is_init = true;
    return true;

ERROR:
    ENV._is_init = true;
    sl_destory();
    return false;
}
void SG_validate__ensure(
    SG_context* pCtx,
    const char* szValue,
    SG_uint32   uMin,
    SG_uint32   uMax,
    const char* szInvalids,
    SG_bool     bControls,
    SG_error    uError,
    const char* szName
)
{
    SG_uint32 uResult = 0u;

    SG_ERR_CHECK(  SG_validate__check(pCtx, szValue, uMin, uMax, szInvalids, bControls, &uResult)  );
    SG_ERR_CHECK(  _check_result(pCtx, uResult, uError, szName, uMin, uMax, szInvalids)  );

fail:
    return;
}
Ejemplo n.º 4
0
bool
sl_bgm_load(const char* file_name) {
    if(!file_name) {
        return false;
    }

    struct sl_bgm* bgm = &(ENV.bgm);
    if(bgm->file_name && strcmp(file_name, bgm->file_name) == 0) {
        SLresult result = (*bgm->fdPlayerPlay)->SetPlayState(bgm->fdPlayerPlay, SL_PLAYSTATE_STOPPED);
        return result == SL_RESULT_SUCCESS;
    }

    _bgm_free(bgm);
    bgm->file_name = strdup(file_name);
    if(bgm->file_name == NULL) {
        return false;
    }

    AAsset* asset = AAssetManager_open(ENV.asset_mgr, file_name, AASSET_MODE_UNKNOWN);
    if(asset == NULL) {
        goto ERROR;
    }

    // open asset as file descriptor
    off_t start, length;
    int fd = AAsset_openFileDescriptor(asset, &start, &length);
    AAsset_close(asset);
    if(fd < 0) {
        goto ERROR;
    }


    // configure audio source
    SLDataLocator_AndroidFD loc_fd = {SL_DATALOCATOR_ANDROIDFD, fd, start, length};
    SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED};
    SLDataSource audioSrc = {&loc_fd, &format_mime};

    // configure audio sink
    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, ENV.outputMixObject};
    SLDataSink audioSnk = {&loc_outmix, NULL};

    // create audio player
    SLresult result;
    const SLInterfaceID ids[3] = {SL_IID_SEEK, SL_IID_MUTESOLO, SL_IID_VOLUME};
    const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
    result = (*ENV.engineEngine)->CreateAudioPlayer(ENV.engineEngine, &bgm->fdPlayerObject, &audioSrc, &audioSnk,
            3, ids, req);
    _check_result(result);


    // realize the player
    result = (*bgm->fdPlayerObject)->Realize(bgm->fdPlayerObject, SL_BOOLEAN_FALSE);
    _check_result(result);

    // get the play interface
    result = (*bgm->fdPlayerObject)->GetInterface(bgm->fdPlayerObject, SL_IID_PLAY, &bgm->fdPlayerPlay);
    _check_result(result);

    // get the seek interface
    result = (*bgm->fdPlayerObject)->GetInterface(bgm->fdPlayerObject, SL_IID_SEEK, &bgm->fdPlayerSeek);
    _check_result(result);

    // get the volume interface
    result = (*bgm->fdPlayerObject)->GetInterface(bgm->fdPlayerObject, SL_IID_VOLUME, &bgm->fdPlayerVolume);
    _check_result(result);

    // enable whole file looping
    result = (*bgm->fdPlayerSeek)->SetLoop(bgm->fdPlayerSeek, SL_BOOLEAN_FALSE, 0, SL_TIME_UNKNOWN);
    _check_result(result);

    // set bgm stop
    result = (*bgm->fdPlayerPlay)->SetPlayState(bgm->fdPlayerPlay, SL_PLAYSTATE_STOPPED);
    _check_result(result);

    return true;

ERROR:
    _bgm_free(bgm);
    return false;
}
Ejemplo n.º 5
0
struct sl_source*
sl_source_gen() {
    struct sl_source* ret = (struct sl_source*)malloc(sizeof(*ret));
    if(!ret)
        return NULL;

    SLresult result;

    // configure audio source
    SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
    SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_44_1,
        SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
        SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};
    SLDataSource audioSrc = {&loc_bufq, &format_pcm};

    // configure audio sink
    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, ENV.outputMixObject};
    SLDataSink audioSnk = {&loc_outmix, NULL};

    // create audio player
    const SLInterfaceID ids[3] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND,
            /*SL_IID_MUTESOLO,*/ SL_IID_VOLUME};
    const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE,
            /*SL_BOOLEAN_TRUE,*/ SL_BOOLEAN_TRUE};
    sl_log("sl_source_gen!!!! begin!!!\n");
    result = (*ENV.engineEngine)->CreateAudioPlayer(ENV.engineEngine, &ret->bqPlayerObject, &audioSrc, &audioSnk,
            3, ids, req);
    sl_log("sl_source_gen!!!! end : %d!!!\n", result);
    _check_result(result);

    // realize the player
    result = (*ret->bqPlayerObject)->Realize(ret->bqPlayerObject, SL_BOOLEAN_FALSE);
    _check_result(result);


    // get the play interface
    result = (*ret->bqPlayerObject)->GetInterface(ret->bqPlayerObject, SL_IID_PLAY, &ret->bqPlayerPlay);
    _check_result(result);

    // get the buffer queue interface
    result = (*ret->bqPlayerObject)->GetInterface(ret->bqPlayerObject, SL_IID_BUFFERQUEUE,
            &ret->bqPlayerBufferQueue);
    _check_result(result);

    // register callback on the buffer queue
    result = (*ret->bqPlayerBufferQueue)->RegisterCallback(ret->bqPlayerBufferQueue, bqPlayerCallback, (void*)ret);
    _check_result(result);

    // get the volume interface
    result = (*ret->bqPlayerObject)->GetInterface(ret->bqPlayerObject, SL_IID_VOLUME, &ret->bqPlayerVolume);
    _check_result(result);

    // get the pitch interface, may be feature unsupported
    result = (*ret->bqPlayerObject)->GetInterface(ret->bqPlayerObject, SL_IID_PITCH, &ret->bqPlayerPitch);

    // set the player's state to playing
    result = (*ret->bqPlayerPlay)->SetPlayState(ret->bqPlayerPlay, SL_PLAYSTATE_PLAYING);
    _check_result(result);

    source_buffer_add(&ENV.source_record, ret);
    return ret;

ERROR:
    sl_source_free(ret);
    return NULL;
}