#7512: Localize mixer media add-on.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42967 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adrien Destugues 2011-10-29 16:40:56 +00:00
parent e039afe87e
commit 6fd240c27d
3 changed files with 129 additions and 52 deletions

View File

@ -15,6 +15,7 @@
#include <string.h>
#include <Buffer.h>
#include <Catalog.h>
#include <FindDirectory.h>
#include <MediaRoster.h>
#include <ParameterWeb.h>
@ -28,6 +29,10 @@
#include "MixerUtils.h"
#undef B_TRANSLATE_CONTEXT
#define B_TRANSLATE_CONTEXT "AudioMixer"
// the range of the gain sliders (in dB)
#define DB_MAX 18.0
#define DB_MIN -60.0
@ -1696,71 +1701,104 @@ AudioMixer::UpdateParameterWeb()
MixerOutput *out;
char buf[50];
top = web->MakeGroup("Gain controls");
top = web->MakeGroup(B_TRANSLATE("Gain controls"));
out = fCore->Output();
group = top->MakeGroup("");
group->MakeNullParameter(PARAM_STR1(0), B_MEDIA_RAW_AUDIO, "Master output", B_WEB_BUFFER_INPUT);
group->MakeNullParameter(PARAM_STR1(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Master output"), B_WEB_BUFFER_INPUT);
if (!out) {
group->MakeNullParameter(PARAM_STR2(0), B_MEDIA_RAW_AUDIO, "not connected", B_GENERIC);
group->MakeNullParameter(PARAM_STR2(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("not connected"), B_GENERIC);
} else {
group->MakeNullParameter(PARAM_STR2(0), B_MEDIA_RAW_AUDIO, StringForFormat(buf, out), B_GENERIC);
group->MakeDiscreteParameter(PARAM_MUTE(0), B_MEDIA_RAW_AUDIO, "Mute", B_MUTE);
if (fCore->Settings()->UseBalanceControl() && out->GetOutputChannelCount() == 2 && 1 /*channel mask is stereo */) {
group->MakeNullParameter(PARAM_STR2(0), B_MEDIA_RAW_AUDIO,
StringForFormat(buf, out), B_GENERIC);
group->MakeDiscreteParameter(PARAM_MUTE(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Mute"), B_MUTE);
if (fCore->Settings()->UseBalanceControl()
&& out->GetOutputChannelCount() == 2 && 1
/*channel mask is stereo */) {
// single channel control + balance
group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO, "Gain", B_MASTER_GAIN, "dB", DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(0), B_MEDIA_RAW_AUDIO, "", B_BALANCE, "", 0, 100, 1);
group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Gain"), B_MASTER_GAIN, B_TRANSLATE("dB"),
DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(0), B_MEDIA_RAW_AUDIO,
"", B_BALANCE, "", 0, 100, 1);
} else {
// multi channel control
group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO, "Gain", B_MASTER_GAIN, "dB", DB_MIN, DB_MAX, 0.1)
->SetChannelCount(out->GetOutputChannelCount());
group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Gain"), B_MASTER_GAIN, B_TRANSLATE("dB"),
DB_MIN, DB_MAX, 0.1)
->SetChannelCount(out->GetOutputChannelCount());
}
group->MakeNullParameter(PARAM_STR3(0), B_MEDIA_RAW_AUDIO, "To output", B_WEB_BUFFER_OUTPUT);
group->MakeNullParameter(PARAM_STR3(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("To output"), B_WEB_BUFFER_OUTPUT);
}
for (int i = 0; (in = fCore->Input(i)); i++) {
group = top->MakeGroup("");
group->MakeNullParameter(PARAM_STR1(in->ID()), B_MEDIA_RAW_AUDIO, in->MediaInput().name, B_WEB_BUFFER_INPUT);
group->MakeNullParameter(PARAM_STR2(in->ID()), B_MEDIA_RAW_AUDIO, StringForFormat(buf, in), B_GENERIC);
group->MakeDiscreteParameter(PARAM_MUTE(in->ID()), B_MEDIA_RAW_AUDIO, "Mute", B_MUTE);
group->MakeNullParameter(PARAM_STR1(in->ID()), B_MEDIA_RAW_AUDIO,
in->MediaInput().name, B_WEB_BUFFER_INPUT);
group->MakeNullParameter(PARAM_STR2(in->ID()), B_MEDIA_RAW_AUDIO,
StringForFormat(buf, in), B_GENERIC);
group->MakeDiscreteParameter(PARAM_MUTE(in->ID()), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Mute"), B_MUTE);
// XXX the gain control is ugly once you have more than two channels,
// as you don't know what channel each slider controls. Tooltips might help...
if (fCore->Settings()->InputGainControls() == 0) {
// Physical input channels
if (fCore->Settings()->UseBalanceControl() && in->GetInputChannelCount() == 2 && 1 /*channel mask is stereo */) {
if (fCore->Settings()->UseBalanceControl()
&& in->GetInputChannelCount() == 2 && 1
/*channel mask is stereo */) {
// single channel control + balance
group->MakeContinuousParameter(PARAM_GAIN(in->ID()), B_MEDIA_RAW_AUDIO, "Gain", B_GAIN, "dB", DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(in->ID()), B_MEDIA_RAW_AUDIO, "", B_BALANCE, "", 0, 100, 1);
group->MakeContinuousParameter(PARAM_GAIN(in->ID()),
B_MEDIA_RAW_AUDIO, B_TRANSLATE("Gain"), B_GAIN,
B_TRANSLATE("dB"), DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(in->ID()),
B_MEDIA_RAW_AUDIO, "", B_BALANCE, "", 0, 100, 1);
} else {
// multi channel control
group->MakeContinuousParameter(PARAM_GAIN(in->ID()), B_MEDIA_RAW_AUDIO, "Gain", B_GAIN, "dB", DB_MIN, DB_MAX, 0.1)
->SetChannelCount(in->GetInputChannelCount());
group->MakeContinuousParameter(PARAM_GAIN(in->ID()),
B_MEDIA_RAW_AUDIO, B_TRANSLATE("Gain"), B_GAIN,
B_TRANSLATE("dB"), DB_MIN, DB_MAX, 0.1)
->SetChannelCount(in->GetInputChannelCount());
}
} else {
// Virtual output channels
if (fCore->Settings()->UseBalanceControl() && in->GetMixerChannelCount() == 2 && 1 /*channel mask is stereo */) {
if (fCore->Settings()->UseBalanceControl()
&& in->GetMixerChannelCount() == 2 && 1
/*channel mask is stereo */) {
// single channel control + balance
group->MakeContinuousParameter(PARAM_GAIN(in->ID()), B_MEDIA_RAW_AUDIO, "Gain", B_GAIN, "dB", DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(in->ID()), B_MEDIA_RAW_AUDIO, "", B_BALANCE, "", 0, 100, 1);
group->MakeContinuousParameter(PARAM_GAIN(in->ID()),
B_MEDIA_RAW_AUDIO, B_TRANSLATE("Gain"), B_GAIN,
B_TRANSLATE("dB"), DB_MIN, DB_MAX, 0.1);
group->MakeContinuousParameter(PARAM_BALANCE(in->ID()),
B_MEDIA_RAW_AUDIO, "", B_BALANCE, "", 0, 100, 1);
} else {
// multi channel control
group->MakeContinuousParameter(PARAM_GAIN(in->ID()), B_MEDIA_RAW_AUDIO, "Gain", B_GAIN, "dB", DB_MIN, DB_MAX, 0.1)
->SetChannelCount(in->GetMixerChannelCount());
group->MakeContinuousParameter(PARAM_GAIN(in->ID()),
B_MEDIA_RAW_AUDIO, B_TRANSLATE("Gain"), B_GAIN,
B_TRANSLATE("dB"), DB_MIN, DB_MAX, 0.1)
->SetChannelCount(in->GetMixerChannelCount());
}
}
group->MakeNullParameter(PARAM_STR3(in->ID()), B_MEDIA_RAW_AUDIO, "To master", B_WEB_BUFFER_OUTPUT);
group->MakeNullParameter(PARAM_STR3(in->ID()), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("To master"), B_WEB_BUFFER_OUTPUT);
}
if (fCore->Settings()->AllowOutputChannelRemapping()) {
top = web->MakeGroup("Output mapping"); // top level group
top = web->MakeGroup(B_TRANSLATE("Output mapping")); // top level group
outputchannels = top->MakeGroup("");
outputchannels->MakeNullParameter(PARAM_STR4(0), B_MEDIA_RAW_AUDIO, "Output channel sources", B_GENERIC);
outputchannels->MakeNullParameter(PARAM_STR4(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Output channel sources"), B_GENERIC);
group = outputchannels->MakeGroup("");
group->MakeNullParameter(PARAM_STR5(0), B_MEDIA_RAW_AUDIO, "Master output", B_GENERIC);
group->MakeNullParameter(PARAM_STR5(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Master output"), B_GENERIC);
group = group->MakeGroup("");
if (!out) {
group->MakeNullParameter(PARAM_STR6(0), B_MEDIA_RAW_AUDIO, "not connected", B_GENERIC);
group->MakeNullParameter(PARAM_STR6(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("not connected"), B_GENERIC);
} else {
for (int chan = 0; chan < out->GetOutputChannelCount(); chan++) {
subgroup = group->MakeGroup("");
@ -1782,52 +1820,67 @@ AudioMixer::UpdateParameterWeb()
}
if (fCore->Settings()->AllowInputChannelRemapping()) {
top = web->MakeGroup("Input mapping"); // top level group
top = web->MakeGroup(B_TRANSLATE("Input mapping")); // top level group
inputchannels = top->MakeGroup("");
inputchannels->MakeNullParameter(PARAM_STR7(0), B_MEDIA_RAW_AUDIO, "Input channel destinations", B_GENERIC);
inputchannels->MakeNullParameter(PARAM_STR7(0), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Input channel destinations"), B_GENERIC);
for (int i = 0; (in = fCore->Input(i)); i++) {
group = inputchannels->MakeGroup("");
group->MakeNullParameter(PARAM_STR4(in->ID()), B_MEDIA_RAW_AUDIO, in->MediaInput().name, B_GENERIC);
group->MakeNullParameter(PARAM_STR4(in->ID()), B_MEDIA_RAW_AUDIO,
in->MediaInput().name, B_GENERIC);
group = group->MakeGroup("");
for (int chan = 0; chan < in->GetInputChannelCount(); chan++) {
subgroup = group->MakeGroup("");
subgroup->MakeNullParameter(PARAM_DST_STR(in->ID(), chan), B_MEDIA_RAW_AUDIO,
StringForChannelType(buf, in->GetInputChannelType(chan)), B_GENERIC);
subgroup->MakeNullParameter(PARAM_DST_STR(in->ID(), chan),
B_MEDIA_RAW_AUDIO, StringForChannelType(buf,
in->GetInputChannelType(chan)), B_GENERIC);
for (int dst = 0; dst < MAX_CHANNEL_TYPES; dst++) {
subgroup->MakeDiscreteParameter(PARAM_DST_ENABLE(in->ID(), chan, dst), B_MEDIA_RAW_AUDIO, StringForChannelType(buf, dst), B_ENABLE);
subgroup->MakeDiscreteParameter(PARAM_DST_ENABLE(in->ID(),
chan, dst), B_MEDIA_RAW_AUDIO, StringForChannelType(buf, dst),
B_ENABLE);
}
}
}
}
top = web->MakeGroup("Setup"); // top level group
top = web->MakeGroup(B_TRANSLATE("Setup")); // top level group
group = top->MakeGroup("");
group->MakeDiscreteParameter(PARAM_ETC(10), B_MEDIA_RAW_AUDIO, "Attenuate mixer output by 3dB (like BeOS R5)", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(20), B_MEDIA_RAW_AUDIO, "Use non linear gain sliders (like BeOS R5)", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(30), B_MEDIA_RAW_AUDIO, "Display balance control for stereo connections", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(10), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Attenuate mixer output by 3dB (like BeOS R5)"), B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(20), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Use non linear gain sliders (like BeOS R5)"), B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(30), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Display balance control for stereo connections"),
B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(40), B_MEDIA_RAW_AUDIO, "Allow output channel remapping", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(50), B_MEDIA_RAW_AUDIO, "Allow input channel remapping", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(40), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Allow output channel remapping"), B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(50), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Allow input channel remapping"), B_ENABLE);
dp = group->MakeDiscreteParameter(PARAM_ETC(60), B_MEDIA_RAW_AUDIO, "Input gain controls represent", B_INPUT_MUX);
dp->AddItem(0, "Physical input channels");
dp->AddItem(1, "Virtual output channels");
dp = group->MakeDiscreteParameter(PARAM_ETC(60), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Input gain controls represent"), B_INPUT_MUX);
dp->AddItem(0, B_TRANSLATE("Physical input channels"));
dp->AddItem(1, B_TRANSLATE("Virtual output channels"));
dp = group->MakeDiscreteParameter(PARAM_ETC(70), B_MEDIA_RAW_AUDIO, "Resampling algorithm", B_INPUT_MUX);
dp->AddItem(0, "Drop/repeat samples");
dp->AddItem(2, "Linear interpolation");
dp = group->MakeDiscreteParameter(PARAM_ETC(70), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Resampling algorithm"), B_INPUT_MUX);
dp->AddItem(0, B_TRANSLATE("Drop/repeat samples"));
dp->AddItem(2, B_TRANSLATE("Linear interpolation"));
// Note: The following code is outcommented on purpose
// and is about to be modified at a later point
/*
dp->AddItem(1, "Drop/repeat samples (template based)");
dp->AddItem(3, "17th order filtering");
dp->AddItem(1, B_TRANSLATE("Drop/repeat samples (template based)"));
dp->AddItem(3, B_TRANSLATE("17th order filtering"));
*/
group->MakeDiscreteParameter(PARAM_ETC(80), B_MEDIA_RAW_AUDIO, "Refuse output format changes", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(90), B_MEDIA_RAW_AUDIO, "Refuse input format changes", B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(80), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Refuse output format changes"), B_ENABLE);
group->MakeDiscreteParameter(PARAM_ETC(90), B_MEDIA_RAW_AUDIO,
B_TRANSLATE("Refuse input format changes"), B_ENABLE);
fCore->Unlock();
SetParameterWeb(web);

View File

@ -0,0 +1,15 @@
/*
* AudioMixer.rdef
*/
resource app_signature "application/x-vnd.Haiku-mixer.media_addon";
resource app_version {
major = 1,
middle = 0,
minor = 0,
variety = 0,
internal = 0,
short_info = "1.0.0",
long_info = "Haiku AudioMixer media add-on."
};

View File

@ -2,6 +2,8 @@ SubDir HAIKU_TOP src add-ons media media-add-ons mixer ;
SetSubDirSupportedPlatformsBeOSCompatible ;
AddResources mixer.media_addon : AudioMixer.rdef ;
Addon mixer.media_addon :
AudioMixer.cpp
ByteSwap.cpp
@ -13,9 +15,16 @@ Addon mixer.media_addon :
MixerSettings.cpp
MixerUtils.cpp
Resampler.cpp
: be media $(TARGET_LIBSUPC++)
: be media $(TARGET_LIBSUPC++) $(HAIKU_LOCALE_LIBS)
;
Package haiku-mixer-cvs
: mixer.media_addon
: boot home config add-ons media ;
DoCatalogs mixer.media_addon
:
x-vnd.Haiku-mixer.media_addon
:
AudioMixer.cpp
;