commit
b337adc24a
24 changed files with 6412 additions and 593 deletions
|
@ -13,9 +13,13 @@
|
|||
|
||||
- support Mac CoreAudio aggregated devices (Ticket #138)
|
||||
|
||||
- added translations: french by trebmuh, portuguese by Snayler (Ticket #77)
|
||||
|
||||
- bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137)
|
||||
|
||||
|
||||
TODO re-design About dialog
|
||||
|
||||
TODO implement panning for channels (Ticket #52, #145)
|
||||
|
||||
TODO WIP support internationalization
|
||||
|
|
|
@ -15,7 +15,9 @@ QT += widgets \
|
|||
xml
|
||||
|
||||
TRANSLATIONS = src/res/translation/translation_de_DE.ts \
|
||||
src/res/translation/translation_fr_FR.ts
|
||||
src/res/translation/translation_fr_FR.ts \
|
||||
src/res/translation/translation_pt_PT.ts \
|
||||
src/res/translation/translation_es_ES.ts
|
||||
|
||||
INCLUDEPATH += src
|
||||
|
||||
|
|
|
@ -58,13 +58,13 @@ void CSound::OpenJack ( const bool bNoAutoJackConnect,
|
|||
if ( jack_get_sample_rate ( pJackClient ) != SYSTEM_SAMPLE_RATE_HZ )
|
||||
{
|
||||
throw CGenErr ( tr ( "The Jack server sample rate is different from "
|
||||
"the required one. The required sample rate is: <b>" ) +
|
||||
QString().setNum ( SYSTEM_SAMPLE_RATE_HZ ) + tr ( " Hz</b>. You can "
|
||||
"the required one. The required sample rate is:" ) + " <b>" +
|
||||
QString().setNum ( SYSTEM_SAMPLE_RATE_HZ ) + " Hz</b>. " + tr ( "You can "
|
||||
"use a tool like <i><a href=""http://qjackctl.sourceforge.net"">QJackCtl</a></i> "
|
||||
"to adjust the Jack server sample rate.<br>Make sure to set the "
|
||||
"<b>Frames/Period</b> to a low value like <b>" ) +
|
||||
"to adjust the Jack server sample rate." ) + "<br>" + tr ( "Make sure to set the "
|
||||
"Frames/Period to a low value like " ) +
|
||||
QString().setNum ( DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) +
|
||||
tr ( "</b> to achieve a low delay." ) );
|
||||
tr ( " to achieve a low delay." ) );
|
||||
}
|
||||
|
||||
// create four ports (two for input, two for output -> stereo)
|
||||
|
|
|
@ -122,20 +122,10 @@
|
|||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lblAuthorNames">
|
||||
<property name="text">
|
||||
<string>Author: Volker Fischer</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="lblCopyright">
|
||||
<property name="text">
|
||||
<string>Copyright (C) 2005-2020</string>
|
||||
<string>Copyright (C) 2005-2020 Volker Fischer and others</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
|
|
|
@ -41,8 +41,8 @@ CChannelFader::CChannelFader ( QWidget* pNW,
|
|||
pFader = new QSlider ( Qt::Vertical, pLevelsBox );
|
||||
|
||||
pMuteSoloBox = new QWidget ( pFrame );
|
||||
pcbMute = new QCheckBox ( "Mute", pMuteSoloBox );
|
||||
pcbSolo = new QCheckBox ( "Solo", pMuteSoloBox );
|
||||
pcbMute = new QCheckBox ( tr ( "Mute" ), pMuteSoloBox );
|
||||
pcbSolo = new QCheckBox ( tr ( "Solo" ), pMuteSoloBox );
|
||||
|
||||
pLabelInstBox = new QGroupBox ( pFrame );
|
||||
plblLabel = new QLabel ( "", pFrame );
|
||||
|
@ -107,29 +107,29 @@ CChannelFader::CChannelFader ( QWidget* pNW,
|
|||
Reset();
|
||||
|
||||
// add help text to controls
|
||||
plbrChannelLevel->setWhatsThis ( tr ( "<b>Channel Level:</b> Displays the "
|
||||
"pre-fader audio level of this channel. All connected clients at the "
|
||||
plbrChannelLevel->setWhatsThis ( "<b>" + tr ( "Channel Level" ) + ":</b> " +
|
||||
tr ( "Displays the pre-fader audio level of this channel. All connected clients at the "
|
||||
"server will be assigned an audio level, the same value for each client." ) );
|
||||
plbrChannelLevel->setAccessibleName ( tr ( "Input level of the current audio "
|
||||
"channel at the server" ) );
|
||||
|
||||
pFader->setWhatsThis ( tr ( "<b>Mixer Fader:</b> Adjusts the audio level of "
|
||||
"this channel. All connected clients at the server will be assigned "
|
||||
"an audio fader at each client, adjusting the local mix." ) );
|
||||
pFader->setWhatsThis ( "<b>" + tr ( "Mixer Fader" ) + ":</b> " + tr (
|
||||
"Adjusts the audio level of this channel. All connected clients at the server "
|
||||
"will be assigned an audio fader at each client, adjusting the local mix." ) );
|
||||
pFader->setAccessibleName ( tr ( "Local mix level setting of the current audio "
|
||||
"channel at the server" ) );
|
||||
|
||||
pcbMute->setWhatsThis ( tr ( "<b>Mute:</b> With the Mute checkbox, the "
|
||||
"audio channel can be muted." ) );
|
||||
pcbMute->setWhatsThis ( "<b>" + tr ( "Mute" ) + ":</b> " + tr (
|
||||
"With the Mute checkbox, the audio channel can be muted." ) );
|
||||
pcbMute->setAccessibleName ( tr ( "Mute button" ) );
|
||||
|
||||
pcbSolo->setWhatsThis ( tr ( "<b>Solo:</b> With the Solo checkbox, the "
|
||||
pcbSolo->setWhatsThis ( "<b>" + tr ( "Solo" ) + ":</b> " + tr ( "With the Solo checkbox, the "
|
||||
"audio channel can be set to solo which means that all other channels "
|
||||
"except of the current channel are muted. It is possible to set more than "
|
||||
"one channel to solo." ) );
|
||||
pcbSolo->setAccessibleName ( tr ( "Solo button" ) );
|
||||
|
||||
QString strFaderText = tr ( "<b>Fader Tag:</b> The fader tag "
|
||||
QString strFaderText = "<b>" + tr ( "Fader Tag" ) + ":</b> " + tr ( "The fader tag "
|
||||
"identifies the connected client. The tag name, the picture of your "
|
||||
"instrument and a flag of your country can be set in the main window." );
|
||||
|
||||
|
@ -439,13 +439,13 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo )
|
|||
// alias/name
|
||||
if ( !strReceivedName.isEmpty() )
|
||||
{
|
||||
strToolTip += "<h4>Alias/Name</h4>" + strReceivedName;
|
||||
strToolTip += "<h4>" + tr ( "Alias/Name" ) + "</h4>" + strReceivedName;
|
||||
}
|
||||
|
||||
// instrument
|
||||
if ( !CInstPictures::IsNotUsedInstrument ( iTTInstrument ) )
|
||||
{
|
||||
strToolTip += "<h4>Instrument</h4>" +
|
||||
strToolTip += "<h4>" + tr ( "Instrument" ) + "</h4>" +
|
||||
CInstPictures::GetName ( iTTInstrument );
|
||||
}
|
||||
|
||||
|
@ -453,7 +453,7 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo )
|
|||
if ( ( eTTCountry != QLocale::AnyCountry ) ||
|
||||
( !cChanInfo.strCity.isEmpty() ) )
|
||||
{
|
||||
strToolTip += "<h4>Location</h4>";
|
||||
strToolTip += "<h4>" + tr ( "Location" ) + "</h4>";
|
||||
|
||||
if ( !cChanInfo.strCity.isEmpty() )
|
||||
{
|
||||
|
@ -475,15 +475,15 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo )
|
|||
switch ( cChanInfo.eSkillLevel )
|
||||
{
|
||||
case SL_BEGINNER:
|
||||
strToolTip += "<h4>Skill Level</h4>Beginner";
|
||||
strToolTip += "<h4>" + tr ( "Skill Level" ) + "</h4>" + tr ( "Beginner" );
|
||||
break;
|
||||
|
||||
case SL_INTERMEDIATE:
|
||||
strToolTip += "<h4>Skill Level</h4>Intermediate";
|
||||
strToolTip += "<h4>" + tr ( "Skill Level" ) + "</h4>" + tr ( "Intermediate" );
|
||||
break;
|
||||
|
||||
case SL_PROFESSIONAL:
|
||||
strToolTip += "<h4>Skill Level</h4>Expert";
|
||||
strToolTip += "<h4>" + tr ( "Skill Level" ) + "</h4>" + tr ( "Expert" );
|
||||
break;
|
||||
|
||||
case SL_NOT_SET:
|
||||
|
@ -494,7 +494,7 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo )
|
|||
// if no information is given, leave the tool tip empty, otherwise add header
|
||||
if ( !strToolTip.isEmpty() )
|
||||
{
|
||||
strToolTip.prepend ( "<h3>Musician Profile</h3>" );
|
||||
strToolTip.prepend ( "<h3>" + tr ( "Musician Profile" ) + "</h3>" );
|
||||
}
|
||||
|
||||
plblCountryFlag->setToolTip ( strToolTip );
|
||||
|
@ -704,7 +704,7 @@ void CAudioMixerBoard::SetServerName ( const QString& strNewServerName )
|
|||
if ( strServerName.isEmpty() )
|
||||
{
|
||||
// no connection or connection was reset: show default title
|
||||
pGroupBox->setTitle ( "Server" );
|
||||
pGroupBox->setTitle ( tr ( "Server" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -713,7 +713,7 @@ void CAudioMixerBoard::SetServerName ( const QString& strNewServerName )
|
|||
// list was received, the connection was successful and the title is updated
|
||||
// with the correct server name. Make sure to choose a "try to connect" title
|
||||
// which is most striking (we use filled blocks and upper case letters).
|
||||
pGroupBox->setTitle ( u8"\u2588\u2588\u2588\u2588\u2588 T R Y I N G T O C O N N E C T \u2588\u2588\u2588\u2588\u2588" );
|
||||
pGroupBox->setTitle ( u8"\u2588\u2588\u2588\u2588\u2588 " + tr ( "T R Y I N G T O C O N N E C T" ) + u8" \u2588\u2588\u2588\u2588\u2588" );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,14 +34,14 @@ CChatDlg::CChatDlg ( QWidget* parent, Qt::WindowFlags f ) :
|
|||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// chat window
|
||||
txvChatWindow->setWhatsThis ( tr ( "<b>Chat Window:</b> The chat window "
|
||||
"shows a history of all chat messages." ) );
|
||||
txvChatWindow->setWhatsThis ( "<b>" + tr ( "Chat Window" ) + ":</b> " + tr (
|
||||
"The chat window shows a history of all chat messages." ) );
|
||||
|
||||
txvChatWindow->setAccessibleName ( tr ( "Chat history" ) );
|
||||
|
||||
// input message text
|
||||
edtLocalInputText->setWhatsThis ( tr ( "<b>Input Message Text:</b> Enter "
|
||||
"the chat message text in the edit box and press enter to send the "
|
||||
edtLocalInputText->setWhatsThis ( "<b>" + tr ( "Input Message Text" ) + ":</b> " + tr (
|
||||
"Enter the chat message text in the edit box and press enter to send the "
|
||||
"message to the server which distributes the message to all connected "
|
||||
"clients. Your message will then show up in the chat window." ) );
|
||||
|
||||
|
|
|
@ -48,10 +48,10 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// input level meter
|
||||
QString strInpLevH = tr ( "<b>Input Level Meter:</b> The input level "
|
||||
QString strInpLevH = "<b>" + tr ( "Input Level Meter" ) + ":</b> " + tr ( "The input level "
|
||||
"indicators show the input level of the two stereo channels "
|
||||
"of the current selected audio input.<br>"
|
||||
"Make sure not to clip the input signal to avoid distortions of the "
|
||||
"of the current selected audio input." ) + "<br>" +
|
||||
tr ( "Make sure not to clip the input signal to avoid distortions of the "
|
||||
"audio signal." );
|
||||
|
||||
QString strInpLevHTT = tr ( "If the " ) + APP_NAME +
|
||||
|
@ -60,13 +60,13 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
"meter should flicker. If this is not the case, you have "
|
||||
"probably selected the wrong input channel (e.g. line in instead "
|
||||
"of the microphone input) or set the input gain too low in the "
|
||||
"(Windows) audio mixer.<br>For a proper usage of the " ) + APP_NAME +
|
||||
tr ( " software, "
|
||||
"(Windows) audio mixer." ) + "<br>" + tr ( "For a proper usage of the " ) +
|
||||
APP_NAME + tr ( " software, "
|
||||
"you should not hear your singing/instrument in the loudspeaker or "
|
||||
"your headphone when the " ) + APP_NAME +
|
||||
tr ( " software is not connected. This can "
|
||||
"be achieved by muting your input audio channel in the Playback "
|
||||
"mixer (<b>not</b> the Recording mixer!)." ) + TOOLTIP_COM_END_TEXT;
|
||||
"mixer (not the Recording mixer!)." ) + TOOLTIP_COM_END_TEXT;
|
||||
|
||||
QString strInpLevHAccText = tr ( "Input level meter" );
|
||||
QString strInpLevHAccDescr = tr ( "Simulates an analog LED level meter." );
|
||||
|
@ -84,8 +84,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
lbrInputLevelR->setToolTip ( strInpLevHTT );
|
||||
|
||||
// connect/disconnect button
|
||||
butConnect->setWhatsThis ( tr ( "<b>Connect / Disconnect Button:"
|
||||
"</b> Push this button to connect a server. A dialog where you can "
|
||||
butConnect->setWhatsThis ( "<b>" + tr ( "Connect/Disconnect Button" ) + ":</b> " +
|
||||
tr ( "Push this button to connect a server. A dialog where you can "
|
||||
"select a server will open. If you are connected, pressing this "
|
||||
"button will end the session." ) );
|
||||
|
||||
|
@ -98,14 +98,15 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
"and disconnecting the " ) + APP_NAME + tr ( " software." ) );
|
||||
|
||||
// local audio input fader
|
||||
QString strAudFader = tr ( "<b>Local Audio Input Fader:</b> With the "
|
||||
"audio fader, the relative levels of the left and right local audio "
|
||||
QString strAudFader = "<b>" + tr ( "Local Audio Input Fader" ) + ":</b> " +
|
||||
tr ( "With the audio fader, the relative levels of the left and right local audio "
|
||||
"channels can be changed. For a mono signal it acts like a panning "
|
||||
"between the two channels. If, e.g., a microphone is connected to "
|
||||
"the right input channel and an instrument is connected to the left "
|
||||
"input channel which is much louder than the microphone, move the "
|
||||
"audio fader in a direction where the label above the fader shows "
|
||||
"<i>L -x</i>, where <i>x</i> is the current attenuation indicator." );
|
||||
"audio fader in a direction where the label above the fader shows " ) +
|
||||
"<i>" + tr ( "L" ) + " -x</i>" + tr ( ", where" ) + " <i>x</i> " +
|
||||
tr ( "is the current attenuation indicator." );
|
||||
|
||||
lblAudioPan->setWhatsThis ( strAudFader );
|
||||
lblAudioPanValue->setWhatsThis ( strAudFader );
|
||||
|
@ -114,14 +115,14 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
sldAudioPan->setAccessibleName ( tr ( "Local audio input fader (left/right)" ) );
|
||||
|
||||
// reverberation level
|
||||
QString strAudReverb = tr ( "<b>Reverberation Level:</b> A reverberation "
|
||||
"effect can be applied to one local mono audio channel or to both "
|
||||
QString strAudReverb = "<b>" + tr ( "Reverberation Level" ) + ":</b> " +
|
||||
tr ( "A reverberation effect can be applied to one local mono audio channel or to both "
|
||||
"channels in stereo mode. The mone channel selection and the "
|
||||
"reverberation level can be modified. If, e.g., "
|
||||
"the microphone signal is fed into the right audio channel of the "
|
||||
"sound card and a reverberation effect shall be applied, set the "
|
||||
"channel selector to right and move the fader upwards until the "
|
||||
"desired reverberation level is reached.<br>"
|
||||
"desired reverberation level is reached." ) + "<br>" + tr (
|
||||
"The reverberation effect requires significant CPU so that it should "
|
||||
"only be used on fast PCs. If the reverberation level fader is set to "
|
||||
"minimum (which is the default setting), the reverberation effect is "
|
||||
|
@ -133,8 +134,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
sldAudioReverb->setAccessibleName ( tr ( "Reverberation effect level setting" ) );
|
||||
|
||||
// reverberation channel selection
|
||||
QString strRevChanSel = tr ( "<b>Reverberation Channel Selection:</b> "
|
||||
"With these radio buttons the audio input channel on which the "
|
||||
QString strRevChanSel = "<b>" + tr ( "Reverberation Channel Selection" ) + ":</b> " +
|
||||
tr ( "With these radio buttons the audio input channel on which the "
|
||||
"reverberation effect is applied can be chosen. Either the left "
|
||||
"or right input channel can be selected." );
|
||||
|
||||
|
@ -144,8 +145,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
rbtReverbSelR->setAccessibleName ( tr ( "Right channel selection for reverberation" ) );
|
||||
|
||||
// delay LED
|
||||
QString strLEDDelay = tr ( "<b>Delay Status LED:</b> "
|
||||
"The delay status LED indicator shows the current audio delay "
|
||||
QString strLEDDelay = "<b>" + tr ( "Delay Status LED" ) + ":</b> " +
|
||||
tr ( "The delay status LED indicator shows the current audio delay "
|
||||
"status. If the light is green, the delay is perfect for a jam "
|
||||
"session. If the light is yellow, a session is still possible but "
|
||||
"it may be harder to play. If the light is red, the delay is too "
|
||||
|
@ -160,20 +161,20 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
ledDelay->setAccessibleName ( tr ( "Delay status LED indicator" ) );
|
||||
|
||||
// buffers LED
|
||||
QString strLEDBuffers = tr ( "<b>Buffers Status LED:</b> "
|
||||
"The buffers status LED indicator shows the current audio/streaming "
|
||||
QString strLEDBuffers = "<b>" + tr ( "Buffers Status LED" ) + ":</b> " +
|
||||
tr ( "The buffers status LED indicator shows the current audio/streaming "
|
||||
"status. If the light is green, there are no buffer overruns/underruns "
|
||||
"and the audio stream is not interrupted. If the light is red, the "
|
||||
"audio stream is interrupted caused by one of the following problems:"
|
||||
"audio stream is interrupted caused by one of the following problems:" ) +
|
||||
"<ul>"
|
||||
"<li>The network jitter buffer is not large enough for the current "
|
||||
"network/audio interface jitter.</li>"
|
||||
"<li>The sound card buffer delay (buffer size) is set to a too small "
|
||||
"value.</li>"
|
||||
"<li>The upload or download stream rate is too high for the current "
|
||||
"available internet bandwidth.</li>"
|
||||
"<li>The CPU of the client or server is at 100%.</li>"
|
||||
"</ul>" );
|
||||
"<li>" + tr ( "The network jitter buffer is not large enough for the current "
|
||||
"network/audio interface jitter." ) + "</li>"
|
||||
"<li>" + tr ( "The sound card buffer delay (buffer size) is set to a too small "
|
||||
"value." ) + "</li>"
|
||||
"<li>" + tr ( "The upload or download stream rate is too high for the current "
|
||||
"available internet bandwidth." ) + "</li>"
|
||||
"<li>" + tr ( "The CPU of the client or server is at 100%." ) + "</li>"
|
||||
"</ul>";
|
||||
|
||||
lblBuffers->setWhatsThis ( strLEDBuffers );
|
||||
ledBuffers->setWhatsThis ( strLEDBuffers );
|
||||
|
@ -200,7 +201,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
OnTimerStatus();
|
||||
|
||||
// init connection button text
|
||||
butConnect->setText ( CON_BUT_CONNECTTEXT );
|
||||
butConnect->setText ( tr ( "C&onnect" ) );
|
||||
|
||||
// init input level meter bars
|
||||
lbrInputLevelL->setValue ( 0 );
|
||||
|
@ -252,7 +253,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
|
||||
|
||||
// View menu --------------------------------------------------------------
|
||||
pViewMenu = new QMenu ( "&View", this );
|
||||
pViewMenu = new QMenu ( tr ( "&View" ), this );
|
||||
|
||||
pViewMenu->addAction ( tr ( "&Connection Setup..." ), this,
|
||||
SLOT ( OnOpenConnectionSetupDialog() ) );
|
||||
|
@ -323,7 +324,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP,
|
|||
{
|
||||
// default icon and name for no flag selected
|
||||
CurFlagIcon.addFile ( ":/png/flags/res/flags/flagnone.png" );
|
||||
sCurCountryName = "None";
|
||||
sCurCountryName = tr ( "None" );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -603,20 +604,20 @@ void CClientDlg::UpdateAudioFaderSlider()
|
|||
// attenuated
|
||||
if ( iCurAudInFader == AUD_FADER_IN_MIDDLE )
|
||||
{
|
||||
lblAudioPanValue->setText ( "Center" );
|
||||
lblAudioPanValue->setText ( tr ( "Center" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( iCurAudInFader > AUD_FADER_IN_MIDDLE )
|
||||
{
|
||||
// attenuation on right channel
|
||||
lblAudioPanValue->setText ( "R -" +
|
||||
lblAudioPanValue->setText ( tr ( "R" ) + " -" +
|
||||
QString().setNum ( iCurAudInFader - AUD_FADER_IN_MIDDLE ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// attenuation on left channel
|
||||
lblAudioPanValue->setText ( "L -" +
|
||||
lblAudioPanValue->setText ( tr ( "L" ) + " -" +
|
||||
QString().setNum ( AUD_FADER_IN_MIDDLE - iCurAudInFader ) );
|
||||
}
|
||||
}
|
||||
|
@ -815,12 +816,12 @@ void CClientDlg::SetMyWindowTitle ( const int iNumClients )
|
|||
{
|
||||
if ( iNumClients == 1 )
|
||||
{
|
||||
setWindowTitle ( QString ( pClient->strClientName ) + " (1 user)" );
|
||||
setWindowTitle ( QString ( pClient->strClientName ) + " (1 " + tr ( "user" ) + ")" );
|
||||
}
|
||||
else
|
||||
{
|
||||
setWindowTitle ( QString ( pClient->strClientName ) +
|
||||
QString ( " (%1 users)" ).arg ( iNumClients ) );
|
||||
QString ( " (%1 " + tr ( "users" ) + ")" ).arg ( iNumClients ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1057,7 +1058,7 @@ void CClientDlg::Connect ( const QString& strSelectedAddress,
|
|||
}
|
||||
|
||||
// change connect button text to "disconnect"
|
||||
butConnect->setText ( CON_BUT_DISCONNECTTEXT );
|
||||
butConnect->setText ( tr ( "D&isconnect" ) );
|
||||
|
||||
// set server name in audio mixer group box title
|
||||
MainMixerBoard->SetServerName ( strMixerBoardLabel );
|
||||
|
@ -1081,7 +1082,7 @@ void CClientDlg::Disconnect()
|
|||
}
|
||||
|
||||
// change connect button text to "connect"
|
||||
butConnect->setText ( CON_BUT_CONNECTTEXT );
|
||||
butConnect->setText ( tr ( "C&onnect" ) );
|
||||
|
||||
// reset server name in audio mixer group box title
|
||||
MainMixerBoard->SetServerName ( "" );
|
||||
|
|
|
@ -51,10 +51,6 @@
|
|||
|
||||
|
||||
/* Definitions ****************************************************************/
|
||||
// text strings for connection button for connect and disconnect
|
||||
#define CON_BUT_CONNECTTEXT "C&onnect"
|
||||
#define CON_BUT_DISCONNECTTEXT "D&isconnect"
|
||||
|
||||
// update time for GUI controls
|
||||
#define LEVELMETER_UPDATE_TIME_MS 100 // ms
|
||||
#define BUFFER_LED_UPDATE_TIME_MS 300 // ms
|
||||
|
|
|
@ -34,34 +34,34 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// jitter buffer
|
||||
QString strJitterBufferSize = tr ( "<b>Jitter Buffer Size:</b> The jitter "
|
||||
"buffer compensates for network and sound card timing jitters. The "
|
||||
QString strJitterBufferSize = "<b>" + tr ( "Jitter Buffer Size" ) + ":</b> " + tr (
|
||||
"The jitter buffer compensates for network and sound card timing jitters. The "
|
||||
"size of this jitter buffer has therefore influence on the quality of "
|
||||
"the audio stream (how many dropouts occur) and the overall delay "
|
||||
"(the longer the buffer, the higher the delay).<br>"
|
||||
"(the longer the buffer, the higher the delay)." ) + "<br>" + tr (
|
||||
"The jitter buffer size can be manually chosen for the local client "
|
||||
"and the remote server. For the local jitter buffer, dropouts in the "
|
||||
"audio stream are indicated by the light on the bottom "
|
||||
"of the jitter buffer size faders. If the light turns to red, a buffer "
|
||||
"overrun/underrun took place and the audio stream is interrupted.<br>"
|
||||
"overrun/underrun took place and the audio stream is interrupted." ) + "<br>" + tr (
|
||||
"The jitter buffer setting is therefore a trade-off between audio "
|
||||
"quality and overall delay.<br>"
|
||||
"quality and overall delay." ) + "<br>" + tr (
|
||||
"An auto setting of the jitter buffer size setting is available. If "
|
||||
"the check Auto is enabled, the jitter buffers of the local client and "
|
||||
"the remote server are set automatically "
|
||||
"based on measurements of the network and sound card timing jitter. If "
|
||||
"the <i>Auto</i> check is enabled, the jitter buffer size faders are "
|
||||
"the Auto check is enabled, the jitter buffer size faders are "
|
||||
"disabled (they cannot be moved with the mouse)." );
|
||||
|
||||
QString strJitterBufferSizeTT = tr ( "In case the auto setting of the "
|
||||
"jitter buffer is enabled, the network buffers of the local client and "
|
||||
"the remote server are set to a conservative "
|
||||
"value to minimize the audio dropout probability. To <b>tweak the "
|
||||
"audio delay/latency</b> it is recommended to disable the auto setting "
|
||||
"functionality and to <b>lower the jitter buffer size manually</b> by "
|
||||
"value to minimize the audio dropout probability. To tweak the "
|
||||
"audio delay/latency it is recommended to disable the auto setting "
|
||||
"functionality and to lower the jitter buffer size manually by "
|
||||
"using the sliders until your personal acceptable limit of the amount "
|
||||
"of dropouts is reached. The LED indicator will visualize the audio "
|
||||
"dropouts of the local jitter buffer by a red light" ) +
|
||||
"dropouts of the local jitter buffer by a red light." ) +
|
||||
TOOLTIP_COM_END_TEXT;
|
||||
|
||||
lblNetBuf->setWhatsThis ( strJitterBufferSize );
|
||||
|
@ -80,11 +80,11 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
ledNetw->setToolTip ( strJitterBufferSizeTT );
|
||||
|
||||
// sound card device
|
||||
cbxSoundcard->setWhatsThis ( tr ( "<b>Sound Card Device:</b> The ASIO "
|
||||
"driver (sound card) can be selected using " ) + APP_NAME +
|
||||
cbxSoundcard->setWhatsThis ( "<b>" + tr ( "Sound Card Device" ) + ":</b> " +
|
||||
tr ( "The ASIO driver (sound card) can be selected using " ) + APP_NAME +
|
||||
tr ( " under the Windows operating system. Under MacOS/Linux, no sound "
|
||||
"card selection is possible. If the selected ASIO driver is not valid "
|
||||
"an error message is shown and the previous valid driver is selected.<br>"
|
||||
"an error message is shown and the previous valid driver is selected." ) + "<br>" + tr (
|
||||
"If the driver is selected during an active connection, the connection "
|
||||
"is stopped, the driver is changed and the connection is started again "
|
||||
"automatically." ) );
|
||||
|
@ -93,19 +93,19 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
|
||||
#ifdef _WIN32
|
||||
// set Windows specific tool tip
|
||||
cbxSoundcard->setToolTip ( tr ( "In case the <b>ASIO4ALL</b> driver is used, "
|
||||
cbxSoundcard->setToolTip ( tr ( "In case the ASIO4ALL driver is used, "
|
||||
"please note that this driver usually introduces approx. 10-30 ms of "
|
||||
"additional audio delay. Using a sound card with a native ASIO driver "
|
||||
"is therefore recommended.<br>If you are using the <b>kX ASIO</b> "
|
||||
"is therefore recommended." ) + "<br>" + tr ( "If you are using the kX ASIO "
|
||||
"driver, make sure to connect the ASIO inputs in the kX DSP settings "
|
||||
"panel." ) + TOOLTIP_COM_END_TEXT );
|
||||
#endif
|
||||
|
||||
// sound card input/output channel mapping
|
||||
QString strSndCrdChanMapp = tr ( "<b>Sound Card Channel Mapping:</b> "
|
||||
"In case the selected sound card device offers more than one "
|
||||
QString strSndCrdChanMapp = "<b>" + tr ( "Sound Card Channel Mapping" ) + ":</b> " +
|
||||
tr ( "In case the selected sound card device offers more than one "
|
||||
"input or output channel, the Input Channel Mapping and Output "
|
||||
"Channel Mapping settings are visible.<br>"
|
||||
"Channel Mapping settings are visible." ) + "<br>" + tr (
|
||||
"For each " ) + APP_NAME + tr ( " input/output channel (Left and "
|
||||
"Right channel) a different actual sound card channel can be "
|
||||
"selected." );
|
||||
|
@ -122,8 +122,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
cbxROutChan->setAccessibleName ( tr ( "Right output channel selection combo box" ) );
|
||||
|
||||
// enable OPUS64
|
||||
chbEnableOPUS64->setWhatsThis ( tr ( "<b>Enable Small Network Buffers:</b> If enabled, "
|
||||
"the support for very small network audio packets is activated. Very small "
|
||||
chbEnableOPUS64->setWhatsThis ( "<b>" + tr ( "Enable Small Network Buffers" ) + ":</b> " + tr (
|
||||
"If enabled, the support for very small network audio packets is activated. Very small "
|
||||
"network packets are only actually used if the sound card buffer delay is smaller than " ) +
|
||||
QString().setNum ( DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) + tr ( " samples. The "
|
||||
"smaller the network buffers, the smaller the audio latency. But at the same time "
|
||||
|
@ -132,35 +132,35 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
chbEnableOPUS64->setAccessibleName ( tr ( "Enable small network buffers check box" ) );
|
||||
|
||||
// sound card buffer delay
|
||||
QString strSndCrdBufDelay = tr ( "<b>Sound Card Buffer Delay:</b> The "
|
||||
"buffer delay setting is a fundamental setting of the " ) +
|
||||
QString strSndCrdBufDelay = "<b>" + tr ( "Sound Card Buffer Delay" ) + ":</b> " +
|
||||
tr ( "The buffer delay setting is a fundamental setting of the " ) +
|
||||
APP_NAME + tr ( " software. This setting has influence on many "
|
||||
"connection properties.<br>"
|
||||
"Three buffer sizes are supported:"
|
||||
"<ul>"
|
||||
"<li>64 samples: This is the preferred setting since it gives lowest "
|
||||
"latency but does not work with all sound cards.</li>"
|
||||
"<li>128 samples: This setting should work on most of the available "
|
||||
"sound cards.</li>"
|
||||
"<li>256 samples: This setting should only be used if only a very slow "
|
||||
"computer or a slow internet connection is available.</li>"
|
||||
"</ul>"
|
||||
"connection properties." ) + "<br>" + tr (
|
||||
"Three buffer sizes are supported" ) +
|
||||
":<ul>"
|
||||
"<li>" + tr ( "64 samples: This is the preferred setting since it gives lowest "
|
||||
"latency but does not work with all sound cards." ) + "</li>"
|
||||
"<li>" + tr ( "128 samples: This setting should work on most of the available "
|
||||
"sound cards." ) + "</li>"
|
||||
"<li>" + tr ( "256 samples: This setting should only be used if only a very slow "
|
||||
"computer or a slow internet connection is available." ) + "</li>"
|
||||
"</ul>" + tr (
|
||||
"Some sound card driver do not allow the buffer delay to be changed "
|
||||
"from within the " ) + APP_NAME +
|
||||
tr ( " software. In this case the buffer delay setting "
|
||||
"is disabled. To change the actual buffer delay, this "
|
||||
"setting has to be changed in the sound card driver. On Windows, press "
|
||||
"the ASIO Setup button to open the driver settings panel. On Linux, "
|
||||
"use the Jack configuration tool to change the buffer size.<br>"
|
||||
"use the Jack configuration tool to change the buffer size." ) + "<br>" + tr (
|
||||
"If no buffer size is selected and all settings are disabled, an "
|
||||
"unsupported buffer size is used by the driver. The " ) + APP_NAME +
|
||||
tr ( " software will still work with this setting but with restricted "
|
||||
"performannce.<br>"
|
||||
"performannce." ) + "<br>" + tr (
|
||||
"The actual buffer delay has influence on the connection status, the "
|
||||
"current upload rate and the overall delay. The lower the buffer size, "
|
||||
"the higher the probability of red light in the status indicator (drop "
|
||||
"outs) and the higher the upload rate and the lower the overall "
|
||||
"delay.<br>"
|
||||
"delay." ) + "<br>" + tr (
|
||||
"The buffer setting is therefore a trade-off between audio "
|
||||
"quality and overall delay." );
|
||||
|
||||
|
@ -185,19 +185,19 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
butDriverSetup->setToolTip ( strSndCrdBufDelayTT );
|
||||
|
||||
// fancy skin
|
||||
chbGUIDesignFancy->setWhatsThis ( tr ( "<b>Fancy Skin:</b> If enabled, "
|
||||
"a fancy skin will be applied to the main window." ) );
|
||||
chbGUIDesignFancy->setWhatsThis ( "<b>" + tr ( "Fancy Skin" ) + ":</b> " + tr (
|
||||
"If enabled, a fancy skin will be applied to the main window." ) );
|
||||
|
||||
chbGUIDesignFancy->setAccessibleName ( tr ( "Fancy skin check box" ) );
|
||||
|
||||
// display channel levels
|
||||
chbDisplayChannelLevels->setWhatsThis ( tr ( "<b>Display Channel Levels:</b> "
|
||||
"If enabled, each client channel will display a pre-fader level bar." ) );
|
||||
chbDisplayChannelLevels->setWhatsThis ( "<b>" + tr ( "Display Channel Levels" ) + ":</b> " +
|
||||
tr ( "If enabled, each client channel will display a pre-fader level bar." ) );
|
||||
|
||||
chbDisplayChannelLevels->setAccessibleName ( tr ( "Display channel levels check box" ) );
|
||||
|
||||
// audio channels
|
||||
QString strAudioChannels = tr ( "<b>Audio Channels:</b> "
|
||||
QString strAudioChannels = "<b>" + tr ( "Audio Channels" ) + ":</b> " + tr (
|
||||
"Select the number of audio channels to be used. There are three "
|
||||
"modes available. The mono and stereo modes use one and two "
|
||||
"audio channels respectively. In the mono-in/stereo-out mode "
|
||||
|
@ -206,10 +206,10 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
"sound card puts the instrument on one input channel and the "
|
||||
"microphone on the other channel. In that case the two input signals "
|
||||
"can be mixed to one mono channel but the server mix can be heard in "
|
||||
"stereo.<br>"
|
||||
"stereo." ) + "<br>" + tr (
|
||||
"Enabling the stereo streaming mode will increase the "
|
||||
"stream data rate. Make sure that the current upload rate does not "
|
||||
"exceed the available bandwidth of your internet connection.<br>"
|
||||
"exceed the available bandwidth of your internet connection." ) + "<br>" + tr (
|
||||
"In case of the stereo streaming mode, no audio channel selection "
|
||||
"for the reverberation effect will be available on the main window "
|
||||
"since the effect is applied on both channels in this case." );
|
||||
|
@ -219,7 +219,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
cbxAudioChannels->setAccessibleName ( tr ( "Audio channels combo box" ) );
|
||||
|
||||
// audio quality
|
||||
QString strAudioQuality = tr ( "<b>Audio Quality:</b> "
|
||||
QString strAudioQuality = "<b>" + tr ( "Audio Quality" ) + ":</b> " + tr (
|
||||
"Select the desired audio quality. A low, normal or high audio "
|
||||
"quality can be selected. The higher the audio quality, the higher "
|
||||
"the audio stream data rate. Make sure that the current "
|
||||
|
@ -231,8 +231,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
cbxAudioQuality->setAccessibleName ( tr ( "Audio quality combo box" ) );
|
||||
|
||||
// new client fader level
|
||||
QString strNewClientLevel = tr ( "<b>New Client Level:</b> The "
|
||||
"new client level setting defines the fader level of a new "
|
||||
QString strNewClientLevel = "<b>" + tr ( "New Client Level" ) + ":</b> " +
|
||||
tr ( "The new client level setting defines the fader level of a new "
|
||||
"connected client in percent. I.e. if a new client connects "
|
||||
"to the current server, it will get the specified initial "
|
||||
"fader level if no other fader level of a previous connection "
|
||||
|
@ -243,8 +243,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
edtNewClientLevel->setAccessibleName ( tr ( "New client level edit box" ) );
|
||||
|
||||
// central server address
|
||||
QString strCentrServAddr = tr ( "<b>Central Server Address:</b> The "
|
||||
"central server address is the IP address or URL of the central server "
|
||||
QString strCentrServAddr = "<b>" + tr ( "Central Server Address" ) + ":</b> " +
|
||||
tr ( "The central server address is the IP address or URL of the central server "
|
||||
"at which the server list of the connection dialog is managed. With the "
|
||||
"central server address type either the local region can be selected of "
|
||||
"the default central servers or a manual address can be specified." );
|
||||
|
@ -257,15 +257,15 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
edtCentralServerAddress->setAccessibleName ( tr ( "Central server address line edit" ) );
|
||||
|
||||
// current connection status parameter
|
||||
QString strConnStats = tr ( "<b>Current Connection Status "
|
||||
"Parameter:</b> The ping time is the time required for the audio "
|
||||
QString strConnStats = "<b>" + tr ( "Current Connection Status "
|
||||
"Parameter" ) + ":</b> " + tr ( "The ping time is the time required for the audio "
|
||||
"stream to travel from the client to the server and backwards. This "
|
||||
"delay is introduced by the network. This delay should be as low as "
|
||||
"20-30 ms. If this delay is higher (e.g., 50-60 ms), your distance to "
|
||||
"the server is too large or your internet connection is not "
|
||||
"sufficient.<br>"
|
||||
"sufficient." ) + "<br>" + tr (
|
||||
"The overall delay is calculated from the current ping time and the "
|
||||
"delay which is introduced by the current buffer settings.<br>"
|
||||
"delay which is introduced by the current buffer settings." ) + "<br>" + tr (
|
||||
"The upstream rate depends on the current audio packet size and the "
|
||||
"audio compression setting. Make sure that the upstream rate is not "
|
||||
"higher than the available rate (check the upstream capabilities of "
|
||||
|
@ -285,7 +285,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
|
||||
// init driver button
|
||||
#ifdef _WIN32
|
||||
butDriverSetup->setText ( "ASIO Setup" );
|
||||
butDriverSetup->setText ( tr ( "ASIO Setup" ) );
|
||||
#else
|
||||
// no use for this button for MacOS/Linux right now -> hide it
|
||||
butDriverSetup->hide();
|
||||
|
@ -332,23 +332,23 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
|
||||
// "Audio Channels" combo box
|
||||
cbxAudioChannels->clear();
|
||||
cbxAudioChannels->addItem ( "Mono" ); // CC_MONO
|
||||
cbxAudioChannels->addItem ( "Mono-in/Stereo-out" ); // CC_MONO_IN_STEREO_OUT
|
||||
cbxAudioChannels->addItem ( "Stereo" ); // CC_STEREO
|
||||
cbxAudioChannels->addItem ( tr ( "Mono" ) ); // CC_MONO
|
||||
cbxAudioChannels->addItem ( tr ( "Mono-in/Stereo-out" ) ); // CC_MONO_IN_STEREO_OUT
|
||||
cbxAudioChannels->addItem ( tr ( "Stereo" ) ); // CC_STEREO
|
||||
cbxAudioChannels->setCurrentIndex ( static_cast<int> ( pClient->GetAudioChannels() ) );
|
||||
|
||||
// "Audio Quality" combo box
|
||||
cbxAudioQuality->clear();
|
||||
cbxAudioQuality->addItem ( "Low" ); // AQ_LOW
|
||||
cbxAudioQuality->addItem ( "Normal" ); // AQ_NORMAL
|
||||
cbxAudioQuality->addItem ( "High" ); // AQ_HIGH
|
||||
cbxAudioQuality->addItem ( tr ( "Low" ) ); // AQ_LOW
|
||||
cbxAudioQuality->addItem ( tr ( "Normal" ) ); // AQ_NORMAL
|
||||
cbxAudioQuality->addItem ( tr ( "High" ) ); // AQ_HIGH
|
||||
cbxAudioQuality->setCurrentIndex ( static_cast<int> ( pClient->GetAudioQuality() ) );
|
||||
|
||||
// central server address type combo box
|
||||
cbxCentServAddrType->clear();
|
||||
cbxCentServAddrType->addItem ( "Manual" ); // AT_MANUAL
|
||||
cbxCentServAddrType->addItem ( "Default" ); // AT_DEFAULT
|
||||
cbxCentServAddrType->addItem ( "Default (North America)" ); // AT_NORTH_AMERICA
|
||||
cbxCentServAddrType->addItem ( tr ( "Manual" ) ); // AT_MANUAL
|
||||
cbxCentServAddrType->addItem ( tr ( "Default" ) ); // AT_DEFAULT
|
||||
cbxCentServAddrType->addItem ( tr ( "Default (North America)" ) ); // AT_NORTH_AMERICA
|
||||
cbxCentServAddrType->setCurrentIndex ( static_cast<int> ( pClient->GetCentralServerAddressType() ) );
|
||||
UpdateCentralServerDependency();
|
||||
|
||||
|
@ -454,11 +454,11 @@ void CClientSettingsDlg::UpdateJitterBufferFrame()
|
|||
// update slider value and text
|
||||
const int iCurNumNetBuf = pClient->GetSockBufNumFrames();
|
||||
sldNetBuf->setValue ( iCurNumNetBuf );
|
||||
lblNetBuf->setText ( "Size: " + QString().setNum ( iCurNumNetBuf ) );
|
||||
lblNetBuf->setText ( tr ( "Size: " ) + QString().setNum ( iCurNumNetBuf ) );
|
||||
|
||||
const int iCurNumNetBufServer = pClient->GetServerSockBufNumFrames();
|
||||
sldNetBufServer->setValue ( iCurNumNetBufServer );
|
||||
lblNetBufServer->setText ( "Size: " + QString().setNum ( iCurNumNetBufServer ) );
|
||||
lblNetBufServer->setText ( tr ( "Size: " ) + QString().setNum ( iCurNumNetBufServer ) );
|
||||
|
||||
// if auto setting is enabled, disable slider control
|
||||
const bool bIsAutoSockBufSize = pClient->GetDoAutoSockBufSize();
|
||||
|
@ -515,12 +515,12 @@ void CClientSettingsDlg::UpdateSoundCardFrame()
|
|||
if ( bPreferredChecked || bDefaultChecked || bSafeChecked )
|
||||
{
|
||||
// default title text
|
||||
grbSoundCrdBufDelay->setTitle ( "Buffer Delay" );
|
||||
grbSoundCrdBufDelay->setTitle ( tr ( "Buffer Delay" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// special title text with buffer size information added
|
||||
grbSoundCrdBufDelay->setTitle ( "Buffer Delay: " +
|
||||
grbSoundCrdBufDelay->setTitle ( tr ( "Buffer Delay: " ) +
|
||||
GenSndCrdBufferDelayString ( iCurActualBufSize ) );
|
||||
}
|
||||
}
|
||||
|
@ -633,7 +633,7 @@ void CClientSettingsDlg::OnSoundcardActivated ( int iSndDevIdx )
|
|||
QString ( tr ( "The selected audio device could not be used "
|
||||
"because of the following error: " ) ) + strError +
|
||||
QString ( tr ( " The previous driver will be selected." ) ),
|
||||
"Ok", nullptr );
|
||||
tr ( "Ok" ), nullptr );
|
||||
|
||||
// recover old selection
|
||||
cbxSoundcard->setCurrentIndex ( pClient->GetSndCrdDev() );
|
||||
|
|
|
@ -44,13 +44,13 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList,
|
|||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// server list
|
||||
lvwServers->setWhatsThis ( tr ( "<b>Server List:</b> The server list shows "
|
||||
"a list of available servers which are registered at the central "
|
||||
"server. Select a server from the list and press the connect button to "
|
||||
lvwServers->setWhatsThis ( "<b>" + tr ( "Server List" ) + ":</b> " + tr (
|
||||
"The server list shows a list of available servers which are registered at the "
|
||||
"central server. Select a server from the list and press the connect button to "
|
||||
"connect to this server. Alternatively, double click a server from "
|
||||
"the list to connect to it. If a server is occupied, a list of the "
|
||||
"connected musicians is available by expanding the list item. "
|
||||
"Permanent servers are shown in bold font.<br>"
|
||||
"Permanent servers are shown in bold font." ) + "<br>" + tr (
|
||||
"Note that it may take some time to retrieve the server list from the "
|
||||
"central server. If no valid central server address is specified in "
|
||||
"the settings, no server list will be available." ) );
|
||||
|
@ -58,12 +58,12 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList,
|
|||
lvwServers->setAccessibleName ( tr ( "Server list view" ) );
|
||||
|
||||
// server address
|
||||
QString strServAddrH = tr ( "<b>Server Address:</b> The IP address or URL "
|
||||
"of the server running the " ) + APP_NAME + tr ( " server software "
|
||||
"must be set here. An optional port number can be added after the IP "
|
||||
"address or URL using a comma as a separator, e.g, <i>"
|
||||
QString strServAddrH = "<b>" + tr ( "Server Address" ) + ":</b> " + tr (
|
||||
"The IP address or URL of the server running the " ) + APP_NAME + tr (
|
||||
" server software must be set here. An optional port number can be added after the IP "
|
||||
"address or URL using a comma as a separator, e.g, "
|
||||
"example.org:" ) +
|
||||
QString().setNum ( LLCON_DEFAULT_PORT_NUMBER ) + tr ( "</i>. A list of "
|
||||
QString().setNum ( LLCON_DEFAULT_PORT_NUMBER ) + tr ( ". A list of "
|
||||
"the most recent used server IP addresses or URLs is available for "
|
||||
"selection." );
|
||||
|
||||
|
@ -75,13 +75,13 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList,
|
|||
"IP address or URL. It also stores old URLs in the combo box list." ) );
|
||||
|
||||
// filter
|
||||
edtFilter->setWhatsThis ( tr ( "<b>Filter:</b> The server list is filered "
|
||||
"by the given text. Note that the filter is case insensitive." ) );
|
||||
edtFilter->setWhatsThis ( "<b>" + tr ( "Filter" ) + ":</b> " + tr ( "The server "
|
||||
"list is filered by the given text. Note that the filter is case insensitive." ) );
|
||||
edtFilter->setAccessibleName ( tr ( "Filter edit box" ) );
|
||||
|
||||
// show all mucisians
|
||||
chbExpandAll->setWhatsThis ( tr ( "<b>Show All Musicians:</b> If you check "
|
||||
"this check box, the musicians of all servers are shown. If you "
|
||||
chbExpandAll->setWhatsThis ( "<b>" + tr ( "Show All Musicians" ) + ":</b> " + tr (
|
||||
"If you check this check box, the musicians of all servers are shown. If you "
|
||||
"uncheck the check box, all list view items are collapsed.") );
|
||||
chbExpandAll->setAccessibleName ( tr ( "Show all musicians check box" ) );
|
||||
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
src/res/translation/translation_es_ES.qm
Normal file
BIN
src/res/translation/translation_es_ES.qm
Normal file
Binary file not shown.
2254
src/res/translation/translation_es_ES.ts
Normal file
2254
src/res/translation/translation_es_ES.ts
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
src/res/translation/translation_pt_PT.qm
Normal file
BIN
src/res/translation/translation_pt_PT.qm
Normal file
Binary file not shown.
2262
src/res/translation/translation_pt_PT.ts
Normal file
2262
src/res/translation/translation_pt_PT.ts
Normal file
File diff suppressed because it is too large
Load diff
|
@ -5,6 +5,12 @@
|
|||
<qresource prefix="/translations" lang="fr">
|
||||
<file alias="translation.qm">res/translation/translation_fr_FR.qm</file>
|
||||
</qresource>
|
||||
<qresource prefix="/translations" lang="pt">
|
||||
<file alias="translation.qm">res/translation/translation_pt_PT.qm</file>
|
||||
</qresource>
|
||||
<qresource prefix="/translations" lang="es">
|
||||
<file alias="translation.qm">res/translation/translation_es_ES.qm</file>
|
||||
</qresource>
|
||||
<qresource prefix="/png/LEDs">
|
||||
<file>res/CLEDDisabledSmall.png</file>
|
||||
<file>res/CLEDGreenArrow.png</file>
|
||||
|
|
|
@ -42,28 +42,28 @@ CServerDlg::CServerDlg ( CServer* pNServP,
|
|||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// client list
|
||||
lvwClients->setWhatsThis ( tr ( "<b>Client List:</b> The client list "
|
||||
"shows all clients which are currently connected to this server. Some "
|
||||
"information about the clients like the IP address and name are given "
|
||||
"for each connected client." ) );
|
||||
lvwClients->setWhatsThis ( "<b>" + tr ( "Client List" ) + ":</b> " + tr (
|
||||
"The client list shows all clients which are currently connected to this "
|
||||
"server. Some information about the clients like the IP address and name "
|
||||
"are given for each connected client." ) );
|
||||
|
||||
lvwClients->setAccessibleName ( tr ( "Connected clients list view" ) );
|
||||
|
||||
// start minimized on operating system start
|
||||
chbStartOnOSStart->setWhatsThis ( tr ( "<b>Start Minimized on Operating "
|
||||
"System Start:</b> If the start minimized on operating system start "
|
||||
chbStartOnOSStart->setWhatsThis ( "<b>" + tr ( "Start Minimized on Operating "
|
||||
"System Start" ) + ":</b> " + tr ( "If the start minimized on operating system start "
|
||||
"check box is checked, the " ) + APP_NAME + tr ( " server will be "
|
||||
"started when the operating system starts up and is automatically "
|
||||
"minimized to a system task bar icon." ) );
|
||||
|
||||
// CC licence dialog switch
|
||||
chbUseCCLicence->setWhatsThis ( tr ( "<b>Show Creative Commons Licence "
|
||||
"Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence "
|
||||
chbUseCCLicence->setWhatsThis ( "<b>" + tr ( "Show Creative Commons Licence "
|
||||
"Dialog" ) + ":</b> " + tr ( "If enabled, a Creative Commons BY-NC-SA 4.0 Licence "
|
||||
"dialog is shown each time a new user connects the server." ) );
|
||||
|
||||
// Make My Server Public flag
|
||||
chbRegisterServer->setWhatsThis ( tr ( "<b>Make My Server Public:</b> If "
|
||||
"the Make My Server Public check box is checked, this server registers "
|
||||
chbRegisterServer->setWhatsThis ( "<b>" + tr ( "Make My Server Public" ) + ":</b> " +
|
||||
tr ( "If the Make My Server Public check box is checked, this server registers "
|
||||
"itself at the central server so that all " ) + APP_NAME +
|
||||
tr ( " users can see the server in the connect dialog server list and "
|
||||
"connect to it. The registering of the server is renewed periodically "
|
||||
|
@ -71,13 +71,13 @@ CServerDlg::CServerDlg ( CServer* pNServP,
|
|||
"actually available." ) );
|
||||
|
||||
// register server status label
|
||||
lblRegSvrStatus->setWhatsThis ( tr ( "<b>Register Server Status:</b> If "
|
||||
"the Make My Server Public check box is checked, this will show "
|
||||
lblRegSvrStatus->setWhatsThis ( "<b>" + tr ( "Register Server Status" ) + ":</b> " +
|
||||
tr ( "If the Make My Server Public check box is checked, this will show "
|
||||
"the success of registration with the central server." ) );
|
||||
|
||||
// central server address
|
||||
QString strCentrServAddr = tr ( "<b>Central Server Address:</b> The "
|
||||
"Central server address is the IP address or URL of the central server "
|
||||
QString strCentrServAddr = "<b>" + tr ( "Central Server Address" ) + ":</b> " +
|
||||
tr ( "The Central server address is the IP address or URL of the central server "
|
||||
"at which this server is registered. With the central server address "
|
||||
"type either the local region can be selected of the default central "
|
||||
"servers or a manual address can be specified." );
|
||||
|
@ -90,7 +90,7 @@ CServerDlg::CServerDlg ( CServer* pNServP,
|
|||
edtCentralServerAddress->setAccessibleName ( tr ( "Central server address line edit" ) );
|
||||
|
||||
// server name
|
||||
QString strServName = tr ( "<b>Server Name:</b> The server name identifies "
|
||||
QString strServName = "<b>" + tr ( "Server Name" ) + ":</b> " + tr ( "The server name identifies "
|
||||
"your server in the connect dialog server list at the clients. If no "
|
||||
"name is given, the IP address is shown instead." );
|
||||
|
||||
|
@ -100,18 +100,17 @@ CServerDlg::CServerDlg ( CServer* pNServP,
|
|||
edtServerName->setAccessibleName ( tr ( "Server name line edit" ) );
|
||||
|
||||
// location city
|
||||
QString strLocCity = tr ( "<b>Location City:</b> The city in which this "
|
||||
QString strLocCity = "<b>" + tr ( "Location City" ) + ":</b> " + tr ( "The city in which this "
|
||||
"server is located can be set here. If a city name is entered, it "
|
||||
"will be shown in the connect dialog server list at the clients." );
|
||||
|
||||
lblLocationCity->setWhatsThis ( strLocCity );
|
||||
edtLocationCity->setWhatsThis ( strLocCity );
|
||||
|
||||
edtLocationCity->setAccessibleName ( tr (
|
||||
"City where the server is located line edit" ) );
|
||||
edtLocationCity->setAccessibleName ( tr ( "City where the server is located line edit" ) );
|
||||
|
||||
// location country
|
||||
QString strLocCountry = tr ( "<b>Location country:</b> The country in "
|
||||
QString strLocCountry = "<b>" + tr ( "Location country" ) + ":</b> " + tr ( "The country in "
|
||||
"which this server is located can be set here. If a country is "
|
||||
"entered, it will be shown in the connect dialog server list at the "
|
||||
"clients." );
|
||||
|
@ -189,9 +188,9 @@ lvwClients->setMinimumHeight ( 140 );
|
|||
|
||||
// central server address type combo box
|
||||
cbxCentServAddrType->clear();
|
||||
cbxCentServAddrType->addItem ( "Manual" ); // AT_MANUAL
|
||||
cbxCentServAddrType->addItem ( "Default" ); // AT_DEFAULT
|
||||
cbxCentServAddrType->addItem ( "Default (North America)" ); // AT_NORTH_AMERICA
|
||||
cbxCentServAddrType->addItem ( tr ( "Manual" ) ); // AT_MANUAL
|
||||
cbxCentServAddrType->addItem ( tr ( "Default" ) ); // AT_DEFAULT
|
||||
cbxCentServAddrType->addItem ( tr ( "Default (North America)" ) ); // AT_NORTH_AMERICA
|
||||
cbxCentServAddrType->setCurrentIndex ( static_cast<int> ( pServer->GetCentralServerAddressType() ) );
|
||||
|
||||
// update server name line edit
|
||||
|
@ -273,7 +272,7 @@ lvwClients->setMinimumHeight ( 140 );
|
|||
|
||||
|
||||
// View menu --------------------------------------------------------------
|
||||
QMenu* pViewMenu = new QMenu ( "&Window", this );
|
||||
QMenu* pViewMenu = new QMenu ( tr ( "&Window" ), this );
|
||||
|
||||
pViewMenu->addAction ( tr ( "E&xit" ), this,
|
||||
SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_Q ) );
|
||||
|
|
|
@ -141,10 +141,10 @@ QString CSoundBase::SetDev ( const int iNewDev )
|
|||
nullptr, APP_NAME, QString ( tr ( "The audio driver properties "
|
||||
"have changed to a state which is incompatible to this "
|
||||
"software. The selected audio device could not be used "
|
||||
"because of the following error: <b>" ) ) +
|
||||
"because of the following error:" ) + " <b>" ) +
|
||||
strErrorMessage +
|
||||
QString ( tr ( "</b><br><br>Please restart the software." ) ),
|
||||
"Close", nullptr );
|
||||
QString ( "</b><br><br>" + tr ( "Please restart the software." ) ),
|
||||
tr ( "Close" ), nullptr );
|
||||
|
||||
_exit ( 0 );
|
||||
}
|
||||
|
@ -186,11 +186,11 @@ QString CSoundBase::SetDev ( const int iNewDev )
|
|||
if ( !vsErrorList.isEmpty() )
|
||||
{
|
||||
// create error message with all details
|
||||
QString sErrorMessage = tr ( "<b>No usable " ) +
|
||||
QString sErrorMessage = "<b>" + tr ( "No usable " ) +
|
||||
strSystemDriverTechniqueName + tr ( " audio device "
|
||||
"(driver) found.</b><br><br>"
|
||||
"(driver) found." ) + "</b><br><br>" + tr (
|
||||
"In the following there is a list of all available drivers "
|
||||
"with the associated error message:<ul>" );
|
||||
"with the associated error message:" ) + "<ul>";
|
||||
|
||||
for ( int i = 0; i < lNumDevs; i++ )
|
||||
{
|
||||
|
@ -202,7 +202,7 @@ QString CSoundBase::SetDev ( const int iNewDev )
|
|||
// to be able to access the ASIO driver setup for changing, e.g., the sample rate, we
|
||||
// offer the user under Windows that we open the driver setups of all registered
|
||||
// ASIO drivers
|
||||
sErrorMessage = sErrorMessage + tr ( "<br/>Do you want to open the ASIO driver setups?" );
|
||||
sErrorMessage = sErrorMessage + "<br/>" + tr ( "Do you want to open the ASIO driver setups?" );
|
||||
|
||||
if ( QMessageBox::Yes == QMessageBox::information ( nullptr, APP_NAME, sErrorMessage, QMessageBox::Yes|QMessageBox::No ) )
|
||||
{
|
||||
|
|
45
src/util.cpp
45
src/util.cpp
|
@ -462,9 +462,9 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent )
|
|||
QVBoxLayout* pLayout = new QVBoxLayout ( this );
|
||||
QHBoxLayout* pSubLayout = new QHBoxLayout;
|
||||
QTextBrowser* txvLicence = new QTextBrowser ( this );
|
||||
QCheckBox* chbAgree = new QCheckBox ( "I &agree to the above licence terms", this );
|
||||
butAccept = new QPushButton ( "Accept", this );
|
||||
QPushButton* butDecline = new QPushButton ( "Decline", this );
|
||||
QCheckBox* chbAgree = new QCheckBox ( tr ( "I &agree to the above licence terms" ), this );
|
||||
butAccept = new QPushButton ( tr ( "Accept" ), this );
|
||||
QPushButton* butDecline = new QPushButton ( tr ( "Decline" ), this );
|
||||
|
||||
pSubLayout->addStretch();
|
||||
pSubLayout->addWidget ( chbAgree );
|
||||
|
@ -486,10 +486,10 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent )
|
|||
"You agree that all data, sounds, or other works transmitted to this server "
|
||||
"are owned and created by you or your licensors, and that you are making these "
|
||||
"data, sounds or other works available via the following Creative Commons "
|
||||
"License (for more information on this license, see "
|
||||
"License (for more information on this license, see " ) +
|
||||
"<i><a href=""http://creativecommons.org/licenses/by-nc-sa/4.0"">"
|
||||
"http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>):" ) + "</big></p>" +
|
||||
"<h3>Attribution-NonCommercial-ShareAlike 4.0</h3>" +
|
||||
"http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>):</big></p>"
|
||||
"<h3>Attribution-NonCommercial-ShareAlike 4.0</h3>"
|
||||
"<p>" + tr ( "You are free to:" ) +
|
||||
"<ul>"
|
||||
"<li><b>" + tr ( "Share" ) + "</b> - " +
|
||||
|
@ -539,22 +539,22 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP,
|
|||
- label with combo box for skill level
|
||||
- OK button
|
||||
*/
|
||||
setWindowTitle ( "Musician Profile" );
|
||||
setWindowTitle ( tr ( "Musician Profile" ) );
|
||||
setWindowIcon ( QIcon ( QString::fromUtf8 ( ":/png/main/res/fronticon.png" ) ) );
|
||||
|
||||
QVBoxLayout* pLayout = new QVBoxLayout ( this );
|
||||
QHBoxLayout* pButSubLayout = new QHBoxLayout;
|
||||
QLabel* plblAlias = new QLabel ( "Alias/Name", this );
|
||||
QLabel* plblAlias = new QLabel ( tr ( "Alias/Name" ), this );
|
||||
pedtAlias = new QLineEdit ( this );
|
||||
QLabel* plblInstrument = new QLabel ( "Instrument", this );
|
||||
QLabel* plblInstrument = new QLabel ( tr ( "Instrument" ), this );
|
||||
pcbxInstrument = new QComboBox ( this );
|
||||
QLabel* plblCountry = new QLabel ( "Country", this );
|
||||
QLabel* plblCountry = new QLabel ( tr ( "Country" ), this );
|
||||
pcbxCountry = new QComboBox ( this );
|
||||
QLabel* plblCity = new QLabel ( "City", this );
|
||||
QLabel* plblCity = new QLabel ( tr ( "City" ), this );
|
||||
pedtCity = new QLineEdit ( this );
|
||||
QLabel* plblSkill = new QLabel ( "Skill", this );
|
||||
QLabel* plblSkill = new QLabel ( tr ( "Skill" ), this );
|
||||
pcbxSkill = new QComboBox ( this );
|
||||
QPushButton* butClose = new QPushButton ( "&Close", this );
|
||||
QPushButton* butClose = new QPushButton ( tr ( "&Close" ), this );
|
||||
|
||||
QGridLayout* pGridLayout = new QGridLayout;
|
||||
plblAlias->setSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding );
|
||||
|
@ -627,8 +627,7 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP,
|
|||
if ( static_cast<QLocale::Country> ( iCurCntry ) != QLocale::AnyCountry )
|
||||
{
|
||||
// get current country enum
|
||||
QLocale::Country eCountry =
|
||||
static_cast<QLocale::Country> ( iCurCntry );
|
||||
QLocale::Country eCountry = static_cast<QLocale::Country> ( iCurCntry );
|
||||
|
||||
// try to load icon from resource file name
|
||||
QIcon CurFlagIcon;
|
||||
|
@ -653,7 +652,7 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP,
|
|||
FlagNoneIcon.addFile ( ":/png/flags/res/flags/flagnone.png" );
|
||||
pcbxCountry->insertItem ( 0,
|
||||
FlagNoneIcon,
|
||||
"None",
|
||||
tr ( "None" ),
|
||||
static_cast<int> ( QLocale::AnyCountry ) );
|
||||
|
||||
|
||||
|
@ -665,35 +664,35 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP,
|
|||
RGBCOL_G_SL_NOT_SET,
|
||||
RGBCOL_B_SL_NOT_SET ) );
|
||||
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), "None", SL_NOT_SET );
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "None" ), SL_NOT_SET );
|
||||
|
||||
SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_BEGINNER,
|
||||
RGBCOL_G_SL_BEGINNER,
|
||||
RGBCOL_B_SL_BEGINNER ) );
|
||||
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), "Beginner", SL_BEGINNER );
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Beginner" ), SL_BEGINNER );
|
||||
|
||||
SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_INTERMEDIATE,
|
||||
RGBCOL_G_SL_INTERMEDIATE,
|
||||
RGBCOL_B_SL_INTERMEDIATE ) );
|
||||
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), "Intermediate", SL_INTERMEDIATE );
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Intermediate" ), SL_INTERMEDIATE );
|
||||
|
||||
SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_SL_PROFESSIONAL,
|
||||
RGBCOL_G_SL_SL_PROFESSIONAL,
|
||||
RGBCOL_B_SL_SL_PROFESSIONAL ) );
|
||||
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), "Expert", SL_PROFESSIONAL );
|
||||
pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Expert" ), SL_PROFESSIONAL );
|
||||
|
||||
|
||||
// Add help text to controls -----------------------------------------------
|
||||
// fader tag
|
||||
QString strFaderTag = tr ( "<b>Musician Profile:</b> Set your name "
|
||||
"or an alias here so that the other musicians you want to play with "
|
||||
QString strFaderTag = "<b>" + tr ( "Musician Profile" ) + ":</b> " + tr (
|
||||
"Set your name or an alias here so that the other musicians you want to play with "
|
||||
"know who you are. Additionally you may set an instrument picture of "
|
||||
"the instrument you play and a flag of the country you are living. "
|
||||
"The city you live in and the skill level of playing your instrument "
|
||||
"may also be added.\n"
|
||||
"may also be added." ) + "<br>" + tr (
|
||||
"What you set here will appear at your fader on the mixer board when "
|
||||
"you are connected to a " ) + APP_NAME + tr ( " server. This tag will "
|
||||
"also show up at each client which is connected to the same server as "
|
||||
|
|
16
src/util.h
16
src/util.h
|
@ -590,28 +590,28 @@ inline QString svrRegStatusToString ( ESvrRegStatus eSvrRegStatus )
|
|||
switch ( eSvrRegStatus )
|
||||
{
|
||||
case SRS_UNREGISTERED:
|
||||
return "Unregistered";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Unregistered" );
|
||||
|
||||
case SRS_BAD_ADDRESS:
|
||||
return "Bad address";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Bad address" );
|
||||
|
||||
case SRS_REQUESTED:
|
||||
return "Registration requested";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Registration requested" );
|
||||
|
||||
case SRS_TIME_OUT:
|
||||
return "Registration failed";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Registration failed" );
|
||||
|
||||
case SRS_UNKNOWN_RESP:
|
||||
return "Check server version";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Check server version" );
|
||||
|
||||
case SRS_REGISTERED:
|
||||
return "Registered";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Registered" );
|
||||
|
||||
case SRS_CENTRAL_SVR_FULL:
|
||||
return "Central Server full";
|
||||
return QCoreApplication::translate ( "CServerDlg", "Central Server full" );
|
||||
}
|
||||
|
||||
return QString ( "Unknown value " ).append ( eSvrRegStatus );
|
||||
return QString ( QCoreApplication::translate ( "CServerDlg", "Unknown value " ) ).append ( eSvrRegStatus );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -515,9 +515,9 @@ CSound::CSound ( void (*fpNewCallback) ( CVector<int16_t>& psData, voi
|
|||
// in case we do not have a driver available, throw error
|
||||
if ( lNumDevs == 0 )
|
||||
{
|
||||
throw CGenErr ( tr ( "<b>No ASIO audio device (driver) found.</b><br><br>"
|
||||
"The " ) + APP_NAME + tr ( " software requires the low latency audio "
|
||||
"interface <b>ASIO</b> to work properly. This is no standard "
|
||||
throw CGenErr ( "<b>" + tr ( "No ASIO audio device (driver) found." ) + "</b><br><br>" +
|
||||
tr ( "The " ) + APP_NAME + tr ( " software requires the low latency audio "
|
||||
"interface ASIO to work properly. This is no standard "
|
||||
"Windows audio interface and therefore a special audio driver is "
|
||||
"required. Either your sound card has a native ASIO driver (which "
|
||||
"is recommended) or you might want to use alternative drivers like "
|
||||
|
|
Loading…
Reference in a new issue