Changeset 120

Show
Ignore:
Timestamp:
09/09/06 22:44:03 (5 years ago)
Author:
ath
Message:

Improve FmDJMixer.

Files:
5 modified

Legend:

Unmodified
Added
Removed
  • fm_gui/trunk/src/fm_djmixer_gui.c

    r119 r120  
    2323static void fm_djmixer_gui_chan_vscale_fader_value_changed      (GtkRange        *range, 
    2424                                         gpointer       user_data); 
     25static void fm_djmixer_gui_dial_master_level_value_changed (GtkAdjustment        *adj, 
     26                                         gpointer       user_data); 
    2527static void fm_djmixer_gui_level_changed_cb                     (RgcRemoteObject *obj, 
    26                                                  guint          port_n, 
     28                                                 gint           port_n, 
    2729                                                 gfloat         level_l, 
    2830                                                 gfloat         level_r, 
     
    9395 
    9496        gui->dial_master_level = glade_xml_get_widget(gui->xml_mixer, "dial_master_level"); 
     97        gui->dial_master_level_adj = gtk_tx_dial_get_adjustment (GTK_TX_DIAL (gui->dial_master_level)); 
    9598        gui->dial_cue_level = glade_xml_get_widget(gui->xml_mixer, "dial_cue_level"); 
     99        gui->dial_cue_level_adj = gtk_tx_dial_get_adjustment (GTK_TX_DIAL (gui->dial_cue_level)); 
    96100        gui->flash_master = glade_xml_get_widget(gui->xml_mixer, "flash_master"); 
     101 
     102        g_signal_connect (gui->dial_master_level_adj, "value-changed", G_CALLBACK(fm_djmixer_gui_dial_master_level_value_changed), gui); 
    97103 
    98104        fm_djmixer_gui_add_channel (gui, 0); 
     
    160166 
    161167static void 
     168fm_djmixer_gui_dial_master_level_value_changed (GtkAdjustment    *adj, 
     169                                         gpointer       user_data) 
     170{ 
     171        FmDJMixerGui *gui = (FmDJMixerGui *) user_data; 
     172        FmDJMixerData *mixer_data = (FmDJMixerData *) gui->client; 
     173 
     174        gdouble orig_value = gtk_adjustment_get_value (adj); 
     175        gdouble value = orig_value + 1; 
     176        g_print("fm_djmixer_gui_dial_master_level_changed %f\n", value); 
     177 
     178        GValue *p = g_value_init_int (-1); 
     179        GValue *val = g_value_init_double (value); 
     180        rgc_remote_object_call (mixer_data->element, "set_gain", p, val, NULL); 
     181        g_value_destroy (val); 
     182} 
     183 
     184 
     185static void 
    162186fm_djmixer_gui_level_changed_cb                 (RgcRemoteObject *obj, 
    163                                                  guint          port_n, 
     187                                                 gint           port_n, 
    164188                                                 gfloat         level_l, 
    165189                                                 gfloat         level_r, 
     
    167191{ 
    168192        FmDJMixerGui *gui = (FmDJMixerGui *) user_data; 
    169         FmDJMixerGuiChannel *chan = (FmDJMixerGuiChannel *) g_list_nth_data (gui->channels, port_n); 
    170  
    171         gtk_tx_flash_set_level (GTK_WIDGET(chan->flash_level), level_l, level_r); 
    172 } 
     193 
     194        GtkWidget *flash; 
     195        if (port_n > -1) { 
     196                FmDJMixerGuiChannel *chan = (FmDJMixerGuiChannel *) g_list_nth_data (gui->channels, port_n); 
     197                flash = chan->flash_level; 
     198        } else if (port_n == -1) { 
     199                flash = gui->flash_master; 
     200        } else { 
     201                g_warning ("Unknown channel %d", port_n); 
     202                return; 
     203        } 
     204 
     205        gtk_tx_flash_set_level (flash, level_l, level_r); 
     206} 
  • fm_gui/trunk/src/fm_djmixer_gui.h

    r119 r120  
    2828 
    2929        GtkWidget *dial_master_level; 
     30        GtkAdjustment   *dial_master_level_adj; 
    3031        GtkWidget *dial_cue_level; 
     32        GtkAdjustment   *dial_cue_level_adj; 
    3133        GtkWidget *flash_master; 
    3234         
  • fm_server/trunk/src/fm_djmixer.c

    r119 r120  
    1616static void fm_djmixer_class_init       (FmDJMixerClass *class); 
    1717static void fm_djmixer_init             (FmDJMixer      *mixer); 
     18static void fm_djmixer_master_level_changed (GObject    *instance, 
     19                                         gfloat         level_l, 
     20                                         gfloat         level_r, 
     21                                         gpointer       user_data); 
    1822static void fm_djmixer_connect_src      (FmElement      *element, 
    1923                                         FmElement      *src); 
     
    2226                                         FmBuffer       *buffer); 
    2327static void fm_djmixer_set_gain         (FmDJMixer      *djm, 
    24                                          guint          port_n, 
     28                                         gint           port_n, 
    2529                                         gdouble        value); 
    2630static void fm_djmixer_set_pan          (FmDJMixer      *djm, 
     
    128132        fm_element_connect_src (FM_ELEMENT (djm->master_level), FM_ELEMENT (djm->master_gain)); 
    129133        fm_element_connect_src (FM_ELEMENT (djm->master_gain), FM_ELEMENT (djm->mixer)); 
     134        rgc_signal_catch (G_OBJECT(djm->master_level), "level_changed", rgc_marshal_VOID__FLOAT_FLOAT, 
     135                          G_CALLBACK(fm_djmixer_master_level_changed), djm); 
    130136} 
    131137 
     
    160166 
    161167 
     168static void 
     169fm_djmixer_master_level_changed         (GObject        *instance, 
     170                                         gfloat         level_l, 
     171                                         gfloat         level_r, 
     172                                         gpointer       user_data) 
     173{ 
     174        FmDJMixer *djm = FM_DJMIXER (user_data); 
     175         
     176        GValue *ch = g_value_init_int (-1); 
     177        GValue *val1 = g_value_init_float (level_l); 
     178        GValue *val2 = g_value_init_float (level_r); 
     179        rgc_signal_emit (djm, "level_changed", ch, val1, val2, NULL); 
     180        g_value_destroy (ch); 
     181        g_value_destroy (val1); 
     182        g_value_destroy (val2);  
     183} 
     184 
     185 
    162186 
    163187static void 
     
    192216static void 
    193217fm_djmixer_set_gain                     (FmDJMixer      *djm, 
     218                                         gint           port_n, 
     219                                         gdouble        value) 
     220{ 
     221        FmEffectGain *gain; 
     222 
     223        if (port_n > -1) { 
     224                g_return_if_fail (port_n < djm->total_ports); 
     225                FmDJMixerChannel *chan = djm->channels[port_n]; 
     226                g_return_if_fail (chan); 
     227                gain = chan->gain; 
     228        } else if (port_n == -1) { 
     229                gain = djm->master_gain; 
     230        } else 
     231                g_warning ("Unknown port %d", port_n); 
     232 
     233        fm_effect_gain_set_gain (gain, value); 
     234} 
     235 
     236 
     237static void 
     238fm_djmixer_set_pan                      (FmDJMixer      *djm, 
    194239                                         guint          port_n, 
    195240                                         gdouble        value) 
     
    200245        g_return_if_fail (chan); 
    201246 
    202         fm_effect_gain_set_gain (chan->gain, value); 
    203 } 
    204  
    205  
    206 static void 
    207 fm_djmixer_set_pan                      (FmDJMixer      *djm, 
     247        fm_effect_pan_set_pan (chan->pan, value); 
     248} 
     249 
     250 
     251static void 
     252fm_djmixer_set_fader                    (FmDJMixer      *djm, 
    208253                                         guint          port_n, 
    209254                                         gdouble        value) 
     
    214259        g_return_if_fail (chan); 
    215260 
    216         fm_effect_pan_set_pan (chan->pan, value); 
    217 } 
    218  
    219  
    220 static void 
    221 fm_djmixer_set_fader                    (FmDJMixer      *djm, 
    222                                          guint          port_n, 
    223                                          gdouble        value) 
    224 { 
    225         g_return_if_fail (port_n < djm->total_ports); 
    226  
    227         FmDJMixerChannel *chan = djm->channels[port_n]; 
    228         g_return_if_fail (chan); 
    229  
    230261        fm_effect_gain_set_gain (chan->fader, value); 
    231262} 
  • fm_server/trunk/src/fm_level_meter.c

    r118 r120  
    3030#include "fm_buffer.h" 
    3131#include "fm_element.h" 
    32 //#include "fm_input.h" 
    3332#include "fm_effect.h" 
    3433#include "fm_level_meter.h" 
     
    118117        g_print ("Activating level meter...\n"); 
    119118 
    120         meter->last_values = g_new0(gfloat, FM_CHANNELS_STEREO); 
    121119        meter->current_values = g_new0(gfloat, FM_CHANNELS_STEREO); 
    122120         
     
    134132        fm_element_get_buffer_from_src (element, buffer); 
    135133 
     134        meter->sample_count += buffer->requested_samples; 
     135 
    136136        guint i, m; 
    137         gboolean changed = FALSE; 
     137        gboolean nonzero = FALSE; 
    138138        for (i = 0; i < FM_CHANNELS_STEREO; i++) { 
    139139                meter->current_values[i] = 0.0; 
     
    141141                        if (buffer->channel_data[i][m] > meter->current_values[i]) { 
    142142                                meter->current_values[i] = buffer->channel_data[i][m]; 
    143                                 changed = TRUE; 
     143                                nonzero = TRUE; 
    144144                        } 
    145145        } 
    146146 
    147         if (changed) { 
    148                 for (i = 0; i < FM_CHANNELS_STEREO; i++) 
    149                         meter->last_values[i] = meter->current_values[i]; 
     147        if (nonzero) 
     148                meter->zero_count = 0; 
     149        else 
     150                meter->zero_count++; 
     151 
     152        if (meter->zero_count > ZERO_N) 
     153                return; 
     154 
     155        if (meter->sample_count > SIGNAL_EVERY_N_SAMPLES) { 
     156                meter->sample_count = 0; 
    150157 
    151158                GValue *val1 = g_value_init_float (meter->current_values[0]); 
  • fm_server/trunk/src/fm_level_meter.h

    r118 r120  
    3030#define FM_LEVEL_METER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), FM_TYPE_LEVEL_METER, FmLevelMeterClass)) 
    3131 
     32 
     33#define ZERO_N 1000 
     34#define SIGNAL_EVERY_N_SAMPLES 2000 
     35 
    3236typedef struct _FmLevelMeter FmLevelMeter; 
    3337typedef struct _FmLevelMeterClass FmLevelMeterClass; 
     
    3741        FmEffect effect; 
    3842         
    39         gfloat *last_values; 
     43        //gfloat *last_values; 
    4044        gfloat *current_values; 
     45 
     46        guint zero_count; 
     47        guint sample_count; 
    4148}; 
    4249