void EffectSettingsPage::openEditor()
{
    int index = pluginList->currentRow();
    EffectPlugin *plugin = processor->getPlugin(index);

    plugin->openEditor(parentWidget());
}
Exemple #2
0
int EFFECT_Init()
{

    BFList *effects;
    int i;
    LADSPA_Descriptor *dc;
    EffectPlugin *m;
    
    TRACE("EFFECT_Init");
    
    run = 0;
    
    effects=PLUGIN_GetList (PLUGIN_TYPE_EFFECT);
    
    while(effects)
    {
        m=(EffectPlugin*)effects->data;
        for(i=0;;i++)
        {
            if(m->dis)
            {
                dc = (LADSPA_Descriptor*) m->dis(i);
                if(dc == NULL)
                    break;
//                printf("dc %s\n",dc->Label);
            }
        }
        effects=effects->next;
    }
    return 1;
}
Exemple #3
0
static void oss_write_audio(gpointer data, int length)
{
	audio_buf_info abuf_info;
	AFormat new_format;
	int new_frequency, new_channels;
	EffectPlugin *ep;
	
	new_format = input.format.xmms;
	new_frequency = input.frequency;
	new_channels = input.channels;
	
	ep = get_current_effect_plugin();
	if(effects_enabled() && ep && ep->query_format)
	{
		ep->query_format(&new_format,&new_frequency,&new_channels);
	}
	
	if (new_format != effect.format.xmms ||
	    new_frequency != effect.frequency ||
	    new_channels != effect.channels)
	{
		output_time_offset += (output_bytes * 1000) / output.bps;
		output_bytes = 0;
		close(fd);
		fd = open(device_name,O_WRONLY);
		oss_setup_format(new_format, new_frequency, new_channels);
	}
	if (effects_enabled() && ep && ep->mod_samples)
		length = ep->mod_samples(&data, length,
					 input.format.xmms,
					 input.frequency,
					 input.channels);
	if (realtime && !ioctl(fd, SNDCTL_DSP_GETOSPACE, &abuf_info))
	{
		while (abuf_info.bytes < length)
		{
			xmms_usleep(10000);
			if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &abuf_info))
				break;
		}
	}

	if (oss_convert_func != NULL)
		length = oss_convert_func(&data, length);

	if (oss_stereo_convert_func != NULL)
		length = oss_stereo_convert_func(&data, length,
						 output.format.oss);

	if (effect.frequency == output.frequency)
		output_bytes += write_all(fd, data, length);
	else
		output_bytes += oss_downsample(data, length,
					       effect.frequency,
					       output.frequency);
}
Exemple #4
0
static bool_t effect_start_cb (PluginHandle * plugin, EffectStartState * state)
{
    AUDDBG ("Starting %s at %d channels, %d Hz.\n", plugin_get_name (plugin),
     * state->channels, * state->rate);
    EffectPlugin * header = plugin_get_header (plugin);
    g_return_val_if_fail (header != NULL, TRUE);
    header->start (state->channels, state->rate);

    RunningEffect * effect = g_malloc (sizeof (RunningEffect));
    effect->plugin = plugin;
    effect->header = header;
    effect->channels_returned = * state->channels;
    effect->rate_returned = * state->rate;
    effect->remove_flag = FALSE;

    running_effects = g_list_prepend (running_effects, effect);
    return TRUE;
}
void EffectSettingsPage::addPlugin()
{
    if (!addPluginDialog.exec()) {
        return;
    }
    settings->setValue("vst/searchPath", addPluginDialog.searchPath());
    settings->setValue("vst/plugins", addPluginDialog.plugins());

    EffectPlugin *plugin = NULL;
    QString name = addPluginDialog.selectedPlugin();
    if (name.endsWith(" [VST]")) {
        plugin = new VSTPlugin(name.left(name.size() - QString(" [VST]").size()));
    }
#ifdef Q_OS_MAC
    if (name.endsWith(" [AudioUnit]")) {
        plugin = new AudioUnitPlugin(name.left(name.size() - QString(" [AudioUnit]").size()));
    }
#endif
    if (!plugin) {
        return;
    }
    if (!plugin->load()) {
        delete plugin;
        return;
    }

    /* Opening the editor window frequently blocks for a short amount of time.
     * Do it before inserting the plugin so audio processing is unaffected.
     */
    plugin->openEditor(parentWidget());

    if (!processor->insertPlugin(0, plugin)) {
        delete plugin;
        return;
    }

    pluginList->insertItem(0, plugin->getName());
    pluginList->setCurrentRow(0);
}
Exemple #6
0
static void
op_write (void *ptr, int len)
{
	EffectPlugin *ep;

	if (paused)
		return;

	/* This sucks but XMMS totally broke the effect plugin code when
	   they added support for multiple enabled effects.  Complain to
	   the non-existent XMMS team if a plugin does not work, however
	   this does not seem to affect any plugins in our ports tree. */
	ep = get_current_effect_plugin ();
	ep->mod_samples (&ptr, len, afmt, par.rate, par.pchan);

	/* Do not lock sio_write as this will cause the GUI thread
	   to block waiting for a blocked sio_write to return. */
	len = sio_write (hdl, ptr, len);

	pthread_mutex_lock (&mutex);
	wrpos += len;
	pthread_mutex_unlock (&mutex);
}
void EffectSettingsPage::routeClicked()
{
    int index = pluginList->currentRow();
    EffectPlugin *plugin = processor->getPlugin(index);
    EffectPluginRoutingDialog dialog(plugin->getName());

    dialog.setWetDryMix(plugin->getWetDryMix());
    dialog.setReceiveMidi(plugin->getReceiveMidi());

    if (dialog.exec() == QDialog::Accepted) {
        plugin->setWetDryMix(dialog.getWetDryMix());
        plugin->setReceiveMidi(dialog.getReceiveMidi());
    }
}