Beispiel #1
0
void	osc_veejay_new_sample(void *info,const char *path,  const char *types, void **dargv, void *raw)
{
	lo_arg **argv = (lo_arg**) dargv;
	int    type  = argv[0]->i;
	int    token = argv[1]->i;
	char   *str  = &(argv[2]->s);
	veejay_t *v  = (veejay_t*) info;

	
	void *sample = sample_new( type );
	if(!sample)
	{
		veejay_msg(0, "Invalid type");
		return;
	}
	if(sample_open( sample, str,token, v->video_info))
        {
        	int  new_id = samplebank_add_sample( sample );
		const char *type_str = sample_describe_type( type );

                sample_set_user_data( sample,info,new_id );
                veejay_msg(VEEJAY_MSG_INFO,"Created new %s from %s as Sample %d",
                               type_str, str, new_id );
	}       
        else
        {
                 veejay_msg(VEEJAY_MSG_ERROR,"Could not create sample from %s",token);
        }       
}
Beispiel #2
0
/* constructor */
void mixer_init(void)
{
    debug ("initializing...\n");
    amplitude = DEFAULT_AMPLITUDE;
    pthread_mutex_init (&preview.mutex, NULL);
    preview.sample = sample_new ( );

    debug ("done\n");
}
Beispiel #3
0
sample_t *
__r_update_samples(scope_state_t *scope, sample_t *sample, periph_t *pperiph,
                   int per_mode, uint64_t time, uint64_t last_time)
{
    if(time > last_time){ 
        int      curr_mode   = pperiph->curr_mode;
        int      curr_fvset  = pperiph->curr_fvset;
        int      n_modes     = pperiph->pclass->nmodes;
        uint64_t mode_cost   =
            pperiph->pclass->mode_cost[n_modes * curr_fvset + curr_mode];
        uint64_t last_change = pperiph->last_change_stamp;

        if(sample == NULL){ 
            // if end of list create a new sample
            sample = sample_new (scope, last_time);
            if (sample == NULL)
                return NULL;
        }

        // now it is not useful to update this sample for this periph anymore
        sample->per_costs[pperiph->idx].processed = 1;

        if(sample->time_stamp < last_change){
            // already processed ... with previous events.
            sample->next = __r_update_samples(scope, sample->next, pperiph,
                                              per_mode, time, sample->time_stamp);
        }else{
            // not processed
            uint64_t begin_stamp = 0;
            uint64_t end_stamp   = 0;
            if(last_time < last_change)
                begin_stamp = last_change;  // or not completely processed
            else
                begin_stamp = last_time;
            
            if(time > sample->time_stamp)
                end_stamp = sample->time_stamp;
            else
                end_stamp = time;

            sample->per_costs[pperiph->idx].energy  += (end_stamp - begin_stamp) * mode_cost;

            if(time > sample->time_stamp) // recursion ?
                sample->next = __r_update_samples(scope, sample->next, pperiph,
                    per_mode, time, sample->time_stamp);
        }
    }

    return sample;
}
Beispiel #4
0
static void
sample_construct (XfcePanelPlugin *plugin)
{
  SamplePlugin *sample;

  /* setup transation domain */
  xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");

  /* create the plugin */
  sample = sample_new (plugin);

  /* add the ebox to the panel */
  gtk_container_add (GTK_CONTAINER (plugin), sample->ebox);

  /* show the panel's right-click menu on this ebox */
  xfce_panel_plugin_add_action_widget (plugin, sample->ebox);

  /* connect plugin signals */
  g_signal_connect (G_OBJECT (plugin), "free-data",
                    G_CALLBACK (sample_free), sample);

  g_signal_connect (G_OBJECT (plugin), "save",
                    G_CALLBACK (sample_save), sample);

  g_signal_connect (G_OBJECT (plugin), "size-changed",
                    G_CALLBACK (sample_size_changed), sample);

  g_signal_connect (G_OBJECT (plugin), "orientation-changed",
                    G_CALLBACK (sample_orientation_changed), sample);

  /* show the configure menu item and connect signal */
  xfce_panel_plugin_menu_show_configure (plugin);
  g_signal_connect (G_OBJECT (plugin), "configure-plugin",
                    G_CALLBACK (sample_configure), sample);

  /* show the about menu item and connect signal */
  xfce_panel_plugin_menu_show_about (plugin);
  g_signal_connect (G_OBJECT (plugin), "about",
                    G_CALLBACK (sample_about), NULL);
}
Beispiel #5
0
Sample*
sample_new_from_filename(char* path, gboolean path_alloced)
{
	if (!file_exists(path)) {
		perr("file not found: %s\n", path);
		if (path_alloced) g_free(path);
		return NULL;
	}

	Sample* sample = sample_new();
	sample->full_path = path_alloced ? path : g_strdup(path);

	MIME_type* mime_type = type_from_path(path);
	if (!mime_type) {
		perr("can not resolve mime-type of file\n");
		sample_unref(sample);
		return NULL;
	}
	sample->mimetype = g_strdup_printf("%s/%s", mime_type->media_type, mime_type->subtype);

	if(mimetype_is_unsupported(mime_type, sample->mimetype)){
		dbg(1, "file type \"%s\" not supported.", sample->mimetype);
		sample_unref(sample);
		return NULL;
	}

	sample->mtime = file_mtime(path);

	if(!sample->name){
		gchar* bn = g_path_get_basename(sample->full_path);
		sample->name= to_utf8(bn);
		g_free(bn);
	}
	if(!sample->sample_dir){
		gchar* dn = g_path_get_dirname(sample->full_path);
		sample->sample_dir = to_utf8(dn);
		g_free(dn);
	}
	return sample;
}
Beispiel #6
0
sample_t *
get_sample(scope_state_t *scope, uint64_t time)
{
    sample_t    *samp = scope->samples_head;

    if(samp == NULL)
        samp = sample_new (scope, scope->last_measure_stamp);

    if(samp->time_stamp != time) //error
        return NULL;

    periph_t    *pperiph;
    for(pperiph = scope->head_periphs; pperiph != NULL; pperiph = pperiph->next){
        int      curr_mode         = pperiph->curr_mode;
        int      curr_fvset        = pperiph->curr_fvset;
        int      n_modes           = pperiph->pclass->nmodes;
        uint64_t curr_mode_cost    =
            pperiph->pclass->mode_cost[curr_fvset * n_modes + curr_mode];
        uint64_t last_change_stamp = pperiph->last_change_stamp;
        uint64_t update_en         = 0;

        if(((time - last_change_stamp) >= 0) &&
           ((time - last_change_stamp) < scope->sample_period)){
            // last mode change occured in this sample ... update the end of sample
            update_en = curr_mode_cost * (time - last_change_stamp);
        }else{
            if(samp->per_costs[pperiph->idx].processed != 1)
                update_en = curr_mode_cost * (scope->sample_period);
        }

        samp->per_costs[pperiph->idx].energy += update_en;
    }

    scope->samples_head       = samp->next;
    scope->last_measure_stamp = samp->time_stamp;

    return samp;
}
Beispiel #7
0
int sample_selector_show(int id, GtkWidget* parent_window,
                                 SampleTab* sampletab)
{
    enum {  RESPONSE_LOAD = 1,  RESPONSE_PREVIEW = 2 };

    GtkWidget* dialog;
    raw_box* rawbox;
    global_settings* settings = settings_get();

    last_sample = sample_new();
    patch = id;
    dialog = gtk_file_chooser_dialog_new("Load Sample",
                                          GTK_WINDOW(parent_window),
                                          GTK_FILE_CHOOSER_ACTION_OPEN,
                                          GTK_STOCK_CANCEL,
                                          GTK_RESPONSE_CANCEL,
                                          GTK_STOCK_OPEN,
                                          GTK_RESPONSE_ACCEPT, NULL);
    if ((rawbox = raw_box_new(dialog)))
    {
        gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog),
                                                            rawbox->box);
    }

    create_filters(dialog);

    sample_shallow_copy(last_sample, patch_sample_data(patch));

    if (last_sample->filename &&
        strcmp(last_sample->filename, "Default") != 0)
    {
        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
                                last_sample->filename);
        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
                         g_path_get_dirname(last_sample->filename));
    } 
    else {
        if ( settings->last_sample_dir) 
            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
                                          settings->last_sample_dir);
    }

    gtk_dialog_add_button(GTK_DIALOG(dialog),
                                "Loa_d", RESPONSE_LOAD);

    gtk_dialog_add_button(GTK_DIALOG(dialog),
                                "Pre_view", RESPONSE_PREVIEW);

    /*  we don't always want to auto-preview when the "selection-changed"
        signal is emitted on a) when the dialog is created, b) when the
        current-folder is changed.
     */
    rawbox->dont_preview = true;
    g_timeout_add(250, timeout_cancel_dont_preview, rawbox);

    g_signal_connect(rawbox->dialog, "current-folder-changed",
                                G_CALLBACK(folder_changed_cb), rawbox);

    g_signal_connect(rawbox->dialog, "selection-changed",
                                G_CALLBACK(selection_changed_cb), rawbox);

