⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 equalizer.m

📁 VLC Player Source Code
💻 M
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * equalizer.m: MacOS X interface module ***************************************************************************** * Copyright (C) 2004-2008 the VideoLAN team * $Id: 78adadd89f881f6ebf56e8b2f5a47a3ab889a5f7 $ * * Authors: Jérôme Decoodt <djc@videolan.org> *          Felix Paul Kühne <fkuehne -at- videolan -dot- org> * * This program is free software; you can redistribute it and/or modify * 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 * GNU General Public License for more details. * * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <vlc_common.h>#include <vlc_aout.h>#include "intf.h"#include <math.h>#include "equalizer.h"#include "../../audio_filter/equalizer_presets.h"/***************************************************************************** * VLCEqualizer implementation *****************************************************************************/@implementation VLCEqualizerstatic void ChangeFiltersString( intf_thread_t *p_intf,                                 char *psz_name, bool b_add ){    char *psz_parser, *psz_string;    int i;    vlc_object_t *p_object = vlc_object_find( p_intf,                                VLC_OBJECT_AOUT, FIND_ANYWHERE );    aout_instance_t *p_aout = (aout_instance_t *)p_object;    if( !p_object )    {        p_object = (vlc_object_t *)pl_Yield( p_intf );    }    psz_string = var_GetNonEmptyString( p_object, "audio-filter" );    if( !psz_string ) psz_string = strdup( "" );    psz_parser = strstr( psz_string, psz_name );    if( b_add )    {        if( !psz_parser )        {            psz_parser = psz_string;            asprintf( &psz_string, ( *psz_string ) ? "%s,%s" : "%s%s",                            psz_string, psz_name );            free( psz_parser );        }        else        {            vlc_object_release( p_object );            return;        }    }    else    {        if( psz_parser )        {            memmove( psz_parser, psz_parser + strlen( psz_name ) +                            ( *( psz_parser + strlen( psz_name ) ) == ',' ? 1 : 0 ),                            strlen( psz_parser + strlen( psz_name ) ) + 1 );            if( *( psz_string+strlen( psz_string ) - 1 ) == ',' )            {                *( psz_string+strlen( psz_string ) - 1 ) = '\0';            }         }         else         {            free( psz_string );            vlc_object_release( p_object );            return;         }    }    var_SetString( p_object, "audio-filter", psz_string );    if( p_aout )    {        for( i = 0; i < p_aout->i_nb_inputs; i++ )        {            p_aout->pp_inputs[i]->b_restart = true;        }    }        if( (BOOL)config_GetInt( p_object, "macosx-eq-keep" ) == YES )    {        /* save changed to config */        config_PutPsz( p_object, "audio-filter", psz_string );        /* save to vlcrc */        config_SaveConfigFile( p_object, "main" );    }        free( psz_string );    vlc_object_release( p_object );}static bool GetFiltersStatus( intf_thread_t *p_intf,                                 char *psz_name ){    char *psz_parser, *psz_string;    vlc_object_t *p_object = vlc_object_find( p_intf,                                VLC_OBJECT_AOUT, FIND_ANYWHERE );    if( p_object == NULL )        p_object = (vlc_object_t *)pl_Yield( p_intf );    if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES )        psz_string = config_GetPsz( p_intf, "audio-filter" );    if(! psz_string )        psz_string = var_GetNonEmptyString( p_object, "audio-filter" );    vlc_object_release( p_object );    if( !psz_string ) return false;    psz_parser = strstr( psz_string, psz_name );    free( psz_string );    if ( psz_parser )        return true;    else        return false;}- (void)initStrings{    int i;    [o_btn_equalizer setToolTip: _NS("Equalizer")];    [o_ckb_2pass setTitle: _NS("2 Pass")];    [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. 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_text[i]) atIndex: i];    }    [o_window setTitle: _NS("Equalizer")];    [self initBandSliders];}- (void)equalizerUpdated{    intf_thread_t *p_intf = VLCIntf;    float f_preamp, f_band[10];    char *psz_bands, *psz_bands_init, *p_next;    bool b_2p;    int i;    bool 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_t *)pl_Yield( p_intf );    var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT |                VLC_VAR_DOINHERIT );    var_Create( p_object, "equalizer-bands", VLC_VAR_STRING |                VLC_VAR_DOINHERIT );    psz_bands = var_GetNonEmptyString( p_object, "equalizer-bands" );    if( psz_bands == NULL )        psz_bands = strdup( "0 0 0 0 0 0 0 0 0 0" );    if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES )    {        b_2p = (BOOL)config_GetInt( p_object, "equalizer-2pass" );        f_preamp = config_GetFloat( p_object, "equalizer-preamp" );    }    else    {        b_2p = var_GetBool( p_object, "equalizer-2pass" );        f_preamp = var_GetFloat( p_object, "equalizer-preamp" );    }    vlc_object_release( p_object );        /* Set the preamp slider */    [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 */#ifdef HAVE_STRTOF        f_band[i] = strtof( psz_bands, &p_next );#else        f_band[i] = (float)strtod( psz_bands, &p_next );#endif        if( !p_next || p_next == psz_bands ) break; /* strtof() failed */            if( !*psz_bands ) break; /* end of line */        psz_bands = p_next+1;    }    free( psz_bands_init );    [self setBandSlidersValues:f_band];    /* Set the the checkboxes */    [o_ckb_enable setState: b_enabled];    [o_ckb_2pass setState: b_2p];        }- (IBAction)bandSliderUpdated:(id)sender{    intf_thread_t *p_intf = VLCIntf;    vlc_object_t *p_object = vlc_object_find( p_intf,                                              VLC_OBJECT_AOUT, FIND_ANYWHERE );    if( p_object == NULL )        p_object = (vlc_object_t *)pl_Yield( p_intf );    char psz_values[102];    memset( psz_values, 0, 102 );    /* Write the new bands values */    /* TODO: write a generic code instead of ten times the same thing */    sprintf( psz_values, "%s %.1f", psz_values, [o_slider_band1 floatValue] );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -