Пример #1
0
JNIEXPORT jstring JNICALL Java_com_ssb_droidsound_plugins_SC68Plugin_N_1getStringInfo(JNIEnv *env, jobject obj, jlong song, jint what)
{
    PlayData *pd = (PlayData*) song;
    if (sc68_music_info(pd->sc68, &pd->info, pd->currentTrack, 0)) {
        return 0;
    }
    
	disk68_t *d;
	static char temp[16]; 
    
    switch(what)
    {
		case INFO_RIPPER:
			for (int i=0; i<pd->info.trk.tags; i++)
			{
				d = (disk68_t*)pd->sc68->disk;
				int result = strcmp("ripper",d->mus[pd->currentTrack - 1].tags.array[i].key);
				if (result == 0)
				{
					return NewString(env, d->mus[pd->currentTrack - 1].tags.array[i].val);
				}

			}
			break;

		case INFO_CONVERTER:
			for (int i=0; i<pd->info.trk.tags; i++)
			{
				d = (disk68_t*)pd->sc68->disk;
				int result = strcmp("converter",d->mus[pd->currentTrack - 1].tags.array[i].key);
				if (result == 0)
				{
					return NewString(env, d->mus[pd->currentTrack - 1].tags.array[i].val);
				}

			}
			break;
	
	
        case INFO_AUTHOR:
            return NewString(env, pd->info.artist);
        case INFO_TITLE:
            return NewString(env, pd->info.title);
        case 51:
            return NewString(env, pd->info.trk.hw);
        case 52:
            return NewString(env, pd->info.replay);
		case INFO_FORMAT:
			return NewString(env, pd->info.format); 			
		case INFO_RATE:
			sprintf(temp, "%dhz", pd->info.rate); 
			return NewString(env, temp); 			
    }
    return 0;
}
Пример #2
0
JNIEXPORT jint JNICALL Java_com_ssb_droidsound_plugins_SC68Plugin_N_1getIntInfo(JNIEnv *env, jobject obj, jlong song, jint what)
{
    PlayData *pd = (PlayData*) song;
    if (sc68_music_info(pd->sc68, &pd->info, pd->currentTrack, 0)) {
        return -1;
    }
    
    sc68_music_info_t &info = pd->info;
    switch(what)
    {
        case INFO_ASID:
			return info.trk.asid;
		case INFO_LENGTH:
            return info.trk.time_ms;
        case INFO_SUBTUNES:
            return info.tracks;
        case INFO_STARTTUNE:
            return pd->defaultTrack-1;
        case 50:
            return (pd->info.trk.amiga << 2) | (pd->info.trk.ste << 1) | (pd->info.trk.ym);
    }
    return -1;
}
Пример #3
0
JNIEXPORT jint JNICALL Java_com_ssb_droidsound_plugins_SC68Plugin_N_1setOption(JNIEnv *env, jclass cl, jlong song, jint option, jint val)
{
    PlayData *pd = (PlayData*) song;
	if (sc68_music_info(pd->sc68, &pd->info, pd->currentTrack, 0))
	{
        return -1;
    }

    int result = -1;
	__android_log_print(ANDROID_LOG_VERBOSE, "SC68Plugin", "setOption");
	switch(option)
	{
		case SC68_OPT_ASID:
			__android_log_print(ANDROID_LOG_VERBOSE, "SC68Plugin", "aSID SETTING");
		
			if (val == 0)
			{
				result = sc68_cntl(pd->sc68, SC68_SET_ASID, SC68_ASID_OFF);
				__android_log_print(ANDROID_LOG_VERBOSE, "SC68Plugin", "DISABLED aSID");
				break;
			}

			if (val == 1)
			{
				result = sc68_cntl(pd->sc68, SC68_CAN_ASID, SC68_DSK_TRACK);
				if (result != -1)
				{
					result = sc68_cntl(pd->sc68, SC68_SET_ASID, result); 
					__android_log_print(ANDROID_LOG_VERBOSE, "SC68Plugin", "ENABLED aSID");
					
				} 
				break;
			}
			
	}
	return result;
}
Пример #4
0
static
int finf(void * data, const char * key, int op, sc68_dialval_t *val)
{
    dial_t * const dial = data;
    int res;

    /* Sanity check */
    if (!key || !ismagic(dial))
        return -1;

    /* Run user control function */
    res = dial->dial.cntl(dial->dial.data, key, op, val);
    TRACE68(dial_cat,P "user-cntl #%02d \"%s\" -> %d\n", op, key, res);

    /* Kill special case. */
    if (op == SC68_DIAL_CALL && keyis(SC68_DIAL_KILL)) {
        del_dial(dial);
        res = 0;
    }

    /* User dealt with that message. */
    if (res <= 0)
        goto exit;

    /* Assume no error */
    res = 0;

    if (op == SC68_DIAL_CALL && keyis(SC68_DIAL_NEW)) {
        if (!dial->dial.cntl(dial->dial.data, "sc68", op, val))
            dial->sc68 = (sc68_disk_t) val->s;
        if (!dial->dial.cntl(dial->dial.data, "disk", op, val))
            dial->disk = (sc68_disk_t) val->s;
        TRACE68(dial_cat, P "\"%s\" sc68:%p disk:%p\n",
                key, dial->sc68, dial->disk);
        val->i = sc68_music_info(dial->sc68,&dial->info,1,dial->disk);
        if (!val->i) {
            TRACE68(dial_cat, P "Got info: %02d - %s - %s\n",
                    dial->info.tracks, dial->info.album, dial->info.title);
        }
    } else if (keyis("track")) {
        int track;
        switch (op) {

        case SC68_DIAL_CNT:
            val->i = dial->info.tracks; /* get count current */
            return 0;

        case SC68_DIAL_GETI:
            val->i = dial->info.trk.track - 1; /* get current */
            return 0;

        case SC68_DIAL_SETI:
            track = (int) val->i + 1;
            if (track <= 0 || track > dial->info.tracks)
                track = dial->info.dsk.track;
            if (track != dial->info.trk.track)
                sc68_music_info(dial->sc68, &dial->info, track, dial->disk);
            val->i = dial->info.trk.track - 1;
            return 0;

        case SC68_DIAL_ENUM:
            track = val->i;
            if (track >= 0 && track < dial->info.tracks) {
                ++track;
                dial->tstr[0] = '0' + (track/10u);
                dial->tstr[1] = '0' + (track%10u);
                dial->tstr[2] = 0;
                val->s = dial->tstr;
            } else {
                TRACE68(dial_cat, P "invalid index \"%s[%d]\"", key,track);
                val->s = "";
                res = -1;
            }
            break;

        default:
            res = -1;
        }
    } else {

        switch (op) {

        case SC68_DIAL_GETS:
            /* if (keyis("uri")) */
            /*   val->s = dial->uri; */
            /* else */
            if (keyis("format"))
                val->s = dial->info.format;
            else if (keyis("genre"))
                val->s = dial->info.genre;
            else if (keyis("title"))
                val->s = dial->info.title;
            else if (keyis("artist"))
                val->s = dial->info.artist;
            else if (keyis("album"))
                val->s = dial->info.album;
            else if (keyis("ripper"))
                val->s = dial->info.ripper;
            else if (keyis("converter"))
                val->s = dial->info.converter;
            else if (keyis("year"))
                val->s = dial->info.year;
            else
                res = -1;
            break;

        case SC68_DIAL_GETI:
            if (keyis("time"))
                val->i = (dial->info.trk.time_ms+500u)/1000u;
            else if (keyis("hw_ym"))
                val->i = dial->info.trk.ym;
            else if (keyis("hw_ste"))
                val->i = dial->info.trk.ste;
            else if (keyis("hw_asid"))
                val->i = dial->info.trk.asid;
            else if (keyis("tag-key"))
                val->i = 0;
            else
                res = -1;
            break;

        case SC68_DIAL_ENUM:
            if (keyis("tag-key") || keyis("tag-val")) {
                const int a = dial->info.dsk.tags;
                const int n = a + dial->info.trk.tags;
                if (val->i >= 0 && val->i<n) {
                    val->s = val->i < a
                             ? ( key[4] == 'k'
                                 ? dial->info.dsk.tag[val->i].key
                                 : dial->info.dsk.tag[val->i].val )
                             : ( key[4] == 'k'
                                 ? dial->info.trk.tag[val->i-a].key
                                 : dial->info.trk.tag[val->i-a].val )
                             ;
                    break;
                } else {
                    TRACE68(dial_cat, P "index out of range \"%s\"[%d] > %d\n",
                            key,val->i,n);
                    res = -1;
                }
            }
            break;

        default:
            res = -1;
        }
    }

exit:
    if (op == SC68_DIAL_CNT) {
        TRACE68(dial_cat, P
                "%s() \"%s\"[#] -> %d (%d)\n",
                __FUNCTION__, key, val->i, res);
    }

    if (op == SC68_DIAL_GETI) {
        TRACE68(dial_cat, P
                "%s() \"%s\" -> %d (%d)\n",
                __FUNCTION__, key, val->i, res);
    }

    if (op == SC68_DIAL_GETS || op == SC68_DIAL_ENUM) {
        TRACE68(dial_cat, P
                "%s() \"%s\" -> \"%s\" (%d)\n",
                __FUNCTION__, key, !res?val->s:"<not-set>", res);
    }

    TRACE68(dial_cat, P
            "%s() #%02d \"%s\" -> %d\n",
            __FUNCTION__, op, key, res);
    return res;
}