again:

    switch(gtk_dialog_run(GTK_DIALOG(dialog)))
    {
    case GTK_RESPONSE_ACCEPT:
        cb_load(rawbox);
        break;

    case RESPONSE_LOAD:
        cb_load(rawbox);
        sample_tab_update_waveforms(sampletab);
        goto again;

    case RESPONSE_PREVIEW:
        cb_preview(rawbox);
        goto again;

    case GTK_RESPONSE_CANCEL:
        cb_cancel();
    default:
        break;
    }

    gtk_widget_destroy(dialog);
    sample_free(last_sample);
    last_sample = 0;

    return 0;
}
Beispiel #8
0
Patch* patch_new(void)
{
    int i;
    Patch* p;

    p = malloc(sizeof(*p));

    if (!p)
        return 0;

    p->name[0] = '\0';

    p->active =         false;
    p->sample =         sample_new();
    p->display_index =  -1;

    p->name[0] = '\0';

    p->channel =        0;
    p->root_note =      60;
    p->lower_note =     60;
    p->upper_note =     60;
    p->lower_vel =      0;
    p->upper_vel =      127;

    p->cut =            0;
    p->cut_by =         0;

    p->play_start =     0;
    p->play_stop =      0;
    p->loop_start =     0;
    p->loop_stop =      0;
    p->sample_stop =    0;

    p->marks[WF_MARK_START] =      &start_frame;
    p->marks[WF_MARK_STOP] =       &p->sample_stop;
    p->marks[WF_MARK_PLAY_START] = &p->play_start;
    p->marks[WF_MARK_PLAY_STOP] =  &p->play_stop;
    p->marks[WF_MARK_LOOP_START] = &p->loop_start;
    p->marks[WF_MARK_LOOP_STOP] =  &p->loop_stop;

    p->fade_samples =   0;
    p->xfade_samples =  0;

    p->porta.active =   true;   /* but only if PORTAMENTO   */
    p->porta.thresh =   0.5;    /* controller says so...    */
    p->porta.mod_id =   MOD_SRC_MIDI_CC + CC_PORTAMENTO;

    p->porta_secs.val =     0.05;
    p->porta_secs.mod_amt = 1.0;
    p->porta_secs.mod_id =  MOD_SRC_MIDI_CC + CC_PORTAMENTO_TIME;

    p->pitch_steps =    2;
    p->pitch_bend =     0;

    p->mono = false;

    p->legato.active =  true;   /* but only if mono is on, *AND*    */
    p->legato.thresh =  0.5;    /* LEGATO controller says so...     */
    p->legato.mod_id =  MOD_SRC_MIDI_CC + CC_LEGATO;

    p->play_mode =      PATCH_PLAY_SINGLESHOT;

    for (i = 0; i < MAX_MOD_SLOTS; ++i)
    {
        p->amp.mod_id[i] = MOD_SRC_NONE;
        p->amp.mod_amt[i] = 0.0;

        p->pan.mod_id[i] = MOD_SRC_NONE;
        p->pan.mod_amt[i] = 0.0;

        p->ffreq.mod_id[i] = MOD_SRC_NONE;
        p->ffreq.mod_amt[i] = 0.0;

        p->freso.mod_id[i] = MOD_SRC_NONE;
        p->freso.mod_amt[i] = 0.0;

        p->pitch.mod_id[i] = MOD_SRC_NONE;
        p->pitch.mod_amt[i] = 0.0;

        p->mod_pitch_min[i] = 1.0;
        p->mod_pitch_max[i] = 1.0;
    }

    p->amp.val =        DEFAULT_AMPLITUDE;
    p->amp.vel_amt =    1.0;
    p->amp.key_amt =    0.0;

    p->pan.val =        0.0;
    p->pan.vel_amt =    0;
    p->pan.key_amt =    0.0;

    p->ffreq.val =      1.0;
    p->ffreq.vel_amt =  0;
    p->ffreq.key_amt =  0;

    p->freso.val =      0.0;
    p->freso.vel_amt =  0;
    p->freso.key_amt =  0;

    p->pitch.val =      0.0;
    p->pitch.vel_amt =  0;
    p->pitch.key_amt =  1.0;

    for (i = 0; i < PATCH_MAX_LFOS; ++i)
    {
        lfo_params_init(&p->glfo_params[i], 1.0, LFO_SHAPE_SINE);
        p->glfo[i] = lfo_new();
        /* init tables to NULL */
        p->glfo_table[i] = 0;
    }

    patch_set_global_lfo_buffers(p, patch_buffersize);

    /* only the params for the voice lfo can be set at this stage */
    for (i = 0; i < VOICE_MAX_LFOS; ++i)
        lfo_params_init(&p->vlfo_params[i], 1.0, LFO_SHAPE_SINE);

    for (i = 0; i < VOICE_MAX_ENVS; i++)
        adsr_params_init(&p->env_params[i], 0.005, 0.025);

    for (i = 0; i < PATCH_VOICE_COUNT; ++i)
    {
        p->voices[i] = patch_voice_new();
    }

    p->last_note = -1;

    pthread_mutex_init(&p->mutex, NULL);

    debug("********************************\n");
    debug("created patch:%s [%p]\n", p->name, p);
    debug("********************************\n");

    return p;
}