X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fequalizer.m;h=be97304702b89abfa91f2677dc362c89656ae52e;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=b3d88f9f99e140bea5e631cb8fb6bc82e953e8cc;hpb=9ceb12b95d08b28d12a819cd2abac3ce0e43f308;p=vlc diff --git a/modules/gui/macosx/equalizer.m b/modules/gui/macosx/equalizer.m index b3d88f9f99..be97304702 100644 --- a/modules/gui/macosx/equalizer.m +++ b/modules/gui/macosx/equalizer.m @@ -1,7 +1,7 @@ /***************************************************************************** * equalizer.m: MacOS X interface module ***************************************************************************** - * Copyright (C) 2004 VideoLAN + * Copyright (C) 2004-2006 the VideoLAN team * $Id$ * * Authors: Jerome Decoodt @@ -10,7 +10,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -18,15 +18,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ #include -#include -#include +#include #include "intf.h" @@ -36,7 +35,7 @@ #include "../../audio_filter/equalizer_presets.h" /***************************************************************************** - * VLCEqualizer implementation + * VLCEqualizer implementation *****************************************************************************/ @implementation VLCEqualizer @@ -120,6 +119,8 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, psz_string = var_GetString( p_object, "audio-filter" ); + vlc_object_release( p_object ); + if( !psz_string ) return VLC_FALSE; psz_parser = strstr( psz_string, psz_name ); @@ -137,20 +138,21 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, int i; [o_btn_equalizer setToolTip: _NS("Equalizer")]; [o_ckb_2pass setTitle: _NS("2 Pass")]; - [o_ckb_2pass setToolTip: _NS("If you enable this settting, the " - "equalizer filter will be applied twice. The effect will be sharper")]; + [o_ckb_2pass setToolTip: _NS("Apply the " + "equalizer filter twice. The effect will be sharper.")]; [o_ckb_enable setTitle: _NS("Enable")]; - [o_ckb_enable setToolTip: _NS("Enable the equalizer. You can either " - "manually change the bands or use a preset.")]; + [o_ckb_enable setToolTip: _NS("Enable the equalizer. Bands can be set " + "manually or using a preset.")]; [o_fld_preamp setStringValue: _NS("Preamp")]; [o_popup_presets removeAllItems]; for( i = 0; i < 18 ; i++ ) { - [o_popup_presets insertItemWithTitle: _NS(preset_list[i]) atIndex: i]; + [o_popup_presets insertItemWithTitle: _NS(preset_list_text[i]) atIndex: i]; } [o_window setTitle: _NS("Equalizer")]; + /* [o_slider_band1 setFloatValue: 0]; [o_slider_band2 setFloatValue: 0]; [o_slider_band3 setFloatValue: 0]; @@ -161,7 +163,8 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, [o_slider_band8 setFloatValue: 0]; [o_slider_band9 setFloatValue: 0]; [o_slider_band10 setFloatValue: 0]; - + */ + [self initBandSliders]; [o_ckb_enable setState: NSOffState]; [o_ckb_2pass setState: NSOffState]; } @@ -170,24 +173,29 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, { intf_thread_t *p_intf = VLCIntf; float f_preamp, f_band[10]; - char *psz_bands, *p_next; + char *psz_bands, *psz_bands_init, *p_next; vlc_bool_t b_2p; int i; - vlc_bool_t b_enabled = GetFiltersStatus( p_intf, "equalizer" ); + vlc_bool_t b_enabled = GetFiltersStatus( p_intf, (char *)"equalizer" ); vlc_object_t *p_object = vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); + if( p_object == NULL ) p_object = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( p_object == NULL ) return; + var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT | + VLC_VAR_DOINHERIT ); + var_Create( p_object, "equalizer-bands", VLC_VAR_STRING | + VLC_VAR_DOINHERIT ); + f_preamp = var_GetFloat( p_object, "equalizer-preamp" ); psz_bands = var_GetString( p_object, "equalizer-bands" ); - if( !psz_bands ) + + if( !strcmp( psz_bands, "" ) ) psz_bands = strdup( "0 0 0 0 0 0 0 0 0 0" ); - if ( !psz_bands ) - return; b_2p = var_GetBool( p_object, "equalizer-2pass" ); @@ -197,6 +205,8 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, [o_slider_preamp setFloatValue: f_preamp]; /* Set the bands slider */ + psz_bands_init = psz_bands; + for( i = 0; i < 10; i++ ) { /* Read dB -20/20 */ @@ -210,8 +220,10 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, if( !*psz_bands ) break; /* end of line */ psz_bands = p_next+1; } - free( psz_bands ); + free( psz_bands_init ); + [self setBandSlidersValues:f_band]; + /* [o_slider_band1 setFloatValue: f_band[0]]; [o_slider_band2 setFloatValue: f_band[1]]; [o_slider_band3 setFloatValue: f_band[2]]; @@ -222,7 +234,8 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, [o_slider_band8 setFloatValue: f_band[7]]; [o_slider_band9 setFloatValue: f_band[8]]; [o_slider_band10 setFloatValue: f_band[9]]; - + */ + /* Set the the checkboxes */ if( b_enabled == VLC_TRUE ) [o_ckb_enable setState:NSOnState]; @@ -284,8 +297,10 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, for( i = 0; i < 10; i++ ) sprintf( psz_values, "%s %.1f", psz_values, eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[i] ); var_SetString( p_object, "equalizer-bands", psz_values ); + var_SetFloat( p_object, "equalizer-preamp", eqz_preset_10b[[sender indexOfSelectedItem]]->f_preamp); [o_slider_preamp setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_preamp]; + /* [o_slider_band1 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[0]]; [o_slider_band2 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[1]]; [o_slider_band3 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[2]]; @@ -296,13 +311,15 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, [o_slider_band8 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[7]]; [o_slider_band9 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[8]]; [o_slider_band10 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[9]]; - + */ + [self setBandSlidersValues:(float *)eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp]; + vlc_object_release( p_object ); } - (IBAction)enable:(id)sender { - ChangeFiltersString( VLCIntf, "equalizer", [sender state] ); + ChangeFiltersString( VLCIntf, (char *)"equalizer", [sender state] ); } - (IBAction)preampSliderUpdated:(id)sender @@ -370,10 +387,128 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, - (void)awakeFromNib { + int i; + vlc_object_t *p_object= vlc_object_find( VLCIntf, + VLC_OBJECT_AOUT, FIND_ANYWHERE ); + if( p_object == NULL ) + p_object = vlc_object_find( VLCIntf, + VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + [o_window setExcludedFromWindowsMenu: TRUE]; - + [self initStrings]; + + if( p_object ) + { + char *psz_preset; + + var_Create( p_object, "equalizer-preset", VLC_VAR_STRING | + VLC_VAR_DOINHERIT ); + psz_preset = var_GetString( p_object, "equalizer-preset" ); + + for( i = 0 ; i < 18 ; i++ ) + { + if( !strcmp( preset_list[i], psz_preset ) ) + { + [o_popup_presets selectItemAtIndex: i]; + + [o_slider_preamp setFloatValue: eqz_preset_10b[i]->f_preamp]; + [self setBandSlidersValues: (float *)eqz_preset_10b[i]->f_amp]; + + /* + [o_slider_band1 setFloatValue: eqz_preset_10b[i]->f_amp[0]]; + [o_slider_band2 setFloatValue: eqz_preset_10b[i]->f_amp[1]]; + [o_slider_band3 setFloatValue: eqz_preset_10b[i]->f_amp[2]]; + [o_slider_band4 setFloatValue: eqz_preset_10b[i]->f_amp[3]]; + [o_slider_band5 setFloatValue: eqz_preset_10b[i]->f_amp[4]]; + [o_slider_band6 setFloatValue: eqz_preset_10b[i]->f_amp[5]]; + [o_slider_band7 setFloatValue: eqz_preset_10b[i]->f_amp[6]]; + [o_slider_band8 setFloatValue: eqz_preset_10b[i]->f_amp[7]]; + [o_slider_band9 setFloatValue: eqz_preset_10b[i]->f_amp[8]]; + [o_slider_band10 setFloatValue: eqz_preset_10b[i]->f_amp[9]]; + */ + + if( strcmp( psz_preset, "flat" ) ) + { + char psz_bands[100]; + memset( psz_bands, 0, 100 ); + + sprintf( psz_bands, "%.1f %.1f %.1f %.1f %.1f %.1f %.1f " + "%.1f %.1f %.1f", + eqz_preset_10b[i]->f_amp[0], + eqz_preset_10b[i]->f_amp[1], + eqz_preset_10b[i]->f_amp[2], + eqz_preset_10b[i]->f_amp[3], + eqz_preset_10b[i]->f_amp[4], + eqz_preset_10b[i]->f_amp[5], + eqz_preset_10b[i]->f_amp[6], + eqz_preset_10b[i]->f_amp[7], + eqz_preset_10b[i]->f_amp[8], + eqz_preset_10b[i]->f_amp[9] ); + + var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT | + VLC_VAR_DOINHERIT ); + var_Create( p_object, "equalizer-bands", VLC_VAR_STRING | + VLC_VAR_DOINHERIT ); + var_SetFloat( p_object, "equalizer-preamp", + eqz_preset_10b[i]->f_preamp ); + var_SetString( p_object, "equalizer-bands", psz_bands ); + } + } + } + free( psz_preset ); + vlc_object_release( p_object ); + } + [self equalizerUpdated]; + +} + + +- (id)getSliderByIndex:(int)index +{ + switch(index) + { + case 0 : return o_slider_band1; + case 1 : return o_slider_band2; + case 2 : return o_slider_band3; + case 3 : return o_slider_band4; + case 4 : return o_slider_band5; + case 5 : return o_slider_band6; + case 6 : return o_slider_band7; + case 7 : return o_slider_band8; + case 8 : return o_slider_band9; + case 9 : return o_slider_band10; + default : return nil; + } +} + +- (void)setBandSlidersValues:(float *)values +{ + int i = 0; + for (i = 0 ; i<= 9 ; i++) + { + [self setValue:values[i] forSlider:i]; + } +} + +- (void)initBandSliders +{ + int i = 0; + for (i = 0 ; i< 9 ; i++) + { + [self setValue:0.0 forSlider:i]; + } +} + +- (void)setValue:(float)value forSlider:(int)index +{ + id slider = [self getSliderByIndex:index]; + + if (slider != nil) + { + [slider setFloatValue:value]; + } } @end