📄 tmixersettings.cpp
字号:
/*
* Copyright (c) 2003-2006 Milan Cutka
*
* 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 St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "stdafx.h"
#include "TmixerSettings.h"
#include "TaudioFilterMixer.h"
#include "TaudioFilterHeadphone.h"
#include "Cmixer.h"
#include "TffdshowPageDec.h"
const TmixerSettings::TchConfig TmixerSettings::chConfigs[]=
{
0,_l("1/0 - mono"), 0, 1, 0 , TsampleFormat::DOLBY_NO,
1,_l("2/0 - stereo"), 1, 2, 0 , TsampleFormat::DOLBY_NO,
2,_l("3/0 - 3 front"), 2, 3, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER , TsampleFormat::DOLBY_NO,
3,_l("2/1 - surround"), 3, 3, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_BACK_CENTER , TsampleFormat::DOLBY_NO,
4,_l("3/1 - surround"), 4, 4, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_BACK_CENTER , TsampleFormat::DOLBY_NO,
5,_l("2/2 - quadro"), 5, 4, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT , TsampleFormat::DOLBY_NO,
6,_l("3/2 - 5 channels"), 6, 5, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT , TsampleFormat::DOLBY_NO,
7,_l("1/0+LFE 1.1 mono"), 0, 2, SPEAKER_FRONT_CENTER |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
8,_l("2/0+LFE 2.1 stereo"), 1, 3, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
9,_l("3/0+LFE 3.1 front"), 2, 4, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
10,_l("2/1+LFE 3.1 surround"), 3, 4, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_BACK_CENTER |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
11,_l("3/1+LFE 4.1 surround"), 4, 5, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_BACK_CENTER |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
12,_l("2/2+LFE 4.1 quadro"), 5, 5, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT |SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
13,_l("3/2+LFE 5.1 channels"), 6, 6, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT|SPEAKER_LOW_FREQUENCY , TsampleFormat::DOLBY_NO,
14,_l("Dolby Surround/ProLogic"), 14, 2, 0,TsampleFormat::DOLBY_SURROUND ,
15,_l("Dolby ProLogic II"), 15, 2, 0,TsampleFormat::DOLBY_PROLOGICII,
16,_l("same as input"), -1, 0, 0, TsampleFormat::DOLBY_NO,
17,_l("headphone virtual spatialization"), -1, 2, 0, TsampleFormat::DOLBY_NO,
18,_l("Head-related transfer function (HRTF)"),-1, 2, 0, TsampleFormat::DOLBY_NO,
19,_l("Dolby Surround/ProLogic+LFE"), 14, 3, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_LOW_FREQUENCY,TsampleFormat::DOLBY_SURROUND ,
20,_l("Dolby ProLogic II+LFE"), 15, 3, SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_LOW_FREQUENCY,TsampleFormat::DOLBY_PROLOGICII,
NULL
};
const TfilterIDFF TmixerSettings::idffs=
{
/*name*/ _l("Mixer"),
/*id*/ IDFF_filterMixer,
/*is*/ IDFF_isMixer,
/*order*/ IDFF_orderMixer,
/*show*/ IDFF_showMixer,
/*full*/ 0,
/*half*/ 0,
/*dlgId*/ IDD_MIXER,
};
TmixerSettings::TmixerSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsAudio(sizeof(*this),Icoll,filters,&idffs)
{
static const TintOptionT<TmixerSettings> iopts[]=
{
IDFF_isMixer ,&TmixerSettings::is ,0,0,_l(""),1,
_l("isMixer"),0,
IDFF_showMixer ,&TmixerSettings::show ,0,0,_l(""),1,
_l("showMixer"),1,
IDFF_orderMixer ,&TmixerSettings::order ,1,1,_l(""),1,
_l("orderMixer"),0,
IDFF_mixerOut ,&TmixerSettings::out ,0,20,_l(""),1,
_l("mixerOut"),14,
IDFF_normalizeMatrix ,&TmixerSettings::normalizeMatrix,0,0,_l(""),1,
_l("mixerNormalizeMatrix"),1,
IDFF_mixerExpandStereo,&TmixerSettings::expandStereo ,0,0,_l(""),1,
_l("mixerExpandStereo"),1,
IDFF_mixerVoiceControl,&TmixerSettings::voiceControl ,0,0,_l(""),1,
_l("mixerVoiceControl"),1,
IDFF_customMatrix ,&TmixerSettings::customMatrix ,0,0,_l(""),1,
_l("mixerCustomMatrix"),0,
IDFF_mixerMatrix00 ,&TmixerSettings::matrix00 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix00"),100000,
IDFF_mixerMatrix01 ,&TmixerSettings::matrix01 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix02"),0,
IDFF_mixerMatrix02 ,&TmixerSettings::matrix02 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix01"),0,
IDFF_mixerMatrix03 ,&TmixerSettings::matrix03 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix05"),0,
IDFF_mixerMatrix04 ,&TmixerSettings::matrix04 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix03"),0,
IDFF_mixerMatrix05 ,&TmixerSettings::matrix05 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix04"),0,
IDFF_mixerMatrix10 ,&TmixerSettings::matrix10 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix20"),0,
IDFF_mixerMatrix11 ,&TmixerSettings::matrix11 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix22"),100000,
IDFF_mixerMatrix12 ,&TmixerSettings::matrix12 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix21"),0,
IDFF_mixerMatrix13 ,&TmixerSettings::matrix13 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix25"),0,
IDFF_mixerMatrix14 ,&TmixerSettings::matrix14 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix23"),0,
IDFF_mixerMatrix15 ,&TmixerSettings::matrix15 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix24"),0,
IDFF_mixerMatrix20 ,&TmixerSettings::matrix20 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix10"),0,
IDFF_mixerMatrix21 ,&TmixerSettings::matrix21 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix12"),0,
IDFF_mixerMatrix22 ,&TmixerSettings::matrix22 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix11"),100000,
IDFF_mixerMatrix23 ,&TmixerSettings::matrix23 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix15"),0,
IDFF_mixerMatrix24 ,&TmixerSettings::matrix24 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix13"),0,
IDFF_mixerMatrix25 ,&TmixerSettings::matrix25 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix14"),0,
IDFF_mixerMatrix30 ,&TmixerSettings::matrix30 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix50"),0,
IDFF_mixerMatrix31 ,&TmixerSettings::matrix31 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix52"),0,
IDFF_mixerMatrix32 ,&TmixerSettings::matrix32 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix51"),0,
IDFF_mixerMatrix33 ,&TmixerSettings::matrix33 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix55"),100000,
IDFF_mixerMatrix34 ,&TmixerSettings::matrix34 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix53"),0,
IDFF_mixerMatrix35 ,&TmixerSettings::matrix35 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix54"),0,
IDFF_mixerMatrix40 ,&TmixerSettings::matrix40 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix30"),0,
IDFF_mixerMatrix41 ,&TmixerSettings::matrix41 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix32"),0,
IDFF_mixerMatrix42 ,&TmixerSettings::matrix42 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix31"),0,
IDFF_mixerMatrix43 ,&TmixerSettings::matrix43 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix35"),0,
IDFF_mixerMatrix44 ,&TmixerSettings::matrix44 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix33"),100000,
IDFF_mixerMatrix45 ,&TmixerSettings::matrix45 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix34"),0,
IDFF_mixerMatrix50 ,&TmixerSettings::matrix50 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix40"),0,
IDFF_mixerMatrix51 ,&TmixerSettings::matrix51 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix42"),0,
IDFF_mixerMatrix52 ,&TmixerSettings::matrix52 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix41"),0,
IDFF_mixerMatrix53 ,&TmixerSettings::matrix53 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix45"),0,
IDFF_mixerMatrix54 ,&TmixerSettings::matrix54 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix43"),0,
IDFF_mixerMatrix55 ,&TmixerSettings::matrix55 ,-4*100000,4*100000,_l(""),1,
_l("mixerMatrix44"),100000,
IDFF_mixerClev ,&TmixerSettings::clev ,0,3200,_l(""),1,
_l("mixerClev"),100,
IDFF_mixerSlev ,&TmixerSettings::slev ,0,3200,_l(""),1,
_l("mixerSlev"),100,
IDFF_mixerLFElev ,&TmixerSettings::lfelev ,0,3200,_l(""),1,
_l("mixerLFElev"),100,
IDFF_headphone_dim ,&TmixerSettings::headphone_dim ,0,100,_l(""),1,
_l("headphone_dim"),10,
0
};
addOptions(iopts);
static const TcreateParamList2<TchConfig> listMixerOut(chConfigs,&TchConfig::name);setParamList(IDFF_mixerOut,&listMixerOut);
}
void TmixerSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const
{
idffOnChange(idffs,filters,queue.temporary);
if (is && show)
{
if (!queue.temporary) setOnChange(IDFF_mixerOut,filters,&Tfilters::onQueueChange);
switch (out)
{
case 17:queueFilter<TaudioFilterHeadphone>(filtersorder,filters,queue);break;
case 18:queueFilter<TaudioFilterHeadphone2>(filtersorder,filters,queue);break;
default:queueFilter<TaudioFilterMixer>(filtersorder,filters,queue);break;
}
}
}
void TmixerSettings::createPages(TffdshowPageDec *parent) const
{
parent->addFilterPage<TmixerPage>(&idffs);
}
const int* TmixerSettings::getResets(unsigned int pageId)
{
static const int idResets[]={
IDFF_mixerOut,
IDFF_normalizeMatrix,
IDFF_mixerExpandStereo,IDFF_mixerVoiceControl,
IDFF_mixerClev,IDFF_mixerSlev,IDFF_mixerLFElev,
IDFF_customMatrix,
IDFF_mixerMatrix00,IDFF_mixerMatrix01,IDFF_mixerMatrix02,IDFF_mixerMatrix03,IDFF_mixerMatrix04,IDFF_mixerMatrix05,IDFF_mixerMatrix10,IDFF_mixerMatrix11,IDFF_mixerMatrix12,IDFF_mixerMatrix13,IDFF_mixerMatrix14,IDFF_mixerMatrix15,IDFF_mixerMatrix20,IDFF_mixerMatrix21,IDFF_mixerMatrix22,IDFF_mixerMatrix23,IDFF_mixerMatrix24,IDFF_mixerMatrix25,IDFF_mixerMatrix30,IDFF_mixerMatrix31,IDFF_mixerMatrix32,IDFF_mixerMatrix33,IDFF_mixerMatrix34,IDFF_mixerMatrix35,IDFF_mixerMatrix40,IDFF_mixerMatrix41,IDFF_mixerMatrix42,IDFF_mixerMatrix43,IDFF_mixerMatrix44,IDFF_mixerMatrix45,IDFF_mixerMatrix50,IDFF_mixerMatrix51,IDFF_mixerMatrix52,IDFF_mixerMatrix53,IDFF_mixerMatrix54,IDFF_mixerMatrix55,
IDFF_headphone_dim,
0};
return idResets;
}
bool TmixerSettings::getTip(unsigned int pageId,char_t *tipS,size_t len)
{
tsnprintf(tipS,len,_l("%s%s%s%s%s"),chConfigs[out].name,(out!=17 && out!=18 && customMatrix)?_l("\ncustom matrix"):_l(""),(out!=17 && normalizeMatrix)?_l("\nnormalize matrix"):_l(""),(out!=17 && expandStereo && !customMatrix)?_l("\nexpand stereo"):_l(""),(out!=17 && voiceControl && !customMatrix)?_l("\nvoice control"):_l(""));
return true;
}
void TmixerSettings::setFormatOut(TsampleFormat &fmt) const
{
if (out!=16)
fmt.setChannels(chConfigs[out].nchannels,chConfigs[out].channelmask);
}
void TmixerSettings::setFormatOut(TsampleFormat &outfmt,const TsampleFormat &infmt) const
{
outfmt.setChannels(out==16?infmt.nchannels:chConfigs[out].nchannels,out==16?infmt.channelmask:chConfigs[out].channelmask);
outfmt.dolby=out==16?infmt.dolby:chConfigs[out].dolby;
}
//===============================
/*
for (int i=0;i<6;i++)
for (int j=0;j<6;j++)
{
char pomS[40];
static const int o[6]={0,2,1,5,3,4};
sprintf(pomS,"mixerMatrix%i%i",o[i],o[j]);
t._REG_OP_N(pomS,matrix[i][j],i==j?100000:0);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -