diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..3f550c73 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs/oboe"] + path = libs/oboe + url = https://github.com/google/oboe.git diff --git a/ChangeLog b/ChangeLog index 6f5be6db..61548692 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,35 +1,54 @@ +3.5.4git +TODO server list split on query +TODO Keep lrelease? Does it work as expected? - -3.5.3git - -- for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 - -- added bassoon/oboe/harp instrument icons, created by dszgit (Ticket #131) - -- link to docs from application Help menu (Ticket #90) - -- 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 fix Linux deploy script -> gives errors right now TODO WIP support internationalization +TODO implement panning for channels (Ticket #52, #145) + TODO show mute state of others + +3.5.3 (2020-05-15) + +- correct unregister of headless server and RPP file creation on + SIGINT/SIGTERM, coded by pljones (Tickets #130, #168) + +- for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 + +- added bassoon/oboe/harp instrument icons created by dszgit, + congas/bongo created by bspeer (Ticket #131) + +- link to docs from application Help menu (Ticket #90) + +- support Mac CoreAudio aggregated devices (Ticket #138) + +- added translations: French by trebmuh, Portuguese by Snayler, + Spanish by ignotus666, Dutch by jerogee, German by corrados (Ticket #77) + +- new design for the About dialog (Ticket #189) + +- new command line option -d to disconnect all clients on shutdown of the server (Ticket #161) + +- bug fix: for mono capture jack audio interface Jamulus complains it + cannot make connections (Ticket #137) + +- bug fix: fixed that Jamulus segfaults when jackd is restarted (Ticket #122, #127) + +- bug fix: better handling of disconnect message in the client + +- note: Jamulus is no longer compatible to Qt4 + + 3.5.2 (2020-04-24) - use audio level meter bars for normal skin diff --git a/Jamulus.pro b/Jamulus.pro index 739fb72b..2884dcba 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -1,4 +1,4 @@ -VERSION = 3.5.3git +VERSION = 3.5.4git # use target name which does not use a captital letter at the beginning contains(CONFIG, "noupcasename") { @@ -8,7 +8,8 @@ contains(CONFIG, "noupcasename") { CONFIG += qt \ thread \ - release + release \ + lrelease QT += widgets \ network \ @@ -17,7 +18,8 @@ QT += widgets \ TRANSLATIONS = src/res/translation/translation_de_DE.ts \ src/res/translation/translation_fr_FR.ts \ src/res/translation/translation_pt_PT.ts \ - src/res/translation/translation_es_ES.ts + src/res/translation/translation_es_ES.ts \ + src/res/translation/translation_nl_NL.ts INCLUDEPATH += src @@ -127,14 +129,141 @@ win32 { LIBS += /usr/local/lib/libjack.dylib } } else:android { + # we want to compile with C++14 + CONFIG += c++14 + + QT += androidextras + + # enabled only for debugging on android devices + DEFINES += ANDROIDDEBUG + + target.path = /tmp/your_executable # path on device + INSTALLS += target + HEADERS += android/sound.h - SOURCES += android/sound.cpp + SOURCES += android/sound.cpp \ + android/androiddebug.cpp + LIBS += -lOpenSLES ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android OTHER_FILES += android/AndroidManifest.xml + +# if compiling for android you need to use Oboe library which is included as a git submodule +# make sure you git pull with submodules to pull the latest Oboe library +OBOE_SOURCES = libs/oboe/src/aaudio/AAudioLoader.cpp \ + libs/oboe/src/aaudio/AudioStreamAAudio.cpp \ + libs/oboe/src/common/AudioSourceCaller.cpp \ + libs/oboe/src/common/AudioStream.cpp \ + libs/oboe/src/common/AudioStreamBuilder.cpp \ + libs/oboe/src/common/DataConversionFlowGraph.cpp \ + libs/oboe/src/common/FilterAudioStream.cpp \ + libs/oboe/src/common/FixedBlockAdapter.cpp \ + libs/oboe/src/common/FixedBlockReader.cpp \ + libs/oboe/src/common/FixedBlockWriter.cpp \ + libs/oboe/src/common/LatencyTuner.cpp \ + libs/oboe/src/common/QuirksManager.cpp \ + libs/oboe/src/common/SourceFloatCaller.cpp \ + libs/oboe/src/common/SourceI16Caller.cpp \ + libs/oboe/src/common/StabilizedCallback.cpp \ + libs/oboe/src/common/Trace.cpp \ + libs/oboe/src/common/Utilities.cpp \ + libs/oboe/src/common/Version.cpp \ + libs/oboe/src/fifo/FifoBuffer.cpp \ + libs/oboe/src/fifo/FifoController.cpp \ + libs/oboe/src/fifo/FifoControllerBase.cpp \ + libs/oboe/src/fifo/FifoControllerIndirect.cpp \ + libs/oboe/src/flowgraph/ClipToRange.cpp \ + libs/oboe/src/flowgraph/FlowGraphNode.cpp \ + libs/oboe/src/flowgraph/ManyToMultiConverter.cpp \ + libs/oboe/src/flowgraph/MonoToMultiConverter.cpp \ + libs/oboe/src/flowgraph/RampLinear.cpp \ + libs/oboe/src/flowgraph/SampleRateConverter.cpp \ + libs/oboe/src/flowgraph/SinkFloat.cpp \ + libs/oboe/src/flowgraph/SinkI16.cpp \ + libs/oboe/src/flowgraph/SinkI24.cpp \ + libs/oboe/src/flowgraph/SourceFloat.cpp \ + libs/oboe/src/flowgraph/SourceI16.cpp \ + libs/oboe/src/flowgraph/SourceI24.cpp \ + libs/oboe/src/flowgraph/resampler/IntegerRatio.cpp \ + libs/oboe/src/flowgraph/resampler/LinearResampler.cpp \ + libs/oboe/src/flowgraph/resampler/MultiChannelResampler.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResampler.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.cpp \ + libs/oboe/src/flowgraph/resampler/SincResampler.cpp \ + libs/oboe/src/flowgraph/resampler/SincResamplerStereo.cpp \ + libs/oboe/src/opensles/AudioInputStreamOpenSLES.cpp \ + libs/oboe/src/opensles/AudioOutputStreamOpenSLES.cpp \ + libs/oboe/src/opensles/AudioStreamBuffered.cpp \ + libs/oboe/src/opensles/AudioStreamOpenSLES.cpp \ + libs/oboe/src/opensles/EngineOpenSLES.cpp \ + libs/oboe/src/opensles/OpenSLESUtilities.cpp \ + libs/oboe/src/opensles/OutputMixerOpenSLES.cpp + +OBOE_HEADERS = libs/oboe/src/aaudio/AAudioLoader.h \ + libs/oboe/src/aaudio/AudioStreamAAudio.h \ + libs/oboe/src/common/AudioClock.h \ + libs/oboe/src/common/AudioSourceCaller.h \ + libs/oboe/src/common/DataConversionFlowGraph.h \ + libs/oboe/src/common/FilterAudioStream.h \ + libs/oboe/src/common/FixedBlockAdapter.h \ + libs/oboe/src/common/FixedBlockReader.h \ + libs/oboe/src/common/FixedBlockWriter.h \ + libs/oboe/src/common/MonotonicCounter.h \ + libs/oboe/src/common/OboeDebug.h \ + libs/oboe/src/common/QuirksManager.h \ + libs/oboe/src/common/SourceFloatCaller.h \ + libs/oboe/src/common/SourceI16Caller.h \ + libs/oboe/src/common/Trace.h \ + libs/oboe/src/fifo/FifoBuffer.h \ + libs/oboe/src/fifo/FifoController.h \ + libs/oboe/src/fifo/FifoControllerBase.h \ + libs/oboe/src/fifo/FifoControllerIndirect.h \ + libs/oboe/src/flowgraph/ClipToRange.h \ + libs/oboe/src/flowgraph/FlowGraphNode.h \ + libs/oboe/src/flowgraph/ManyToMultiConverter.h \ + libs/oboe/src/flowgraph/MonoToMultiConverter.h \ + libs/oboe/src/flowgraph/RampLinear.h \ + libs/oboe/src/flowgraph/SampleRateConverter.h \ + libs/oboe/src/flowgraph/SinkFloat.h \ + libs/oboe/src/flowgraph/SinkI16.h \ + libs/oboe/src/flowgraph/SinkI24.h \ + libs/oboe/src/flowgraph/SourceFloat.h \ + libs/oboe/src/flowgraph/SourceI16.h \ + libs/oboe/src/flowgraph/SourceI24.h \ + libs/oboe/src/flowgraph/resampler/HyperbolicCosineWindow.h \ + libs/oboe/src/flowgraph/resampler/IntegerRatio.h \ + libs/oboe/src/flowgraph/resampler/LinearResampler.h \ + libs/oboe/src/flowgraph/resampler/MultiChannelResampler.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResampler.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.h \ + libs/oboe/src/flowgraph/resampler/SincResampler.h \ + libs/oboe/src/flowgraph/resampler/SincResamplerStereo.h \ + libs/oboe/src/opensles/AudioInputStreamOpenSLES.h \ + libs/oboe/src/opensles/AudioOutputStreamOpenSLES.h \ + libs/oboe/src/opensles/AudioStreamBuffered.h \ + libs/oboe/src/opensles/AudioStreamOpenSLES.h \ + libs/oboe/src/opensles/EngineOpenSLES.h \ + libs/oboe/src/opensles/OpenSLESUtilities.h \ + libs/oboe/src/opensles/OutputMixerOpenSLES.h + +INCLUDEPATH_OBOE = libs/oboe/include/ \ + libs/oboe/src/ + +DISTFILES_OBOE += libs/oboe/AUTHORS \ + libs/oboe/CONTRIBUTING \ + libs/oboe/LICENSE \ + libs/oboe/README + + INCLUDEPATH += $$INCLUDEPATH_OBOE + HEADERS += $$OBOE_HEADERS + SOURCES += $$OBOE_SOURCES + DISTFILES += $$DISTFILES_OBOE + } else:unix { # we want to compile with C++11 - QMAKE_CXXFLAGS += -std=c++11 + CONFIG += c++11 # we assume to have lrintf() one moderately modern linux distributions # would be better to have that tested, though @@ -209,7 +338,8 @@ HEADERS += src/audiomixerboard.h \ src/recorder/jamrecorder.h \ src/recorder/creaperproject.h \ src/recorder/cwavestream.h \ - src/historygraph.h + src/historygraph.h \ + src/signalhandler.h HEADERS_OPUS = libs/opus/celt/arch.h \ libs/opus/celt/bands.h \ @@ -323,6 +453,7 @@ SOURCES += src/audiomixerboard.cpp \ src/serverlist.cpp \ src/serverlogging.cpp \ src/settings.cpp \ + src/signalhandler.cpp \ src/socket.cpp \ src/soundbase.cpp \ src/util.cpp \ @@ -491,6 +622,12 @@ DISTFILES += ChangeLog \ COPYING \ INSTALL.md \ README.md \ + android/build.gradle \ + android/gradle/wrapper/gradle-wrapper.jar \ + android/gradle/wrapper/gradle-wrapper.properties \ + android/gradlew \ + android/gradlew.bat \ + android/res/values/libs.xml \ src/res/CLEDBlack.png \ src/res/CLEDBlackSmall.png \ src/res/CLEDDisabledSmall.png \ @@ -578,6 +715,10 @@ DISTFILES += ChangeLog \ src/res/instruments/harp.svg \ src/res/instruments/harp.png \ src/res/instruments/viola.png \ + src/res/instruments/congas.svg \ + src/res/instruments/congas.png \ + src/res/instruments/bongo.svg \ + src/res/instruments/bongo.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index addcb052..cba6d9a2 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,41 +1,94 @@ - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + - - - + + - - - - - + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + - - - - - - - + diff --git a/android/androiddebug.cpp b/android/androiddebug.cpp new file mode 100644 index 00000000..93656a47 --- /dev/null +++ b/android/androiddebug.cpp @@ -0,0 +1,45 @@ +const char*const applicationName="Jamulus"; + +#ifdef ANDROIDDEBUG // Set in my myapp.pro file for android builds +#include +#include +#include +#include +#include +#include +#include + +void myMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) +{ + QString report=msg; + if (context.file && !QString(context.file).isEmpty()) { + report+=" in file "; + report+=QString(context.file); + report+=" line "; + report+=QString::number(context.line); + } + if (context.function && !QString(context.function).isEmpty()) { + report+=+" function "; + report+=QString(context.function); + } + const char*const local=report.toLocal8Bit().constData(); + switch (type) { + case QtDebugMsg: + __android_log_write(ANDROID_LOG_DEBUG,applicationName,local); + break; + case QtInfoMsg: + __android_log_write(ANDROID_LOG_INFO,applicationName,local); + break; + case QtWarningMsg: + __android_log_write(ANDROID_LOG_WARN,applicationName,local); + break; + case QtCriticalMsg: + __android_log_write(ANDROID_LOG_ERROR,applicationName,local); + break; + case QtFatalMsg: + default: + __android_log_write(ANDROID_LOG_FATAL,applicationName,local); + abort(); + } +} +#endif diff --git a/android/sound.cpp b/android/sound.cpp index 0b2ae651..ae28508a 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * Volker Fischer + * Simon Tomlinson * ****************************************************************************** * @@ -23,256 +23,157 @@ \******************************************************************************/ #include "sound.h" - +#include "androiddebug.cpp" /* Implementation *************************************************************/ + CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, const bool , const QString& ) : CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ) + { + pSound = this; +#ifdef ANDROIDDEBUG + qInstallMessageHandler(myMessageHandler); +#endif +} + +void CSound::setupCommonStreamParams(oboe::AudioStreamBuilder *builder) +{ + // We request EXCLUSIVE mode since this will give us the lowest possible + // latency. If EXCLUSIVE mode isn't available the builder will fall back to SHARED mode + builder->setCallback(this) + ->setFormat(oboe::AudioFormat::Float) + ->setSharingMode(oboe::SharingMode::Shared) + ->setChannelCount(oboe::ChannelCount::Mono) + // ->setSampleRate(48000) + // ->setSampleRateConversionQuality(oboe::SampleRateConversionQuality::Medium) + ->setPerformanceMode(oboe::PerformanceMode::None); + return; +} + +void CSound::openStreams() +{ + // Create callback + mCallback = this; + + //Setup output stream + oboe::AudioStreamBuilder inBuilder, outBuilder; + outBuilder.setDirection(oboe::Direction::Output); + setupCommonStreamParams(&outBuilder); + oboe::Result result = outBuilder.openManagedStream(mPlayStream); + if (result != oboe::Result::OK) { + return; + } + mPlayStream->setBufferSizeInFrames(pSound->iOpenSLBufferSizeStereo); + + warnIfNotLowLatency(mPlayStream, "PlayStream"); + printStreamDetails(mPlayStream); + + //Setup input stream + inBuilder.setDirection(oboe::Direction::Input); + setupCommonStreamParams(&inBuilder); + result = inBuilder.openManagedStream(mRecordingStream); + if (result != oboe::Result::OK) { + closeStream(mPlayStream); + return; + } + mRecordingStream->setBufferSizeInFrames(pSound->iOpenSLBufferSizeStereo); + + warnIfNotLowLatency(mRecordingStream, "RecordStream"); + printStreamDetails(mRecordingStream); +} + +void CSound::printStreamDetails(oboe::ManagedStream &stream) +{ + + QString sDirection = (stream->getDirection()==oboe::Direction::Input?"Input":"Output"); + QString sFramesPerBurst = QString::number(stream->getFramesPerBurst()); + QString sBufferSizeInFrames = QString::number(stream->getBufferSizeInFrames()); + QString sBytesPerFrame = QString::number(stream->getBytesPerFrame()); + QString sBytesPerSample = QString::number(stream->getBytesPerSample()); + QString sBufferCapacityInFrames = QString::number(stream->getBufferCapacityInFrames()); + QString sPerformanceMode = (stream->getPerformanceMode()==oboe::PerformanceMode::LowLatency?"LowLatency":"NotLowLatency"); + QString sSharingMode = (stream->getSharingMode() == oboe::SharingMode::Exclusive?"Exclusive":"Shared"); + QString sDeviceID = QString::number(stream->getDeviceId()); + QString sSampleRate = QString::number(stream->getSampleRate()); + QString sAudioFormat = (stream->getFormat()==oboe::AudioFormat::I16?"I16":"Float"); + + QString sFramesPerCallback = QString::number(stream->getFramesPerCallback()); + //QString sSampleRateConversionQuality = (stream.getSampleRateConversionQuality()==oboe::SampleRateConversionQuality:: + + qInfo() << "Stream details: [sDirection: " << sDirection << + ", FramesPerBurst: " << sFramesPerBurst << + ", BufferSizeInFrames: " << sBufferSizeInFrames << + ", BytesPerFrame: " << sBytesPerFrame << + ", BytesPerSample: " << sBytesPerSample << + ", BufferCapacityInFrames: " << sBufferCapacityInFrames << + ", PerformanceMode: " << sPerformanceMode << + ", SharingMode: " << sSharingMode << + ", DeviceID: " << sDeviceID << + ", SampleRate: " << sSampleRate << + ", AudioFormat: " << sAudioFormat << + ", FramesPerCallback: " << sFramesPerCallback << "]"; } -void CSound::InitializeOpenSL() -{ - // set up stream formats for input and output - SLDataFormat_PCM inStreamFormat; - inStreamFormat.formatType = SL_DATAFORMAT_PCM; - inStreamFormat.numChannels = 1; - inStreamFormat.samplesPerSec = SL_SAMPLINGRATE_16; - inStreamFormat.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; - inStreamFormat.containerSize = 16; - inStreamFormat.channelMask = SL_SPEAKER_FRONT_CENTER; - inStreamFormat.endianness = SL_BYTEORDER_LITTLEENDIAN; - - SLDataFormat_PCM outStreamFormat; - outStreamFormat.formatType = SL_DATAFORMAT_PCM; - outStreamFormat.numChannels = 2; - outStreamFormat.samplesPerSec = SYSTEM_SAMPLE_RATE_HZ * 1000; // unit is mHz - outStreamFormat.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; - outStreamFormat.containerSize = 16; - outStreamFormat.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; - outStreamFormat.endianness = SL_BYTEORDER_LITTLEENDIAN; - - // create the OpenSL root engine object - slCreateEngine ( &engineObject, - 0, - nullptr, - 0, - nullptr, - nullptr ); - - // realize the engine - (*engineObject)->Realize ( engineObject, - SL_BOOLEAN_FALSE ); - - // get the engine interface (required to create other objects) - (*engineObject)->GetInterface ( engineObject, - SL_IID_ENGINE, - &engine ); - - // create the main output mix - (*engine)->CreateOutputMix ( engine, - &outputMixObject, - 0, - nullptr, - nullptr ); - - // realize the output mix - (*outputMixObject)->Realize ( outputMixObject, - SL_BOOLEAN_FALSE ); - - // configure the audio (data) source for input - SLDataLocator_IODevice micLocator; - micLocator.locatorType = SL_DATALOCATOR_IODEVICE; - micLocator.deviceType = SL_IODEVICE_AUDIOINPUT; - micLocator.deviceID = SL_DEFAULTDEVICEID_AUDIOINPUT; - micLocator.device = nullptr; - - SLDataSource inDataSource; - inDataSource.pLocator = &micLocator; - inDataSource.pFormat = nullptr; - - // configure the input buffer queue - SLDataLocator_AndroidSimpleBufferQueue inBufferQueue; - inBufferQueue.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; - inBufferQueue.numBuffers = 2; // max number of buffers in queue - - // configure the audio (data) sink for input - SLDataSink inDataSink; - inDataSink.pLocator = &inBufferQueue; - inDataSink.pFormat = &inStreamFormat; - - // create the audio recorder - const SLInterfaceID recorderIds[] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; - const SLboolean recorderReq[] = { SL_BOOLEAN_TRUE }; - - (*engine)->CreateAudioRecorder ( engine, - &recorderObject, - &inDataSource, - &inDataSink, - 1, - recorderIds, - recorderReq ); - - // realize the audio recorder - (*recorderObject)->Realize ( recorderObject, - SL_BOOLEAN_FALSE ); - - // get the audio recorder interface - (*recorderObject)->GetInterface ( recorderObject, - SL_IID_RECORD, - &recorder ); - - // get the audio recorder simple buffer queue interface - (*recorderObject)->GetInterface ( recorderObject, - SL_IID_ANDROIDSIMPLEBUFFERQUEUE, - &recorderSimpleBufQueue ); - - // register the audio input callback - (*recorderSimpleBufQueue)->RegisterCallback ( recorderSimpleBufQueue, - processInput, - this ); - - // configure the output buffer queue - SLDataLocator_AndroidSimpleBufferQueue outBufferQueue; - outBufferQueue.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; - outBufferQueue.numBuffers = 2; // max number of buffers in queue - - // configure the audio (data) source for output - SLDataSource outDataSource; - outDataSource.pLocator = &outBufferQueue; - outDataSource.pFormat = &outStreamFormat; - - // configure the output mix - SLDataLocator_OutputMix outputMix; - outputMix.locatorType = SL_DATALOCATOR_OUTPUTMIX; - outputMix.outputMix = outputMixObject; - - // configure the audio (data) sink for output - SLDataSink outDataSink; - outDataSink.pLocator = &outputMix; - outDataSink.pFormat = nullptr; - - // create the audio player - const SLInterfaceID playerIds[] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; - const SLboolean playerReq[] = { SL_BOOLEAN_TRUE }; - - (*engine)->CreateAudioPlayer ( engine, - &playerObject, - &outDataSource, - &outDataSink, - 1, - playerIds, - playerReq ); - - // realize the audio player - (*playerObject)->Realize ( playerObject, - SL_BOOLEAN_FALSE ); - - // get the audio player interface - (*playerObject)->GetInterface ( playerObject, - SL_IID_PLAY, - &player ); - - // get the audio player simple buffer queue interface - (*playerObject)->GetInterface ( playerObject, - SL_IID_ANDROIDSIMPLEBUFFERQUEUE, - &playerSimpleBufQueue ); - - // register the audio output callback - (*playerSimpleBufQueue)->RegisterCallback ( playerSimpleBufQueue, - processOutput, - this ); +void CSound::warnIfNotLowLatency(oboe::ManagedStream &stream, QString streamName) { + if (stream->getPerformanceMode() != oboe::PerformanceMode::LowLatency) { + QString latencyMode = (stream->getPerformanceMode()==oboe::PerformanceMode::None ? "None" : "Power Saving"); + // throw CGenErr ( tr ( "Stream is NOT low latency." + // "Check your requested format, sample rate and channel count." ) ); + } } -void CSound::CloseOpenSL() +void CSound::closeStream(oboe::ManagedStream &stream) +{ + if (stream) { + oboe::Result requestStopRes = stream->requestStop(); + oboe::Result result = stream->close(); + if (result != oboe::Result::OK) { + throw CGenErr ( tr ( "Error closing stream: $s", + oboe::convertToText(result) ) ); + } + stream.reset(); + } +} + +void CSound::closeStreams() { // clean up - (*recorderObject)->Destroy ( recorderObject ); - (*playerObject)->Destroy ( playerObject ); - (*outputMixObject)->Destroy ( outputMixObject ); - (*engineObject)->Destroy ( engineObject ); + closeStream(mRecordingStream); + closeStream(mPlayStream); } void CSound::Start() { - InitializeOpenSL(); - -// TEST We have to supply the interface with initial buffers, otherwise -// the rendering will not start. -// Note that the number of buffers enqueued here must match the maximum -// numbers of buffers configured in the constructor of this class. -vecsTmpAudioSndCrdStereo.Reset ( 0 ); - - // enqueue initial buffers for record - (*recorderSimpleBufQueue)->Enqueue ( recorderSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - (*recorderSimpleBufQueue)->Enqueue ( recorderSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - // enqueue initial buffers for playback - (*playerSimpleBufQueue)->Enqueue ( playerSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - (*playerSimpleBufQueue)->Enqueue ( playerSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - // start the rendering - (*recorder)->SetRecordState ( recorder, SL_RECORDSTATE_RECORDING ); - (*player)->SetPlayState ( player, SL_PLAYSTATE_PLAYING ); + openStreams(); // call base class CSoundBase::Start(); + + // finally start the streams so the callback begins, start with inputstream first. + mRecordingStream->requestStart(); + mPlayStream->requestStart(); + } void CSound::Stop() { - // stop the audio stream - (*recorder)->SetRecordState ( recorder, SL_RECORDSTATE_STOPPED ); - (*player)->SetPlayState ( player, SL_PLAYSTATE_STOPPED ); - - // clear the buffers - (*recorderSimpleBufQueue)->Clear ( recorderSimpleBufQueue ); - (*playerSimpleBufQueue)->Clear ( playerSimpleBufQueue ); + closeStreams(); // call base class CSoundBase::Stop(); - - CloseOpenSL(); } int CSound::Init ( const int iNewPrefMonoBufferSize ) { - - -// TODO make use of the following: -// String sampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); -// String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER)); -/* -// get the Audio IO DEVICE CAPABILITIES interface -SLAudioIODeviceCapabilitiesItf audioCapabilities; - -(*engineObject)->GetInterface ( engineObject, - SL_IID_AUDIOIODEVICECAPABILITIES, - &audioCapabilities ); - -(*audioCapabilities)->QueryAudioInputCapabilities ( audioCapabilities, - inputDeviceIDs[i], - &audioInputDescriptor ); -*/ - - // store buffer size - iOpenSLBufferSizeMono = iNewPrefMonoBufferSize; + iOpenSLBufferSizeMono = 512 ; + //iNewPrefMonoBufferSize; // init base class CSoundBase::Init ( iOpenSLBufferSizeMono ); @@ -283,7 +184,6 @@ SLAudioIODeviceCapabilitiesItf audioCapabilities; // create memory for intermediate audio buffer vecsTmpAudioSndCrdStereo.Init ( iOpenSLBufferSizeStereo ); - // TEST #if ( SYSTEM_SAMPLE_RATE_HZ != 48000 ) # error "Only a system sample rate of 48 kHz is supported by this module" @@ -296,57 +196,105 @@ SLAudioIODeviceCapabilitiesItf audioCapabilities; iModifiedInBufSize = iOpenSLBufferSizeMono / 3; vecsTmpAudioInSndCrd.Init ( iModifiedInBufSize ); - return iOpenSLBufferSizeMono; } -void CSound::processInput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ) +// This is the main callback method for when an audio stream is ready to publish data to an output stream +// or has received data on an input stream. As per manual much be very careful not to do anything in this back that +// can cause delays such as sleeping, file processing, allocate memory, etc +oboe::DataCallbackResult CSound::onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) { - CSound* pSound = static_cast ( instance ); + // only process if we are running + if ( ! pSound->bRun ) + { + return oboe::DataCallbackResult::Continue; + } - // only process if we are running - if ( !pSound->bRun ) + // Need to modify the size of the buffer based on the numFrames requested in this callback. + // Buffer size can change regularly by android devices + int& iBufferSizeMono = pSound->iOpenSLBufferSizeMono; + + // perform the processing for input and output +// QMutexLocker locker ( &pSound->Mutex ); + // locker.mutex(); + + //This can be called from both input and output at different times + if (oboeStream == pSound->mPlayStream.get() && audioData) { - return; + float *floatData = static_cast(audioData); + + // Zero out the incoming container array + memset(audioData, 0, sizeof(float) * numFrames * oboeStream->getChannelCount()); + + // Only copy data if we have data to copy, otherwise fill with silence + if (!pSound->vecsTmpAudioSndCrdStereo.empty()) + { + for (int frmNum = 0; frmNum < numFrames; ++frmNum) + { + for (int channelNum = 0; channelNum < oboeStream->getChannelCount(); channelNum++) + { + // copy sample received from server into output buffer + + + // convert to 32 bit + const int32_t iCurSam = static_cast ( + pSound->vecsTmpAudioSndCrdStereo [frmNum * oboeStream->getChannelCount() + channelNum] ); + floatData[frmNum * oboeStream->getChannelCount() + channelNum] = (float) iCurSam/ _MAXSHORT; + } + } + } + else + { + // prime output stream buffer with silence + memset(static_cast(audioData) + numFrames * oboeStream->getChannelCount(), 0, + (numFrames) * oboeStream->getBytesPerFrame()); + } } - - QMutexLocker locker ( &pSound->Mutex ); - - // enqueue the buffer for record - (*bufferQueue)->Enqueue ( bufferQueue, - &pSound->vecsTmpAudioInSndCrd[0], - pSound->iModifiedInBufSize * 2 /* 2 bytes */ ); - -// upsampling (without filtering) and channel management -pSound->vecsTmpAudioSndCrdStereo.Reset ( 0 ); -for ( int i = 0; i < pSound->iModifiedInBufSize; i++ ) -{ - pSound->vecsTmpAudioSndCrdStereo[6 * i] = - pSound->vecsTmpAudioSndCrdStereo[6 * i + 1] = - pSound->vecsTmpAudioInSndCrd[i]; -} - -} - -void CSound::processOutput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ) -{ - CSound* pSound = static_cast ( instance ); - - // only process if we are running - if ( !pSound->bRun ) + else if (oboeStream == pSound->mRecordingStream.get() && audioData) { - return; + // First things first, we need to discard the input queue a little for 500ms or so + if (pSound->mCountCallbacksToDrain > 0) + { + // discard the input buffer + int32_t numBytes = numFrames * oboeStream->getBytesPerFrame(); + memset(audioData, 0 /* value */, numBytes); + pSound->mCountCallbacksToDrain--; + } + + // We're good to start recording now + // Take the data from the recording device ouput buffer and move + // it to the vector ready to send up to the server + + float *floatData = static_cast(audioData); + + // Copy recording data to internal vector + for (int frmNum = 0; frmNum < numFrames; ++frmNum) + { + for (int channelNum = 0; channelNum < oboeStream->getChannelCount(); channelNum++) + { + pSound->vecsTmpAudioSndCrdStereo [frmNum * oboeStream->getChannelCount() + channelNum] = + (short) floatData[frmNum * oboeStream->getChannelCount() + channelNum] * _MAXSHORT; + } + } + + // Tell parent class that we've put some data ready to send to the server + pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); } - - QMutexLocker locker ( &pSound->Mutex ); - - // call processing callback function - pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); - - // enqueue the buffer for playback - (*bufferQueue)->Enqueue ( bufferQueue, - &pSound->vecsTmpAudioSndCrdStereo[0], - pSound->iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); + // locker.unlock(); + return oboe::DataCallbackResult::Continue; } + +//TODO better handling of stream closing errors +void CSound::onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result result) +{ + qDebug() << "CSound::onErrorAfterClose"; +} + +//TODO better handling of stream closing errors +void CSound::onErrorBeforeClose(oboe::AudioStream *oboeStream, oboe::Result result) +{ + qDebug() << "CSound::onErrorBeforeClose"; +} + + + diff --git a/android/sound.h b/android/sound.h index 6ab4c34b..535694b7 100644 --- a/android/sound.h +++ b/android/sound.h @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * Volker Fischer + * Simon Tomlinson * ****************************************************************************** * @@ -24,15 +24,18 @@ #pragma once -#include -#include +/* Deprecated, moving to OBOE + * #include + * #include */ +#include #include #include "soundbase.h" #include "global.h" - +#include +#include /* Classes ********************************************************************/ -class CSound : public CSoundBase +class CSound : public CSoundBase, public oboe::AudioStreamCallback//, public IRenderableAudio, public IRestartable { public: CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), @@ -46,10 +49,30 @@ public: virtual void Start(); virtual void Stop(); + // Call backs for Oboe + virtual oboe::DataCallbackResult onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames); + virtual void onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result result); + virtual void onErrorBeforeClose(oboe::AudioStream *oboeStream, oboe::Result result); + // these variables should be protected but cannot since we want // to access them from the callback function CVector vecsTmpAudioSndCrdStereo; + static void android_message_handler(QtMsgType type, + const QMessageLogContext &context, + const QString &message) + { + android_LogPriority priority = ANDROID_LOG_DEBUG; + switch (type) { + case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break; + case QtWarningMsg: priority = ANDROID_LOG_WARN; break; + case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break; + case QtFatalMsg: priority = ANDROID_LOG_FATAL; break; + }; + + __android_log_print(priority, "Qt", "%s", qPrintable(message)); + }; + // TEST CVector vecsTmpAudioInSndCrd; int iModifiedInBufSize; @@ -57,27 +80,25 @@ int iModifiedInBufSize; int iOpenSLBufferSizeMono; int iOpenSLBufferSizeStereo; -protected: +private: + void setupCommonStreamParams(oboe::AudioStreamBuilder *builder); + void printStreamDetails(oboe::ManagedStream &stream); + void openStreams(); + void closeStreams(); + void warnIfNotLowLatency(oboe::ManagedStream &stream, QString streamName); + void closeStream(oboe::ManagedStream &stream); - void InitializeOpenSL(); - void CloseOpenSL(); + oboe::ManagedStream mRecordingStream; + oboe::ManagedStream mPlayStream; + AudioStreamCallback *mCallback; - // callbacks - static void processInput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ); + // used to reach a state where the input buffer is + // empty and the garbage in the first 500ms or so is discarded + static constexpr int32_t kNumCallbacksToDrain = 10; + int32_t mCountCallbacksToDrain = kNumCallbacksToDrain; - static void processOutput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ); - - SLObjectItf engineObject; - SLEngineItf engine; - SLObjectItf recorderObject; - SLRecordItf recorder; - SLAndroidSimpleBufferQueueItf recorderSimpleBufQueue; - SLObjectItf outputMixObject; - SLObjectItf playerObject; - SLPlayItf player; - SLAndroidSimpleBufferQueueItf playerSimpleBufQueue; + // Used to reference this instance of class from within the static callback + CSound *pSound; QMutex Mutex; diff --git a/distributions/debian/control b/distributions/debian/control index c84207cb..10809972 100644 --- a/distributions/debian/control +++ b/distributions/debian/control @@ -11,6 +11,7 @@ Build-Depends: make, qt5-default, qtdeclarative5-dev, + qttools5-dev-tools, Standards-Version: 3.9.5 Homepage: http://llcon.sourceforge.net/ Vcs-Git: git://github.com/corrados/jamulus.git diff --git a/distributions/debian/rules b/distributions/debian/rules index e7195b91..b98816c9 100755 --- a/distributions/debian/rules +++ b/distributions/debian/rules @@ -5,6 +5,10 @@ override_dh_auto_configure: qmake CONFIG+=noupcasename Jamulus.pro +override_dh_auto_build: + cd src/res/translation && lrelease *.ts + dh_auto_build + override_dh_usrlocal: echo $$(pwd) mkdir -p $$(pwd)/debian/jamulus/usr/bin/ diff --git a/libs/oboe b/libs/oboe new file mode 160000 index 00000000..55d878a4 --- /dev/null +++ b/libs/oboe @@ -0,0 +1 @@ +Subproject commit 55d878a4e85e1994f2b5883366079b991500a25f diff --git a/linux/sound.cpp b/linux/sound.cpp index 00f9a3e0..b55b550e 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -184,16 +184,20 @@ void CSound::Stop() int CSound::Init ( const int /* iNewPrefMonoBufferSize */ ) { - // try setting buffer size // TODO seems not to work! -> no audio after this operation! - // Doesn't this give an infinite loop? The set buffer size function will call our // registerd callback which calls "EmitReinitRequestSignal()". In that function // this CSound::Init() function is called... - //jack_set_buffer_size ( pJackClient, iNewPrefMonoBufferSize ); + // without a Jack server, Jamulus makes no sense to run, throw an error message + if ( bJackWasShutDown ) + { + throw CGenErr ( tr ( "The Jack server was shut down. This software " + "requires a Jack server to run. Try to restart the software to " + "solve the issue." ) ); + } // get actual buffer size iJACKBufferSizeMono = jack_get_buffer_size ( pJackClient ); @@ -321,7 +325,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) return 0; // zero on success, non-zero on error } -int CSound::bufferSizeCallback ( jack_nframes_t, void *arg ) +int CSound::bufferSizeCallback ( jack_nframes_t, void* arg ) { CSound* pSound = static_cast ( arg ); @@ -330,12 +334,11 @@ int CSound::bufferSizeCallback ( jack_nframes_t, void *arg ) return 0; // zero on success, non-zero on error } -void CSound::shutdownCallback ( void* ) +void CSound::shutdownCallback ( void* arg ) { - // without a Jack server, our software makes no sense to run, throw - // error message - throw CGenErr ( tr ( "The Jack server was shut down. This software " - "requires a Jack server to run. Try to restart the software to " - "solve the issue." ) ); + CSound* pSound = static_cast ( arg ); + + pSound->bJackWasShutDown = true; + pSound->EmitReinitRequestSignal ( RS_ONLY_RESTART_AND_INIT ); } #endif // WITH_SOUND diff --git a/linux/sound.h b/linux/sound.h index bb753ee7..23e9bf59 100755 --- a/linux/sound.h +++ b/linux/sound.h @@ -66,7 +66,7 @@ public: const bool bNoAutoJackConnect, const QString& strJackClientName ) : CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ), - iJACKBufferSizeMono ( 0 ) { OpenJack ( bNoAutoJackConnect, strJackClientName.toLocal8Bit().data() ); } + iJACKBufferSizeMono ( 0 ), bJackWasShutDown ( false ) { OpenJack ( bNoAutoJackConnect, strJackClientName.toLocal8Bit().data() ); } virtual ~CSound() { CloseJack(); } @@ -79,6 +79,7 @@ public: CVector vecsTmpAudioSndCrdStereo; int iJACKBufferSizeMono; int iJACKBufferSizeStero; + bool bJackWasShutDown; jack_port_t* input_port_left; jack_port_t* input_port_right; diff --git a/src/aboutdlgbase.ui b/src/aboutdlgbase.ui index 98e1e39b..398f30f8 100755 --- a/src/aboutdlgbase.ui +++ b/src/aboutdlgbase.ui @@ -29,135 +29,135 @@ + + + + + 0 + 0 + + + + + + + :/png/main/res/fronticon.png + + + Qt::AlignCenter + + + + + 0 + - - - 6 + + + TextLabelVersion - - 0 + + false - - 0 + + 2 - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - true - - - false - - - - - - - - 0 - 0 - - - - TextLabelVersion - - - Qt::AlignCenter - - - false - - - - + - - - 6 + + + Copyright (C) 2005-2020 Volker Fischer and others - - 0 + + false - - 0 + + 2 - - 0 - - - 0 - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Copyright (C) 2005-2020 Volker Fischer and others - - - false - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - + + + + + Qt::Horizontal + + + + 40 + 20 + + + + - + + + 0 + + + + A&bout + + + + + + true + + + + + + + + &Libraries + + + + + + true + + + + + + + + &Contributors + + + + + + true + + + + + + + + &Translation + + + + + + true + + + + + + @@ -211,7 +211,6 @@ buttonOk - txvCredits diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 36215d38..5f674e85 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -261,13 +261,11 @@ void CChannelFader::Reset() strReceivedName = ""; SetupFaderTag ( SL_NOT_SET ); - // set a defined tool tip time out (only available in Qt5) -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + // set a defined tool tip time out const int iToolTipDurMs = 30000; plblLabel->setToolTipDuration ( iToolTipDurMs ); plblInstrument->setToolTipDuration ( iToolTipDurMs ); plblCountryFlag->setToolTipDuration ( iToolTipDurMs ); -#endif bOtherChannelIsSolo = false; } @@ -562,118 +560,9 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : // Connections ------------------------------------------------------------- -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) connectFaderSignalsToMixerBoardSlots(); - -#else - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - QObject::connect ( vecpChanFader[0], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh0 ( double ) ) ); - QObject::connect ( vecpChanFader[1], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh1 ( double ) ) ); - QObject::connect ( vecpChanFader[2], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh2 ( double ) ) ); - QObject::connect ( vecpChanFader[3], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh3 ( double ) ) ); - QObject::connect ( vecpChanFader[4], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh4 ( double ) ) ); - QObject::connect ( vecpChanFader[5], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh5 ( double ) ) ); - QObject::connect ( vecpChanFader[6], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh6 ( double ) ) ); - QObject::connect ( vecpChanFader[7], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh7 ( double ) ) ); - QObject::connect ( vecpChanFader[8], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh8 ( double ) ) ); - QObject::connect ( vecpChanFader[9], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh9 ( double ) ) ); - QObject::connect ( vecpChanFader[10], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh10 ( double ) ) ); - QObject::connect ( vecpChanFader[11], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh11 ( double ) ) ); - QObject::connect ( vecpChanFader[12], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh12 ( double ) ) ); - QObject::connect ( vecpChanFader[13], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh13 ( double ) ) ); - QObject::connect ( vecpChanFader[14], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh14 ( double ) ) ); - QObject::connect ( vecpChanFader[15], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh15 ( double ) ) ); - QObject::connect ( vecpChanFader[16], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh16 ( double ) ) ); - QObject::connect ( vecpChanFader[17], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh17 ( double ) ) ); - QObject::connect ( vecpChanFader[18], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh18 ( double ) ) ); - QObject::connect ( vecpChanFader[19], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh19 ( double ) ) ); - QObject::connect ( vecpChanFader[20], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh20 ( double ) ) ); - QObject::connect ( vecpChanFader[21], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh21 ( double ) ) ); - QObject::connect ( vecpChanFader[22], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh22 ( double ) ) ); - QObject::connect ( vecpChanFader[23], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh23 ( double ) ) ); - QObject::connect ( vecpChanFader[24], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh24 ( double ) ) ); - QObject::connect ( vecpChanFader[25], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh25 ( double ) ) ); - QObject::connect ( vecpChanFader[26], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh26 ( double ) ) ); - QObject::connect ( vecpChanFader[27], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh27 ( double ) ) ); - QObject::connect ( vecpChanFader[28], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh28 ( double ) ) ); - QObject::connect ( vecpChanFader[29], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh29 ( double ) ) ); - QObject::connect ( vecpChanFader[30], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh30 ( double ) ) ); - QObject::connect ( vecpChanFader[31], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh31 ( double ) ) ); - QObject::connect ( vecpChanFader[32], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh32 ( double ) ) ); - QObject::connect ( vecpChanFader[33], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh33 ( double ) ) ); - QObject::connect ( vecpChanFader[34], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh34 ( double ) ) ); - QObject::connect ( vecpChanFader[35], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh35 ( double ) ) ); - QObject::connect ( vecpChanFader[36], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh36 ( double ) ) ); - QObject::connect ( vecpChanFader[37], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh37 ( double ) ) ); - QObject::connect ( vecpChanFader[38], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh38 ( double ) ) ); - QObject::connect ( vecpChanFader[39], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh39 ( double ) ) ); - QObject::connect ( vecpChanFader[40], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh40 ( double ) ) ); - QObject::connect ( vecpChanFader[41], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh41 ( double ) ) ); - QObject::connect ( vecpChanFader[42], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh42 ( double ) ) ); - QObject::connect ( vecpChanFader[43], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh43 ( double ) ) ); - QObject::connect ( vecpChanFader[44], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh44 ( double ) ) ); - QObject::connect ( vecpChanFader[45], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh45 ( double ) ) ); - QObject::connect ( vecpChanFader[46], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh46 ( double ) ) ); - QObject::connect ( vecpChanFader[47], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh47 ( double ) ) ); - QObject::connect ( vecpChanFader[48], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh48 ( double ) ) ); - QObject::connect ( vecpChanFader[49], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh49 ( double ) ) ); - - QObject::connect ( vecpChanFader[0], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[1], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[2], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[3], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[4], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[5], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[6], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[7], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[8], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[9], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[10], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[11], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[12], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[13], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[14], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[15], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[16], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[17], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[18], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[19], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[20], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[21], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[22], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[23], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[24], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[25], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[26], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[27], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[28], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[29], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[30], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[31], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[32], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[33], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[34], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[35], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[36], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[37], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[38], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[39], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[40], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[41], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[42], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[43], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[44], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[45], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[46], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[47], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[48], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[49], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - -#endif } -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) template inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots() { @@ -694,8 +583,6 @@ inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots() template<> inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots<0>() {}; -#endif - void CAudioMixerBoard::SetServerName ( const QString& strNewServerName ) { // store the current server name diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index d8ecb871..a0150da2 100755 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -101,12 +101,9 @@ signals: void soloStateChanged ( int value ); }; - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) template class CAudioMixerBoardSlots : public CAudioMixerBoardSlots { - public: void OnChGainValueChanged ( double dValue ) { UpdateGainValue ( slotId - 1, dValue ); } @@ -118,11 +115,6 @@ protected: template<> class CAudioMixerBoardSlots<0> {}; -#else -template -class CAudioMixerBoardSlots {}; - -#endif class CAudioMixerBoard : public QScrollArea, @@ -167,78 +159,12 @@ protected: bool bNoFaderVisible; QString strServerName; -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) virtual void UpdateGainValue ( const int iChannelIdx, const double dValue ); template inline void connectFaderSignalsToMixerBoardSlots(); -#else - void UpdateGainValue ( const int iChannelIdx, - const double dValue ); - -#endif - -#if QT_VERSION < 0x50000 // MOC does not expand macros in Qt 4, so we cannot use QT_VERSION_CHECK(5, 0, 0) -public slots: - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - void OnGainValueChangedCh0 ( double dValue ) { UpdateGainValue ( 0, dValue ); } - void OnGainValueChangedCh1 ( double dValue ) { UpdateGainValue ( 1, dValue ); } - void OnGainValueChangedCh2 ( double dValue ) { UpdateGainValue ( 2, dValue ); } - void OnGainValueChangedCh3 ( double dValue ) { UpdateGainValue ( 3, dValue ); } - void OnGainValueChangedCh4 ( double dValue ) { UpdateGainValue ( 4, dValue ); } - void OnGainValueChangedCh5 ( double dValue ) { UpdateGainValue ( 5, dValue ); } - void OnGainValueChangedCh6 ( double dValue ) { UpdateGainValue ( 6, dValue ); } - void OnGainValueChangedCh7 ( double dValue ) { UpdateGainValue ( 7, dValue ); } - void OnGainValueChangedCh8 ( double dValue ) { UpdateGainValue ( 8, dValue ); } - void OnGainValueChangedCh9 ( double dValue ) { UpdateGainValue ( 9, dValue ); } - void OnGainValueChangedCh10 ( double dValue ) { UpdateGainValue ( 10, dValue ); } - void OnGainValueChangedCh11 ( double dValue ) { UpdateGainValue ( 11, dValue ); } - void OnGainValueChangedCh12 ( double dValue ) { UpdateGainValue ( 12, dValue ); } - void OnGainValueChangedCh13 ( double dValue ) { UpdateGainValue ( 13, dValue ); } - void OnGainValueChangedCh14 ( double dValue ) { UpdateGainValue ( 14, dValue ); } - void OnGainValueChangedCh15 ( double dValue ) { UpdateGainValue ( 15, dValue ); } - void OnGainValueChangedCh16 ( double dValue ) { UpdateGainValue ( 16, dValue ); } - void OnGainValueChangedCh17 ( double dValue ) { UpdateGainValue ( 17, dValue ); } - void OnGainValueChangedCh18 ( double dValue ) { UpdateGainValue ( 18, dValue ); } - void OnGainValueChangedCh19 ( double dValue ) { UpdateGainValue ( 19, dValue ); } - void OnGainValueChangedCh20 ( double dValue ) { UpdateGainValue ( 20, dValue ); } - void OnGainValueChangedCh21 ( double dValue ) { UpdateGainValue ( 21, dValue ); } - void OnGainValueChangedCh22 ( double dValue ) { UpdateGainValue ( 22, dValue ); } - void OnGainValueChangedCh23 ( double dValue ) { UpdateGainValue ( 23, dValue ); } - void OnGainValueChangedCh24 ( double dValue ) { UpdateGainValue ( 24, dValue ); } - void OnGainValueChangedCh25 ( double dValue ) { UpdateGainValue ( 25, dValue ); } - void OnGainValueChangedCh26 ( double dValue ) { UpdateGainValue ( 26, dValue ); } - void OnGainValueChangedCh27 ( double dValue ) { UpdateGainValue ( 27, dValue ); } - void OnGainValueChangedCh28 ( double dValue ) { UpdateGainValue ( 28, dValue ); } - void OnGainValueChangedCh29 ( double dValue ) { UpdateGainValue ( 29, dValue ); } - void OnGainValueChangedCh30 ( double dValue ) { UpdateGainValue ( 30, dValue ); } - void OnGainValueChangedCh31 ( double dValue ) { UpdateGainValue ( 31, dValue ); } - void OnGainValueChangedCh32 ( double dValue ) { UpdateGainValue ( 32, dValue ); } - void OnGainValueChangedCh33 ( double dValue ) { UpdateGainValue ( 33, dValue ); } - void OnGainValueChangedCh34 ( double dValue ) { UpdateGainValue ( 34, dValue ); } - void OnGainValueChangedCh35 ( double dValue ) { UpdateGainValue ( 35, dValue ); } - void OnGainValueChangedCh36 ( double dValue ) { UpdateGainValue ( 36, dValue ); } - void OnGainValueChangedCh37 ( double dValue ) { UpdateGainValue ( 37, dValue ); } - void OnGainValueChangedCh38 ( double dValue ) { UpdateGainValue ( 38, dValue ); } - void OnGainValueChangedCh39 ( double dValue ) { UpdateGainValue ( 39, dValue ); } - void OnGainValueChangedCh40 ( double dValue ) { UpdateGainValue ( 40, dValue ); } - void OnGainValueChangedCh41 ( double dValue ) { UpdateGainValue ( 41, dValue ); } - void OnGainValueChangedCh42 ( double dValue ) { UpdateGainValue ( 42, dValue ); } - void OnGainValueChangedCh43 ( double dValue ) { UpdateGainValue ( 43, dValue ); } - void OnGainValueChangedCh44 ( double dValue ) { UpdateGainValue ( 44, dValue ); } - void OnGainValueChangedCh45 ( double dValue ) { UpdateGainValue ( 45, dValue ); } - void OnGainValueChangedCh46 ( double dValue ) { UpdateGainValue ( 46, dValue ); } - void OnGainValueChangedCh47 ( double dValue ) { UpdateGainValue ( 47, dValue ); } - void OnGainValueChangedCh48 ( double dValue ) { UpdateGainValue ( 48, dValue ); } - void OnGainValueChangedCh49 ( double dValue ) { UpdateGainValue ( 49, dValue ); } - - void OnChSoloStateChanged() { UpdateSoloStates(); } - -#endif - signals: void ChangeChanGain ( int iId, double dGain ); void NumClientsChanged ( int iNewNumClients ); diff --git a/src/chatdlg.cpp b/src/chatdlg.cpp index f2fd1769..0a1554f3 100755 --- a/src/chatdlg.cpp +++ b/src/chatdlg.cpp @@ -94,11 +94,5 @@ void CChatDlg::AddChatText ( QString strChatText ) txvChatWindow->append ( strChatText ); // notify accessibility plugin that text has changed - QAccessible::updateAccessibility ( -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - txvChatWindow, 0, QAccessible::ValueChanged -#else - new QAccessibleValueChangeEvent ( txvChatWindow, strChatText ) -#endif - ); + QAccessible::updateAccessibility ( new QAccessibleValueChangeEvent ( txvChatWindow, strChatText ) ); } diff --git a/src/client.cpp b/src/client.cpp index 6c567bbe..1259e3ee 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -1206,6 +1206,8 @@ fflush(pFileDelay); // update socket buffer size Channel.UpdateSocketBufferSize(); + + Q_UNUSED ( iUnused ) } int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) diff --git a/src/client.h b/src/client.h index 76df0702..1b16000c 100755 --- a/src/client.h +++ b/src/client.h @@ -398,7 +398,7 @@ public slots: void OnJittBufSizeChanged ( int iNewJitBufSize ); void OnReqChanInfo() { Channel.SetRemoteInfo ( ChannelInfo ); } void OnNewConnection(); - void OnCLDisconnection ( CHostAddress InetAddr ) { if ( InetAddr == Channel.GetAddress() ) { Stop(); } } + void OnCLDisconnection ( CHostAddress InetAddr ) { if ( InetAddr == Channel.GetAddress() ) { emit Disconnected(); } } void OnCLPingReceived ( CHostAddress InetAddr, int iMs ); diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index eefc122a..1f1fe8a2 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -117,7 +117,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // reverberation level QString strAudReverb = "" + tr ( "Reverberation Level" ) + ": " + 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 " + "channels in stereo mode. The mono 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 " @@ -732,16 +732,6 @@ void CClientDlg::OnConnectDisconBut() } } -void CClientDlg::OnDisconnected() -{ - // channel is now disconnected, clear mixer board (remove all faders) and - // reset the delay LED (since this is only updated on an active connection) - MainMixerBoard->HideAll(); - ledDelay->Reset(); - - UpdateDisplay(); -} - void CClientDlg::OnCentralServerAddressTypeChanged() { // if the server list is shown and the server type was changed, update the list diff --git a/src/clientdlg.h b/src/clientdlg.h index b87a925f..d4a7b2b9 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -194,7 +194,7 @@ public slots: { MainMixerBoard->SetChannelLevels ( vecLevelList ); } void OnConnectDlgAccepted(); - void OnDisconnected(); + void OnDisconnected() { Disconnect(); } void OnCentralServerAddressTypeChanged(); void OnGUIDesignChanged() diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index b0153101..0e18604c 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -155,7 +155,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, "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." ) + "
" + tr ( + "performance." ) + "
" + 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 " @@ -364,7 +364,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, rbtBufferDelayDefault->setText ( GenSndCrdBufferDelayString ( FRAME_SIZE_FACTOR_DEFAULT * SYSTEM_FRAME_SIZE_SAMPLES, - ", preferred" ) ); + ", " + tr ( "preferred" ) ) ); rbtBufferDelaySafe->setText ( GenSndCrdBufferDelayString ( FRAME_SIZE_FACTOR_SAFE * SYSTEM_FRAME_SIZE_SAMPLES ) ); diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index 9a54755f..4d96aee5 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -61,9 +61,9 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList, QString strServAddrH = "" + tr ( "Server Address" ) + ": " + 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, " + "address or URL using a colon as a separator, e.g, " "example.org:" ) + - QString().setNum ( LLCON_DEFAULT_PORT_NUMBER ) + tr ( ". A list of " + QString().setNum ( DEFAULT_PORT_NUMBER ) + tr ( ". A list of " "the most recent used server IP addresses or URLs is available for " "selection." ); @@ -76,7 +76,7 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList, // filter edtFilter->setWhatsThis ( "" + tr ( "Filter" ) + ": " + tr ( "The server " - "list is filered by the given text. Note that the filter is case insensitive." ) ); + "list is filtered by the given text. Note that the filter is case insensitive." ) ); edtFilter->setAccessibleName ( tr ( "Filter edit box" ) ); // show all mucisians @@ -304,7 +304,7 @@ void CConnectDlg::SetServerList ( const CHostAddress& InetAddr, // IP address and port (use IP number without last byte) // Definition: If the port number is the default port number, we do // not show it. - if ( vecServerInfo[iIdx].HostAddr.iPort == LLCON_DEFAULT_PORT_NUMBER ) + if ( vecServerInfo[iIdx].HostAddr.iPort == DEFAULT_PORT_NUMBER ) { // only show IP number, no port number pNewListViewItem->setText ( 0, CurHostAddress.toString ( CHostAddress::SM_IP_NO_LAST_BYTE ) ); diff --git a/src/global.h b/src/global.h index 24195fa9..3df12e59 100755 --- a/src/global.h +++ b/src/global.h @@ -117,8 +117,8 @@ LED bar: lbr #define IP_LOOKUP_TIMEOUT 500 // ms // defined port numbers for client and server -#define LLCON_DEFAULT_PORT_NUMBER 22124 -#define LLCON_PORT_NUMBER_NORTHAMERICA 22224 +#define DEFAULT_PORT_NUMBER 22124 +#define DEFAULT_PORT_NUMBER_NORTHAMERICA 22224 // system sample rate (the sound card and audio coder works on this sample rate) #define SYSTEM_SAMPLE_RATE_HZ 48000 // Hz @@ -173,10 +173,6 @@ LED bar: lbr #define UPPER_BOUND_SIG_METER ( 0.0 ) // dB // Maximum number of connected clients at the server. -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -// If you want to change this paramter you have to modify the code on some places, too! The code tag -// "MAX_NUM_CHANNELS_TAG" shows these places (just search for the tag in the entire code) -#endif #define MAX_NUM_CHANNELS 50 // max number channels for server // actual number of used channels in the server @@ -236,11 +232,11 @@ LED bar: lbr #define MAX_LEN_VERSION_TEXT 20 // common tool tip bottom line text -#define TOOLTIP_COM_END_TEXT tr ( \ - "
" \ - "For more information use the ""What's " \ - "This"" help (? menu, right mouse button or Shift+F1)" \ - "
" ) +#define TOOLTIP_COM_END_TEXT \ + "
" + \ + QCoreApplication::translate ( "global","For more information use the ""What's " \ + "This"" help (help menu, right mouse button or Shift+F1)" ) + \ + "
" #define _MAXSHORT 32767 #define _MAXBYTE 255 // binary: 11111111 @@ -258,6 +254,8 @@ typedef unsigned __int64 uint64_t; typedef unsigned __int32 uint32_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; +#elif defined ( ANDROID ) +// don't redfine types for android as these ones below don't work #else typedef long long int64_t; typedef int int32_t; diff --git a/src/main.cpp b/src/main.cpp index e06352ac..6dda5852 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,18 +27,23 @@ #include #include #include +#include #include "global.h" #include "clientdlg.h" #include "serverdlg.h" #include "settings.h" #include "testbench.h" #include "util.h" +#ifdef ANDROID +# include +#endif // Implementation ************************************************************** int main ( int argc, char** argv ) { + QTextStream& tsConsole = *( ( new ConsoleWriterFactory() )->get() ); QString strArgument; double rDbleArgument; @@ -47,35 +52,36 @@ int main ( int argc, char** argv ) // arguments #if defined( SERVER_BUNDLE ) && ( defined( __APPLE__ ) || defined( __MACOSX ) ) // if we are on MacOS and we are building a server bundle, starts Jamulus in server mode - bool bIsClient = false; + bool bIsClient = false; #else - bool bIsClient = true; + bool bIsClient = true; #endif - bool bUseGUI = true; - bool bStartMinimized = false; - bool bShowComplRegConnList = false; - bool bDisconnectAllClients = false; - bool bUseDoubleSystemFrameSize = true; // default is 128 samples frame size - bool bShowAnalyzerConsole = false; - bool bCentServPingServerInList = false; - bool bNoAutoJackConnect = false; - bool bUseTranslation = false; - int iNumServerChannels = DEFAULT_USED_NUM_CHANNELS; - int iMaxDaysHistory = DEFAULT_DAYS_HISTORY; - int iCtrlMIDIChannel = INVALID_MIDI_CH; - quint16 iPortNumber = LLCON_DEFAULT_PORT_NUMBER; - ELicenceType eLicenceType = LT_NO_LICENCE; - QString strConnOnStartupAddress = ""; - QString strIniFileName = ""; - QString strHTMLStatusFileName = ""; - QString strServerName = ""; - QString strLoggingFileName = ""; - QString strHistoryFileName = ""; - QString strRecordingDirName = ""; - QString strCentralServer = ""; - QString strServerInfo = ""; - QString strWelcomeMessage = ""; - QString strClientName = APP_NAME; + bool bUseGUI = true; + bool bStartMinimized = false; + bool bShowComplRegConnList = false; + bool bDisconnectAllClientsOnQuit = false; + bool bUseDoubleSystemFrameSize = true; // default is 128 samples frame size + bool bShowAnalyzerConsole = false; + bool bCentServPingServerInList = false; + bool bNoAutoJackConnect = false; + bool bUseTranslation = true; + bool bCustomPortNumberGiven = false; + int iNumServerChannels = DEFAULT_USED_NUM_CHANNELS; + int iMaxDaysHistory = DEFAULT_DAYS_HISTORY; + int iCtrlMIDIChannel = INVALID_MIDI_CH; + quint16 iPortNumber = DEFAULT_PORT_NUMBER; + ELicenceType eLicenceType = LT_NO_LICENCE; + QString strConnOnStartupAddress = ""; + QString strIniFileName = ""; + QString strHTMLStatusFileName = ""; + QString strServerName = ""; + QString strLoggingFileName = ""; + QString strHistoryFileName = ""; + QString strRecordingDirName = ""; + QString strCentralServer = ""; + QString strServerInfo = ""; + QString strWelcomeMessage = ""; + QString strClientName = APP_NAME; // QT docu: argv()[0] is the program name, argv()[1] is the first // argument and argv()[argc()-1] is the last argument. @@ -195,6 +201,18 @@ int main ( int argc, char** argv ) } + // Disconnect all clients on quit -------------------------------------- + if ( GetFlagArgument ( argv, + i, + "-d", + "--discononquit" ) ) + { + bDisconnectAllClientsOnQuit = true; + tsConsole << "- disconnect all clients on quit" << endl; + continue; + } + + // Disabling auto Jack connections ------------------------------------- if ( GetFlagArgument ( argv, i, @@ -207,17 +225,14 @@ int main ( int argc, char** argv ) } - // Enable translations ------------------------------------------------- - // Undocumented debugging command line argument: Enable translations - // (since translation is still WIP, it is not enabled by default but - // must be enabled with this undocumented command line flag) + // Disable translations ------------------------------------------------ if ( GetFlagArgument ( argv, i, - "--translation", // no short form - "--translation" ) ) + "-t", + "--notranslation" ) ) { - bUseTranslation = true; - tsConsole << "- translations enabled" << endl; + bUseTranslation = false; + tsConsole << "- translations disabled" << endl; continue; } @@ -237,20 +252,6 @@ int main ( int argc, char** argv ) } - // Disconnect all clients (emergency mode) ----------------------------- - // Undocumented debugging command line argument: Needed to disconnect - // an unwanted client. - if ( GetFlagArgument ( argv, - i, - "--disconnectall", // no short form - "--disconnectall" ) ) - { - bDisconnectAllClients = true; - tsConsole << "- disconnect all clients" << endl; - continue; - } - - // Show analyzer console ----------------------------------------------- // Undocumented debugging command line argument: Show the analyzer // console to debug network buffer properties. @@ -308,7 +309,8 @@ int main ( int argc, char** argv ) 65535, rDbleArgument ) ) { - iPortNumber = static_cast ( rDbleArgument ); + iPortNumber = static_cast ( rDbleArgument ); + bCustomPortNumberGiven = true; tsConsole << "- selected port number: " << iPortNumber << endl; continue; } @@ -503,17 +505,41 @@ int main ( int argc, char** argv ) strCentralServer = DEFAULT_SERVER_ADDRESS; } + // adjust default port number for client: use different default port than the server since + // if the client is started before the server, the server would get a socket bind error + if ( bIsClient && !bCustomPortNumberGiven ) + { + iPortNumber += 10; // increment by 10 + } - // Application/GUI setup --------------------------------------------------- - // Application object - if ( !bUseGUI && !strHistoryFileName.isEmpty() ) + // display a warning if in server no GUI mode and a history file is requested + if ( !bIsClient && !bUseGUI && !strHistoryFileName.isEmpty() ) { tsConsole << "Qt5 requires a windowing system to paint a JPEG image; image will use SVG" << endl; } + + + // Application/GUI setup --------------------------------------------------- + // Application object QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); +#ifdef ANDROID + // special Android coded needed for record audio permission handling + auto result = QtAndroid::checkPermission ( QString ( "android.permission.RECORD_AUDIO" ) ); + + if ( result == QtAndroid::PermissionResult::Denied ) + { + QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync ( QStringList ( { "android.permission.RECORD_AUDIO" } ) ); + + if ( resultHash["android.permission.RECORD_AUDIO"] == QtAndroid::PermissionResult::Denied ) + { + return 0; + } + } +#endif + #ifdef _WIN32 // set application priority class -> high priority SetPriorityClass ( GetCurrentProcess(), HIGH_PRIORITY_CLASS ); @@ -529,7 +555,7 @@ int main ( int argc, char** argv ) Q_INIT_RESOURCE(resources); // load translations - QTranslator myappTranslator; + QTranslator myappTranslator, myqtTranslator; if ( bUseGUI && bUseTranslation ) { @@ -537,11 +563,17 @@ int main ( int argc, char** argv ) { pApp->installTranslator ( &myappTranslator ); } + + // allows the Qt messages to be translated in the application + if ( myqtTranslator.load ( QLocale(), "qt", "_", QLibraryInfo::location ( QLibraryInfo::TranslationsPath ) ) ) + { + pApp->installTranslator ( &myqtTranslator ); + } } // TEST -> activate the following line to activate the test bench, -//CTestbench Testbench ( "127.0.0.1", LLCON_DEFAULT_PORT_NUMBER ); +//CTestbench Testbench ( "127.0.0.1", DEFAULT_PORT_NUMBER ); try @@ -599,7 +631,7 @@ int main ( int argc, char** argv ) strWelcomeMessage, strRecordingDirName, bCentServPingServerInList, - bDisconnectAllClients, + bDisconnectAllClientsOnQuit, bUseDoubleSystemFrameSize, eLicenceType ); if ( bUseGUI ) @@ -673,9 +705,11 @@ QString UsageArguments ( char **argv ) " -i, --inifile initialization file name\n" " -n, --nogui disable GUI\n" " -p, --port set your local port number\n" + " -t, --notranslation disable translation (use englisch language)\n" " -v, --version output version information and exit\n" "\nServer only:\n" " -a, --servername server name, required for HTML status\n" + " -d, --discononquit disconnect all clients on quit\n" " -D, --histdays number of days of history to display\n" " -e, --centralserver address of the central server\n" " -F, --fastupdate use 64 samples frame size mode\n" diff --git a/src/protocol.cpp b/src/protocol.cpp index ed54bf2c..090fa992 100755 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -136,6 +136,7 @@ MESSAGES (with connection) - 0: none, no audio coding applied - 1: CELT - 2: OPUS + - 3: OPUS64 - "version": version of the audio coder, if not used this value shall be set to 0 - "audiocod arg": argument for the audio coder, if not used this value diff --git a/src/recorder/jamrecorder.cpp b/src/recorder/jamrecorder.cpp index 1055efdc..2c817919 100755 --- a/src/recorder/jamrecorder.cpp +++ b/src/recorder/jamrecorder.cpp @@ -314,22 +314,31 @@ void CJamRecorder::Init( const CServer* server, throw std::runtime_error( (recordBaseDir.absolutePath() + " is a directory but cannot be written to").toStdString() ); } - QObject::connect((const QObject *)server, SIGNAL ( Stopped() ), - this, SLOT( OnEnd() ), - Qt::ConnectionType::QueuedConnection); + QObject::connect( (const QObject *)server, SIGNAL ( Stopped() ), + this, SLOT( OnEnd() ), + Qt::ConnectionType::QueuedConnection ); - QObject::connect((const QObject *)server, SIGNAL ( ClientDisconnected(int) ), - this, SLOT( OnDisconnected(int) ), - Qt::ConnectionType::QueuedConnection); + QObject::connect( (const QObject *)server, SIGNAL ( ClientDisconnected ( int ) ), + this, SLOT( OnDisconnected ( int ) ), + Qt::ConnectionType::QueuedConnection ); qRegisterMetaType>(); - QObject::connect((const QObject *)server, SIGNAL ( AudioFrame(const int, const QString, const CHostAddress, const int, const CVector) ), - this, SLOT( OnFrame(const int, const QString, const CHostAddress, const int, const CVector) ), - Qt::ConnectionType::QueuedConnection); + QObject::connect( (const QObject *)server, SIGNAL ( AudioFrame( const int, const QString, const CHostAddress, const int, const CVector ) ), + this, SLOT( OnFrame (const int, const QString, const CHostAddress, const int, const CVector ) ), + Qt::ConnectionType::QueuedConnection ); + + QObject::connect( QCoreApplication::instance(), + SIGNAL ( aboutToQuit() ), + this, SLOT( OnAboutToQuit() ) ); iServerFrameSizeSamples = _iServerFrameSizeSamples; + + thisThread = new QThread(); + moveToThread ( thisThread ); + thisThread->start(); } + /** * @brief CJamRecorder::OnStart Start up tasks when the first client connects */ @@ -337,7 +346,7 @@ void CJamRecorder::OnStart() { // Ensure any previous cleaning up has been done. OnEnd(); - currentSession = new CJamSession(recordBaseDir); + currentSession = new CJamSession( recordBaseDir ); isRecording = true; } @@ -346,7 +355,7 @@ void CJamRecorder::OnStart() { */ void CJamRecorder::OnEnd() { - if (isRecording) + if ( isRecording ) { isRecording = false; currentSession->End(); @@ -372,6 +381,13 @@ void CJamRecorder::OnEnd() } } +void CJamRecorder::OnAboutToQuit() +{ + OnEnd(); + + thisThread->exit(); +} + /** * @brief CJamRecorder::SessionDirToReaper Replica of CJamRecorder::OnEnd() but using the directory contents to construct the CReaperProject object * @param strSessionDirName @@ -409,11 +425,11 @@ void CJamRecorder::SessionDirToReaper(QString& strSessionDirName, int serverFram */ void CJamRecorder::OnDisconnected(int iChID) { - if (!isRecording) + if ( !isRecording ) { qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but not recording"; } - if (currentSession == nullptr) + if ( currentSession == nullptr ) { qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but no currentSession"; return; @@ -434,7 +450,7 @@ void CJamRecorder::OnDisconnected(int iChID) void CJamRecorder::OnFrame(const int iChID, const QString name, const CHostAddress address, const int numAudioChannels, const CVector data) { // Make sure we are ready - if (!isRecording) + if ( !isRecording ) { OnStart(); } diff --git a/src/recorder/jamrecorder.h b/src/recorder/jamrecorder.h index cc49705d..eb5a0581 100755 --- a/src/recorder/jamrecorder.h +++ b/src/recorder/jamrecorder.h @@ -132,13 +132,16 @@ private: QList jamClientConnections; }; -class CJamRecorder : public QThread +class CJamRecorder : public QObject { Q_OBJECT public: - CJamRecorder(const QString recordingDirName) : - recordBaseDir (recordingDirName), isRecording (false) {} + CJamRecorder ( const QString recordingDirName ) : + recordBaseDir ( recordingDirName ), + isRecording ( false ) + { + } void Init( const CServer* server, const int _iServerFrameSizeSamples ); @@ -155,16 +158,21 @@ public slots: */ void OnEnd(); + /** + * @brief Raised when application is stopping + */ + void OnAboutToQuit(); + /** * @brief Raised when an existing client leaves the server. * @param iChID channel number of client */ - void OnDisconnected(int iChID); + void OnDisconnected ( int iChID ); /** - * @brief Raised when a frame of data fis available to process + * @brief Raised when a frame of data is available to process */ - void OnFrame(const int iChID, const QString name, const CHostAddress address, const int numAudioChannels, const CVector data); + void OnFrame ( const int iChID, const QString name, const CHostAddress address, const int numAudioChannels, const CVector data ); private: QDir recordBaseDir; @@ -172,6 +180,8 @@ private: bool isRecording; CJamSession* currentSession; int iServerFrameSizeSamples; + + QThread* thisThread; }; } diff --git a/src/res/instruments/bongo.png b/src/res/instruments/bongo.png new file mode 100644 index 00000000..3864cc70 Binary files /dev/null and b/src/res/instruments/bongo.png differ diff --git a/src/res/instruments/bongo.svg b/src/res/instruments/bongo.svg new file mode 100644 index 00000000..3a5f42fc --- /dev/null +++ b/src/res/instruments/bongo.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/res/instruments/congas.png b/src/res/instruments/congas.png new file mode 100644 index 00000000..48f696ef Binary files /dev/null and b/src/res/instruments/congas.png differ diff --git a/src/res/instruments/congas.svg b/src/res/instruments/congas.svg new file mode 100644 index 00000000..db68fdf0 --- /dev/null +++ b/src/res/instruments/congas.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 860ce6ad..c6f385ed 100644 Binary files a/src/res/translation/translation_de_DE.qm and b/src/res/translation/translation_de_DE.qm differ diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index da5e7bf8..5ac3716f 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -4,49 +4,109 @@ CAboutDlg - + The - + Die - - software enables musicians to perform real-time jam sessions over the internet. There is a - + + software enables musicians to perform real-time jam sessions over the internet. + Software ermöglicht Musikern über das Internet in Echtzeit zu jammen. + + + + server which collects the audio data from each + Server, der die Audiodaten von allen + + + + There is a + Es gibt einen - server which collects the audio data from each - - - - client, mixes the audio data and sends the mix back to each client. - + Musikern sammelt, zusammen mischt und wieder an alle verbundenen Musikern zurück schickt. uses the following libraries, resources or code snippets: - + verwendet die folgenden Bibliotheken, Ressourcen oder Codeschnipsel: - - About + + Qt cross-platform application framework + Qt plattformübergreifender Anwendungsrahmen + + + + Audio reverberation code by Perry R. Cook and Gary P. Scavone + Halleffekt von Perry R. Cook und Gary P. Scavone + + + + Some pixmaps are from the + Einige Bilder sind von + + + + Country flag icons from Mark James + Die Bilder der Länderflaggen sind von Mark James + + + + For details on the contributions check out the + Die Details über die Codebeiträge findet man in der + + + + Github Contributors list + Github Liste der Mitwirkenden + + + + Spanish + Spanisch + + + + French + Französisch + + + + Portuguese + Portugiesisch + + + + Dutch + German + + + + + About + Über + + + , Version - + - + Internet Jam Session Software - + - + Under the GNU General Public License (GPL) - + Unter der GNU General Public License (GPL) @@ -54,22 +114,42 @@ About - + Über - + TextLabelVersion - + - + Copyright (C) 2005-2020 Volker Fischer and others - + Copyright (C) 2005-2020 Volker Fischer und andere + + + + A&bout + Ü&ber + + + + &Libraries + Bib&liotheken + + + + &Contributors + &Mitwirkende + + + + &Translation + Überse&tzung &OK - + @@ -77,25 +157,25 @@ Analyzer Console - + Error Rate of Each Buffer Size - + CAudioMixerBoard - + Server - + - + T R Y I N G T O C O N N E C T - + V E R B I N D U N G S A U F B A U @@ -103,143 +183,143 @@ Channel Level - + Kanalpegel 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. - + Zeigt den Audiopegel vor dem Lautstärkeregler des Kanals. Allen verbundenen Musikern am Server wird ein Audiopegel zugewiesen. Input level of the current audio channel at the server - + Eingangspegel des aktuellen Musikers am Server Mixer Fader - + Kanalregler 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. - + Regelt die Lautstärke des Kanals. Für alle Musiker, die gerade am Server verbunden sind, wird ein Lautstärkeregler angezeigt. Damit kann man seinen eigenen lokalen Mix erstellen. Local mix level setting of the current audio channel at the server - + Lokale Mixerpegeleinstellung des aktuellen Kanals am Server With the Mute checkbox, the audio channel can be muted. - + Mit dem Mute-Schalter kann man den Kanal stumm schalten. Mute button - + Mute Schalter 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. - + Bei aktiviertem Solo Status hört man nur diesen Kanal. Alle anderen Kanäle sind stumm geschaltet. Es ist möglich mehrere Kanäle auf Solo zu stellen. Dann hört man nur die Kanäle, die auf Solo gestellt wurden. Solo button - + Solo Schalter Fader Tag - + Kanalbeschriftung 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. - + Mit der Kanalbeschriftung wird der verbundene Teilnehmen identifiziert. Der Name, ein Bild des Instruments und eine Flagge des eigenen Landes kann im eigenen Profil ausgewählt werden. Mixer channel instrument picture - + Mixerkanal Instrumentenbild Mixer channel label (fader tag) - + Mixerkanalbeschriftung Mixer channel country flag - + Mixerkanal Landesflagge MUTE - + SOLO - + - + Alias/Name - + - + Instrument - + - + Location - + Standort - - - + + + Skill Level - + Spielstärke - + Beginner - + Anfänger - + Intermediate - + Mittlere Spielstärke - + Expert - + Experte - + Musician Profile - + Profil des Musikers Mute - + Solo - + @@ -247,32 +327,32 @@ Chat Window - + Chatfenster The chat window shows a history of all chat messages. - + Das Chatfenster zeigt den Verlauf aller Chatnachrichten. Chat history - + Chatverlauf Input Message Text - + Chatnachricht Eingabefeld 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. - + Tippe die Chatnachricht in dieses Feld und drücke anschließend die Eingabetaste um die Nachricht an den Server zu schicken. Der Server verteilt die Nachricht anschließend an alle Musiker. Die eigene Nachricht wird dann im Chatfenster angezeigt. New chat text edit box - + Chatnachrichteneingabefeld @@ -280,17 +360,17 @@ Chat - + Chat Cl&ear - + &Löschen &Close - + &Schließen @@ -298,275 +378,275 @@ Input Level Meter - + Eingangspegelanzeige The input level indicators show the input level of the two stereo channels of the current selected audio input. - + Die Eingangspegelanzeige zeigt den Pegel der beiden Stereokanäle der selektierten Audiohardware an. Make sure not to clip the input signal to avoid distortions of the audio signal. - + Man sollte darauf achten, dass das Signal nicht zu stark ausgesteuert ist, um Verzerrungen des Signal zu vermeiden. If the - + Wenn die software is connected and you play your instrument/sing in the microphone, the LED level 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. - + Software verbunden ist und die spielst dein Instrument, dann sollte die Eingangspegelanzeige flackern. Wenn das nicht der Fall ist, dann ist wahrscheinlich der falsche Eingangskanal ausgewählt (z.B. der Line-In-Kanal anstatt des Mikrofonkanals) oder der Eingangsregler im (Windows) Systemmixer ist zu niedrig eingestellt. For a proper usage of the - + Um die software, you should not hear your singing/instrument in the loudspeaker or your headphone when the - + Software optimal zu nutzen, sollte man sein eigenes Instrument oder Gesang nicht im Lautsprecher oder Kopfhörer hören, wenn die software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). - + Software nicht verbunden ist. Das kann man erreichen, indem man den Eingangskanal im Wiedergabemixer stumm schaltet. Input level meter - + Eingangspegelanzeige Simulates an analog LED level meter. - + Simuliert eine analoge LED-Signalpegelanzeige. Connect/Disconnect Button - + Verbinden-/Trennschalter 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. - + Drücke diesen Knopf um sich mit dem Server zu verbinden. Es wird ein Fenster angezeigt, in dem man den Server auswählen kann. Wenn man gerade verbunden ist und den Knopf drückt, dann wird die Verbindung getrennt und die Session wird beendet. Connect and disconnect toggle button - + Schalter zum Verbinden und Trennen Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the - + Wenn man diesen Knopf drückt, dann wird die Beschriftung des Knopfes von Verbinden zu Trennen geändert, das heißt, dass er eine Umschaltfunktion hat zum Verbinden und Trennen der software. - + Software. Local Audio Input Fader - + Lokaler Eingangspegelregler Local audio input fader (left/right) - + Lokaler Eingangsregler Reverberation effect level setting - + Halleffekt Pegelregler Left channel selection for reverberation - + Auswahl linker Kanal für Halleffekt Right channel selection for reverberation - + Auswahl rechter Kanal für Halleffekt If this LED indicator turns red, you will not have much fun using the - + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der Delay status LED indicator - + LED Stautuslampe für die Verzögerung Buffers status LED indicator - + LED Statuslampe für den Netzwerkpuffer - + C&onnect - + &Verbinden &View - + &Ansicht &Connection Setup... - + &Verbinden... My &Profile... - + Mein &Profil... C&hat... - + C&hat... &Settings... - &Einstellungen + &Einstellungen... &Analyzer Console... - + E&xit - + &Beenden None - + Keine Center - + Mitte R - + L - + 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 - + Mit diesem Einstellregler kann der relative Pegel vom linken und rechten Eingangskanal verändert werden. Für ein Mono-Signal verhält sich der Regler wie ein Pan-Regler. Wenn, z.B., ein Mikrofon am rechten Kanal angeschlossen ist und das Instrument am linken Eingangskanal ist viel lauter als das Mikrofon, dann kann man den Lautstärkeunterschied mit diesem Regler kompensieren indem man den Regler in eine Richtung verschiebt, so dass über dem Regler , where - + angezeigt wird, wobei is the current attenuation indicator. - + die aktuelle Dämpfung anzeigt. Reverberation Level - + Halleffektregler - 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. - + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono 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. + Der Halleffekt kann auf einen selektierten Mono-Audiokanal oder auf beide Stereoaudiokanäle angewendet werden. Die Mono-Kanalselektion und die Hallstärke können eingestellt werden. Wenn z.B. ein Mikrofonsignal auf dem rechten Kanal anliegt und ein Halleffekt soll auf das Mikrofonsignal angewendet werden, dann muss die Hallkanalselektion auf rechts eingestellt werden und der Hallregler muss erhöht werden, bis die gewünschte Stärke des Halleffekts erreicht ist. 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 switched off and does not cause any additional CPU usage. - + Die Berechnung des Halleffekts benötigt etwas Rechenleistung, so dass der Halleffekt nur bei schnellen Computern angewendet werden sollte. Wenn der Hallregler ganz nach unten gezogen ist, dann ist der Halleffekt ausgeschaltet und verbraucht keine Rechenleistung mehr. Reverberation Channel Selection - + Halleffekt Kanalselektion 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. - + Mit diesen Knöpfen kann ausgewählt werden, auf welches Eingangssignal der Halleffekt angewendet werden soll. Entweder der rechte oder linke Eingangskanal kann ausgewählt werden. Delay Status LED - + Status LED für die Verzögerung 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 large for jamming. - + Die Status-LED für die Verzögerung zeigt eine Bewertung der Gesamtverzögerung des Audiosignals. Wenn die LED grün leuchtet, dann ist die Verzögerung gering genug für das Jammen. Wenn die LED gelb anzeigt kann man noch spielen aber es wird schwieriger Lieder mit hohem Tempo zu spielen. Wenn die LED rot anzeigt, dann ist die Verzögerung zu hoch zum Jammen. Buffers Status LED - + Status LED für den Netzwerkpuffer 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: - + Die Status-LED für den Netzwerkpuffer zeigt den aktuellen Status des Netzwerkstroms. Wenn die LED grün ist, dann gibt es keine Pufferprobleme. Wenn die LED rot anzeigt, dann ist der Netzwerkstrom kurz unterbrochen. Dies kann folgende Ursachen haben: The network jitter buffer is not large enough for the current network/audio interface jitter. - + Der Netzwerkpuffer ist nicht groß genug eingestellt für die aktuellen Netzwerkbedingungen. The sound card buffer delay (buffer size) is set to a too small value. - + Der Soundkartenpuffer ist zu klein eingestellt. The upload or download stream rate is too high for the current available internet bandwidth. - + Die Upload-Rate der Internetverbindung ist zu klein für den Netzwerkdatenstrom. The CPU of the client or server is at 100%. - + Die CPU des Computers ist voll ausgelastet. - + user - + Musiker - + users - + Musiker - + D&isconnect - + &Trennen @@ -574,72 +654,72 @@ Delay - + Verzögerung Buffers - + Puffer Input - + Eingang L - + R - + Settings - + Einstellungen Chat - + Chat Mute Myself - + Stummschalten C&onnect - + &Verbinden Pan - + Center - + Mitte Reverb - + Halleffekt Left - + Links Right - + Rechts @@ -647,458 +727,463 @@ Jitter Buffer Size - + Netzwerkpuffergröße 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). - + Der Netzwerkpuffer kompensiert die Netzwerk- und Soundkarten-Timing-Schwankungen. Die Größe des Netzwerkpuffers hat Auswirkungen auf die Qualität des Audiosignals (wie viele Aussetzer auftreten) und die Gesamtverzögerung (je länger der Puffer, desto größer ist die Verzögerung). 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. - + Die Netzwerkpuffergröße kann manuell verstellt werden, jeweils getrennt für die Applikation und den Server. Für den lokalen Netzwerkpuffer werden die Aussetzer durch die LED-Anzeige unter den Reglern angezeigt. Wenn die Lampe rot anzeigt, dann hat ein Pufferüberlauf oder ein Leerlauf des Puffers stattgefunden und der Audiodatenstrom wurde kurz unterbrochen. The jitter buffer setting is therefore a trade-off between audio quality and overall delay. - + Die Netzwerkpuffergröße ist deshalb ein Kompromiss zwischen Audioqualität und Gesamtverzögerung. 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 Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + Die Netzwerkpuffergröße kann automatisch eingestellt werden. Wenn die Automatik aktiviert ist, dann werden die Netzwerkpuffer der Applikation und des Servers getrennt basierend auf Messungen der Netzwerkschwankungen eingestellt. Wenn die Automatik aktiviert ist, dann sind die beiden Regler gesperrt für die manuelle Verstellung (sie können nicht mit der Maus verändert werden). 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 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. - + Wenn die Automatik zum Einstellen der Netzwerkpuffer aktiviert ist, dann werden die Netzwerkpuffer der Applikation und des entfernten Servers auf einen konservativen Wert eingestellt, um eine möglichst gute Audioqualität zu garantieren. Um die Gesamtverzögerung zu optimieren, bietet es sich an, die Automatik zu deaktivieren und die Netzwerkpuffer etwas kleiner einzustellen. Die Werte sollte man so weit reduzieren, bis die Audioqualität gerade noch der persönlichen Akzeptanz entspricht. Die LED-Anzeige hilft dabei die Audioaussetzer verursacht durch den lokalen Netzwerkpuffer zu visualisieren (wenn die LED rot leuchtet). Local jitter buffer slider control - + Lokale Netzwerkpuffergröße Schieberegler Server jitter buffer slider control - + Server Netzwerkpuffergröße Schieberegler Auto jitter buffer switch - + Automatik für die Netzwerkpuffergröße aktivieren Jitter buffer status LED indicator - + Netzwerkpuffer Status LED Sound Card Device - + Soundkartengerät The ASIO driver (sound card) can be selected using - + Der ASIO-Treiber (Soundkarte) kann ausgewählt werden mit der 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. - + Software unter Windows. Unter MacOS und Linux kann man die Soundkarte nicht auswählen. Wenn der selektierte ASIO-Treiber nicht gültig ist, dann wird eine Fehlermeldung angezeigt und der vorherige gültige Treiber wird wieder ausgewählt. If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Wenn der Treiber während eine aktiven Verbindung ausgewählt wird, dann wird die Verbindung gestoppt, der neue Treiber ausgewählt und anschließend wird die Verbindung automatisch wiederhergestellt. Sound card device selector combo box - + Soundkarten Auswahlbox 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. - + Falls der ASIO4All-Treiber verwendet wird, kann es sein, dass dieser Treiber zusätzliche 10-30 ms Verzögerung hinzufügt. Aus diesem Grund sollte man bevorzugt einen nativen ASIO-Treiber der Soundkarte verwenden, der mit dem Produkt mitgeliefert wurde. If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + Falls der kx ASIO-Treiber verwendet wird, dann muss man darauf achten, dass die ASIO-Eingänge im kx DSP-Einstellungsfenster verbunden sind. Sound Card Channel Mapping - + Soundkarten Kanalzuweisung 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. - + Falls die ausgewählte Soundkarte mehr als zwei Eingangs- oder Ausgangskanäle unterstützt, dann werden die Steuerelemente für die Kanalzuweisung angezeigt. For each - + Für jeden input/output channel (Left and Right channel) a different actual sound card channel can be selected. - + Eingangs-/Ausgangskanal (linker und rechter Kanal) kann ein beliebiger Soundkartenkanal zugewiesen werden. Left input channel selection combo box - + Linker Eingang Kanalauswahlbox Right input channel selection combo box - + Rechter Eingang Kanalauswahlbox Left output channel selection combo box - + Linker Ausgang Kanalauswahlbox Right output channel selection combo box - + Rechter Ausgang Kanalauswahlbox Enable Small Network Buffers - + Aktiviere kleine Netzwerkpuffer 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 - + Falls aktiviert wird die Unterstützung für sehr kleine Netzwerk-Audiopakete aktiviert. Sehr kleine Netzwerkpakete werden nur dann verwendet, wenn der Soundkartenpuffer kleiner als samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + Samples ist. Je kleiner die Netzwerkpakete sind, desto kleiner ist auch die Audioverzögerung. Aber gleichzeitig wird dadurch die Netzwerklast erhöht und die Wahrscheinlichkeit für Audioaussetzer erhöht sich dadurch auch. Enable small network buffers check box - + Aktiviere kleine Netzwerkpuffer Schalter Sound Card Buffer Delay - + Soundkarten Puffergröße The buffer delay setting is a fundamental setting of the - + Die Soundkartenpuffergröße ist eine fundamentale Einstellung der software. This setting has influence on many connection properties. - + Software. Diese Einstellung hat Einfluss auf viele andere Verbindungseigenschaften. Three buffer sizes are supported - + Drei Puffergrößen werden unterstützt 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. - + 64 Samples: Dies ist die bevorzugte Einstellung weil es die geringste Verzögerung hat. Diese Puffergröße funktioniert allerdings nicht mit allen Soundkarten. 128 samples: This setting should work on most of the available sound cards. - + 128 Samples: Diese Puffergröße sollte mit den meisten Soundkarten funktionieren. 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - + 256 Samples: Diese Einstellung sollte nur dann verwendet werden, wenn man einen langsamen Computer oder eine langsame Internetverbindung hat. Some sound card driver do not allow the buffer delay to be changed from within the - + Manche Soundkartentreiber unterstützen nicht das Verändern der Puffergröße innerhalb der 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. - + Software. In diesem Fall ist die Einstellungsmöglichkeit für die Puffergröße deaktiviert. Die Puffergröße muss man stattdessen direkt im Soundkartentreiber durchführen. Unter Windows kann man den ASIO-Einstellungen Knopf drücken um die Treibereinstellungen zu öffnen. Unter Linux benutzt man das Jack-Konfigurationsprogramm um die Puffergröße einzustellen. If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + Falls keiner der vorgegebenen Puffergrößen ausgeählt ist und alle Einstellungen deaktiviert sind, dann wird eine nicht unterstützte Puffergröße im Soundkartentreiber verwendet. Die - software will still work with this setting but with restricted performannce. - + software will still work with this setting but with restricted performance. + Software funktioniert trotzdem aber es könnte eine größere Verzögerung resultieren. 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. - + Die Puffergröße hat einen Einfluss auf den Verbindungsstatus, die aktuelle Upload-Rate und die Gesamtverzögerung. Je kleiner der Puffer, desto größer ist die Wahrscheinlichkeit für das Auftreten einer rot leuchtenden LED (was Audioaussetzer anzeigt), eine höheren Upload-Rate und eine niedrigere Gesamtverzögerung. The buffer setting is therefore a trade-off between audio quality and overall delay. - + Die Puffergröße ist somit ein Kompromiss zwischen Audioqualität und Gesamtverzögerung. If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - + Falls die Puffergröße nicht verstellt werden kann, dann hat der Soundkartentreiber die Einstellung gesperrt man kann es nicht innerhalb der software. 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. - + Software verändern. Unter Windows kann man den ASIO-Einstellungen Knopf drücken, um die Treibereinstellungen zu öffnen. Unter Linux kann man ein Jack-Konfigurationswerkzeug verwenden, um die Puffergröße zu verändern. 128 samples setting radio button - + 128 Samples Einstellknopf 256 samples setting radio button - + 256 Samples Einstellknopf 512 samples setting radio button - + 512 Samples Einstellknopf ASIO setup push button - + ASIO-Einstellungen Knopf Fancy Skin - + Schicke Oberfläche If enabled, a fancy skin will be applied to the main window. - + Falls aktiviert wird eine schicke Oberfläche im Hauptfenster verwendet. Fancy skin check box - + Schicke Oberfläche Schalter Display Channel Levels - Zeige Kanalsignalpegel + Zeige Kanalsignalpegel If enabled, each client channel will display a pre-fader level bar. - + Falls aktiviert wird eine Signalpegelanzeige neben jedem Kanalfader angezeigt, welcher den Pegel vor dem Fader anzeigt. Display channel levels check box - + Zeige Kanalpegel Schalter Audio Channels - Audiokanäle + Audiokanäle 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 the audio signal which is sent to the server is mono but the return signal is stereo. This is useful for the case that the 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. - + Hiermit kann man die Anzahl an Audiokanälen auswählen. Es gibt drei Modi. Die Mono- und Stereomodi verwenden jeweils einen oder zwei Kanäle. Im Mono-In/Stereo-Out Modus wird ein Monosignal zum Server geschickt aber es kommt ein Stereo-Signal zurück vom Server. Dies ist nützlich für den Fall, dass man an die Soundkarte ein Instrument an den einen Eingangskanal und ein Mikrofon an den anderen Eingangskanal angeschlossen hat. In diesem Fall können die beiden Signale zusammen gemischt werden und an den Server geschickt werden aber man kann das Stereo-Signal von den anderen Musikern hören. 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. - + Wenn man den Stereo-Modus verwendet, dann ist die Übertragungsrate etwas höher. Man muss sicher stellen, dass die Internetverbindung die höhere Rate übertragen kann. 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. - + Wenn der Stereo-Modus ausgewählt wurde, dann verschwindet die Kanalselektion für den Halleffekt im Hauptfenster, da der Effekt auf beide Stereokanäle angewendet wird. Audio channels combo box - + Audiokanal Auswahlbox Audio Quality - Audioqualität + Audioqualität 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 upload rate does not exceed the available bandwidth of your internet connection. - + Wählt die gewünschte Audioqualität aus. Es wird eine niedrige, mittlere und hohe Audioqualität angeboten. Je höher die Audioqualität, desto höher ist die Netzwerkübertragungsrate. Man muss sicherstellen, dass die Internetverbindung die höhere Rate übertragen kann. Audio quality combo box - + Audioqualität Auswahlbox New Client Level - + Pegel für neuen Teilnehmer 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 of that client was already stored. - + Der Pegel für neue Teilnehmer definiert die Fadereinstellung, wenn sich ein Teilnehmer neu mit dem Server verbindet. D.h. wenn ein neuer Fader erscheint, dann wird er auf den voreingestellten Pegel gesetzt. Eine Ausnahme bildet der Fall, dass der Teilnehmer vorher schon mal mit dem Server verbunden war und der Pegel gespeichert war. New client level edit box - + Neuer Teilnehmer Pegel Einstellbox Central Server Address - + Zentralserveradresse 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. - + Die Zentralserveradresse ist die IP-Adresse oder URL des Zentralservers, der die Serverlist organisiert und bereitstellt. Mit der Zentralserveradresse kann entweder die örtliche Region festgelegt werden (durch Auswahl des entsprechenden vorgegebenen Zentralservers) oder man gibt eine beliebige Adresse manuell ein. Default central server type combo box - + Voreingestellter Zentralservertyp Auswahlbox Central server address line edit - + Zentralserveradresse Eingabefeld Current Connection Status Parameter - + Verbindungsstatus Parameter 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. - + Die Ping-Zeit ist die Zeit, die der Audiodatenstrom benötigt, um von der Applikation zum Server und zurück zu kommen. Diese Verzögerung wird vom Netzwerk hervorgerufen. Diese Verzögerung sollte so um die 20-30 ms sein. Falls die Verzögerung größer ist (z.B. 50-60 ms), der Abstand zum Server ist zu groß oder die Internetverbindung ist nicht ausreichend. The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - + Die Gesamtverzögerung setzt sich zusammen aus der Ping-Zeit und die Verzögerung, die durch die Puffergrößen verursacht wird. 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 your internet connection by, e.g., using speedtest.net). - + Die Upload-Rate hängt von der Soundkartenpuffergröße und die Audiokomprimierung ab. Man muss sicher stellen, dass die Upload-Rate immer kleiner ist als die Rate, die die Internetverbindung zur Verfügung stellt (man kann die Upload-Rate des Internetproviders z.B. mit speedtest.net überprüfen). If this LED indicator turns red, you will not have much fun using the - + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der software. - + Software. ASIO Setup - + ASIO-Einstellung Mono - + Mono-in/Stereo-out - + Mono-In/Stereo-Out Stereo - + Low - + Niedrig Normal - + Normal High - + Hoch Manual - + Manuell Default - + Standard Default (North America) - + Standard (Nordamerika) + + + + preferred + bevorzugt Size: - + Größe: Buffer Delay - + Puffergröße Buffer Delay: - + Puffergröße: The selected audio device could not be used because of the following error: - + Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: The previous driver will be selected. - + Der vorherige Treiber wird wieder ausgewählt. Ok - + @@ -1106,157 +1191,157 @@ Settings - + Einstellungen Soundcard - + Soundkarte Device - Gerät + Gerät Input Channel Mapping - + Eingangskanalauswahl L - + R - + Output Channel Mapping - + Ausgangskanalauswahl Enable Small Network Buffers - + Aktiviere kleine Netzwerkpuffer Buffer Delay - + Puffergröße (preferred) - + (bevorzugt) (default) - + (standard) (safe) - + (sicher) Driver Setup - + Treibereinstellungen Jitter Buffer - + Netzwerkpuffer Auto - + Local - + Lokal Server - + Server Size - + Größe Misc - + Sonstiges Audio Channels - Audiokanäle + Audiokanäle Audio Quality - Audioqualität + Audioqualität New Client Level - + Pegel für neuen Teilnehmer % - + Fancy Skin - + Schicke Oberfläche Display Channel Levels - Zeige Kanalsignalpegel + Zeige Signalpegel Central Server Address: - + Zentralserveradresse: Audio Stream Rate - + Netzwerkrate val - + Wert Ping Time - + Ping-Zeit Overall Delay - + Gesamtverzögerung @@ -1264,82 +1349,82 @@ Server List - + Severliste 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. - + Die Serverliste zeigt eine Liste von verfügbaren Server, die sich am Zentralserver registriert haben. Markiere einen Server von der Liste und drücke den Knopf Verbinden um eine Verbindung zu dem Server aufzubauen. Alternativ kann man auch den Server in der Liste direkt doppelklicken. Wenn ein Server belegt ist, dann wird eine Liste der verbundenen Musikern angezeigt. Server, die länger online sind (permanente Server) werden in Fettschrift dargestellt. 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. - + Es kann einen Moment dauern, bis die Serverliste vom Zentralserver empfangen wird. Falls keine gültige Zentralserveradresse in den Einstellungen angegeben ist, kann keine Liste angezeigt werden. Server list view - + Serverliste Anzeige Server Address - + Serveradresse The IP address or URL of the server running the - + Die IP-Adresse oder URL des Servers, auf der die - 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: - + server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: + Serversoftware läuft wird hier angegeben. Optional kann eine Portnummer angefügt werden. Diese wird hinter der IP-Adresse durch ein Doppelpunkt getrennt angegeben. Beispiel: example.org: . A list of the most recent used server IP addresses or URLs is available for selection. - + Eine Liste der letzten IP-Adressen oder URLs wird gespeichert und kann nachträglich wieder ausgewählt werden. Server address edit box - + Serveradresse Eingabefeld Holds the current server IP address or URL. It also stores old URLs in the combo box list. - + Enthält die aktuelle Server-IP-Adresse oder URL. Es speichert auch alte URLs in der Auswahlliste. Filter - + Filter - The server list is filered by the given text. Note that the filter is case insensitive. - + The server list is filtered by the given text. Note that the filter is case insensitive. + Die Serverliste kann mit dem eingegebenen Text gefiltert werden, d.h. es werden nur Einträge angezeigt, die dem Filtertext entsprechen. Die Groß- und Kleinschreibung des Filtertexts wird dabei nicht beachtet. Filter edit box - + Filtereingabefeld Show All Musicians - + Zeige alle Musiker 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. - + Ist diese Einstellung angehakt, dann werden alle Musiker auf allen Servern angezeigt. Wird der Haken entfernt, dann werden alle Listeneinträge eingeklappt und die verbundenen Musikernamen werden verborgen. Show all musicians check box - + Zeige alle Musiker Schalter @@ -1347,177 +1432,182 @@ Connection Setup - + Verbindungseinstellung Filter - + Filter Show All Musicians - + Zeige alle Musiker Server Name - + Servername Ping Time - + Ping-Zeit Musicians - + Musiker Location - + Standort Server Name/Address - + Servername/Adresse C&ancel - + A&bbrechen &Connect - + &Verbinden CHelpMenu - - + + &Help + &Hilfe + + + + Getting &Started... - + &Erste Schritte... - + Software &Manual... - + Software&handbuch... - + What's &This - + Konte&xthilfe - + &About... - Über... + Ü&ber... CLicenceDlg - + I &agree to the above licence terms - + Ich &stimme den Lizenzbedingungen zu - + Accept - + Einwilligen - + Decline - + Ablehnen - + By connecting to this server and agreeing to this notice, you agree to the following: - + Durch das Verbinden mit diesem Server und das Akzeptieren des Lizenztextes willigst du folgenden Bedingungen ein: - + 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 - + You are free to: - + Share - + copy and redistribute the material in any medium or format - + Adapt - + remix, transform, and build upon the material - + The licensor cannot revoke these freedoms as long as you follow the license terms. - + Under the following terms: - + Attribution - + You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. - + NonCommercial - + You may not use the material for commercial purposes. - + ShareAlike - + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - + No additional restrictions - + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. @@ -1525,262 +1615,272 @@ CMusProfDlg - + server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. - + -Server. Dieses Schild wird auch bei allen anderen Musikern, die mit dem gleichen Server verbunden sind, angezeigt. Wenn der Name leer gelassen wurde, dann wird die IP-Adresse stattdessen angezeigt. - + Alias or name edit box - + Alias oder Name Eingabefeld + + + + Instrument picture button + Instrumentenbild Knopf + + + + Country flag button + Landesflagge Knopf + + + + City edit box + Stadt Eingabefeld + + + + Skill level combo box + Fähigkeit Auswahlbox + + + + + + None + Kein + + + + + Musician Profile + Musikerprofil + + + + Alias/Name + + + + + Instrument + + + + + Country + Land + + + + City + Stadt + + + + Skill + Können + + + + &Close + &Schließen + + + + Beginner + Anfänger + + + + Intermediate + Mittlere Spielstärke + + + + Expert + Experte - Instrument picture button - - - - - Country flag button - - - - - City edit box - - - - - Skill level combo box - - - - - - - None - - - - - - Musician Profile - - - - - Alias/Name - - - - - Instrument - - - - - Country - - - - - City - - - - - Skill - - - - - &Close - - - - - Beginner - - - - - Intermediate - - - - - Expert - - - - 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. - + Schreibe den Namen oder Alias hier rein so dass die anderen Musikern mit denen du spielst wissen wer du bist. Zusätzlich kannst du dein Instrument auswählen und eine Flagge des Landes auswählen in dem du dich befindest. Deine Stadt und deine Spielstärke des Instruments kannst du ebenso angeben. - + What you set here will appear at your fader on the mixer board when you are connected to a - - - - - Drum Set - - - - - Djembe - - - - - Electric Guitar - - - - - Acoustic Guitar - - - - - Bass Guitar - - - - - Keyboard - - - - - Synthesizer - - - - - Grand Piano - - - - - Accordion - - - - - Vocal - - - - - Microphone - - - - - Harmonica - - - - - Trumpet - - - - - Trombone - + Was man hier sieht wird auch am Fader im Mixer angezeigt, wenn du mit einem - French Horn - + Drum Set + Schlagzeug - Tuba - + Djembe + Djembe - Saxophone - + Electric Guitar + E-Gitarre - Clarinet - + Acoustic Guitar + Akustikgitarre - Flute - + Bass Guitar + E-Bass - Violin - + Keyboard + Keyboard - Cello - + Synthesizer + Synthesizer - Double Bass - + Grand Piano + Flügel - Recorder - + Accordion + Akkordeon - Streamer - + Vocal + Gesang - Listener - + Microphone + Mikrofon - Guitar+Vocal - + Harmonica + Mundharmonika - Keyboard+Vocal - + Trumpet + Trompete - Bodhran - + Trombone + Posaune - Bassoon - + French Horn + Waldhorn - Oboe - + Tuba + Tuba - Harp - + Saxophone + Saxophon + Clarinet + Klarinette + + + + Flute + Flöte + + + + Violin + Violine + + + + Cello + Cello + + + + Double Bass + Kontrabass + + + + Recorder + Recorder + + + + Streamer + + + + + Listener + Zuhörer + + + + Guitar+Vocal + Gitarre+Gesang + + + + Keyboard+Vocal + Keyboard+Gesang + + + + Bodhran + + + + + Bassoon + Fagott + + + + Oboe + Oboe + + + + Harp + Harfe + + + Viola - + Viola + + + + Congas + Congas + + + + Bongo + Bongos @@ -1788,225 +1888,225 @@ Client List - + Musikerliste 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. - + Die Musikerliste zeigt alle gerade mit dem Server verbunden Musiker an. Für jeden Musiker werden zusätzliche Informationen wie die IP-Adresse und Namen angezeigt. Connected clients list view - + Musikerliste Start Minimized on Operating System Start - + Starte minimiert beim Starten des Betriebssystems If the start minimized on operating system start check box is checked, the - + Wenn diese Funktion angehakt ist, dann wird der server will be started when the operating system starts up and is automatically minimized to a system task bar icon. - + -Server automatisch mit dem Betriebssystemstart geladen und erscheint minimiert in der Systemleiste als Icon. Show Creative Commons Licence Dialog - + Zeige den Creative Commons Lizenzdialog If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + Falls aktiviert wird ein Create Commons BY-NC-SA 4.0 Lizenzdialog angezeigt, wenn ein neuer Teilnehmer versucht sich mit dem Server zu verbinden. Make My Server Public - + Veröffentliche meinen Server If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + Mit dieser Funktion wird der eigene Server in der Serverliste des Zentralservers registriert so dass alle anderen Applikationsnutzer den users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - + -Server in der Liste sehen können und sich mit ihm verbinden können. Die Registrierung mit dem Zentralserver wird periodisch erneuert um sicherzugehen, dass alle registrierten Server auch wirklich erreichbar sind. Register Server Status - + Registrierungsstatus If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + Wenn der eigene Server veröffentlicht wurde, dann zeigt der Registrierungsstatus and, ob die Registrierung erfolgreich war oder nicht. Central Server Address - + Zentralserveradresse 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. - + Die Zentralserveradrees ist die IP-Adresse oder URL des Zentralservers bei dem man sich registrieren möchte. Mit dem Zentralservertyp legt man die Region fest, in der man sich befindet. Außerdem kann eine freie Adresse eingetragen werden. Default central server type combo box - + Voreingestellter Zentralservertyp Auswahlbox Central server address line edit - + Zentralserveradresse Eingabefeld Server Name - + Servername 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. - + Der Servername identifiziert deinen Server in der Serverliste. Falls kein Name angegeben wurde, dann wird die IP-Adresse stattdessen angezeigt. Server name line edit - + Servername Eingabefeld Location City - + Standort Stadt 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. - + Hier kann man die Stadt angeben, in der sich der Server befindet. Falls eine Stadt angegeben wurde, dann wird die in der Serverliste angezeigt. City where the server is located line edit - + Stadt in der sich der Server befindet Eingabefeld Location country - + Standort Land 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. - + Hier kann man das Land eingeben, in dem sich der Server befindet. Falls ein Land angegeben wurde, dann wird das in der Serverliste angezeigt. Country where the server is located combo box - + Land in dem sich der Server befindet Auswahlbox E&xit - + &Beenden &Hide - + &Ausblenden vom server - + -Server &Open - + Ö&ffne den server - + Server Manual - + Manuell Default - + Standard Default (North America) - + Standard (Nordamerika) Server - + &Window - + &Fenster - + Unregistered - + Nicht registriert - + Bad address - + Ungültige Adresse - + Registration requested - + Registrierung angefordert - + Registration failed - + Registrierung fehlgeschlagen - + Check server version - + Überprüfe Version des Servers - + Registered - + Registriert - + Central Server full - + Zentralserver voll - + Unknown value - + Unbekannter Wert @@ -2014,63 +2114,63 @@ Client IP:Port - + Teilnehmer IP:Port Name - + Name Jitter Buffer Size - + Netzwerkpuffergröße Start Minimized on Windows Start - + Starte minimiert beim Windows-Start Show Creative Commons BY-NC-SA 4.0 Licence Dialog - + Zeige den Creative Commons BY-NC-SA 4.0 Lizenzdialog Make My Server Public (Register My Server in the Server List) - + Veröffentliche meinen Server in der Serverliste STATUS - + Central Server Address: - + Zentralserveradresse My Server Info - + Meine Serverinformationen Location: City - + Standort: Stadt Location: Country - + Standort: Land TextLabelNameVersion - + @@ -2078,129 +2178,134 @@ The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + Der Jack-Server läuft nicht. Diese Software benötigt aber einen Jack-Server um zu funktionieren. Normalerweise wird der Jack-Server automatisch gestartet. Es scheint so, als hätte dieser Automatismus nicht funktioniert. Versuche den Jack-Server manuell zu starten. The Jack server sample rate is different from the required one. The required sample rate is: - + Die Jack-Server-Samplerate ist verschieden zu der benötigen. Die benötigte Samplerate ist: You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. - + Do kannst ein Werkzeug wie <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></li> verwenden um die Samplerate umzustellen. Make sure to set the Frames/Period to a low value like - + Versichere dich, dass die Frames/Perioden auf einen niedrigen Wert wie z.B. to achieve a low delay. - + eingestellt ist um eine niedrige Verzögerung zu erreichen. The Jack port registering failed. - + Die Jack-Portregistrierung ist fehlgeschlagen. Cannot activate the Jack client. - + Der Jack-Client kann nicht aktiviert werden. - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + Der Jack-Server wurde gestoppt. Diese Software benötigt aber einen aktiven Jack-Server um zu funktionieren. Versuche die Software neu zu starten um das Problem zu lösen. CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio Eingang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint als wäre keine Soundkarte im System vorhanden. CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio Ausgang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint, dass keine Soundkarte ist im System verfügbar. Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + Die aktuelle Eingangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + Die aktuelle Ausgangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. The audio input stream format for this audio device is not compatible with this software. - + Das Audioeingangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. The audio output stream format for this audio device is not compatible with this software. - + Das Audioausgangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. - + Die Puffergrößen vom aktuellen Eingangs- und Ausgangsaudiogerät kann nicht auf einen gemeinsamen Wert eingestellt werden. Bitte wähle ein anderes Eingangs-/Ausgangsgerät aus der Geräteliste aus. The audio driver could not be initialized. - + Der Audiotreiber konnte nicht initialisiert werden. The audio device does not support the required sample rate. The required sample rate is: - + Das Audiogerät unterstützt nicht die benötigte Samplerate. Die benötigte Samplerate ist: The audio device does not support to set the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to - + Das Audiogerät unterstützt nicht die benötigte Samplerate. Dieser Fehler kann auftreten, wenn ein Audiogerät wie das Roland UA-25EX verwendet wird, bei dem die Samplerate per Schalter am Gerät verstellt werden muss. Falls das der Fall sein sollte, dann stelle bitte den Schalter auf Hz on the device and restart the - + Hz am Gerät und starte die software. - + Software neu. The audio device does not support the required number of channels. The required number of channels for input and output is: - + Das Audiogerät unterstützt nicht die benötigte Anzahl an Kanälen. Die benötigte Anzahl an Kanälen für den Eingang und den Ausgang ist: Required audio sample format not available. - + Das benötigte Audio Sampleformat ist nicht verfügbar. No ASIO audio device (driver) found. - + Kein ASIO-Gerätetreiber wurde gefunden. The - + Die 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 the ASIO4All driver. - + Software benötigt aber ein ASIO Audiointerface um zu funktionieren. Dies ist keine Standard-Windowsschnittstelle und benötigt deshalb einen speziellen Treiber. Entweder die Soundkarte liefert einen nativen ASIO-Treiber mit (was empfohlen wird) oder man versucht es mit dem ASIO4All-Universaltreiber. + + + + Error closing stream: $s + Fehler beim Schließen des Datenstroms: $s @@ -2208,47 +2313,55 @@ Invalid device selection. - + Ungültige Geräteauswahl. 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: - + Die Audiotreibereigenschaften haben sich geändert. Die neuen Einstellungen sind nicht mehr kompatibel zu dieser Software. Das ausgewählte Audiogerät konnte nicht benutzt werden wegen folgendem Fehler: Please restart the software. - + Bitte starte die Software neu. Close - + No usable - + Kein benutzbares audio device (driver) found. - + Audiogerät (Treiber) konnte gefunden werden. In the following there is a list of all available drivers with the associated error message: - + Im folgenden wird eine Liste aller gefundenen Audiogeräte mit entsprechender Fehlermeldung angezeigt: Do you want to open the ASIO driver setups? - + Willst du die ASIO-Treibereinstellungen öffnen? could not be started because of audio interface issues. - + konnte nicht gestartet werden wegen Problemen mit dem Audiogerät. + + + + global + + + For more information use the What's This help (help menu, right mouse button or Shift+F1) + Für weitere Informationen verwende die Kontexthilfe (Hilfe-Menü, rechte Maustaste oder Tastenkombination Shift+F1) diff --git a/src/res/translation/translation_es_ES.qm b/src/res/translation/translation_es_ES.qm index 9dad8dff..04a888af 100644 Binary files a/src/res/translation/translation_es_ES.qm and b/src/res/translation/translation_es_ES.qm differ diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 01cecfd1..4aeec82d 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -4,49 +4,113 @@ CAboutDlg - + The - + El software - software enables musicians to perform real-time jam sessions over the internet. There is a - + software permite a músicos realizar jam sessions en tiempo real por internet. Hay un + + + + software enables musicians to perform real-time jam sessions over the internet. + permite a músicos realizar jam sessions en tiempo real por internet. + + + + server which collects the audio data from each + que recoge el audio de cada cliente + + + + There is a + Hay un servidor - server which collects the audio data from each - - - - client, mixes the audio data and sends the mix back to each client. - + , mezcla el audio y lo envía de vuelta a cada cliente. uses the following libraries, resources or code snippets: - + utiliza las siguientes librerías, recursos o fragmentos de código: - - About - + + Qt cross-platform application framework + Qt cross-platform application framework + + + + Audio reverberation code by Perry R. Cook and Gary P. Scavone + Código de reverberación de audio de Perry R. Cook y Gary P. Scavone + + + + Some pixmaps are from the + Algunos pixmaps son del + + + + Country flag icons from Mark James + Iconos de banderas nacionales de Mark James + + + + For details on the contributions check out the + Para más detalles sobre los contribuidores consulta la + + + + Github Contributors list + lista de Contribuidores en Github + + + + Spanish + Español + + + + French + Francés + + + + Portuguese + Portugués + + + + Dutch + Neerlandés + German + Alemán + + + + About + Acerca de + + + , Version - + , Versión - + Internet Jam Session Software - + Internet Jam Session Software - + Under the GNU General Public License (GPL) - + Bajo la GNU General Public License (GPL) @@ -54,22 +118,42 @@ About - + Acerca de - + TextLabelVersion - + TextLabelVersion - + Copyright (C) 2005-2020 Volker Fischer and others - + Copyright (C) 2005-2020 Volker Fischer y otros + + + + A&bout + A&cerca de + + + + &Libraries + &Librerías + + + + &Contributors + &Contribuidores + + + + &Translation + &Traducción &OK - + &OK @@ -77,25 +161,25 @@ Analyzer Console - + Analyzer Console Error Rate of Each Buffer Size - + Tasa de Error de Cada Tamaño de Buffer CAudioMixerBoard - + Server - + Servidor - + T R Y I N G T O C O N N E C T - + I N T E N T A N D O C O N E C T A R @@ -103,143 +187,143 @@ Channel Level - + Nivel Canal 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. - + Muestra el nivel de audio pre-fader de este canal. Todos los clientes conectados al servidor tienen un nivel de audio asignado, el mismo para cada cliente. Input level of the current audio channel at the server - + Nivel de entrada del canal de audio actual en el servidor Mixer Fader - + Fader Mezclador 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. - + Ajusta el nivel de audio de este canal. Todos los clientes conectados al servidor tienen asignado un fader en el cliente, ajustando la mezcla local. Local mix level setting of the current audio channel at the server - + Ajuste local de la mezcla del canal de audio actual en el servidor With the Mute checkbox, the audio channel can be muted. - + Activando Mute, se puede mutear el canal de audio. Mute button - + Botón Mute 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. - + Activando Solo, todos los demás canales de audio excepto este se mutean. Es posible activar esta función para más de un canal. Solo button - + Botón Solo Fader Tag - + Etiqueta Fader 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. - + La etiqueta del fader identifica al cliente conectado. El nombre de la etiqueta, la imagen de tu instrumento y la bandera de tu país se pueden establecer en la ventana principal. Mixer channel instrument picture - + Imagen mezclador canal instrumento Mixer channel label (fader tag) - + Etiqueta mezclador canal (etiqueta fader) Mixer channel country flag - + Bandera país mezclador canal MUTE - + MUTE SOLO - + SOLO - + Alias/Name - + Alias/Nombre - + Instrument - + Instrumento - + Location - + Ubicación - - - + + + Skill Level - + Nivel Habilidad - + Beginner - + Principiante - + Intermediate - + Intermedio - + Expert - + Experto - + Musician Profile - + Perfil Músico Mute - + Mute Solo - + Solo @@ -247,32 +331,32 @@ Chat Window - + Ventana Chat The chat window shows a history of all chat messages. - + La ventana del chat muestra un historial de todos los mensajes. Chat history - + Historial chat Input Message Text - + Texto Mensaje 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. - + Teclea el mensaje en el campo y pulsa Enter para enviar el mensaje al servidor, el cual distribuye el mensaje a todos los clientes conectados. Tu mensaje se mostrará en la ventana del chat. New chat text edit box - + Campo nuevo texto chat @@ -280,17 +364,17 @@ Chat - + Chat Cl&ear - + Va&ciar &Close - + &Cerrar @@ -298,275 +382,275 @@ Input Level Meter - + Indicador nivel entrada The input level indicators show the input level of the two stereo channels of the current selected audio input. - + Los indicadores de nivel de entrada muestran el nivel de entrada de los dos canales estéreo de la entrada de audio actualmente seleccionada. Make sure not to clip the input signal to avoid distortions of the audio signal. - + Asegúrate de no clipear la señal de entrada para evitar distorsiones de la señal de audio. If the - + Si el software software is connected and you play your instrument/sing in the microphone, the LED level 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. - + está conectado y tocas tu instrumento/cantas por el micrófono, el LED del indicador debería parpadear. Si no es así, seguramente has seleccionado el canal de entrada equivocado (por ej. line in en lugar de la entrada del micrófono) o está muy bajo el gain de entrada en el mezclador de audio (Windows). For a proper usage of the - + Para un uso adecuado del software software, you should not hear your singing/instrument in the loudspeaker or your headphone when the - + , no deberías oír tu voz/instrumento por el altavoz o los auriculares cuando el software software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). - + no está conectado. Esto se puede hacer muteando tu entrada de audio en el mezclador de Reproducción (¡y no en el de Grabación!). Input level meter - + Indicador nivel entrada Simulates an analog LED level meter. - + Simula un indicador analógico de LEDs. Connect/Disconnect Button - + Botón Conexión/Desconexión 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. - + Pulsa este botón para conectar con un servidor. Se abrirá una ventana donde puedes seleccionar un servidor. Si estás conectado, este botón finalizará la sesión. Connect and disconnect toggle button - + Botón de conexión y desconexión Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the - + Pulsando este botón cambia el texto del mismo de Conectar a Desconectar; esto es, tiene la función de conmutador para conectar y desconectar el software software. - + . Local Audio Input Fader - + Fader Entrada Audio Local Local audio input fader (left/right) - + Fader entrada audio local (izq/dcho) Reverberation effect level setting - + Nivel efecto reverberación Left channel selection for reverberation - + Selección canal izq para reverberación Right channel selection for reverberation - + Selección canal dcho para reverberación If this LED indicator turns red, you will not have much fun using the - + Si este indicador LED se vuelve rojo, no te divertirás demasiado utilizando el Delay status LED indicator - + Indicador LED estado retardo Buffers status LED indicator - + Indicador LED estado buffers - + C&onnect - + C&onectar &View - + &Ver &Connection Setup... - + &Configuración de Conexión... My &Profile... - + Mi &Perfil... C&hat... - + C&hat... &Settings... - + &Configuración... &Analyzer Console... - + &Analyzer Console... E&xit - + S&alir None - + Ninguno Center - + Centro R - + R L - + L 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 - + Con el fader de audio, los niveles relativos de los canales locales de audio derecho e izquierdo pueden cambiarse. Para una señal mono actúa como paneo entre los dos canales. Por ej., si se conecta un miocrófono al canal derecho y un instrumento al izquierdo que suena mucho más alto que el micrófono, mueve el fader en una dirección donde la etiqueta sobre el fader muestra , where - + , donde is the current attenuation indicator. - + es el indicador actual de atenuación. Reverberation Level - + Nivel Reverberación - 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. - + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono 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. + Se puede aplicar un efecto de reverberación a un canal local de audio mono o a ambos canales en modo estéreo. Se puede modificar la selección de canales en modo mono y el nivel de reverberación. Por ej., si la señal del micrófono va por el canal derecho de la tarjeta de sonido y se desea aplicar reverberación, cambia el selector de canal a derecho y sube el fader hasta alcanzar el nivel de reverberación deseado. 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 switched off and does not cause any additional CPU usage. - + El efecto de reverberación require un esfuerzo importante del procesador, por lo que solo debería usarse en ordenadores potentes. Si se deja el fader de reverberación al mínimo (la configuración por defecto), el efecto estará desactivado y no significará ninguna carga adicional para el procesador. Reverberation Channel Selection - + Selección Canal Reverberación 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. - + Con estos botones se puede escoger el canal de entrada de audio al que se aplica el efecto de reverberación. Se pueden elegir los canales de entrada izquierdo o derecho. Delay Status LED - + LED Estado Retardo 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 large for jamming. - + El indicador LED del estado del retardo muestra el estado actual del retardo del audio. Si está en verde, el retardo es perfecto para una jam session. Si está en amarillo, la sesión aún es posible, pero quizá sea más difícil tocar. Si está en rojo, el retardo es demasiado alto para tocar. Buffers Status LED - + LED Estado Buffers 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: - + El indicador LED del estado de buffers muestra el estado actual del flujo de audio. Si está verde, no hay problemas de buffer y no se interrumpe el flujo de audio. Si está rojo, el flujo de audio se interrumpe, a causa de uno de los siguientes problemas: The network jitter buffer is not large enough for the current network/audio interface jitter. - + El jitter buffer de red no es lo suficientemente grande para el jitter actual de la red/interfaz de audio. The sound card buffer delay (buffer size) is set to a too small value. - + El retardo de buffer de la tarjeta de audio (tamaño buffer) tiene un valor demasiado bajo. The upload or download stream rate is too high for the current available internet bandwidth. - + La tasa de subida o bajada is demasiado alta para el ancho de banda disponible de internet. The CPU of the client or server is at 100%. - + El procesador del cliente o del servidor está al 100%. - + user - + usuario - + users - + usuarios - + D&isconnect - + D&esconectar @@ -574,72 +658,72 @@ Delay - + Retardo Buffers - + Buffers Input - + Entrada L - + L R - + R Settings - + Configuración Chat - + Chat Mute Myself - + Mutearme Yo C&onnect - + C&onectar Pan - + Paneo Center - + Centro Reverb - + Reverb Left - + Izq Right - + Dcho @@ -647,458 +731,463 @@ Jitter Buffer Size - + Tamaño Jitter Buffer 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). - + El jitter buffer compensa el jitter de la red y la tarjeta de audio. El tamaño de este buffer tiene por tanto un impacto sobre la calidad del flujo de audio (el número de caídas de la señal) y el retardo total (a mayor buffer, mayor retardo). 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. - + El tamaño del jitter buffer se puede establecer para el cliente local y para el servidor remoto. Para el jitter buffer local, las caídas del flujo de audio se indican mediante la luz debajo de los faders del jitter buffer. Si la luz se vuelve roja, significa que ha habido una interrupción del flujo de audio. The jitter buffer setting is therefore a trade-off between audio quality and overall delay. - + Por tanto la configuración del jitter buffer es un compromiso entre calidad y retardo total. 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 Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + Hay disponible una configuración automática del jitter buffer. Si se activa Auto, los jitter buffers del cliente local y del servidor remoto se configuran automáticamente basándose en mediciones del jitter de la red y la tarjeta de audio. Si se activa esta opción, los faders quedan deshabilitados (no pueden moverse con el ratón). 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 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. - + En caso de activar la configuración automática del jitter buffer, los buffers de red del cliente local y del servidor remoto se asignan a un valor conservador para minimizar la probabilidad de fallos de audio. Para ajustar el retardo de audio/latencia se recomienda desactivar la función automática y bajar los valores de jitter buffer manualmente utilizando los controles deslizantes hasta alcanzar un límite aceptable de caídas de audio. El indicador LED ofrece una visualización de las caídas de audio mediante una luz roja. Local jitter buffer slider control - + Control deslizante jitter buffer local Server jitter buffer slider control - + Control deslizante jitter buffer servidor Auto jitter buffer switch - + Interruptor auto jitter buffer Jitter buffer status LED indicator - + Indicador LED estado jitter buffer Sound Card Device - + Dispositivo de Audio The ASIO driver (sound card) can be selected using - + El driver ASIO (tarjeta de audio) se puede seleccionar utilizando 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. - + en el sistema operativo Windows. En MacOs/Linux no es posible seleccionar la tarjeta de audio. Si el driver ASIO no es válido se muestra un mensaje de error y se selecciona el driver válido anterior. If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Si el driver se selecciona durante una conexión activa, la conexión se detiene, se cambia el driver y la conexión se reanuda automáticamente. Sound card device selector combo box - + Selector de dispositivo de audio 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. - + En caso de utilizar el driver ASIO4ALL, por favor ten en cuenta que este driver normalmente introduce una latencia adicional de 10-30 ms. Por tanto se recomienda utilizar la tarjeta de audio con un driver nativo. If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + Si utilizas el driver kX ASIO, asegúrate de conectar las entradas ASIO en el panel de configuración de kX DSP. Sound Card Channel Mapping - + Mapeo Canales Tarjeta Audio 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. - + Si el dispositivo de audio ofrece más de un canal de entrada o salida, son visibles las configuraciones para el Mapeo de Canales de Entrada y de Salida. For each - + Para cada input/output channel (Left and Right channel) a different actual sound card channel can be selected. - + canal de entrada/salida (canal Izquierdo y Derecho) se puede seleccionar un canal diferente de la tarjeta de audio. Left input channel selection combo box - + Selección canal entrada izquierdo Right input channel selection combo box - + Selección canal entrada derecho Left output channel selection combo box - + Selección canal salida izquierdo Right output channel selection combo box - + Selección canal salida derecho Enable Small Network Buffers - + Activar Buffers Red Pequeños 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 - + Si se activa, se habilita el soporte para paquetes de red de audio muy pequeños. Solo se utilizan estos paquetes pequeños si el retardo de buffer de la tarjeta de audio es menor de samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + muestras. Cuanto menores los buffers de red, menor la latencia de audio. Pero al mismo tiempo, aumenta la carga de red y la probabilidad de caídas de audio también aumenta. Enable small network buffers check box - + Activar buffers de red pequeños Sound Card Buffer Delay - + Retardo Buffer Tarjeta Audio The buffer delay setting is a fundamental setting of the - + Este parámetro es una parte fundamental de la configuración del software software. This setting has influence on many connection properties. - + . Este parámetro tiene un impacto sobre muchas propiedades de la conexión. Three buffer sizes are supported - + Hay soporte para tres tamaños de buffer 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. - + 64 muestras: Es la configuración aconsejada puesto que ofrece la latencia más baja, aunque no funciona con todas las tarjetas de audio. 128 samples: This setting should work on most of the available sound cards. - + 128 muestras: Esta configuración debería de funcionar con la mayoría de tarjetas de audio. 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - + 256 muestras: Esta configuración solo debería usarse con un ordenador muy lento o con una conexión a internet muy lenta. Some sound card driver do not allow the buffer delay to be changed from within the - + Algunos drivers de tarjetas de audio no permiten cambiar el retardo de buffer desde el software 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. - + . En este caso la configuración del retardo de buffer se deshabilita. Para cambiarlo, esta configuración debe realizarse en el driver de la tarjeta de audio. En Windows, pulsa el botón de Configuración ASIO para acceder al panel de configuración. En Linux, utiliza la herramienta de configuración de Jack para cambiar el tamaño del buffer. If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + Si no hay ningún tamaño de buffer seleccionado y todas las configuraciones están deshabilitadas, el driver está utilizando un tamaño de buffer no soportado. El software - software will still work with this setting but with restricted performannce. - + software will still work with this setting but with restricted performance. + seguirá funcionando con esta configuración pero con un rendimiento limitado. 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. - + El retardo del buffer tiene un impacto en el estado de la conexión, la tasa de subida y el retardo total. Cuanto menor sea el retardo del buffer, mayor la probabilidad de que el indicador de estado esté en rojo (caídas de audio), mayor la tasa de subida y menor el retardo total. The buffer setting is therefore a trade-off between audio quality and overall delay. - + Por tanto la configuración del buffer es un compromiso entre calidad de audio y retardo total. If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - + Si la configuración de retardo de buffers se encuentra deshabilitada, es porque el driver de audio prohíbe la modificación de este parámetro desde dentro del software software. 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. - + . En Windows, pulsa el botón de Configuración ASIO para abrir el panel de configuración del driver. En Linux, utiliza la herramienta de configuración de Jack para cambiar el tamaño del buffer. 128 samples setting radio button - + Configuración 128 muestras 256 samples setting radio button - + Configuración 256 muestras 512 samples setting radio button - + Configuración 512 muestras ASIO setup push button - + Botón configuración ASIO Fancy Skin - + Interfaz Oscura If enabled, a fancy skin will be applied to the main window. - + Si se activa, se aplicará un aspecto oscuro a la ventana principal. Fancy skin check box - + Activar interfaz oscura Display Channel Levels - + Mostrar Niveles Canales If enabled, each client channel will display a pre-fader level bar. - + Si se activa, cada canal de cliente mostrará una barra de nivel pre-fader. Display channel levels check box - + Mostrar niveles canales Audio Channels - + Canales Audio 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 the audio signal which is sent to the server is mono but the return signal is stereo. This is useful for the case that the 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. - + Selecciona el número de canales de audio a utilizar. Hay tres modos disponibles. Los modos mono y estéreo utilizan uno y dos canales de audio respectivamente. En modo entrada-mono/salida-estéreo la señal de audio enviada al servidor es mono pero la señal que vuelve es estéreo. Esto es útil si la tarjeta de audio tiene un instrumento en un canal de entrada y un micrófono en el otro. En ese caso las dos señales de entrada pueden combinarse en un canal mono pero la mezcla del servidor se escucha en estéreo. 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. - + Activar el modo estéreo aumentará la tasa de envío de datos. Asegúrate de que la tasa de subida no excede el ancho de banda disponible en tu conexión a internet. 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. - + En el caso del modo estéreo, no estará disponible la selección de canal para el efecto de reverberación en la ventana principal puesto que en este caso el efecto se aplicará a ambos canales. Audio channels combo box - + Selección canales audio Audio Quality - + Calidad Audio 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 upload rate does not exceed the available bandwidth of your internet connection. - + Selecciona la calidad de audio deseada. Se puede seleccionar una calidad baja, normal o alta. Cuanto mayor la calidad del audio, mayor la tasa de transferencia de datos de audio. Asegúrate de que la tasa de subida no excede el ancho de banda disponible en tu conexión a internet. Audio quality combo box - + Selección calidad audio New Client Level - + Nivel Cliente Nuevo 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 of that client was already stored. - + La configuración del nivel de clientes nuevos define el nivel del fader para una nueva conexión expresado en un porcentaje. Esto es, si un cliente nuevo se conecta al servidor actual, su fader tomará el valor especificado si no se ha guardado ningún valor de una conexión anterior de ese cliente. New client level edit box - + Campo para nivel nuevo cliente Central Server Address - + Dirección Servidor Central 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. - + La dirección del servidor central es la dirección IP o URL del servidor central en el que se gestiona la lista de servidores en la ventana de conexión. Aquí se puede escoger la región local de entre los servidores centrales por defecto o se puede especificar una dirección manualmente. Default central server type combo box - + Selección servidor central Central server address line edit - + Dirección servidor central Current Connection Status Parameter - + Parámetro Estado Conexión Actual 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. - + El ping es el tiempo que requiere el flujo de audio para viajar desde el cliente al servidor y volver. Este retardo lo determina la red. Esta cifra debería ser de unos 20-30 ms. Si este retardo es mayor (por ej. 50-60 ms), la distancia al servidor es demasiado grande o tu conexión a internet no es óptima. The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - + El retardo total se calcula con el ping y el retardo ocasionado por la configuración de buffers. 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 your internet connection by, e.g., using speedtest.net). - + La tasa de subida depende del tamaño actual de paquetes de audio y la configuración de compresión de audio. Asegúrate de que la tasa de subida no es mayor que la tasa disponible (comprueba la tasa de subida de tu conexión a internet, por ej. con speedtest.net). If this LED indicator turns red, you will not have much fun using the - + Si este indicador LED se vuelve rojo, no te divertirás demasiado utilizando el software software. - + . ASIO Setup - + Configuración ASIO Mono - + Mono Mono-in/Stereo-out - + Mono-in/Estéreo-out Stereo - + Estéreo Low - + Baja Normal - + Normal High - + Alta Manual - + Manual Default - + Por defecto Default (North America) - + Por defecto (Norteamérica) + + + + preferred + aconsejado Size: - + Tamaño: Buffer Delay - + Retardo Buffer Buffer Delay: - + Retardo Buffer: The selected audio device could not be used because of the following error: - + El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: The previous driver will be selected. - + Se utilizará el driver anterior. Ok - + Ok @@ -1106,157 +1195,157 @@ Settings - + Configuración Soundcard - + Tarjeta Sonido Device - + Dispositivo Input Channel Mapping - + Mapeo Canales Entrada L - + L R - + R Output Channel Mapping - + Mapeo Canales Salida Enable Small Network Buffers - + Activar Buffers Pequeños Buffer Delay - + Retardo Buffer (preferred) - + (aconsejado) (default) - + (por defecto) (safe) - + (seguro) Driver Setup - + Configuración Driver Jitter Buffer - + Jitter Buffer Auto - + Auto Local - + Local Server - + Servidor Size - + Valor Misc - + Varios Audio Channels - + Canales Audio Audio Quality - + Calidad Audio New Client Level - + Nivel Cliente Nuevo % - + % Fancy Skin - + Intfaz Oscura Display Channel Levels - + Mostrar Nivel Canales Central Server Address: - + Dirección Servidor Central: Audio Stream Rate - + Tasa Muestreo Audio val - + val Ping Time - + Tiempo Ping Overall Delay - + Retardo Total @@ -1264,82 +1353,86 @@ Server List - + Lista Servidores 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. - + La lista de servidores muestra una lista de servidores disponibles que se encuentran registrados en el servidor central. Escoge un servidor de la lista y pulsa el botón de conectar para conectarte a este servidor. También es posible realizar la conexión haciendo doble clic en un servidor de la lista. Si un servidor está ocupado, se puede desplegar una lista de los músicos conectados al pulsar el icono al lado del nombre. Los servidores permanentes se muestran en negrita. 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. - + Ten en cuenta que puede llevar un tiempo recuperar la lista de servidores del servidor central. Si no se especifica una dirección válida en la configuración, no habrá ninguna lista de servidores disponible. Server list view - + Vista lista de servidores Server Address - + Dirección Servidor The IP address or URL of the server running the - + La dirección IP o URL del servidor ejecutando el software del servidor + + + 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: + debe introducirse aquí. Se puede añadir un número de puerto opcional detrás de la dirección IP o URL utilizando dos puntos como separador, por ej. ejemplo.org: - 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: - + server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: + debe introducirse aquí. Se puede añadir un número de puerto opcional detrás de la dirección IP o URL utilizando dos puntos como separador, por ej. ejemplo.org: . A list of the most recent used server IP addresses or URLs is available for selection. - + . Hay disponible una lista de las direcciones IP o URLs utilizadas más recientemente para su selección. Server address edit box - + Selección dirección servidor Holds the current server IP address or URL. It also stores old URLs in the combo box list. - + Contiene la dirección IP o URL actual del servidor. También guarda viejas URL en la lista. Filter - + Filtro - The server list is filered by the given text. Note that the filter is case insensitive. - + The server list is filtered by the given text. Note that the filter is case insensitive. + La lista de servidores se filtra con el texto introducido. El filtro no es sensible a mayúsculas/minúsculas. Filter edit box - + Campo filtro Show All Musicians - + Mostrar Todos los Músicos 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. - + Si activas esta opción, se mostrarán los músicos de todos los servidores. Si lo desactivas, se colapsan todas las listas. Show all musicians check box - + Selección Mostrar todos los músicos @@ -1347,440 +1440,455 @@ Connection Setup - + Configuración Conexión Filter - + Filtro Show All Musicians - + Mostrar Todos los Músicos Server Name - + Nombre Servidor Ping Time - + Tiempo Ping Musicians - + Músicos Location - + Ubicación Server Name/Address - + Nombre/Dirección Servidor C&ancel - + C&ancelar &Connect - + &Conectar CHelpMenu - - + + &Help + &Ayuda + + + + Getting &Started... - + Cómo &Empezar... - + Software &Manual... - + Manual del &Software... - + What's &This - + Qué es &Esto - + &About... - + &Acerca de... CLicenceDlg - + I &agree to the above licence terms - + &Acepto los términos de la licencia arriba expuestos - + Accept - + Acepto - + Decline - - - - - By connecting to this server and agreeing to this notice, you agree to the following: - - - - - 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 - - - - - You are free to: - - - - - Share - - - - - copy and redistribute the material in any medium or format - + No Acepto - Adapt - - - - - remix, transform, and build upon the material - + By connecting to this server and agreeing to this notice, you agree to the following: + Al conectarte a este servidor y aceptar esta notificación, aceptas lo siguiente: - The licensor cannot revoke these freedoms as long as you follow the license terms. - - - - - Under the following terms: - - - - - Attribution - - - - - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. - + 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 + Ud. declara que todos los datos, audios u otras obras transmitidas a este servidor son la propiedad de Ud. y creadas por Ud. o sus licenciatarios, y que pone a disposición de terceras partes estos datos, audios u otras obras mediante la siguiente Licencia Creative Commons (para más información sobre esta licencia, ver - NonCommercial - - - - - You may not use the material for commercial purposes. - + You are free to: + Ud. es libre de: - ShareAlike - + Share + Compartir - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - + copy and redistribute the material in any medium or format + copiar y redistribuir el material en cualquier medio o formato + + + + Adapt + Adaptar - No additional restrictions - + remix, transform, and build upon the material + remezclar, transformar y construir a partir del material + The licensor cannot revoke these freedoms as long as you follow the license terms. + El licenciante no puede revocar estas libertades en tanto Ud. siga los términos de la licencia. + + + + Under the following terms: + Bajo los siguientes términos: + + + + Attribution + Atribución + + + + You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + Ud. debe dar crédito de manera adecuada, brindar un enlace a la licencia, e indicar si se han realizado cambios. Puede hacerlo en cualquier forma razonable, pero no de forma tal que sugiera que Ud. o su uso tienen el apoyo de la licenciante. + + + + NonCommercial + No-Comercial + + + + You may not use the material for commercial purposes. + No puede utilizar el material con fines comerciales. + + + + ShareAlike + ShareAlike + + + + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + Si remezcla, transforma o construye sobre el material, debe distribuir sus contribuciones bajo la misma licencia que el original. + + + + No additional restrictions + Sin restricciones adicionales + + + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. - + No puede aplicar términos legales o medidas tecnológicas que restringan legalmente a otras personas de hacer cualquier cosa permitida por la licencia. CMusProfDlg - + server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. - + Esta etiqueta también se mostrará a cada cliente conectado al mismo servidor que tú. Se se deja vacío, se muestra la dirección IP en su lugar. - + Alias or name edit box - + Campo para alias o nombre + + + + Instrument picture button + Botón imagen instrumento + + + + Country flag button + Botón bandera país + + + + City edit box + Ciudad + + + + Skill level combo box + Nivel de habilidad + + + + + + None + Ninguno + + + + + Musician Profile + Perfil Músico + + + + Alias/Name + Alias/Nombre + + + + Instrument + Instrumento + + + + Country + País + + + + City + Ciudad + + + + Skill + Habilidad + + + + &Close + &Cerrar + + + + Beginner + Principiante + + + + Intermediate + Intermedio + + + + Expert + Experto - Instrument picture button - - - - - Country flag button - - - - - City edit box - - - - - Skill level combo box - - - - - - - None - - - - - - Musician Profile - - - - - Alias/Name - - - - - Instrument - - - - - Country - - - - - City - - - - - Skill - - - - - &Close - - - - - Beginner - - - - - Intermediate - - - - - Expert - - - - 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. - + Escribe tu nombre o alias aquí para que los demás músicos con quien quieras tocar te reconozcan. Puedes además añadir una imagen del instrumento que tocas y la bandera del país donde vives. La ciudad donde vives y tu nivel de habilidad con el instrumento también pueden añadirse. - + What you set here will appear at your fader on the mixer board when you are connected to a - - - - - Drum Set - - - - - Djembe - - - - - Electric Guitar - - - - - Acoustic Guitar - - - - - Bass Guitar - - - - - Keyboard - - - - - Synthesizer - - - - - Grand Piano - - - - - Accordion - - - - - Vocal - - - - - Microphone - - - - - Harmonica - - - - - Trumpet - - - - - Trombone - + Lo que introduzcas aquí aparecerá en tu fader del mezclador cuando te conectes a un servidor - French Horn - + Drum Set + Batería - Tuba - + Djembe + Djembé - Saxophone - + Electric Guitar + Guitarra Eléctrica - Clarinet - + Acoustic Guitar + Guitarra Acústica - Flute - + Bass Guitar + Bajo Eléctrico - Violin - + Keyboard + Teclado - Cello - + Synthesizer + Sintetizador - Double Bass - + Grand Piano + Piano de Cola - Recorder - + Accordion + Acordeón - Streamer - + Vocal + Voz - Listener - + Microphone + Micrófono - Guitar+Vocal - + Harmonica + Armónica - Keyboard+Vocal - + Trumpet + Trompeta - Bodhran - + Trombone + Trombón - Bassoon - + French Horn + Trompa - Oboe - + Tuba + Tuba - Harp - + Saxophone + Saxofón + Clarinet + Clarinete + + + + Flute + Flauta + + + + Violin + Violín + + + + Cello + Violonchelo + + + + Double Bass + Contrabajo + + + + Recorder + Grabadora + + + + Streamer + Streamer + + + + Listener + Oyente + + + + Guitar+Vocal + Guitarra+Voz + + + + Keyboard+Vocal + Teclado+Voz + + + + Bodhran + Bodhran + + + + Bassoon + Fagot + + + + Oboe + Oboe + + + + Harp + Arpa + + + Viola - + Viola + + + + Congas + Congas + + + + Bongo + Bongo @@ -1788,225 +1896,225 @@ Client List - + Lista Clientes 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. - + La lista de clientes muestra todos los clientes actualmente conectados a este servidor. Alguna información sobre los clientes como la dirección IP y el nombre aparecen para cada cliente conectado. Connected clients list view - + Vista lista clientes conectados Start Minimized on Operating System Start - + Arranca Minimizado al Arrancar Sistema Operativo If the start minimized on operating system start check box is checked, the - + Si se activa el arranque al arrancar el sistema operativo, el server will be started when the operating system starts up and is automatically minimized to a system task bar icon. - + servidor arrancará cuando arranque el sistema operativo y se minimizará automáticamente a un icono en la barra de tareas. Show Creative Commons Licence Dialog - + Mostrar Diálogo de Licencia Creative Commons If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + Si se activa, se mostrará un diálogo con la Licencia Creative Commons BY-NC-SA 4.0 cada vez que un cliente nuevo se conecte al servidor. Make My Server Public - + Mi Servidor es Público If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + Si se activa Mi Servidor es Público, este servidor se registra en el servidor central para que todos los usuarios de users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - + puedan ver el servidor en la lista de servidores de la ventana de conexión y puedan conectarse a él. El registro del servidor se renueva periódicamente para asegurarse de que todos los servidores en la lista se encuentren realmente disponibles. Register Server Status - + Estado Registro Servidor If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + Si se ha activado Mi Servidor es Público, esto mostrará si se ha registrado en el servidor central con éxito. Central Server Address - + Dirección Servidor Central 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. - + La dirección del Servidor Central es la dirección IP o URL del servidor central en el que se ha registrado este servidor. Aquí se puede escoger la región local de entre los servidores centrales por defecto o se puede especificar una dirección manualmente. Default central server type combo box - + Selección servidor central Central server address line edit - + Dirección servidor central Server Name - + Nombre Servidor 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. - + El nombre del servidor identifica a tu servidor en la lista de conexión de servidores de los clientes. Si no se especifica un nombre, se muestra la dirección IP en su lugar. Server name line edit - + Nombre del servidor Location City - + Ubicación Ciudad 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. - + Aquí se puede especificar la ciudad en donde se ubica el servidor. Si se introduce una ciudad, se mostrará en la lista de conexión de servidores de los clientes. City where the server is located line edit - + Ciudad en donde se encuentra en servidor Location country - + Ubicación país 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. - + Aquí se puede especificar el país en donde se ubica el servidor. Si se introduce un país, se mostrará en la lista de conexión de servidores de los clientes. Country where the server is located combo box - + País en donde se encuentra el servidor E&xit - + S&alir &Hide - + &Ocultar servidor server - + &Open - + &Abrir servidor server - + Manual - + Manual Default - + Por defecto Default (North America) - + Por defecto (Norteamérica) Server - + : Servidor &Window - + &Ventana - + Unregistered - + Sin registrar - + Bad address - + Dirección no válida - + Registration requested - + Registro solicitado - + Registration failed - + Error de registro - + Check server version - + Comprueba la versión del servidor - + Registered - + Registrado - + Central Server full - + Servidor Central lleno - + Unknown value - + Valor desconocido @@ -2014,63 +2122,63 @@ Client IP:Port - + IP:Puerto cliente Name - + Nombre Jitter Buffer Size - + Tamaño Jitter Buffer Start Minimized on Windows Start - + Arranca Minimizado al Arrancar Windows Show Creative Commons BY-NC-SA 4.0 Licence Dialog - + Mostrar Diálogo de Licencia Creative Commons BY-NC-SA 4.0 Make My Server Public (Register My Server in the Server List) - + Mi Servidor es Público (Registra Mi Servidor en la Lista de Servidores) STATUS - + ESTADO Central Server Address: - + Dirección Servidor Central: My Server Info - + Info Mi Servidor Location: City - + Ubicación: Ciudad Location: Country - + Ubicación: País TextLabelNameVersion - + TextLabelNameVersion @@ -2078,129 +2186,134 @@ The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + El servidor Jack no está arrancado. Este software necesita el servidor Jack para funcionar. Normalmente, si el servidor no está arrancado este software lo arrancará automáticamente. Parece que este auto-arranque no ha funcionado. Intenta arrancar el servidor Jack manualmente. The Jack server sample rate is different from the required one. The required sample rate is: - + La tasa de muestreo del servidor Jack es distinta a la requerida. La tasa de muestreo requerida es: You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. - + Puedes utilizar una herramiento como <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> para ajustar la tasa de muestreo del servidor Jack. Make sure to set the Frames/Period to a low value like - + Asegúrate de establecer los Cuadros/Período en un valor bajo como to achieve a low delay. - + para conseguir un retardo bajo. The Jack port registering failed. - + El registro de puertos de Jack falló. Cannot activate the Jack client. - + No se puede activar el cliente Jack. - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + El servidor Jack se ha cerrado. Este software necesita el servidor Jack para funcionar. Intenta reiniciar el software para solucionar este problema. CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio input AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio output AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + La tasa de muestreo actual del dispositivo de audio de entrada de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + La tasa de muestreo actual del dispositivo de audio de salida de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. The audio input stream format for this audio device is not compatible with this software. - + El formato de transmisión de audio de entrada para este dispositivo de audio no es compatible con este software. The audio output stream format for this audio device is not compatible with this software. - + El formato de transmisión de audio de salida para este dispositivo de audio no es compatible con este software. The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. - + Los tamaños de buffer del dispositivo actual de entrada/salida de audio no pueden establecerse en un valor común. Por favor, selecciona otros dispositivos de entrada/salida de audio en la configuración del sistema. The audio driver could not be initialized. - + No se pudo iniciar el driver de audio. The audio device does not support the required sample rate. The required sample rate is: - + El dispositivo de audio no soporta la tasa de muestreo requerida. La tasa de muestreo requerida es de: The audio device does not support to set the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to - + El dispositivo de audio no permite establecer la tasa de muestreo requerida. Este error puede suceder si tienes un dispositivo de audio como el Roland UA-25EX en el que se configura mediante un interruptor físico en el dispositivo. Si es este el caso, por favor cambia la tasa de muestreo a Hz on the device and restart the - + Hz en el dispositivo y reinicie el software software. - + . The audio device does not support the required number of channels. The required number of channels for input and output is: - + El dispositivo de audio no soporta el número de canales requerido. El número de canales requerido es de: Required audio sample format not available. - + Formato de muestras de audio requerido no disponible. No ASIO audio device (driver) found. - + No se ha encontrado un dispositivo ASIO (driver). The - + El software 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 the ASIO4All driver. - + requiere la interfaz de audio de baja latencia ASIO para funcionar correctamente. No es una interfaz estándar de Windows y por tanto se requiere un driver de audio especial. Tu tarjeta de audio podría tener un driver ASIO nativo (lo recomendado) o quizá quieras probar un driver alternativo como ASIO4All. + + + + Error closing stream: $s + Error cerrando transmisión: $s @@ -2208,46 +2321,54 @@ Invalid device selection. - + Selección de dispositivo no válida. 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: - + Las propiedades del driver de audio han cambiado a un estado que es incompatible con este software. El dispositivo de audio seleccionado no se pudo utilizar a causa del siguiente error: Please restart the software. - + Por favor reinicie el software. Close - + Cerrar No usable - + Ningún driver audio device (driver) found. - + de audio utilizable encontrado. In the following there is a list of all available drivers with the associated error message: - + A continuación hay una lista de todos los drivers disponibles con el error asociado: Do you want to open the ASIO driver setups? - + ¿Quieres abrir la configuración del driver ASIO? could not be started because of audio interface issues. + no pudo arrancar debido a problemas con el dispositivo de audio. + + + + global + + + For more information use the What's This help (help menu, right mouse button or Shift+F1) diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index b12e86d1..dbb9c0db 100644 Binary files a/src/res/translation/translation_fr_FR.qm and b/src/res/translation/translation_fr_FR.qm differ diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index f1d21c72..971ed813 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -4,47 +4,111 @@ CAboutDlg - + The Le logiciel - software enables musicians to perform real-time jam sessions over the internet. There is a - permet aux musiciens d'effectuer des boeufs en temps réel sur internet. Il existe un + permet aux musiciens de faire des bœufs en temps réel sur internet. Il existe un + + + + software enables musicians to perform real-time jam sessions over the internet. + permet aux musiciens de faire des bœufs en temps réel sur internet. + + + + server which collects the audio data from each + qui collecte les données audio de chaque client + + + + There is a + Il existe un serveur - server which collects the audio data from each - qui collecte les données audio de chaque - - - client, mixes the audio data and sends the mix back to each client. - client, mixe les données audio et renvoie le mixage à chaque client. + , mixe les données audio et renvoie le mixage à chaque client. uses the following libraries, resources or code snippets: - + utilise les bibliothèques, ressources ou extraits de code suivants : - + + Qt cross-platform application framework + Cadriciel d'application multiplateforme Qt + + + + Audio reverberation code by Perry R. Cook and Gary P. Scavone + Code de réverbération audio par Perry R. Cook et Gary P. Scavone + + + + Some pixmaps are from the + Certaines images sont issues de + + + + Country flag icons from Mark James + Icônes de drapeaux de pays par Mark James + + + + For details on the contributions check out the + Pour plus de détails sur les contributions, consultez la + + + + Github Contributors list + liste de contributeurs sur github + + + + Spanish + Espagnol + + + + French + Français + + + + Portuguese + Portugais + + + + Dutch + Néerlandais + + + + German + Allemand + + + About À propos - + , Version , version - + Internet Jam Session Software - Logiciels de boeuf sur Internet + Logiciels de bœuf sur Internet - + Under the GNU General Public License (GPL) Sous la licence public général GNU (GPL) @@ -57,14 +121,34 @@ À propos - + TextLabelVersion - + Copyright (C) 2005-2020 Volker Fischer and others - + Copyright (C) 2005-2020 Volker Fischer et autres + + + + A&bout + À &propos + + + + &Libraries + Bib&liothèques + + + + &Contributors + &Contributeurs + + + + &Translation + &Traduction Author: Volker Fischer @@ -85,25 +169,25 @@ Analyzer Console - + Console d'analyse Error Rate of Each Buffer Size - + Taux d'erreur de chaque taille de tampon CAudioMixerBoard - + Server Serveur - + T R Y I N G T O C O N N E C T - + T E N T A T I V E D E C O N N E X I O N @@ -111,62 +195,62 @@ Channel Level - + Niveau de canal 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. - + Affiche le niveau audio pré-fader de ce canal. Tous les clients connectés au serveur se verront attribuer un niveau audio, la même valeur pour chaque client. Input level of the current audio channel at the server - + Niveau d'entrée du canal audio actuel sur le serveur Mixer Fader - + Charriot du mixeur 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. - + Règle le niveau audio de ce canal. Tous les clients connectés au serveur se verront attribuer un charriot audio à chaque client, ce qui permettra d'ajuster le mixage local. Local mix level setting of the current audio channel at the server - + Réglage du niveau de mixage local du canal audio actuel sur le serveur With the Mute checkbox, the audio channel can be muted. - + En cochant la case Muet, le canal audio peut être mis en sourdine. Mute button - + Bouton de sourdine 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. - + En cochant la case Solo, le canal audio peut être réglé sur solo, ce qui signifie que tous les autres canaux, à l'exception du canal actuel, sont mis en sourdine. Il est possible de mettre plus d'un canal en solo. Solo button - + Bouton de solo Fader Tag - + Étiquette de charriot 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. - + L'étiquette de charriot identifie le client connecté. Le nom du tag, la photo de votre instrument et un drapeau de votre pays peuvent être définis dans la fenêtre principale. @@ -186,68 +270,68 @@ MUTE - + MUET SOLO - + SOLO - + Alias/Name - + Pseudo/nom - + Instrument - + Instrument - + Location - Localisation + Localisation - - - + + + Skill Level - + Niveau de compétence - + Beginner - + Débutant - + Intermediate - + Intermédiaire - + Expert - + Expert - + Musician Profile - + Profil de musicien Mute - + Muet Solo - + Solo @@ -255,12 +339,12 @@ Chat Window - + Fenêtre de tchate The chat window shows a history of all chat messages. - + La fenêtre de tchate affiche un historique de tous les messages de chat. @@ -270,12 +354,12 @@ Input Message Text - + Saisie du texte du message 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. - + Saisissez le texte du message de tchate dans la zone d'édition et appuyez sur la touche Entrée pour envoyer le message au serveur qui le distribue à tous les clients connectés. Votre message apparaîtra alors dans la fenêtre de tchate. @@ -306,42 +390,42 @@ Input Level Meter - + Indicateur de niveau d'entrée The input level indicators show the input level of the two stereo channels of the current selected audio input. - + Les indicateurs de niveau d'entrée indiquent le niveau d'entrée des deux canaux stéréo de l'entrée audio actuellement sélectionnée. Make sure not to clip the input signal to avoid distortions of the audio signal. - + Veillez à ne pas clipper le signal d'entrée afin d'éviter les distorsions du signal audio. If the - + Si le logiciel software, you should not hear your singing/instrument in the loudspeaker or your headphone when the - + , vous ne cevriez pas entendre votre chant/instrument dans le haut-parleur ou votre casque lorsque le logiciel software is connected and you play your instrument/sing in the microphone, the LED level 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. - + est connecté et que vous jouez de votre instrument ou chantez dans le microphone, le voyant de niveau devrait clignoter. Si ce n'est pas le cas, vous avez probablement sélectionné le mauvais canal d'entrée (par exemple, entrée ligne au lieu de l'entrée microphone) ou réglé le gain d'entrée trop bas dans le mixeur audio (Windows). For a proper usage of the - + Pour un bon usage du logiciel software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). - + n'est pas connecté. Vous pouvez y parvenir en mettant en sourdine votre canal audio d'entrée dans le mixeur de lecture (et âs dans le mixeur d'enregistrement !). @@ -356,38 +440,38 @@ Connect/Disconnect Button - + Bouton connecter/déconnecter 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. - + Appuyez sur ce bouton pour vous connecter à un serveur. Une boîte de dialogue vous permettant de sélectionner un serveur s'ouvrira. Si vous êtes connecté, l'appui sur ce bouton mettra fin à la session. Connect and disconnect toggle button - + Bouton-bascule de connection/déconnexion Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the - + En cliquant sur ce bouton, la légende du bouton passe de Connecter à Déconnecter, c'est-à-dire qu'il met en œuvre une fonctionnalité de basculement pour connecter et déconnecter le logiciel software. - + . Local Audio Input Fader - + Chariot d'entrée audio locale Local audio input fader (left/right) - + Chariot d'entrée audio locale (gauche/droite) @@ -407,7 +491,7 @@ If this LED indicator turns red, you will not have much fun using the - + Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le logiciel @@ -421,7 +505,7 @@ - + C&onnect Se c&onnecter @@ -484,97 +568,97 @@ 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 - + Avec le chariot audio, les niveaux relatifs des canaux audio locaux gauche et droit peuvent être modifiés. Pour un signal mono, il agit comme un panoramique entre les deux canaux. Si, par exemple, un microphone est connecté au canal d'entrée droit et qu'un instrument est connecté au canal d'entrée gauche qui est beaucoup plus fort que le microphone, déplacez le fader audio dans une direction où l'étiquette au-dessus du chariot indique , where - + , où is the current attenuation indicator. - + est l'indicateur d'atténuation actuel. Reverberation Level - + Niveau de réverbération - 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. - + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono 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. + Un effet de réverbération peut être appliqué à un canal audio mono local ou aux deux canaux en mode stéréo. La sélection du canal mono et le niveau de réverbération peuvent être modifiés. Si, par exemple, le signal du microphone est envoyé dans le canal audio droit de la carte son et qu'un effet de réverbération doit être appliqué, réglez le sélecteur de canal à droite et déplacez le curseur vers le haut jusqu'à ce que le niveau de réverbération souhaité soit atteint. 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 switched off and does not cause any additional CPU usage. - + L'effet de réverbération nécessite un processeur important, de sorte qu'il ne doit être utilisé que sur des PC rapides. Si le chariot de niveau de réverbération est réglé au minimum (qui est le réglage par défaut), l'effet de réverbération est désactivé et n'entraîne aucune utilisation supplémentaire du processeur. Reverberation Channel Selection - + Sélection de canal de réverbération 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. - + Ces boutons radio permettent de choisir le canal d'entrée audio sur lequel l'effet de réverbération est appliqué. Il est possible de sélectionner le canal d'entrée gauche ou droit. Delay Status LED - + Voyant d'état de délai 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 large for jamming. - + Le voyant d'état de délai indique l'état actuel du délai audio. Si le voyant est vert, le délai est parfait pour une session de bœuf. Si le voyant est jaune, une session est toujours possible mais elle peut être plus difficile à jouer. Si le voyant est rouge, le délai est trop important pour un bœuf. Buffers Status LED - + Voyant d'état de tampon 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: - + Le voyant d'état des tampons indique l'état actuel de l'audio/du streaming. Si le voyant est vert, il n'y a pas de dépassement de mémoire tampon ni de sous-dépassement et le flux audio n'est pas interrompu. Si le voyant est rouge, le flux audio est interrompu en raison de l'un des problèmes suivants : The network jitter buffer is not large enough for the current network/audio interface jitter. - + Le tampon de jitter réseau n'est pas assez grand pour le jitter actuel de l'interface réseau/audio. The sound card buffer delay (buffer size) is set to a too small value. - + Le délai du tampon de la carte son (taille du tampon) est réglé sur une valeur trop faible. The upload or download stream rate is too high for the current available internet bandwidth. - + Le taux de flux montant ou descendant est trop élevé pour la bande passante Internet actuellement disponible. The CPU of the client or server is at 100%. - + Le processeur du client ou du serveur est à 100%. - + user utilisateur - + users utilisateurs - + D&isconnect - + Dé&connecter @@ -627,7 +711,7 @@ Pan - + Pan @@ -655,32 +739,32 @@ Jitter Buffer Size - + Taille du tampon de gigue 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). - + Le tampon de gigue compense les gigues de synchronisation du réseau et de l'interface audio. La taille de ce tampon de gigue a donc une influence sur la qualité du flux audio (combien de décrochages se produisent) et le délai global (plus le tampon est long, plus le délai est important). 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. - + La taille du tampon de gigue peut être choisie manuellement pour le client local et le serveur distant. Pour le tampon de gigue local, les désynchronisations dans le flux audio sont indiquées par le voyant situé en bas des chariots de taille du tampon de gigue. Si le voyant devient rouge, un dépassement de la taille de la mémoire tampon a eu lieu et le flux audio est interrompu. The jitter buffer setting is therefore a trade-off between audio quality and overall delay. - + Le réglage du tampon de gigue est donc un compromis entre la qualité audio et le délai global. 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 Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + Un réglage automatique de la taille du tampon de gigue est disponible. Si la case Auto est activée, les tampons de gigue du client local et du serveur distant sont réglés automatiquement en fonction des mesures de la gigue de synchronisation du réseau et de la carte son. Si la case Auto est activée, les chariots de la taille du tampon de gigue sont désactivés (ils ne peuvent pas être déplacés avec la souris). 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 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. - + Si le réglage automatique du tampon de gigue est activé, les tampons réseau du client local et du serveur distant sont réglés à une valeur prudente pour minimiser la probabilité de décrochage audio. Pour ajuster le délai/latence audio, il est recommandé de désactiver la fonction de réglage automatique et de réduire manuellement la taille du tampon de gigue en utilisant les curseurs jusqu'à ce que votre limite personnelle acceptable du nombre d'interruptions soit atteinte. Le voyant visualisera les décrochages audio du tampon de gigue local par une lumière rouge. @@ -705,22 +789,22 @@ Sound Card Device - + Périphérique d'interface audio The ASIO driver (sound card) can be selected using - + Le pilote ASIO (interface audio) peut être sélectionné en utilisant 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. - + sous le système d'exploitation Windows. Sous MacOS/Linux, aucune sélection de carte son n'est possible. Si le pilote ASIO sélectionné n'est pas valide, un message d'erreur s'affiche et le pilote valide précédent est sélectionné. If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Si le pilote est sélectionné pendant une connexion active, la connexion est interrompue, le pilote est modifié et la connexion est automatiquement relancée. @@ -780,17 +864,17 @@ Enable Small Network Buffers - + Activer les petits tampons de réseau 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 - + Si activée, la prise en charge des très petits paquets audio de réseau est activée. Les très petits paquets réseau ne sont réellement utilisés que si le délai de la mémoire tampon de la carte son est inférieur à samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + échantillons. Plus la mémoire tampon du réseau est petite, plus la latence audio est faible. Mais en même temps, la charge du réseau augmente et la probabilité de décrochage audio augmente également. @@ -800,67 +884,67 @@ Sound Card Buffer Delay - + Délai de temporisation de l'interface audio The buffer delay setting is a fundamental setting of the - + Le paramètre de délai de temporisation est un paramètre fondamental du logiciel software. This setting has influence on many connection properties. - + . Ce paramètre influence de nombreuses propriétés de connexion. Three buffer sizes are supported - + Trois tailles de tampon sont prises en charge 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. - + 64 échantillons : c'est le réglage préféré car il donne la latence la plus faible mais ne fonctionne pas avec toutes les interfaces audio. 128 samples: This setting should work on most of the available sound cards. - + 128 échantillons : ce réglage devrait fonctionner sur la plupart des interfaces audio disponibles. 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - + 256 échantillons : ce paramètre ne doit être utilisé que si seul un ordinateur très lent ou une connexion internet lente est disponible. Some sound card driver do not allow the buffer delay to be changed from within the - + Certains pilotes d'interface audio ne permettent pas de modifier le délai de la mémoire tampon à partir du logiciel 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. - + . Dans ce cas, le réglage du délai de mise en mémoire tampon est désactivé. Pour modifier le délai actuel de la mémoire tampon, ce paramètre doit être modifié dans le pilote de l'interface audio. Sous Windows, appuyez sur le bouton ASIO Setup pour ouvrir le panneau des paramètres du pilote. Sous Linux, utilisez l'outil de configuration Jack pour modifier la taille de la mémoire tampon. If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + Si aucune taille de tampon n'est sélectionnée et que tous les paramètres sont désactivés, une taille de tampon non prise en charge est utilisée par le pilote. Le logiciel - software will still work with this setting but with restricted performannce. - + software will still work with this setting but with restricted performance. + continuera toujours de fonctionner avec ce réglage, mais avec des performances limitées. 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. - + Le délai actuel de la mémoire tampon a une influence sur l'état de la connexion, le taux de téléchargement actuel et le délai global. Plus la taille de la mémoire tampon est faible, plus la probabilité d'un voyant rouge dans l'indicateur d'état (désynchronisations) est élevée, plus le taux de téléchargement est élevé et plus le délai global est faible. The buffer setting is therefore a trade-off between audio quality and overall delay. - + Le réglage de la mémoire tampon est donc un compromis entre la qualité audio et le délai global. @@ -895,12 +979,12 @@ Fancy Skin - + Habillage fantaisie If enabled, a fancy skin will be applied to the main window. - + Si activée, un habillage fantaisie sera appliqué à la fenêtre principale. @@ -910,12 +994,12 @@ Display Channel Levels - + Afficher les niveaux des canaux If enabled, each client channel will display a pre-fader level bar. - + Si activée, chaque canal de client affichera une barre de niveau pré-fader. @@ -925,22 +1009,22 @@ Audio Channels - + Canaux audio 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 the audio signal which is sent to the server is mono but the return signal is stereo. This is useful for the case that the 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. - + Sélectionnez le nombre de canaux audio à utiliser. Trois modes sont disponibles. Les modes mono et stéréo utilisent respectivement un et deux canaux audio. Dans le mode mono-in/stereo-out, le signal audio qui est envoyé au serveur est mono mais le signal de retour est stéréo. Ceci est utile dans le cas où l'interface audio place l'instrument sur un canal d'entrée et le microphone sur l'autre canal. Dans ce cas, les deux signaux d'entrée peuvent être mélangés dans un canal mono mais le mixage du serveur peut être entendu en stéréo. 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. - + L'activation du mode de streaming stéréo augmentera le débit de données du flux. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. 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. - + Dans le cas du mode de streaming stéréo, aucune sélection de canal audio pour l'effet de réverbération ne sera disponible dans la fenêtre principale puisque l'effet est appliqué sur les deux canaux dans ce cas. @@ -950,12 +1034,12 @@ Audio Quality - + Qualité audio 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 upload rate does not exceed the available bandwidth of your internet connection. - + Sélectionnez la qualité audio souhaitée. Une qualité audio faible, normale ou élevée peut être sélectionnée. Plus la qualité audio est élevée, plus le débit de données du flux audio est élevé. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. @@ -965,12 +1049,12 @@ New Client Level - + Niveau de nouveau client 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 of that client was already stored. - + Le paramètre de niveau de nouveau client définit le niveau de chariot d'un client nouvellement connecté en pourcentage. C'est-à-dire que si un nouveau client se connecte au serveur actuel, il aura le niveau de chariot initial spécifié si aucun autre niveau de chariot d'une connexion précédente de ce client n'était déjà stocké. @@ -980,12 +1064,12 @@ Central Server Address - + Adresse du serveur central 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. - + L'adresse du serveur central est l'adresse IP ou l'URL du serveur central sur lequel la liste des serveurs du dialogue de connexion est gérée. Avec le type d'adresse du serveur central, on peut soit sélectionner la région de localisation parmi les serveurs centraux par défaut, soit spécifier une adresse manuelle. @@ -1000,113 +1084,118 @@ Current Connection Status Parameter - + Paramètre de l'état de la connexion actuelle 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. - + Le temps de ping est le temps nécessaire pour que le flux audio voyage du client au serveur et vice-versa. Ce délai est introduit par le réseau. Ce délai doit être de 20 ou 30 ms. Si ce délai est supérieur (par exemple 50-60 ms), la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - + Le délai global est calculé à partir du temps de ping actuel et du délai qui est introduit par les paramètres actuels de la mémoire tampon. 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 your internet connection by, e.g., using speedtest.net). - + Le débit montant dépend de la taille actuelle du paquet audio et du réglage de la compression audio. Assurez-vous que le débit montant n'est pas supérieur au débit disponible (vérifiez les capacités montant de votre connexion internet en utilisant, par exemple, speedtest.net). If this LED indicator turns red, you will not have much fun using the - + Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le logiciel software. - + . ASIO Setup - + Paramètres ASIO Mono - + Mono Mono-in/Stereo-out - + Mono-entrée/stéréo-sortie Stereo - + Stéréo Low - + Basse Normal - + Normale High - + Haute Manual - + Manuel Default - + Défaut Default (North America) - + Défault (Amérique du Nord) + + + + preferred + préféré Size: - + Taille : Buffer Delay - + Délai de temporisation Buffer Delay: - + Délai de temporisation : The selected audio device could not be used because of the following error: - + Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : The previous driver will be selected. - + Le pilote précédent sera sélectionné. Ok - + Ok @@ -1114,84 +1203,84 @@ Settings - Paramètres + Paramètres Soundcard - + Interface audio Device - + Périphérique Input Channel Mapping - + Cartographie des canaux d'entrée L - G + G R - D + D Output Channel Mapping - + Cartographie des canaux de sortie Enable Small Network Buffers - + Activer les petits tampons de réseau Buffer Delay - + Délai de temporisation (preferred) - + (préféré) (default) - + (défaut) (safe) - + (sûr) Driver Setup - + Configuration du pilote Jitter Buffer - + Tampon de gigue Auto - + Auto Local - + Local @@ -1207,64 +1296,64 @@ Misc - + Divers Audio Channels - + Canaux audio Audio Quality - + Qualité audio New Client Level - + Niveau de nouveau client % - + % Fancy Skin - + Habillage fantaisie Display Channel Levels - + Afficher les niveaux des canaux Central Server Address: - + Adresse du serveur central : Audio Stream Rate - + Débit du flux audio val - + val Ping Time - Temps de réponse + Temps de réponse Overall Delay - + Délai global @@ -1272,42 +1361,42 @@ Server List - + Liste de serveurs 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. - + La liste de serveurs affiche une liste des serveurs disponibles qui sont inscrits sur le serveur central. Sélectionnez un serveur dans la liste et appuyez sur le bouton de connexion pour vous connecter à ce serveur. Vous pouvez également double-cliquer sur un serveur de la liste pour vous y connecter. Si un serveur est occupé, une liste des musiciens connectés est disponible en développant l'élément de la liste. Les serveurs permanents sont indiqués en caractères gras. 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. - + Notez que ça peut prendre un certain temps pour récupérer la liste des serveurs depuis le serveur central. Si aucune adresse de serveur central valide n'est spécifiée dans les paramètres, aucune liste de serveurs ne sera disponible. Server list view - + Vue de la liste de serveurs Server Address - + Adresse du serveur The IP address or URL of the server running the - + L'adresse IP ou l'URL du serveur qui exécute le logiciel serveur - 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: - + server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: + doit être paramétré ici. Un numéro optionnel de port peut être ajouté après l'adresse IP ou l'URL en utilisant deux points en tant que séparateur, par exemple, exemple.org : . A list of the most recent used server IP addresses or URLs is available for selection. - + . Une liste des adresses IP ou URL de serveur les plus récentes est disponible pour la sélection. @@ -1322,12 +1411,12 @@ Filter - Filtre + Filtre - The server list is filered by the given text. Note that the filter is case insensitive. - + The server list is filtered by the given text. Note that the filter is case insensitive. + La liste des serveurs est filtrée par le texte donné. Notez que le filtre n'est pas sensible à la casse. @@ -1337,12 +1426,12 @@ Show All Musicians - Afficher tous les musiciens + Afficher tous les musiciens 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. - + Si vous cochez cette case, les musiciens de tous les serveurs sont affichés. Si vous décochez la case, tous les éléments de la vue en liste sont regroupés. @@ -1355,7 +1444,7 @@ Connection Setup - + Paramètres de connexion @@ -1406,389 +1495,404 @@ CHelpMenu - - + + &Help + &Aide + + + + Getting &Started... - + Premier pa&s... - + Software &Manual... - + &Manuel du logiciel... - + What's &This - + Qu'est-ce que c'est ? - + &About... - + À &propos CLicenceDlg - + I &agree to the above licence terms - + J'&accepte les conditions de licence ci-dessus - + Accept - + Accepter - + Decline - - - - - By connecting to this server and agreeing to this notice, you agree to the following: - - - - - 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 - - - - - You are free to: - - - - - Share - - - - - copy and redistribute the material in any medium or format - + Décliner - Adapt - - - - - remix, transform, and build upon the material - + By connecting to this server and agreeing to this notice, you agree to the following: + En vous connectant à ce serveur et en acceptant le présent avis, vous acceptez ce qui suit : - The licensor cannot revoke these freedoms as long as you follow the license terms. - - - - - Under the following terms: - - - - - Attribution - - - - - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. - + 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 + Vous acceptez que toutes les données, sons ou autres œuvres transmises à ce serveur soient détenus et créés par vous ou vos ayant-droits, et que vous rendiez ces données, sons ou autres œuvres disponibles via la licence Creative Commons suivante (pour plus d'informations sur cette licence, voir - NonCommercial - - - - - You may not use the material for commercial purposes. - + You are free to: + Vous êtes libres de : - ShareAlike - + Share + Partager - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - + copy and redistribute the material in any medium or format + copier et redistribuer le matériel sur tout support ou format + + + + Adapt + Adapter - No additional restrictions - + remix, transform, and build upon the material + remixer, transformer et développer à partir du matériel + The licensor cannot revoke these freedoms as long as you follow the license terms. + Le donneur de licence ne peut pas révoquer ces libertés tant que vous respectez les conditions de la licence. + + + + Under the following terms: + Dans les conditions suivantes : + + + + Attribution + Attribution + + + + You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + Vous devez donner un crédit approprié, fournir un lien vers la licence et indiquer si des modifications ont été apportées. Vous pouvez le faire de toute manière raisonnable, mais pas d'une manière qui suggère que le donneur de licence vous cautionne ou cautionne votre utilisation. + + + + NonCommercial + Non commercial + + + + You may not use the material for commercial purposes. + Vous ne pouvez pas utiliser le matériel à des fins commerciales. + + + + ShareAlike + Partager à l'identique + + + + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + Si vous remixez, transformez ou développez à partir du matériel, vous devez distribuer vos contributions sous la même licence que l'original. + + + + No additional restrictions + Aucune restriction supplémentaire + + + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. - + Vous ne pouvez pas appliquer des termes juridiques ou des mesures technologiques qui empêchent légalement d'autres personnes de faire ce que la licence autorise. CMusProfDlg - + server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. - + . Cette balise apparaîtra également sur chaque client connecté au même serveur que vous. Si le nom est laissé vide, l'adresse IP est affichée à la place. - + Alias or name edit box - + Instrument picture button - + Bouton d'image d'instrument - + Country flag button - + Bouton de drapeau de pays - + City edit box - + Skill level combo box - - - - None - Aucun - - - - - Musician Profile - - - - - Alias/Name - - - - - Instrument - - - - - Country - - - - - City - - - - - Skill - - - - - &Close - &Fermer - - - - Beginner - - - - - Intermediate - - - - - Expert - - - - - 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. - - - - - What you set here will appear at your fader on the mixer board when you are connected to a - - - - - Drum Set - - - - - Djembe - - - - - Electric Guitar - - - - - Acoustic Guitar - - - - - Bass Guitar - - - - - Keyboard - - - - - Synthesizer - - - - - Grand Piano - - - - - Accordion - - - - - Vocal - - - - - Microphone - - - - - Harmonica - - - - - Trumpet - - - + + - Trombone - + None + Aucune + + + + + Musician Profile + Profil de musicien + + + + Alias/Name + Pseudo/nom + + + + Instrument + Instrument + + + + Country + Pays + + + + City + Ville + + + + Skill + Compétence + + + + &Close + &Fermer + + + + Beginner + Débutant + + + + Intermediate + Intermédiaire + + + + Expert + Expert + + + + 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. + Indiquez ici votre nom ou un pseudonyme afin que les autres musiciens avec lesquels vous voulez jouer sachent qui vous êtes. Vous pouvez également mettre une photo de l'instrument dont vous jouez et un drapeau du pays dans lequel vous vivez. La ville dans laquelle vous vivez et le niveau de compétence pour jouer de votre instrument peuvent également être ajoutés. + + + + What you set here will appear at your fader on the mixer board when you are connected to a + Ce que vous réglez ici apparaîtra au niveau de votre fader sur la table de mixage lorsque vous serez connecté à un serveur - French Horn - + Drum Set + Batterie - Tuba - + Djembe + Djembé - Saxophone - + Electric Guitar + Guitare électrique - Clarinet - + Acoustic Guitar + Guitare accoustique - Flute - + Bass Guitar + Guitare basse - Violin - + Keyboard + Clavier - Cello - + Synthesizer + Synthétiseur - Double Bass - + Grand Piano + Piano à queue - Recorder - + Accordion + Accordéon - Streamer - + Vocal + Voix - Listener - + Microphone + Microphone - Guitar+Vocal - + Harmonica + Harmonica - Keyboard+Vocal - + Trumpet + Trompette - Bodhran - + Trombone + Trombone - Bassoon - + French Horn + Cor d'harmonie - Oboe - + Tuba + Tuba - Harp - + Saxophone + Saxophone + Clarinet + Clarinette + + + + Flute + Flute + + + + Violin + Violon + + + + Cello + Violoncelle + + + + Double Bass + Contrebasse + + + + Recorder + Enregistreur + + + + Streamer + Diffuseur + + + + Listener + Auditeur + + + + Guitar+Vocal + Guitare+voix + + + + Keyboard+Vocal + Clavier+voix + + + + Bodhran + Bodhran + + + + Bassoon + Basson + + + + Oboe + Hautbois + + + + Harp + Harpe + + + Viola - + Alto + + + + Congas + Congas + + + + Bongo + Bongo @@ -1796,12 +1900,12 @@ Client List - + Liste des clients 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. - + La liste des clients affiche tous les clients qui sont actuellement connectés à ce serveur. Certaines informations sur les clients, telles que les adresses IP et le nom, sont données pour chaque client connecté. @@ -1831,42 +1935,42 @@ If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + Si activé, une boîte de dialogue de licence Creative Commons BY-NC-SA 4.0 est affichée chaque fois qu'un nouvel utilisateur se connecte au serveur. Make My Server Public - + Rendre mon serveur public If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + Si la case Rendre mon serveur public est cochée, ce serveur s'inscrit sur le serveur central afin que tous les utilisateurs de users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - + puisse voir le serveur dans la liste des serveurs du dialogue de connexion et s'y connecter. L'inscription du serveur est renouvelée périodiquement pour s'assurer que tous les serveurs de la liste des serveurs du dialogue de connexion sont effectivement disponibles. Register Server Status - + État du serveur inscrit If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + Si la case Rendre mon serveur public est cochée, cela indiquera le succès de l'enregistrement auprès du serveur central. Central Server Address - + Adresse du serveur central 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. - + L'adresse du serveur central est l'adresse IP ou l'URL du serveur central auquel ce serveur est inscrit. Avec le type d'adresse du serveur central, on peut soit sélectionner la région locale parmi les serveurs centraux par défaut, soit spécifier une adresse manuelle. @@ -1881,12 +1985,12 @@ Server Name - Nom du serveur + Nom du serveur 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. - + Le nom du serveur identifie votre serveur dans la liste des serveurs du dialogue de connexion chez les clients. Si aucun nom n'est donné, l'adresse IP est affichée à la place. @@ -1896,12 +2000,12 @@ Location City - + Ville de localisation 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. - + La ville dans laquelle ce serveur est situé peut être définie ici. Si un nom de ville est saisi, il sera affiché dans la liste des serveurs du dialogue de connexion chez les clients. @@ -1911,12 +2015,12 @@ Location country - + Pays de localisation 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. - + Le pays dans lequel ce serveur est situé peut être défini ici. Si un pays est saisi, il sera affiché dans la liste des serveurs du dialogue de connexion chez les clients. @@ -1927,94 +2031,94 @@ E&xit - &Quitter + &Quitter &Hide - + Cac&hé server - + serveur &Open - + &Ouvrir server - + serveur Manual - + Manuel Default - + Défaut Default (North America) - + Défaut (Amérique du nord) Server - + serveur &Window - + &Fenêtre - + Unregistered - + Non inscrit - + Bad address - + Mauvaise adresse - + Registration requested - + Inscription demandée - + Registration failed - + Échec de l'inscription - + Check server version - + Vérifier la version du serveur - + Registered - + Inscrit - + Central Server full - + Serveur central rempli - + Unknown value - + Valeur inconnue @@ -2022,18 +2126,18 @@ Client IP:Port - + IP Client:Port Name - + Nom Jitter Buffer Size - + Taille du tampon de gigue @@ -2043,37 +2147,37 @@ Show Creative Commons BY-NC-SA 4.0 Licence Dialog - + Afficher le dialogue de la licence Creative Commons BY-NC-SA 4.0 Make My Server Public (Register My Server in the Server List) - + Rendre mon serveur public (inscrire mon serveur dans la liste des serveurs) STATUS - + ÉTAT Central Server Address: - + Adresse du serveur central : My Server Info - + Informations de mon serveur Location: City - + Emplacement : ville Location: Country - + Emplacement : pays @@ -2120,7 +2224,7 @@ - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. @@ -2182,7 +2286,7 @@ software. - + . @@ -2210,6 +2314,11 @@ 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 the ASIO4All driver. + + + Error closing stream: $s + + CSoundBase @@ -2259,4 +2368,12 @@ + + global + + + For more information use the What's This help (help menu, right mouse button or Shift+F1) + + + diff --git a/src/res/translation/translation_nl_NL.qm b/src/res/translation/translation_nl_NL.qm new file mode 100644 index 00000000..666d0218 Binary files /dev/null and b/src/res/translation/translation_nl_NL.qm differ diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts new file mode 100644 index 00000000..84b0f53b --- /dev/null +++ b/src/res/translation/translation_nl_NL.ts @@ -0,0 +1,2367 @@ + + + + + CAboutDlg + + + The + De + + + + software enables musicians to perform real-time jam sessions over the internet. + software stelt muzikanten in staat om real-time jamsessies uit te voeren via het internet. + + + + There is a + Er is een + + + + server which collects the audio data from each + server die audiodata van elke client verzamelt, + + + + client, mixes the audio data and sends the mix back to each client. + deze mixt, en de mix weer terugstuurt naar iedere client. + + + + uses the following libraries, resources or code snippets: + gebruikt de volgende bibliotheken, bronnen of code snippets: + + + + Qt cross-platform application framework + Qt cross-platform applicatieframework + + + + Audio reverberation code by Perry R. Cook and Gary P. Scavone + Audio reverberatiecode door Perry R. Cook en Gary P. Scavone + + + + Some pixmaps are from the + Sommige pixmaps zijn van de + + + + Country flag icons from Mark James + Landvlag-iconen van Mark James + + + + For details on the contributions check out the + Voor details over de bijdragen, zie de + + + + Github Contributors list + Github Bijdragerslijst + + + + Spanish + Spaans + + + + French + Frans + + + + Portuguese + Portugees + + + + Dutch + + + + + German + + + + + About + Over + + + + , Version + , Versie + + + + Internet Jam Session Software + + + + + Under the GNU General Public License (GPL) + Onder de GNU General Public License (GPL) + + + + CAboutDlgBase + + + About + Over + + + + TextLabelVersion + + + + + Copyright (C) 2005-2020 Volker Fischer and others + Copyright (C) 2005-2020 Volker Fischer en anderen + + + + A&bout + + + + + &Libraries + + + + + &Contributors + Bijdragers + + + + &Translation + Vertaling + + + + &OK + + + + + CAnalyzerConsole + + + Analyzer Console + + + + + Error Rate of Each Buffer Size + Foutpercentage van elke buffergrootte + + + + CAudioMixerBoard + + + Server + + + + + T R Y I N G T O C O N N E C T + A A N H E T V E R B I N D E N + + + + CChannelFader + + + + + Mute + Demp + + + + + + Solo + Solo + + + + Channel Level + Kanaalniveau + + + + 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. + Geeft het pre-fader-audioniveau van dit kanaal weer. Alle verbonden clients op de server krijgen een audioniveau toegewezen, dezelfde waarde voor elke client. + + + + Input level of the current audio channel at the server + Invoerniveau van het huidige audiokanaal op de server + + + + Mixer Fader + + + + + 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. + Past het geluidsniveau van dit kanaal aan. Alle verbonden clients op de server krijgen een audiofader toegewezen bij elke client, waarbij de lokale mix wordt aangepast. + + + + Local mix level setting of the current audio channel at the server + Lokale instelling van het mixniveau van het huidige audiokanaal op de server + + + + With the Mute checkbox, the audio channel can be muted. + Met het selectievakje Demp kan het audiokanaal worden gedempt. + + + + Mute button + Dempingsknop + + + + 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. + Met het selectievakje Solo kan het audiokanaal worden ingesteld op solo, zodat alle overige kanalen worden gedempt. Het is mogelijk om meer dan één kanaal op solo in te stellen. + + + + Solo button + Soloknop + + + + Fader Tag + Fader tag + + + + 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. + De fadertag identificeert de verbonden client. De tagnaam, de afbeelding van uw instrument en een vlag van uw land kunnen in het hoofdvenster worden ingesteld. + + + + Mixer channel instrument picture + Afbeelding van het mengkanaalinstrument + + + + Mixer channel label (fader tag) + Label van het mengkanaal (faderlabel) + + + + Mixer channel country flag + Landvlag van het kanaal + + + + MUTE + DEMP + + + + SOLO + SOLO + + + + Alias/Name + Alias/Naam + + + + Instrument + Instrument + + + + Location + Locatie + + + + + + Skill Level + Vaardigheidssniveau + + + + Beginner + Beginner + + + + Intermediate + Gemiddeld + + + + Expert + Gevorderd + + + + Musician Profile + Muzikantenprofiel + + + + CChatDlg + + + Chat Window + Chatvenster + + + + The chat window shows a history of all chat messages. + Het chatvenster toont een geschiedenis van alle chatberichten. + + + + Chat history + Chatgeschiedenis + + + + Input Message Text + Tekst van het invoerbericht + + + + 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. + Type het chatbericht in het bewerkingsvak in en druk op enter om het bericht naar de server te sturen, die het bericht naar alle verbonden clients distribueert. Uw bericht verschijnt dan in het chatvenster. + + + + New chat text edit box + Nieuw chat tekstbewerkingsvak + + + + CChatDlgBase + + + Chat + Chat + + + + Cl&ear + + + + + &Close + &Sluiten + + + + CClientDlg + + + Input Level Meter + Ingangsniveaumeter + + + + The input level indicators show the input level of the two stereo channels of the current selected audio input. + De indicatoren voor het ingangsniveau geven het ingangsniveau van de twee stereokanalen van de huidige geselecteerde audio-ingang weer. + + + + Make sure not to clip the input signal to avoid distortions of the audio signal. + Zorg ervoor dat u het ingangssignaal niet clipt om vervorming van het audiosignaal te voorkomen. + + + + If the + Als de + + + + software is connected and you play your instrument/sing in the microphone, the LED level 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. + software is verbonden en u speelt of zingt in de microfoon, dan zou de LED-niveaumeter moeten flikkeren. Als dit niet het geval is, heeft u waarschijnlijk het verkeerde ingangskanaal gekozen (bijv. line in i.p.v. de microfooningang) of heeft u de ingangsversterking te laag ingesteld in de (Windows) audiomixer. + + + + For a proper usage of the + Voor juist gebruik van de + + + + software, you should not hear your singing/instrument in the loudspeaker or your headphone when the + software, moet uw zang/instrument niet hoorbaar zijn door de luidspreker of uw koptelefoon wanneer de + + + + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). + software niet is verbonden. Dit kan worden bereikt door het geluidskanaal in de afspeelmixer (niet de opnamemixer!) te dempen. + + + + Input level meter + Ingangsniveaumeter + + + + Simulates an analog LED level meter. + Simuleert een analoge LED-niveaumeter. + + + + Connect/Disconnect Button + Aansluiten/afkoppelen-knop + + + + 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. + Druk op deze knop om verbinding te maken met een server. In het daaropvolgende dialoogvenster kunt u een server kunt selecteren. Als u verbonden bent, wordt de sessie beëindigd door weer op deze knop te drukken. + + + + Connect and disconnect toggle button + Knop voor het opzetten en verbreken van de verbinding + + + + Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the + Door op deze knop te klikken verandert het onderschrift van de knop van Verbinden naar Verbreken, d.w.z. dat het een toggle-functie heeft voor verbinden/verbreken van de + + + + + software. + software. + + + + Local Audio Input Fader + Lokale audio-ingangsfader + + + + 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 + Met de audiofader kunnen de relatieve niveaus van de linker en rechter lokale audiokanalen worden gewijzigd. Voor een monosignaal werkt het als een panning tussen de twee kanalen. Als bijvoorbeeld een microfoon is verbonden op het rechter ingangskanaal en een veel luider instrument is verbonden op het linker ingangskanaal, beweeg dan de audiofader in de richting: + + + + + L + L + + + + , where + , waar + + + + is the current attenuation indicator. + is de huidige dempingsindicator. + + + + Local audio input fader (left/right) + Lokale audio-ingangsfader (links/rechts) + + + + Reverberation Level + Niveau van de galm + + + + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono 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. + Een galmeffect kan worden toegepast op één lokaal mono-audiokanaal of op beide kanalen in de stereomodus. De monokanaalselectie en het galmniveau kunnen worden aangepast. Als bijvoorbeeld het microfoonsignaal in het juiste audiokanaal van de geluidskaart binnenkomt en er een galmeffect wordt toegepast, zet u de kanaalkeuzeschakelaar naar rechts en beweegt u de fader omhoog tot het gewenste galmniveau is bereikt. + + + + 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 switched off and does not cause any additional CPU usage. + Het galmeffect vereist aanzienlijk wat CPU, zodat deze alleen op snelle PC's kan worden gebruikt. Als de fader voor het galmniveau op minimaal is ingesteld (wat de standaardinstelling is), wordt het galmeffect uitgeschakeld en veroorzaakt het geen extra CPU-gebruik. + + + + Reverberation effect level setting + Instelling van het niveau van het galmeffect + + + + Reverberation Channel Selection + Selectie van het galmkanaal + + + + 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. + Met deze radioknoppen kan het audio-invoerkanaal worden gekozen waarop het galmeffect wordt toegepast. Het linker of rechter ingangskanaal kan worden gekozen. + + + + Left channel selection for reverberation + Linker kanaalselectie voor galm + + + + Right channel selection for reverberation + Rechter kanaalselectie voor galm + + + + Delay Status LED + Vertragingsstatus LED + + + + 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 large for jamming. + De vertragingsstatus LED-indicator geeft de huidige geluidsvertragingsstatus aan. Als het lampje groen is, is de vertraging perfect voor een storingssessie. Als het lampje geel is, is een sessie nog steeds mogelijk, maar kan het moeilijker zijn om te spelen. Als het lichtje rood is, is de vertraging te groot voor een storing. + + + + If this LED indicator turns red, you will not have much fun using the + Als deze LED-indicator rood wordt, zult u niet veel plezier beleven aan het gebruik van de + + + + Delay status LED indicator + Vertragingsstatus LED-indicator + + + + Buffers Status LED + Buffers Status LED + + + + 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: + De indicator voor de status van de buffers geeft de huidige status van de audio/streaming aan. Als het lampje groen is, zijn er geen bufferoverschrijdingen/onderschrijdingen en wordt de audiostream niet onderbroken. Als het lampje rood is, wordt de audiostream onderbroken door een van de volgende problemen: + + + + The network jitter buffer is not large enough for the current network/audio interface jitter. + De buffer voor de netwerkjitter is niet groot genoeg voor de huidige netwerk-/audio-interfacejitter. + + + + The sound card buffer delay (buffer size) is set to a too small value. + De buffer vertraging van de geluidskaart (buffergrootte) is op een te kleine waarde ingesteld. + + + + The upload or download stream rate is too high for the current available internet bandwidth. + De upload- of downloadstroomsnelheid is te hoog voor de huidige beschikbare internetbandbreedte. + + + + The CPU of the client or server is at 100%. + De CPU van de client of server staat op 100%. + + + + Buffers status LED indicator + Status van de buffers LED-indicator + + + + + C&onnect + C&onnect + + + + &View + &Bekijken + + + + &Connection Setup... + &Connection Setup... + + + + My &Profile... + Mijn &Profiel... + + + + C&hat... + C&hat... + + + + &Settings... + &Settings... + + + + &Analyzer Console... + &Analyzer Console... + + + + E&xit + E&xit + + + + None + Geen + + + + Center + Centrum + + + + R + R + + + + user + gebruiker + + + + users + gebruikers + + + + D&isconnect + D&isconnect + + + + CClientDlgBase + + + Delay + Vertraging + + + + Buffers + Buffers + + + + Input + Invoer + + + + L + L + + + + R + R + + + + Settings + Instellingen + + + + Chat + Chat + + + + Mute Myself + Stomme ikzelf + + + + C&onnect + C&onnect + + + + Pan + Pan + + + + Center + Centrum + + + + Reverb + Reverb + + + + Left + Links + + + + Right + Rechts + + + + CClientSettingsDlg + + + Jitter Buffer Size + Jitter Buffermaat + + + + 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). + De jitterbuffer compenseert voor netwerk- en geluidskaart-timingstoestanden. De grootte van deze jitterbuffer heeft dus invloed op de kwaliteit van de audiostream (hoeveel uitvallers er optreden) en de totale vertraging (hoe langer de buffer, hoe hoger de vertraging). + + + + 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. + De jitter-buffergrootte kan handmatig worden gekozen voor de lokale client en de externe server. Voor de lokale jitterbuffer worden drop-outs in de audiostream aangegeven door het lampje op de onderkant van de faders voor de jitterbuffergrootte. Als het lampje op rood springt, heeft er een bufferoverschrijding/onderbenedenrijding plaatsgevonden en wordt de audiostream onderbroken. + + + + The jitter buffer setting is therefore a trade-off between audio quality and overall delay. + De jitterbufferinstelling is dus een afweging tussen geluidskwaliteit en totale vertraging. + + + + 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 Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + Een automatische instelling van de jitterbuffergrootte is beschikbaar. Als de controle Auto is ingeschakeld, worden de jitterbuffers van de lokale client en de externe server automatisch ingesteld op basis van metingen van de netwerk- en geluidskaarttimingsjitter. Als de automatische controle is ingeschakeld, zijn de faders voor de jitterbuffergrootte uitgeschakeld (ze kunnen niet met de muis worden verplaatst). + + + + 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 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. + In het geval dat de automatische instelling van de jitterbuffer is ingeschakeld, worden de netwerkbuffers van de lokale client en de externe server op een conservatieve waarde gezet om de kans op audio-uitval te minimaliseren. Om de audio delay/latentie te tweaken is het aan te raden om de automatische instelling uit te schakelen en de grootte van de jitterbuffer handmatig te verlagen met behulp van de schuifregelaars totdat de persoonlijke aanvaardbare limiet van het aantal drop-outs is bereikt. De LED-indicator zal de audio dropouts van de lokale jitterbuffer visualiseren met een rood lampje. + + + + Local jitter buffer slider control + Lokale jitter-buffer-schuifregelaar + + + + Server jitter buffer slider control + Server jitter-buffer-schuifregelaar + + + + Auto jitter buffer switch + Automatische jitterbufferschakelaar + + + + Jitter buffer status LED indicator + Jitter-buffer status LED-indicator + + + + Sound Card Device + Geluidskaartapparaat + + + + The ASIO driver (sound card) can be selected using + Het ASIO-stuurprogramma (geluidskaart) kan worden geselecteerd met behulp van + + + + 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. + onder het Windows besturingssysteem. Onder MacOS/Linux is geen geluidskaartkeuze mogelijk. Als het geselecteerde ASIO-stuurprogramma niet geldig is, wordt een foutmelding weergegeven en wordt het vorige geldige stuurprogramma geselecteerd. + + + + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + Als het stuurprogramma tijdens een actieve verbinding wordt geselecteerd, wordt de verbinding gestopt, wordt het stuurprogramma gewijzigd en wordt de verbinding automatisch opnieuw gestart. + + + + Sound card device selector combo box + Geluidskaart apparaat selector combo box + + + + 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. + In het geval dat de ASIO4ALL driver wordt gebruikt, dient u er rekening mee te houden dat deze driver meestal ongeveer 10-30 ms extra geluidsvertraging introduceert. Het gebruik van een geluidskaart met een native ASIO-driver wordt daarom aanbevolen. + + + + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + Als u het kX ASIO-stuurprogramma gebruikt, zorg er dan voor dat u de ASIO-ingangen in het kX DSP-instellingenpaneel aansluit. + + + + Sound Card Channel Mapping + Geluidskaartkanalen in kaart brengen + + + + 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. + In het geval dat het geselecteerde geluidskaartapparaat meer dan één ingangs- of uitgangskanaal biedt, zijn de instellingen voor het ingangs- en uitgangskanaal in kaart brengen zichtbaar. + + + + For each + Voor elk + + + + input/output channel (Left and Right channel) a different actual sound card channel can be selected. + Invoer-/uitvoerkanaal (linker- en rechterkanaal) kan een ander daadwerkelijk kanaal van de geluidskaart worden geselecteerd. + + + + Left input channel selection combo box + Linker ingangskanaal selectie combo box + + + + Right input channel selection combo box + Juiste ingangskanaal selectie combo box + + + + Left output channel selection combo box + Linkeruitgangskanaal selectie combobox + + + + Right output channel selection combo box + Rechter uitgangskanaal selectie combo box + + + + Enable Small Network Buffers + Kleine netwerkbuffers inschakelen + + + + 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 + Indien ingeschakeld, wordt de ondersteuning voor zeer kleine netwerkaudiopakketten geactiveerd. Zeer kleine netwerkpakketten worden alleen daadwerkelijk gebruikt als de buffervertraging van de geluidskaart kleiner is dan + + + + samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. + monsters. Hoe kleiner de netwerkbuffers, hoe kleiner de audiolatentie. Maar tegelijkertijd neemt de netwerkbelasting toe en neemt ook de kans op audio-uitval toe. + + + + Enable small network buffers check box + Schakel het selectievakje kleine netwerkbuffers in + + + + Sound Card Buffer Delay + Geluidskaartbuffervertraging + + + + The buffer delay setting is a fundamental setting of the + De instelling van de buffervertraging is een belangrijke instelling van de + + + + software. This setting has influence on many connection properties. + software. Deze instelling heeft invloed op veel verbindingseigenschappen. + + + + Three buffer sizes are supported + Drie buffermaten worden ondersteund + + + + 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. + 64 monsters: Dit is de voorkeursinstelling omdat het de laagste latentie geeft, maar niet met alle geluidskaarten werkt. + + + + 128 samples: This setting should work on most of the available sound cards. + 128 monsters: Deze instelling zou moeten werken op de meeste beschikbare geluidskaarten. + + + + 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. + 256 monsters: Deze instelling mag alleen worden gebruikt als er alleen een zeer langzame computer of een langzame internetverbinding beschikbaar is. + + + + Some sound card driver do not allow the buffer delay to be changed from within the + Sommige geluidskaartbestuurders staan niet toe dat de buffervertraging wordt gewijzigd van binnenuit de + + + + 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. + software. In dit geval is de instelling van de buffervertraging uitgeschakeld. Om de eigenlijke buffervertraging te wijzigen, moet deze instelling in het stuurprogramma van de geluidskaart worden gewijzigd. Druk in Windows op de knop ASIO Setup om het instellingenpaneel van het stuurprogramma te openen. Op Linux gebruikt u de Jack-configuratietool om de grootte van de buffer te wijzigen. + + + + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + Als er geen buffergrootte is geselecteerd en alle instellingen zijn uitgeschakeld, wordt een niet-ondersteunde buffergrootte gebruikt door het stuurprogramma. De + + + + software will still work with this setting but with restricted performance. + software zal nog steeds werken met deze instelling, maar met beperkte prestaties. + + + + 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. + De werkelijke buffervertraging heeft invloed op de verbindingsstatus, de huidige uploadsnelheid en de totale vertraging. Hoe lager de buffergrootte, hoe hoger de kans op rood licht in de statusindicator (drop outs) en hoe hoger de uploadsnelheid en hoe lager de totale vertraging. + + + + The buffer setting is therefore a trade-off between audio quality and overall delay. + De bufferinstelling is dus een afweging tussen de geluidskwaliteit en de totale vertraging. + + + + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the + Als de instellingen voor de buffervertraging zijn uitgeschakeld, is het door het audiostuurprogramma verboden om deze instelling te wijzigen vanuit de + + + + software. 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. + software. Druk in Windows op de knop ASIO Setup om het instellingenpaneel van het stuurprogramma te openen. Op Linux gebruikt u de Jack-configuratietool om de grootte van de buffer te wijzigen. + + + + 128 samples setting radio button + 128 monsters instellen radioknop + + + + 256 samples setting radio button + 256 voorbeelden van het instellen van de radioknop + + + + 512 samples setting radio button + 512 voorbeelden van het instellen van het radioknopje + + + + ASIO setup push button + ASIO-instellingsdrukknop + + + + Fancy Skin + Edele huid + + + + If enabled, a fancy skin will be applied to the main window. + Indien ingeschakeld wordt er een fancy skin op het hoofdvenster aangebracht. + + + + Fancy skin check box + Fancy skin check box + + + + Display Channel Levels + Weergave Kanaalniveaus + + + + If enabled, each client channel will display a pre-fader level bar. + Indien ingeschakeld, zal elk klantkanaal een pre-fader niveau balk weergeven. + + + + Display channel levels check box + Vinkje bij de weergave van de kanaalniveaus + + + + Audio Channels + Audiokanalen + + + + 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 the audio signal which is sent to the server is mono but the return signal is stereo. This is useful for the case that the 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. + Selecteer het aantal te gebruiken audiokanalen. Er zijn drie modi beschikbaar. De mono- en stereomodus gebruiken respectievelijk één en twee audiokanalen. In de mono-in/stereo-uit modus is het audiosignaal dat naar de server wordt gestuurd mono, maar het retoursignaal is stereo. Dit is handig voor het geval dat de geluidskaart het instrument op het ene ingangskanaal zet en de microfoon op het andere kanaal. In dat geval kunnen de twee ingangssignalen worden gemixt naar één monokanaal, maar de servermix is in stereo te horen. + + + + 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. + Het inschakelen van de stereo-streaming modus zal de stream-datasnelheid verhogen. Zorg ervoor dat de huidige uploadsnelheid niet hoger is dan de beschikbare bandbreedte van uw internetverbinding. + + + + 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. + In het geval van de stereo streaming-mode is er geen audiokanaalselectie voor het galmeffect beschikbaar op het hoofdvenster, aangezien het effect in dit geval op beide kanalen wordt toegepast. + + + + Audio channels combo box + Audiokanalen combo-box + + + + Audio Quality + Audiokwaliteit + + + + 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 upload rate does not exceed the available bandwidth of your internet connection. + Selecteer de gewenste audiokwaliteit. Er kan een lage, normale of hoge audiokwaliteit worden geselecteerd. Hoe hoger de audiokwaliteit, hoe meer audiodata moet worden verstuurd. Zorg ervoor dat de vereiste bandbreedte niet hoger is dan de beschikbare bandbreedte van uw internetverbinding. + + + + Audio quality combo box + Audiokwaliteit combo-box + + + + New Client Level + Nieuw clientniveau + + + + 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 of that client was already stored. + De nieuwe instelling van het clientniveau definieert het faderniveau van een nieuwe verbonden client in procenten. D.w.z. als een nieuwe client verbinding maakt met de server, krijgt hij het opgegeven initiële faderniveau als er in de vorige verbinding niets is opgeslagen. + + + + New client level edit box + Nieuw bewerkingsvak op clientniveau + + + + Central Server Address + Centraal Serveradres + + + + 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. + Het centrale serveradres is het IP-adres of de URL van de centrale server waarop de serverlijst van het verbindingsdialoogvenster wordt beheerd. Met het centraal serveradrestype kan ofwel de lokale regio worden geselecteerd van de standaard centrale servers, ofwel kan een handmatig adres worden opgegeven. + + + + Default central server type combo box + Centraal serveradrestype combo box + + + + Central server address line edit + Centraal serveradres bewerking van de lijn + + + + Current Connection Status Parameter + Huidige verbindingsstatus-parameter + + + + 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. + De ping-tijd is de tijd die nodig is voor de audiostream om van de client naar de server en terug te reizen. Deze vertraging wordt geïntroduceerd door het netwerk. Deze vertraging moet zo laag zijn als 20-30 ms. Als deze vertraging hoger is (bijv. 50-60 ms), is uw afstand tot de server te groot of is uw internetverbinding niet toereikend. + + + + The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. + De totale vertraging wordt berekend op basis van de huidige ping-tijd en de vertraging die door de huidige bufferinstellingen wordt veroorzaakt. + + + + 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 your internet connection by, e.g., using speedtest.net). + De upstreamsnelheid is afhankelijk van de huidige grootte van het audiopakket en de instelling van de audiocompressie. Zorg ervoor dat de upstreamsnelheid niet hoger is dan de beschikbare snelheid (controleer de upstreammogelijkheden van uw internetverbinding door bijvoorbeeld speedtest.net te gebruiken). + + + + If this LED indicator turns red, you will not have much fun using the + Als deze LED-indicator rood wordt, zult u niet veel plezier beleven aan het gebruik van de + + + + software. + software. + + + + ASIO Setup + ASIO-instelling + + + + Mono + Mono + + + + Mono-in/Stereo-out + Mono-in/Stereo-out + + + + Stereo + Stereo + + + + Low + Laag + + + + Normal + Normaal + + + + High + Hoog + + + + Manual + Handleiding + + + + Default + Standaard + + + + Default (North America) + Standaard (Noord-Amerika) + + + + preferred + gewenst + + + + + Size: + Grootte: + + + + Buffer Delay + Buffervertraging + + + + Buffer Delay: + Buffervertraging: + + + + The selected audio device could not be used because of the following error: + Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + + + + The previous driver will be selected. + Het vorige stuurprogramma wordt geselecteerd. + + + + Ok + Ok + + + + CClientSettingsDlgBase + + + Settings + Instellingen + + + + Soundcard + Geluidskaart + + + + Device + Apparaat + + + + Input Channel Mapping + Invoerkanaal Mapping + + + + + L + L + + + + + R + R + + + + Output Channel Mapping + Uitgangskanaal in kaart brengen + + + + Enable Small Network Buffers + Kleine netwerkbuffers inschakelen + + + + Buffer Delay + Buffervertraging + + + + (preferred) + (voorkeur) + + + + (default) + (standaard) + + + + (safe) + (veilig) + + + + Driver Setup + Stuurprogramma-instelling + + + + Jitter Buffer + Jitterbuffer + + + + Auto + Auto + + + + Local + Lokaal + + + + Server + Server + + + + + Size + Grootte + + + + Misc + Overige + + + + Audio Channels + Audiokanalen + + + + Audio Quality + Audiokwaliteit + + + + New Client Level + Nieuw client-niveau + + + + % + % + + + + Fancy Skin + + + + + Display Channel Levels + Weergave Kanaalniveaus + + + + Central Server Address: + Centraal Serveradres: + + + + Audio Stream Rate + Audio Stream Rate + + + + + + val + + + + + Ping Time + Ping-tijd + + + + Overall Delay + Algehele vertraging + + + + CConnectDlg + + + Server List + Serverlijst + + + + 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. + De serverlijst toont een lijst van beschikbare servers die op de centrale server zijn geregistreerd. Selecteer een server uit de lijst en druk op de verbindingsknop om verbinding te maken met deze server. U kunt ook dubbelklikken op een server uit de lijst om verbinding te maken met deze server. Als een server bezet is, is een lijst van de verbonden muzikanten beschikbaar door het lijstitem uit te breiden. Permanente servers worden vetgedrukt weergegeven. + + + + 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. + Merk op dat het enige tijd kan duren om de serverlijst op te halen van de centrale server. Als er geen geldig centraal serveradres is opgegeven in de instellingen, zal er geen serverlijst beschikbaar zijn. + + + + Server list view + Serverlijstweergave + + + + Server Address + Serveradres + + + + The IP address or URL of the server running the + Het IP-adres of de URL van de server waarop de + + + + server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: + serversoftware moet worden ingesteld. Een optioneel poortnummer kan worden toegevoegd na het IP-adres of de URL met een dubbele punt als scheidingsteken, bijvoorbeeld example.org: + + + + . A list of the most recent used server IP addresses or URLs is available for selection. + . Een lijst met de meest recent gebruikte server-IP-adressen of URL's is beschikbaar voor selectie. + + + + Server address edit box + Serveradres bewerkingsvak + + + + Holds the current server IP address or URL. It also stores old URLs in the combo box list. + Bevat het huidige server-IP-adres of de URL. Het slaat ook oude URL's op in de comboboxlijst. + + + + Filter + Filter + + + + The server list is filtered by the given text. Note that the filter is case insensitive. + De serverlijst wordt gefilterd met de gegeven tekst. Merk op dat het filter ongevoelig is voor hoofdletters. + + + + Filter edit box + Filter bewerkingsvak + + + + Show All Musicians + Toon alle muzikanten + + + + 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. + Als u dit selectievakje aanvinkt, worden de muzikanten van alle servers getoond. Als u het selectievakje uitvinkt, worden alle items van de lijstweergave samengevouwen. + + + + Show all musicians check box + Toon alle muzikanten checkbox + + + + CConnectDlgBase + + + Connection Setup + Verbindingsinstellingen + + + + Filter + Filter + + + + Show All Musicians + Toon alle muzikanten + + + + Server Name + Servernaam + + + + Ping Time + Ping-tijd + + + + Musicians + Muzikanten + + + + Location + Locatie + + + + Server Name/Address + Servernaam/Adres + + + + C&ancel + Annuleren + + + + &Connect + Verbinden + + + + CHelpMenu + + + &Help + &Hulp + + + + + Getting &Started... + Aan de slag... + + + + Software &Manual... + Softwarehandleiding... + + + + What's &This + Wat is dit + + + + &About... + &Over... + + + + CLicenceDlg + + + I &agree to the above licence terms + Ik stem in met bovenstaande licentievoorwaarden + + + + Accept + Accepteer + + + + Decline + Niet akkoord + + + + By connecting to this server and agreeing to this notice, you agree to the following: + Door verbinding te maken met deze server en akkoord te gaan met deze mededeling, gaat u akkoord met het volgende: + + + + 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 + U gaat ermee akkoord dat alle gegevens, geluiden of andere werken die naar deze server worden verzonden, eigendom zijn van en gemaakt zijn door u of uw licentiegevers, en dat u deze gegevens, geluiden of andere werken beschikbaar stelt via de volgende Creative Commons Licentie (voor meer informatie over deze licentie, zie + + + + You are free to: + Je staat vrij om: + + + + Share + het materiaal + + + + copy and redistribute the material in any medium or format + te delen, te kopiëren en te herdistribueren in elk medium of formaat + + + + Adapt + Aanpassen + + + + remix, transform, and build upon the material + remixen, transformeren en bouwen op het materiaal + + + + The licensor cannot revoke these freedoms as long as you follow the license terms. + De licentiegever kan deze vrijheden niet herroepen zolang u zich aan de licentievoorwaarden houdt. + + + + Under the following terms: + Onder de volgende voorwaarden: + + + + Attribution + Naamsvermelding + + + + You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + U moet de juiste erkenning geven, een link naar de licentie geven en aangeven of er wijzigingen zijn aangebracht. U mag dit op elke redelijke manier doen, maar niet op een manier die suggereert dat de licentiegever u of uw gebruik goedkeurt. + + + + NonCommercial + Niet-commercieel + + + + You may not use the material for commercial purposes. + U mag het materiaal niet voor commerciële doeleinden gebruiken. + + + + ShareAlike + hareAlike + + + + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + Als u het materiaal remixt, transformeert of uitbouwt, moet u uw bijdragen distribueren onder dezelfde licentie als het origineel. + + + + No additional restrictions + Geen extra beperkingen + + + + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + U mag geen wettelijke voorwaarden of technologische maatregelen toepassen die anderen wettelijk beperken om iets te doen wat de licentie toestaat. + + + + CMusProfDlg + + + + Musician Profile + Muzikantenprofiel + + + + Alias/Name + Alias/Naam + + + + Instrument + Instrument + + + + Country + Land + + + + City + Stad + + + + Skill + Vaardigheid + + + + &Close + &Sluiten + + + + + + None + Geen + + + + Beginner + Beginner + + + + Intermediate + Gemiddeld + + + + Expert + Gevorderd + + + + 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. + Stel hier je naam of een alias in zodat de andere muzikanten met wie je wilt spelen weten wie je bent. Daarnaast kun je een instrumentfoto van het instrument dat je bespeelt en een vlag van het land waar je woont, instellen. De stad waar je woont en het vaardigheidsniveau van het spelen van je instrument kunnen ook worden toegevoegd. + + + + What you set here will appear at your fader on the mixer board when you are connected to a + Wat u hier instelt, verschijnt bij uw fader op het mengpaneel wanneer u verbonden bent met een + + + + server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. + server. Deze tag zal ook verschijnen op elke client die verbonden is met dezelfde server als u. Als de naam leeg is, wordt in plaats daarvan het IP-adres getoond. + + + + Alias or name edit box + Alias of naam bewerkingsvak + + + + Instrument picture button + Afbeelding van het instrument + + + + Country flag button + Landvlag knop + + + + City edit box + Bewerkingsbox voor de stad + + + + Skill level combo box + Combo-box voor vaardigheidsniveau + + + + Drum Set + Drumstel + + + + Djembe + Djembe + + + + Electric Guitar + Elektrische Gitaar + + + + Acoustic Guitar + Akoestische Gitaar + + + + Bass Guitar + Basgitaar + + + + Keyboard + Toetsenbord + + + + Synthesizer + Synthesizer + + + + Grand Piano + Piano + + + + Accordion + Accordeon + + + + Vocal + Vocaal + + + + Microphone + Microfoon + + + + Harmonica + Harmonica + + + + Trumpet + Trompet + + + + Trombone + Trombone + + + + French Horn + Hoorn + + + + Tuba + Tuba + + + + Saxophone + Saxofoon + + + + Clarinet + Klarinet + + + + Flute + Fluit + + + + Violin + Viool + + + + Cello + Cello + + + + Double Bass + Contrabas + + + + Recorder + Opnemer + + + + Streamer + Streamer + + + + Listener + Luisteraar + + + + Guitar+Vocal + Gitaar+Vocaal + + + + Keyboard+Vocal + Toetsenbord+Vocaal + + + + Bodhran + Bodhran + + + + Bassoon + Fagot + + + + Oboe + Hobo + + + + Harp + Harp + + + + Viola + Viola + + + + Congas + Congas + + + + Bongo + Bongo + + + + CServerDlg + + + Client List + Clientlijst + + + + 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. + De clientlijst toont alle clients die op dit moment verbonden zijn met deze server. Voor elke verbonden client wordt enige informatie over de clients gegeven, zoals het IP-adres en de naam. + + + + Connected clients list view + Overzicht van de lijst met verbonden clients + + + + Start Minimized on Operating System Start + Start geminimaliseerd bij de start van het besturingssysteem + + + + If the start minimized on operating system start check box is checked, the + Als het selectievakje Starten geminimaliseerd op het besturingssysteem is aangevinkt, wordt de + + + + server will be started when the operating system starts up and is automatically minimized to a system task bar icon. + server gestart wanneer het besturingssysteem wordt opgestart en wordt automatisch geminimaliseerd tot een systeemtaakbalkpictogram. + + + + Show Creative Commons Licence Dialog + Toon de Creative Commons Licentie + + + + If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + Indien ingeschakeld, wordt een Creative Commons BY-NC-SA 4.0 Licentiedialoogvenster getoond telkens wanneer een nieuwe gebruiker de server verbindt. + + + + Make My Server Public + Maak Mijn Server Openbaar + + + + If the Make My Server Public check box is checked, this server registers itself at the central server so that all + Als het selectievakje Maak Mijn Server Openbaar is aangevinkt, registreert deze server zichzelf op de centrale server zodat alle + + + + users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. + gebruikers kunnen de server zien in de lijst van de verbindingsserver in het dialoogvenster en er verbinding mee maken. De registratie van de server wordt periodiek vernieuwd om er zeker van te zijn dat alle servers in de connect dialog server lijst daadwerkelijk beschikbaar zijn. + + + + Register Server Status + Tabblad Serverstatus + + + + If the Make My Server Public check box is checked, this will show the success of registration with the central server. + Als het selectievakje Maak Mijn Server Openbaar is aangevinkt, zal dit het succes van de registratie bij de centrale server laten zien. + + + + Central Server Address + Centrale Serveradres + + + + 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. + Het adres van de centrale server is het IP-adres of de URL van de centrale server waarop deze server is geregistreerd. Met het type centraal serveradres kan ofwel de lokale regio worden geselecteerd van de standaard centrale servers of kan een handmatig adres worden opgegeven. + + + + Default central server type combo box + Standaard centrale server type combo box + + + + Central server address line edit + Centrale server adresbewerking van de lijn + + + + Server Name + Servernaam + + + + 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. + De naam van de server identificeert uw server in de lijst van de connect-dialoog-server bij de clients. Als er geen naam wordt gegeven, wordt in plaats daarvan het IP-adres getoond. + + + + Server name line edit + Servernaam lijnbewerking + + + + Location City + Locatie Stad + + + + 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. + De stad waar deze server zich bevindt kan hier worden ingesteld. Als er een plaatsnaam wordt ingevoerd, wordt deze getoond in de lijst van de connect-dialoog-server bij de clients. + + + + City where the server is located line edit + Stad waar de server zich bevindt lijnbewerking + + + + Location country + Land van locatie + + + + 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. + Het land waarin deze server zich bevindt kan hier worden ingesteld. Als er een land is ingevoerd, wordt dit getoond in de lijst van de verbindingsserver bij de clients. + + + + Country where the server is located combo box + Land waar de server zich bevindt combo box + + + + + E&xit + &Sluiten + + + + &Hide + Verbergen + + + + + + server + server + + + + &Open + &Open + + + + server + server + + + + Manual + Handleiding + + + + Default + Standaard + + + + Default (North America) + Standaard (Noord-Amerika) + + + + Server + Server + + + + &Window + &Window + + + + Unregistered + Niet geregistreerd + + + + Bad address + Slecht adres + + + + Registration requested + Aanmelding gevraagd + + + + Registration failed + Registratie is mislukt + + + + Check server version + Controleer de versie van de server + + + + Registered + Geregistreerd + + + + Central Server full + Centrale server vol + + + + Unknown value + Onbekende waarde + + + + CServerDlgBase + + + Client IP:Port + Client IP:Poort + + + + + Name + Naam + + + + Jitter Buffer Size + Jitter Buffermaat + + + + Start Minimized on Windows Start + Start geminimaliseerd bij Windows-start + + + + Show Creative Commons BY-NC-SA 4.0 Licence Dialog + Toon Creative Commons BY-NC-SA 4.0 Licentie Dialoog + + + + Make My Server Public (Register My Server in the Server List) + Maak mijn server openbaar (Registreer mijn server in de lijst met servers) + + + + STATUS + STATUS + + + + Central Server Address: + Adres Centrale Server: + + + + My Server Info + Mijn serverinfo + + + + Location: City + Locatie: Stad + + + + Location: Country + Locatie: Land + + + + TextLabelNameVersion + + + + + CSound + + + Error closing stream: $s + Fout tijdens afsluiten: $s + + + + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. + De Jack server draait niet. Voor deze software is een Jack-server nodig om te kunnen draaien. Normaal gesproken als de Jack-server niet draait zal deze software automatisch de Jack-server opstarten. Het lijkt erop dat deze automatische start niet heeft gewerkt. Probeer de Jack server handmatig te starten. + + + + The Jack server sample rate is different from the required one. The required sample rate is: + De Jack-server sample rate is anders dan de vereiste. De vereiste sample rate is: + + + + You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. + U kunt een tool als <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> gebruiken om de sample rate van de Jack-server aan te passen. + + + + Make sure to set the Frames/Period to a low value like + Zorg ervoor dat u de Frames/Periode op een lage waarde instelt, zoals + + + + to achieve a low delay. + om een lage vertraging te bereiken. + + + + + The Jack port registering failed. + De registratie van de Jack-poort is mislukt. + + + + Cannot activate the Jack client. + Kan de Jack-client niet activeren. + + + + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. + De Jack-server werd afgesloten. Voor deze software is een Jack-server nodig om te kunnen draaien. Probeer de software te herstarten om het probleem op te lossen. + + + + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. + CoreAudio-ingang AudioHardwareGetProperty-oproep mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. + + + + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. + CoreAudio uitgang AudioHardwareGetProperty call mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + Een sample rate van %1 Hz voor het audio-ingangsapparaat van het huidige systeem wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + De sample rate van %1 Hz van het huidige systeem audiouitgangsapparaat wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. + + + + The audio input stream format for this audio device is not compatible with this software. + Het audio input stream-formaat voor dit audioapparaat is niet compatibel met deze software. + + + + The audio output stream format for this audio device is not compatible with this software. + Het formaat van de audio-uitgangsstroom voor dit audioapparaat is niet compatibel met deze software. + + + + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. + De buffergrootte van het huidige in- en uitgaande audioapparaat kan niet op een gemeenschappelijke waarde worden ingesteld. Kies andere in-/uitgangsaudioapparaten in uw systeeminstellingen. + + + + The audio driver could not be initialized. + De audiodriver kon niet worden geïnitialiseerd. + + + + The audio device does not support the required sample rate. The required sample rate is: + Het audioapparaat ondersteunt niet de vereiste samplefrequentie. De vereiste samplefrequentie wel: + + + + The audio device does not support to set the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to + Het audioapparaat biedt geen ondersteuning voor het instellen van de vereiste bemonsteringsfrequentie. Deze fout kan zich voordoen als u een audio-interface heeft zoals de Roland UA-25EX waarbij u de samplefrequentie instelt met een hardwareschakelaar op het audioapparaat. Als dit het geval is, verander dan de samplefrequentie in + + + + Hz on the device and restart the + Hz op het apparaat en start de + + + + software. + software. + + + + The audio device does not support the required number of channels. The required number of channels for input and output is: + Het audioapparaat ondersteunt niet het vereiste aantal kanalen. Het vereiste aantal kanalen voor in- en uitvoer is: + + + + + Required audio sample format not available. + Vereist audiosampleformaat niet beschikbaar. + + + + No ASIO audio device (driver) found. + Geen ASIO-audioapparaat (stuurprogramma) gevonden. + + + + The + De + + + + 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 the ASIO4All driver. + software vereist de lage-latency audio-interface ASIO om goed te kunnen werken. Dit is geen standaard Windows audio-interface en daarom is een speciale audio-stuurprogramma vereist. Ofwel heeft uw geluidskaart een native ASIO driver (die wordt aanbevolen), ofwel wilt u alternatieve drivers gebruiken zoals de ASIO4All driver. + + + + CSoundBase + + + Invalid device selection. + Ongeldige apparaatkeuze. + + + + 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: + De eigenschappen van de audiodriver zijn veranderd in een toestand die niet compatibel is met deze software. Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + + + + Please restart the software. + Start de software opnieuw op. + + + + Close + Sluiten + + + + No usable + Niet bruikbaar + + + + audio device (driver) found. + audioapparaat (stuurprogramma) gevonden. + + + + In the following there is a list of all available drivers with the associated error message: + Hieronder vindt u een lijst van alle beschikbare drivers met de bijbehorende foutmelding: + + + + Do you want to open the ASIO driver setups? + Wilt u de ASIO-stuurprogramma's openen? + + + + could not be started because of audio interface issues. + kon niet worden gestart vanwege problemen met de audio-interface. + + + + global + + + For more information use the What's This help (help menu, right mouse button or Shift+F1) + + + + diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index 50012de9..1f42aa5e 100644 Binary files a/src/res/translation/translation_pt_PT.qm and b/src/res/translation/translation_pt_PT.qm differ diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index e7b96caa..073f1c51 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -4,22 +4,31 @@ CAboutDlg - + The O - software enables musicians to perform real-time jam sessions over the internet. There is a - permite aos músicos realizar jam sessions em tempo real pela Internet. Existe um servidor + permite aos músicos realizar jam sessions em tempo real pela Internet. Existe um servidor - + + software enables musicians to perform real-time jam sessions over the internet. + + + + server which collects the audio data from each que reúne os dados de áudio de cada cliente - + + There is a + + + + client, mixes the audio data and sends the mix back to each client. , que mistura os dados de áudio e envia a mistura de volta para cada cliente. @@ -29,22 +38,77 @@ utiliza as seguintes bibliotecas, recursos ou partes de código: - + + Qt cross-platform application framework + + + + + Audio reverberation code by Perry R. Cook and Gary P. Scavone + + + + + Some pixmaps are from the + + + + + Country flag icons from Mark James + + + + + For details on the contributions check out the + + + + + Github Contributors list + + + + + Spanish + + + + + French + + + + + Portuguese + + + + + Dutch + + + + + German + + + + About Sobre o - + , Version , Versão - + Internet Jam Session Software Programa de Jam Sessions pela Internet - + Under the GNU General Public License (GPL) Sob a Licença Pública Geral GNU (GPL) @@ -57,15 +121,35 @@ Sobre - + TextLabelVersion TextLabelVersion - + Copyright (C) 2005-2020 Volker Fischer and others Copyright (C) 2005-2020 Volker Fischer e outros + + + A&bout + + + + + &Libraries + + + + + &Contributors + + + + + &Translation + + Author: Volker Fischer Autor: Volker Fischer @@ -96,12 +180,12 @@ CAudioMixerBoard - + Server Servidor - + T R Y I N G T O C O N N E C T T E N T A N D O L I G A R @@ -194,44 +278,44 @@ SOLO - + Alias/Name Nome/Alcunha - + Instrument Instrumento - + Location Localização - - - + + + Skill Level Nível de Habilidade - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - + Musician Profile Perfil do músico @@ -421,7 +505,7 @@ - + C&onnect &Ligar @@ -503,7 +587,7 @@ - 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. + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono 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. Um efeito de reverberação pode ser aplicado a um canal local de áudio mono ou a ambos os canais no modo estéreo. A seleção do canal mono e o nível de reverberação podem ser modificados. Se, por exemplo, o sinal do microfone for alimentado no canal de áudio direito da placa de som, e for aplicado um efeito de reverberação, ajuste o seletor de canal para a direita e mova o fader para cima até que o nível de reverberação desejado seja atingido. @@ -562,17 +646,17 @@ O CPU do cliente ou servidor está a 100%. - + user utilizador - + users utilizadores - + D&isconnect Desl&igar @@ -849,7 +933,7 @@ - software will still work with this setting but with restricted performannce. + software will still work with this setting but with restricted performance. ainda funcionará com essa configuração, mas com desempenho restrito. @@ -1077,6 +1161,11 @@ Default (North America) Servidor Padrão (America do Norte) + + + preferred + + @@ -1301,7 +1390,7 @@ - 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: + server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: deve ser definido aqui. Um número de porta opcional pode ser adicionado após o endereço IP ou URL usando o caractere dois pontos como separador, por exemplo, example.org: @@ -1326,7 +1415,7 @@ - The server list is filered by the given text. Note that the filter is case insensitive. + The server list is filtered by the given text. Note that the filter is case insensitive. A lista de servidores é filtrada pelo texto fornecido. Note que o filtro não diferencia maiúsculas de minúsculas. @@ -1406,23 +1495,28 @@ CHelpMenu - - + + &Help + + + + + Getting &Started... Como Começa&r... - + Software &Manual... &Manual do Programa... - + What's &This O que é &isto - + &About... &Sobre... @@ -1430,102 +1524,102 @@ CLicenceDlg - + I &agree to the above licence terms Eu &aceito os termos da licença acima - + Accept Aceitar - + Decline Rejeitar - + By connecting to this server and agreeing to this notice, you agree to the following: Ao ligar-se a este servidor e concordar com este aviso, está a concordar com o seguinte: - + 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 Você concorda que todos os dados, sons ou outros trabalhos transmitidos para este servidor pertencem e são criados por você ou por seus licenciadores, e que você está disponibilizando esses dados, sons ou outros trabalhos através da seguinte licença Creative Commons (para obter mais informações sobre esta licença, consulte - + You are free to: Você tem o direito de: - + Share Compartilhar - + copy and redistribute the material in any medium or format copiar e redistribuir o material em qualquer suporte ou formato - + Adapt Adaptar - + remix, transform, and build upon the material remisturar, transformar, e criar a partir do material - + The licensor cannot revoke these freedoms as long as you follow the license terms. O licenciante não pode revogar estes direitos desde que você respeite os termos da licença. - + Under the following terms: De acordo com os termos seguintes: - + Attribution Atribuição - + You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. Você deve atribuir o devido crédito, fornecer um link para a licença, e indicar se foram feitas alterações. Você pode fazê-lo de qualquer forma razoável, mas não de uma forma que sugira que o licenciante o apoia ou aprova o seu uso. - + NonCommercial NãoComercial - + You may not use the material for commercial purposes. Você não pode usar o material para fins comerciais. - + ShareAlike CompartilhaIgual - + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. Se você remisturar, transformar, ou criar a partir do material, tem de distribuir as suas contribuições ao abrigo da mesma licença que o original. - + No additional restrictions Sem restrições adicionais - + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. Você não pode aplicar termos jurídicos ou medidas de caráter tecnológico que restrinjam legalmente outros de fazerem algo que a licença permita. @@ -1533,263 +1627,273 @@ CMusProfDlg - + server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. . Esta identificação também será exibida em cada cliente ligado ao mesmo servidor que você. Se o nome estiver vazio, o endereço IP será mostrado. - + Alias or name edit box Caixa de edição do nome ou pseudônimo - + Instrument picture button Botão da imagem do instrumento - + Country flag button Botão da bandeira do país - + City edit box Caixa de edição da cidade - + Skill level combo box Caixa do nível de habilidade - - - + + + None Nenhum - - + + Musician Profile Perfil do músico - + Alias/Name Nome/Alcunha - + Instrument Instrumento - + Country País - + City Cidade - + Skill Habilidade - + &Close &Fechar - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - + 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. Defina o seu nome ou um pseudônimo aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode definir uma imagem do instrumento que toca e uma bandeira do país em que vive. A cidade em que vive e o nível de habilidade com o seu instrumento também podem ser adicionados. - + What you set here will appear at your fader on the mixer board when you are connected to a O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor - + Drum Set Bateria - + Djembe Djembe - + Electric Guitar Guitarra Elétrica - + Acoustic Guitar Guitarra Acústica - + Bass Guitar Baixo - + Keyboard Teclado - + Synthesizer Sintetizador - + Grand Piano Piano de Cauda - + Accordion Acordeão - + Vocal Voz - + Microphone Microfone - + Harmonica Harmónica - + Trumpet Trompete - + Trombone Trombone - + French Horn Trompa Francesa - + Tuba Tuba - + Saxophone Saxofone - + Clarinet Clarinete - + Flute Flauta - + Violin Violino - + Cello Violoncelo - + Double Bass Contrabaixo - + Recorder Gravador - + Streamer Streamer - + Listener Ouvinte - + Guitar+Vocal Guitarra+Voz - + Keyboard+Vocal Teclado+Voz - + Bodhran Bodhrán - + Bassoon Fagote - + Oboe Oboé - + Harp Harpa - + Viola Viola de Arco + + + Congas + + + + + Bongo + + CServerDlg @@ -1977,42 +2081,42 @@ &Janela - + Unregistered Não Registado - + Bad address Endereço incorrecto - + Registration requested Registo solicitado - + Registration failed Falha no registo - + Check server version Verifique versão do servidor - + Registered Registado - + Central Server full Servidor Central Cheio - + Unknown value Valor desconhecido @@ -2120,7 +2224,7 @@ Não é possível ativar o cliente Jack. - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. O servidor Jack foi desligado. Este programa requer um servidor Jack para ser executado. Tente reiniciar o programa para resolver o problema. @@ -2210,6 +2314,11 @@ 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 the ASIO4All driver. requer que a interface de áudio de baixa latência ASIO funcione corretamente. Esta não é uma interface de áudio padrão do Windows e, portanto, é necessário um driver de áudio especial. Ou a sua placa de som possui um driver ASIO nativo (recomendado), ou pode usar drivers alternativos, como o driver ASIO4All. + + + Error closing stream: $s + + CSoundBase @@ -2259,4 +2368,12 @@ não pôde ser iniciado devido a problemas na interface de áudio. + + global + + + For more information use the What's This help (help menu, right mouse button or Shift+F1) + + + diff --git a/src/resources.qrc b/src/resources.qrc index ab3535f1..a60fac09 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -11,6 +11,9 @@ res/translation/translation_es_ES.qm + + res/translation/translation_nl_NL.qm + res/CLEDDisabledSmall.png res/CLEDGreenArrow.png @@ -66,6 +69,8 @@ res/instruments/oboe.png res/instruments/harp.png res/instruments/viola.png + res/instruments/congas.png + res/instruments/bongo.png res/fronticon.png diff --git a/src/server.cpp b/src/server.cpp index 36a3e3e0..87af18bb 100755 --- a/src/server.cpp +++ b/src/server.cpp @@ -231,27 +231,28 @@ CServer::CServer ( const int iNewMaxNumChan, const QString& strNewWelcomeMessage, const QString& strRecordingDirName, const bool bNCentServPingServerInList, - const bool bNDisconnectAllClients, + const bool bNDisconnectAllClientsOnQuit, const bool bNUseDoubleSystemFrameSize, const ELicenceType eNLicenceType ) : - bUseDoubleSystemFrameSize ( bNUseDoubleSystemFrameSize ), - iMaxNumChannels ( iNewMaxNumChan ), - Socket ( this, iPortNumber ), - Logging ( iMaxDaysHistory ), - JamRecorder ( strRecordingDirName ), - bEnableRecording ( !strRecordingDirName.isEmpty() ), - bWriteStatusHTMLFile ( false ), - HighPrecisionTimer ( bNUseDoubleSystemFrameSize ), - ServerListManager ( iPortNumber, - strCentralServer, - strServerInfo, - iNewMaxNumChan, - bNCentServPingServerInList, - &ConnLessProtocol ), - bAutoRunMinimized ( false ), - strWelcomeMessage ( strNewWelcomeMessage ), - eLicenceType ( eNLicenceType ), - bDisconnectAllClients ( bNDisconnectAllClients ) + bUseDoubleSystemFrameSize ( bNUseDoubleSystemFrameSize ), + iMaxNumChannels ( iNewMaxNumChan ), + Socket ( this, iPortNumber ), + Logging ( iMaxDaysHistory ), + JamRecorder ( strRecordingDirName ), + bEnableRecording ( !strRecordingDirName.isEmpty() ), + bWriteStatusHTMLFile ( false ), + HighPrecisionTimer ( bNUseDoubleSystemFrameSize ), + ServerListManager ( iPortNumber, + strCentralServer, + strServerInfo, + iNewMaxNumChan, + bNCentServPingServerInList, + &ConnLessProtocol ), + bAutoRunMinimized ( false ), + strWelcomeMessage ( strNewWelcomeMessage ), + eLicenceType ( eNLicenceType ), + bDisconnectAllClientsOnQuit ( bNDisconnectAllClientsOnQuit ), + pSignalHandler ( CSignalHandler::getSingletonP() ) { int iOpusError; int i; @@ -398,11 +399,10 @@ CServer::CServer ( const int iNewMaxNumChan, QString().number( static_cast ( iPortNumber ) ) ); } - // Enable jam recording (if requested) + // Enable jam recording (if requested) - kicks off the thread if ( bEnableRecording ) { JamRecorder.Init ( this, iServerFrameSizeSamples ); - JamRecorder.start(); } // enable all channels (for the server all channel must be enabled the @@ -466,281 +466,21 @@ CServer::CServer ( const int iNewMaxNumChan, SIGNAL ( SvrRegStatusChanged() ), this, SLOT ( OnSvrRegStatusChanged() ) ); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + QObject::connect ( QCoreApplication::instance(), + SIGNAL ( aboutToQuit() ), + this, SLOT ( OnAboutToQuit() ) ); + + QObject::connect ( pSignalHandler, + SIGNAL ( ShutdownSignal ( int ) ), + this, SLOT ( OnShutdown ( int ) ) ); + connectChannelSignalsToServerSlots(); -#else - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - // send message - QObject::connect ( &vecChannels[0], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh0 ( CVector ) ) ); - QObject::connect ( &vecChannels[1], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh1 ( CVector ) ) ); - QObject::connect ( &vecChannels[2], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh2 ( CVector ) ) ); - QObject::connect ( &vecChannels[3], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh3 ( CVector ) ) ); - QObject::connect ( &vecChannels[4], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh4 ( CVector ) ) ); - QObject::connect ( &vecChannels[5], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh5 ( CVector ) ) ); - QObject::connect ( &vecChannels[6], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh6 ( CVector ) ) ); - QObject::connect ( &vecChannels[7], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh7 ( CVector ) ) ); - QObject::connect ( &vecChannels[8], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh8 ( CVector ) ) ); - QObject::connect ( &vecChannels[9], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh9 ( CVector ) ) ); - QObject::connect ( &vecChannels[10], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh10 ( CVector ) ) ); - QObject::connect ( &vecChannels[11], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh11 ( CVector ) ) ); - QObject::connect ( &vecChannels[12], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh12 ( CVector ) ) ); - QObject::connect ( &vecChannels[13], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh13 ( CVector ) ) ); - QObject::connect ( &vecChannels[14], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh14 ( CVector ) ) ); - QObject::connect ( &vecChannels[15], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh15 ( CVector ) ) ); - QObject::connect ( &vecChannels[16], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh16 ( CVector ) ) ); - QObject::connect ( &vecChannels[17], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh17 ( CVector ) ) ); - QObject::connect ( &vecChannels[18], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh18 ( CVector ) ) ); - QObject::connect ( &vecChannels[19], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh19 ( CVector ) ) ); - QObject::connect ( &vecChannels[20], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh20 ( CVector ) ) ); - QObject::connect ( &vecChannels[21], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh21 ( CVector ) ) ); - QObject::connect ( &vecChannels[22], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh22 ( CVector ) ) ); - QObject::connect ( &vecChannels[23], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh23 ( CVector ) ) ); - QObject::connect ( &vecChannels[24], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh24 ( CVector ) ) ); - QObject::connect ( &vecChannels[25], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh25 ( CVector ) ) ); - QObject::connect ( &vecChannels[26], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh26 ( CVector ) ) ); - QObject::connect ( &vecChannels[27], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh27 ( CVector ) ) ); - QObject::connect ( &vecChannels[28], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh28 ( CVector ) ) ); - QObject::connect ( &vecChannels[29], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh29 ( CVector ) ) ); - QObject::connect ( &vecChannels[30], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh30 ( CVector ) ) ); - QObject::connect ( &vecChannels[31], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh31 ( CVector ) ) ); - QObject::connect ( &vecChannels[32], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh32 ( CVector ) ) ); - QObject::connect ( &vecChannels[33], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh33 ( CVector ) ) ); - QObject::connect ( &vecChannels[34], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh34 ( CVector ) ) ); - QObject::connect ( &vecChannels[35], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh35 ( CVector ) ) ); - QObject::connect ( &vecChannels[36], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh36 ( CVector ) ) ); - QObject::connect ( &vecChannels[37], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh37 ( CVector ) ) ); - QObject::connect ( &vecChannels[38], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh38 ( CVector ) ) ); - QObject::connect ( &vecChannels[39], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh39 ( CVector ) ) ); - QObject::connect ( &vecChannels[40], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh40 ( CVector ) ) ); - QObject::connect ( &vecChannels[41], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh41 ( CVector ) ) ); - QObject::connect ( &vecChannels[42], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh42 ( CVector ) ) ); - QObject::connect ( &vecChannels[43], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh43 ( CVector ) ) ); - QObject::connect ( &vecChannels[44], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh44 ( CVector ) ) ); - QObject::connect ( &vecChannels[45], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh45 ( CVector ) ) ); - QObject::connect ( &vecChannels[46], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh46 ( CVector ) ) ); - QObject::connect ( &vecChannels[47], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh47 ( CVector ) ) ); - QObject::connect ( &vecChannels[48], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh48 ( CVector ) ) ); - QObject::connect ( &vecChannels[49], SIGNAL ( MessReadyForSending ( CVector ) ), this, SLOT ( OnSendProtMessCh49 ( CVector ) ) ); - - // request connected clients list - QObject::connect ( &vecChannels[0], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh0() ) ); - QObject::connect ( &vecChannels[1], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh1() ) ); - QObject::connect ( &vecChannels[2], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh2() ) ); - QObject::connect ( &vecChannels[3], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh3() ) ); - QObject::connect ( &vecChannels[4], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh4() ) ); - QObject::connect ( &vecChannels[5], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh5() ) ); - QObject::connect ( &vecChannels[6], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh6() ) ); - QObject::connect ( &vecChannels[7], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh7() ) ); - QObject::connect ( &vecChannels[8], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh8() ) ); - QObject::connect ( &vecChannels[9], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh9() ) ); - QObject::connect ( &vecChannels[10], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh10() ) ); - QObject::connect ( &vecChannels[11], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh11() ) ); - QObject::connect ( &vecChannels[12], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh12() ) ); - QObject::connect ( &vecChannels[13], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh13() ) ); - QObject::connect ( &vecChannels[14], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh14() ) ); - QObject::connect ( &vecChannels[15], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh15() ) ); - QObject::connect ( &vecChannels[16], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh16() ) ); - QObject::connect ( &vecChannels[17], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh17() ) ); - QObject::connect ( &vecChannels[18], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh18() ) ); - QObject::connect ( &vecChannels[19], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh19() ) ); - QObject::connect ( &vecChannels[20], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh20() ) ); - QObject::connect ( &vecChannels[21], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh21() ) ); - QObject::connect ( &vecChannels[22], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh22() ) ); - QObject::connect ( &vecChannels[23], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh23() ) ); - QObject::connect ( &vecChannels[24], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh24() ) ); - QObject::connect ( &vecChannels[25], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh25() ) ); - QObject::connect ( &vecChannels[26], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh26() ) ); - QObject::connect ( &vecChannels[27], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh27() ) ); - QObject::connect ( &vecChannels[28], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh28() ) ); - QObject::connect ( &vecChannels[29], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh29() ) ); - QObject::connect ( &vecChannels[30], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh30() ) ); - QObject::connect ( &vecChannels[31], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh31() ) ); - QObject::connect ( &vecChannels[32], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh32() ) ); - QObject::connect ( &vecChannels[33], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh33() ) ); - QObject::connect ( &vecChannels[34], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh34() ) ); - QObject::connect ( &vecChannels[35], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh35() ) ); - QObject::connect ( &vecChannels[36], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh36() ) ); - QObject::connect ( &vecChannels[37], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh37() ) ); - QObject::connect ( &vecChannels[38], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh38() ) ); - QObject::connect ( &vecChannels[39], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh39() ) ); - QObject::connect ( &vecChannels[40], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh40() ) ); - QObject::connect ( &vecChannels[41], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh41() ) ); - QObject::connect ( &vecChannels[42], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh42() ) ); - QObject::connect ( &vecChannels[43], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh43() ) ); - QObject::connect ( &vecChannels[44], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh44() ) ); - QObject::connect ( &vecChannels[45], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh45() ) ); - QObject::connect ( &vecChannels[46], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh46() ) ); - QObject::connect ( &vecChannels[47], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh47() ) ); - QObject::connect ( &vecChannels[48], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh48() ) ); - QObject::connect ( &vecChannels[49], SIGNAL ( ReqConnClientsList() ), this, SLOT ( OnReqConnClientsListCh49() ) ); - - // channel info has changed - QObject::connect ( &vecChannels[0], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh0() ) ); - QObject::connect ( &vecChannels[1], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh1() ) ); - QObject::connect ( &vecChannels[2], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh2() ) ); - QObject::connect ( &vecChannels[3], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh3() ) ); - QObject::connect ( &vecChannels[4], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh4() ) ); - QObject::connect ( &vecChannels[5], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh5() ) ); - QObject::connect ( &vecChannels[6], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh6() ) ); - QObject::connect ( &vecChannels[7], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh7() ) ); - QObject::connect ( &vecChannels[8], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh8() ) ); - QObject::connect ( &vecChannels[9], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh9() ) ); - QObject::connect ( &vecChannels[10], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh10() ) ); - QObject::connect ( &vecChannels[11], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh11() ) ); - QObject::connect ( &vecChannels[12], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh12() ) ); - QObject::connect ( &vecChannels[13], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh13() ) ); - QObject::connect ( &vecChannels[14], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh14() ) ); - QObject::connect ( &vecChannels[15], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh15() ) ); - QObject::connect ( &vecChannels[16], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh16() ) ); - QObject::connect ( &vecChannels[17], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh17() ) ); - QObject::connect ( &vecChannels[18], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh18() ) ); - QObject::connect ( &vecChannels[19], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh19() ) ); - QObject::connect ( &vecChannels[20], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh20() ) ); - QObject::connect ( &vecChannels[21], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh21() ) ); - QObject::connect ( &vecChannels[22], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh22() ) ); - QObject::connect ( &vecChannels[23], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh23() ) ); - QObject::connect ( &vecChannels[24], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh24() ) ); - QObject::connect ( &vecChannels[25], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh25() ) ); - QObject::connect ( &vecChannels[26], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh26() ) ); - QObject::connect ( &vecChannels[27], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh27() ) ); - QObject::connect ( &vecChannels[28], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh28() ) ); - QObject::connect ( &vecChannels[29], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh29() ) ); - QObject::connect ( &vecChannels[30], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh30() ) ); - QObject::connect ( &vecChannels[31], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh31() ) ); - QObject::connect ( &vecChannels[32], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh32() ) ); - QObject::connect ( &vecChannels[33], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh33() ) ); - QObject::connect ( &vecChannels[34], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh34() ) ); - QObject::connect ( &vecChannels[35], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh35() ) ); - QObject::connect ( &vecChannels[36], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh36() ) ); - QObject::connect ( &vecChannels[37], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh37() ) ); - QObject::connect ( &vecChannels[38], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh38() ) ); - QObject::connect ( &vecChannels[39], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh39() ) ); - QObject::connect ( &vecChannels[40], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh40() ) ); - QObject::connect ( &vecChannels[41], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh41() ) ); - QObject::connect ( &vecChannels[42], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh42() ) ); - QObject::connect ( &vecChannels[43], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh43() ) ); - QObject::connect ( &vecChannels[44], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh44() ) ); - QObject::connect ( &vecChannels[45], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh45() ) ); - QObject::connect ( &vecChannels[46], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh46() ) ); - QObject::connect ( &vecChannels[47], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh47() ) ); - QObject::connect ( &vecChannels[48], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh48() ) ); - QObject::connect ( &vecChannels[49], SIGNAL ( ChanInfoHasChanged() ), this, SLOT ( OnChanInfoHasChangedCh49() ) ); - - // chat text received - QObject::connect ( &vecChannels[0], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh0 ( QString ) ) ); - QObject::connect ( &vecChannels[1], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh1 ( QString ) ) ); - QObject::connect ( &vecChannels[2], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh2 ( QString ) ) ); - QObject::connect ( &vecChannels[3], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh3 ( QString ) ) ); - QObject::connect ( &vecChannels[4], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh4 ( QString ) ) ); - QObject::connect ( &vecChannels[5], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh5 ( QString ) ) ); - QObject::connect ( &vecChannels[6], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh6 ( QString ) ) ); - QObject::connect ( &vecChannels[7], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh7 ( QString ) ) ); - QObject::connect ( &vecChannels[8], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh8 ( QString ) ) ); - QObject::connect ( &vecChannels[9], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh9 ( QString ) ) ); - QObject::connect ( &vecChannels[10], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh10 ( QString ) ) ); - QObject::connect ( &vecChannels[11], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh11 ( QString ) ) ); - QObject::connect ( &vecChannels[12], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh12 ( QString ) ) ); - QObject::connect ( &vecChannels[13], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh13 ( QString ) ) ); - QObject::connect ( &vecChannels[14], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh14 ( QString ) ) ); - QObject::connect ( &vecChannels[15], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh15 ( QString ) ) ); - QObject::connect ( &vecChannels[16], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh16 ( QString ) ) ); - QObject::connect ( &vecChannels[17], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh17 ( QString ) ) ); - QObject::connect ( &vecChannels[18], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh18 ( QString ) ) ); - QObject::connect ( &vecChannels[19], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh19 ( QString ) ) ); - QObject::connect ( &vecChannels[20], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh20 ( QString ) ) ); - QObject::connect ( &vecChannels[21], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh21 ( QString ) ) ); - QObject::connect ( &vecChannels[22], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh22 ( QString ) ) ); - QObject::connect ( &vecChannels[23], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh23 ( QString ) ) ); - QObject::connect ( &vecChannels[24], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh24 ( QString ) ) ); - QObject::connect ( &vecChannels[25], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh25 ( QString ) ) ); - QObject::connect ( &vecChannels[26], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh26 ( QString ) ) ); - QObject::connect ( &vecChannels[27], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh27 ( QString ) ) ); - QObject::connect ( &vecChannels[28], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh28 ( QString ) ) ); - QObject::connect ( &vecChannels[29], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh29 ( QString ) ) ); - QObject::connect ( &vecChannels[30], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh30 ( QString ) ) ); - QObject::connect ( &vecChannels[31], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh31 ( QString ) ) ); - QObject::connect ( &vecChannels[32], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh32 ( QString ) ) ); - QObject::connect ( &vecChannels[33], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh33 ( QString ) ) ); - QObject::connect ( &vecChannels[34], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh34 ( QString ) ) ); - QObject::connect ( &vecChannels[35], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh35 ( QString ) ) ); - QObject::connect ( &vecChannels[36], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh36 ( QString ) ) ); - QObject::connect ( &vecChannels[37], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh37 ( QString ) ) ); - QObject::connect ( &vecChannels[38], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh38 ( QString ) ) ); - QObject::connect ( &vecChannels[39], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh39 ( QString ) ) ); - QObject::connect ( &vecChannels[40], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh40 ( QString ) ) ); - QObject::connect ( &vecChannels[41], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh41 ( QString ) ) ); - QObject::connect ( &vecChannels[42], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh42 ( QString ) ) ); - QObject::connect ( &vecChannels[43], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh43 ( QString ) ) ); - QObject::connect ( &vecChannels[44], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh44 ( QString ) ) ); - QObject::connect ( &vecChannels[45], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh45 ( QString ) ) ); - QObject::connect ( &vecChannels[46], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh46 ( QString ) ) ); - QObject::connect ( &vecChannels[47], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh47 ( QString ) ) ); - QObject::connect ( &vecChannels[48], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh48 ( QString ) ) ); - QObject::connect ( &vecChannels[49], SIGNAL ( ChatTextReceived ( QString ) ), this, SLOT ( OnChatTextReceivedCh49 ( QString ) ) ); - - // auto socket buffer size change - QObject::connect ( &vecChannels[0], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh0 ( int ) ) ); - QObject::connect ( &vecChannels[1], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh1 ( int ) ) ); - QObject::connect ( &vecChannels[2], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh2 ( int ) ) ); - QObject::connect ( &vecChannels[3], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh3 ( int ) ) ); - QObject::connect ( &vecChannels[4], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh4 ( int ) ) ); - QObject::connect ( &vecChannels[5], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh5 ( int ) ) ); - QObject::connect ( &vecChannels[6], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh6 ( int ) ) ); - QObject::connect ( &vecChannels[7], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh7 ( int ) ) ); - QObject::connect ( &vecChannels[8], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh8 ( int ) ) ); - QObject::connect ( &vecChannels[9], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh9 ( int ) ) ); - QObject::connect ( &vecChannels[10], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh10 ( int ) ) ); - QObject::connect ( &vecChannels[11], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh11 ( int ) ) ); - QObject::connect ( &vecChannels[12], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh12 ( int ) ) ); - QObject::connect ( &vecChannels[13], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh13 ( int ) ) ); - QObject::connect ( &vecChannels[14], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh14 ( int ) ) ); - QObject::connect ( &vecChannels[15], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh15 ( int ) ) ); - QObject::connect ( &vecChannels[16], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh16 ( int ) ) ); - QObject::connect ( &vecChannels[17], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh17 ( int ) ) ); - QObject::connect ( &vecChannels[18], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh18 ( int ) ) ); - QObject::connect ( &vecChannels[19], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh19 ( int ) ) ); - QObject::connect ( &vecChannels[20], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh20 ( int ) ) ); - QObject::connect ( &vecChannels[21], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh21 ( int ) ) ); - QObject::connect ( &vecChannels[22], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh22 ( int ) ) ); - QObject::connect ( &vecChannels[23], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh23 ( int ) ) ); - QObject::connect ( &vecChannels[24], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh24 ( int ) ) ); - QObject::connect ( &vecChannels[25], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh25 ( int ) ) ); - QObject::connect ( &vecChannels[26], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh26 ( int ) ) ); - QObject::connect ( &vecChannels[27], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh27 ( int ) ) ); - QObject::connect ( &vecChannels[28], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh28 ( int ) ) ); - QObject::connect ( &vecChannels[29], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh29 ( int ) ) ); - QObject::connect ( &vecChannels[30], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh30 ( int ) ) ); - QObject::connect ( &vecChannels[31], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh31 ( int ) ) ); - QObject::connect ( &vecChannels[32], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh32 ( int ) ) ); - QObject::connect ( &vecChannels[33], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh33 ( int ) ) ); - QObject::connect ( &vecChannels[34], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh34 ( int ) ) ); - QObject::connect ( &vecChannels[35], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh35 ( int ) ) ); - QObject::connect ( &vecChannels[36], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh36 ( int ) ) ); - QObject::connect ( &vecChannels[37], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh37 ( int ) ) ); - QObject::connect ( &vecChannels[38], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh38 ( int ) ) ); - QObject::connect ( &vecChannels[39], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh39 ( int ) ) ); - QObject::connect ( &vecChannels[40], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh40 ( int ) ) ); - QObject::connect ( &vecChannels[41], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh41 ( int ) ) ); - QObject::connect ( &vecChannels[42], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh42 ( int ) ) ); - QObject::connect ( &vecChannels[43], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh43 ( int ) ) ); - QObject::connect ( &vecChannels[44], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh44 ( int ) ) ); - QObject::connect ( &vecChannels[45], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh45 ( int ) ) ); - QObject::connect ( &vecChannels[46], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh46 ( int ) ) ); - QObject::connect ( &vecChannels[47], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh47 ( int ) ) ); - QObject::connect ( &vecChannels[48], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh48 ( int ) ) ); - QObject::connect ( &vecChannels[49], SIGNAL ( ServerAutoSockBufSizeChange ( int ) ), this, SLOT ( OnServerAutoSockBufSizeChangeCh49 ( int ) ) ); - -#endif - // start the socket (it is important to start the socket after all // initializations and connections) Socket.Start(); } -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - template inline void CServer::connectChannelSignalsToServerSlots() { @@ -768,15 +508,15 @@ inline void CServer::connectChannelSignalsToServerSlots() // channel info has changed QObject::connect ( &vecChannels[iCurChanID], &CChannel::ChanInfoHasChanged, - this, &CServer::CreateAndSendChanListForAllConChannels ); + this, &CServer::CreateAndSendChanListForAllConChannels ); // chat text received QObject::connect ( &vecChannels[iCurChanID], &CChannel::ChatTextReceived, - this, pOnChatTextReceivedCh ); + this, pOnChatTextReceivedCh ); // auto socket buffer size change QObject::connect ( &vecChannels[iCurChanID], &CChannel::ServerAutoSockBufSizeChange, - this, pOnServerAutoSockBufSizeChangeCh ); + this, pOnServerAutoSockBufSizeChangeCh ); connectChannelSignalsToServerSlots(); }; @@ -790,8 +530,6 @@ void CServer::CreateAndSendJitBufMessage ( const int iCurChanID, vecChannels[iCurChanID].CreateJitBufMes ( iNNumFra ); } -#endif - void CServer::SendProtMessage ( int iChID, CVector vecMessage ) { // the protocol queries me to call the function to send the message @@ -802,14 +540,6 @@ void CServer::SendProtMessage ( int iChID, CVector vecMessage ) void CServer::OnNewConnection ( int iChID, CHostAddress RecHostAddr ) { - // in the special case that all clients shall be disconnected, just send the - // disconnect message and leave this function - if ( bDisconnectAllClients ) - { - ConnLessProtocol.CreateCLDisconnection ( RecHostAddr ); - return; - } - // on a new connection we query the network transport properties for the // audio packets (to use the correct network block size and audio // compression properties, etc.) @@ -908,6 +638,39 @@ void CServer::OnCLDisconnection ( CHostAddress InetAddr ) } } +void CServer::OnAboutToQuit() +{ + // if enabled, disconnect all clients on quit + if ( bDisconnectAllClientsOnQuit ) + { + Mutex.lock(); + { + for ( int i = 0; i < iMaxNumChannels; i++ ) + { + if ( vecChannels[i].IsConnected() ) + { + ConnLessProtocol.CreateCLDisconnection ( vecChannels[i].GetAddress() ); + } + } + } + Mutex.unlock(); // release mutex + } + + Stop(); + + // if server was registered at the central server, unregister on shutdown + if ( GetServerListEnabled() ) + { + UnregisterSlaveServer(); + } +} + +void CServer::OnShutdown ( int ) +{ + // This should trigger OnAboutToQuit + QCoreApplication::instance()->exit(); +} + void CServer::Start() { // only start if not already running @@ -1272,6 +1035,8 @@ opus_custom_encoder_ctl ( CurOpusEncoder, // does not consume any significant CPU when no client is connected. Stop(); } + + Q_UNUSED ( iUnused ) } /// @brief Mix all audio data from all clients together. diff --git a/src/server.h b/src/server.h index d56a42c8..da38bc35 100755 --- a/src/server.h +++ b/src/server.h @@ -36,6 +36,7 @@ #endif #include "global.h" #include "buffer.h" +#include "signalhandler.h" #include "socket.h" #include "channel.h" #include "util.h" @@ -116,8 +117,6 @@ signals: }; #endif - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) template class CServerSlots : public CServerSlots { @@ -152,12 +151,6 @@ protected: template<> class CServerSlots<0> {}; -#else -template -class CServerSlots {}; - -#endif - class CServer : public QObject, public CServerSlots @@ -177,7 +170,7 @@ public: const QString& strNewWelcomeMessage, const QString& strRecordingDirName, const bool bNCentServPingServerInList, - const bool bNDisconnectAllClients, + const bool bNDisconnectAllClientsOnQuit, const bool bNUseDoubleSystemFrameSize, const ELicenceType eNLicenceType ); @@ -257,9 +250,9 @@ protected: int GetNumberOfConnectedClients(); CVector CreateChannelList(); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) virtual void CreateAndSendChanListForAllConChannels(); virtual void CreateAndSendChanListForThisChan ( const int iCurChanID ); + virtual void CreateAndSendChatTextForAllConChannels ( const int iCurChanID, const QString& strChatText ); @@ -272,17 +265,6 @@ protected: template inline void connectChannelSignalsToServerSlots(); -#else - void CreateAndSendChanListForAllConChannels(); - void CreateAndSendChanListForThisChan ( const int iCurChanID ); - void CreateAndSendChatTextForAllConChannels ( const int iCurChanID, - const QString& strChatText ); - - void SendProtMessage ( int iChID, - CVector vecMessage ); - -#endif - void WriteHTMLChannelList(); void ProcessData ( const CVector >& vecvecsData, @@ -368,7 +350,9 @@ protected: // messaging QString strWelcomeMessage; ELicenceType eLicenceType; - bool bDisconnectAllClients; + bool bDisconnectAllClientsOnQuit; + + CSignalHandler* pSignalHandler; signals: void Started(); @@ -455,264 +439,7 @@ public slots: void OnCLDisconnection ( CHostAddress InetAddr ); -#if QT_VERSION < 0x50000 // MOC does not expand macros in Qt 4, so we cannot use QT_VERSION_CHECK(5, 0, 0) - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - // send message - void OnSendProtMessCh0 ( CVector mess ) { SendProtMessage ( 0, mess ); } - void OnSendProtMessCh1 ( CVector mess ) { SendProtMessage ( 1, mess ); } - void OnSendProtMessCh2 ( CVector mess ) { SendProtMessage ( 2, mess ); } - void OnSendProtMessCh3 ( CVector mess ) { SendProtMessage ( 3, mess ); } - void OnSendProtMessCh4 ( CVector mess ) { SendProtMessage ( 4, mess ); } - void OnSendProtMessCh5 ( CVector mess ) { SendProtMessage ( 5, mess ); } - void OnSendProtMessCh6 ( CVector mess ) { SendProtMessage ( 6, mess ); } - void OnSendProtMessCh7 ( CVector mess ) { SendProtMessage ( 7, mess ); } - void OnSendProtMessCh8 ( CVector mess ) { SendProtMessage ( 8, mess ); } - void OnSendProtMessCh9 ( CVector mess ) { SendProtMessage ( 9, mess ); } - void OnSendProtMessCh10 ( CVector mess ) { SendProtMessage ( 10, mess ); } - void OnSendProtMessCh11 ( CVector mess ) { SendProtMessage ( 11, mess ); } - void OnSendProtMessCh12 ( CVector mess ) { SendProtMessage ( 12, mess ); } - void OnSendProtMessCh13 ( CVector mess ) { SendProtMessage ( 13, mess ); } - void OnSendProtMessCh14 ( CVector mess ) { SendProtMessage ( 14, mess ); } - void OnSendProtMessCh15 ( CVector mess ) { SendProtMessage ( 15, mess ); } - void OnSendProtMessCh16 ( CVector mess ) { SendProtMessage ( 16, mess ); } - void OnSendProtMessCh17 ( CVector mess ) { SendProtMessage ( 17, mess ); } - void OnSendProtMessCh18 ( CVector mess ) { SendProtMessage ( 18, mess ); } - void OnSendProtMessCh19 ( CVector mess ) { SendProtMessage ( 19, mess ); } - void OnSendProtMessCh20 ( CVector mess ) { SendProtMessage ( 20, mess ); } - void OnSendProtMessCh21 ( CVector mess ) { SendProtMessage ( 21, mess ); } - void OnSendProtMessCh22 ( CVector mess ) { SendProtMessage ( 22, mess ); } - void OnSendProtMessCh23 ( CVector mess ) { SendProtMessage ( 23, mess ); } - void OnSendProtMessCh24 ( CVector mess ) { SendProtMessage ( 24, mess ); } - void OnSendProtMessCh25 ( CVector mess ) { SendProtMessage ( 25, mess ); } - void OnSendProtMessCh26 ( CVector mess ) { SendProtMessage ( 26, mess ); } - void OnSendProtMessCh27 ( CVector mess ) { SendProtMessage ( 27, mess ); } - void OnSendProtMessCh28 ( CVector mess ) { SendProtMessage ( 28, mess ); } - void OnSendProtMessCh29 ( CVector mess ) { SendProtMessage ( 29, mess ); } - void OnSendProtMessCh30 ( CVector mess ) { SendProtMessage ( 30, mess ); } - void OnSendProtMessCh31 ( CVector mess ) { SendProtMessage ( 31, mess ); } - void OnSendProtMessCh32 ( CVector mess ) { SendProtMessage ( 32, mess ); } - void OnSendProtMessCh33 ( CVector mess ) { SendProtMessage ( 33, mess ); } - void OnSendProtMessCh34 ( CVector mess ) { SendProtMessage ( 34, mess ); } - void OnSendProtMessCh35 ( CVector mess ) { SendProtMessage ( 35, mess ); } - void OnSendProtMessCh36 ( CVector mess ) { SendProtMessage ( 36, mess ); } - void OnSendProtMessCh37 ( CVector mess ) { SendProtMessage ( 37, mess ); } - void OnSendProtMessCh38 ( CVector mess ) { SendProtMessage ( 38, mess ); } - void OnSendProtMessCh39 ( CVector mess ) { SendProtMessage ( 39, mess ); } - void OnSendProtMessCh40 ( CVector mess ) { SendProtMessage ( 40, mess ); } - void OnSendProtMessCh41 ( CVector mess ) { SendProtMessage ( 41, mess ); } - void OnSendProtMessCh42 ( CVector mess ) { SendProtMessage ( 42, mess ); } - void OnSendProtMessCh43 ( CVector mess ) { SendProtMessage ( 43, mess ); } - void OnSendProtMessCh44 ( CVector mess ) { SendProtMessage ( 44, mess ); } - void OnSendProtMessCh45 ( CVector mess ) { SendProtMessage ( 45, mess ); } - void OnSendProtMessCh46 ( CVector mess ) { SendProtMessage ( 46, mess ); } - void OnSendProtMessCh47 ( CVector mess ) { SendProtMessage ( 47, mess ); } - void OnSendProtMessCh48 ( CVector mess ) { SendProtMessage ( 48, mess ); } - void OnSendProtMessCh49 ( CVector mess ) { SendProtMessage ( 49, mess ); } + void OnAboutToQuit(); - void OnReqConnClientsListCh0() { CreateAndSendChanListForThisChan ( 0 ); } - void OnReqConnClientsListCh1() { CreateAndSendChanListForThisChan ( 1 ); } - void OnReqConnClientsListCh2() { CreateAndSendChanListForThisChan ( 2 ); } - void OnReqConnClientsListCh3() { CreateAndSendChanListForThisChan ( 3 ); } - void OnReqConnClientsListCh4() { CreateAndSendChanListForThisChan ( 4 ); } - void OnReqConnClientsListCh5() { CreateAndSendChanListForThisChan ( 5 ); } - void OnReqConnClientsListCh6() { CreateAndSendChanListForThisChan ( 6 ); } - void OnReqConnClientsListCh7() { CreateAndSendChanListForThisChan ( 7 ); } - void OnReqConnClientsListCh8() { CreateAndSendChanListForThisChan ( 8 ); } - void OnReqConnClientsListCh9() { CreateAndSendChanListForThisChan ( 9 ); } - void OnReqConnClientsListCh10() { CreateAndSendChanListForThisChan ( 10 ); } - void OnReqConnClientsListCh11() { CreateAndSendChanListForThisChan ( 11 ); } - void OnReqConnClientsListCh12() { CreateAndSendChanListForThisChan ( 12 ); } - void OnReqConnClientsListCh13() { CreateAndSendChanListForThisChan ( 13 ); } - void OnReqConnClientsListCh14() { CreateAndSendChanListForThisChan ( 14 ); } - void OnReqConnClientsListCh15() { CreateAndSendChanListForThisChan ( 15 ); } - void OnReqConnClientsListCh16() { CreateAndSendChanListForThisChan ( 16 ); } - void OnReqConnClientsListCh17() { CreateAndSendChanListForThisChan ( 17 ); } - void OnReqConnClientsListCh18() { CreateAndSendChanListForThisChan ( 18 ); } - void OnReqConnClientsListCh19() { CreateAndSendChanListForThisChan ( 19 ); } - void OnReqConnClientsListCh20() { CreateAndSendChanListForThisChan ( 20 ); } - void OnReqConnClientsListCh21() { CreateAndSendChanListForThisChan ( 21 ); } - void OnReqConnClientsListCh22() { CreateAndSendChanListForThisChan ( 22 ); } - void OnReqConnClientsListCh23() { CreateAndSendChanListForThisChan ( 23 ); } - void OnReqConnClientsListCh24() { CreateAndSendChanListForThisChan ( 24 ); } - void OnReqConnClientsListCh25() { CreateAndSendChanListForThisChan ( 25 ); } - void OnReqConnClientsListCh26() { CreateAndSendChanListForThisChan ( 26 ); } - void OnReqConnClientsListCh27() { CreateAndSendChanListForThisChan ( 27 ); } - void OnReqConnClientsListCh28() { CreateAndSendChanListForThisChan ( 28 ); } - void OnReqConnClientsListCh29() { CreateAndSendChanListForThisChan ( 29 ); } - void OnReqConnClientsListCh30() { CreateAndSendChanListForThisChan ( 30 ); } - void OnReqConnClientsListCh31() { CreateAndSendChanListForThisChan ( 31 ); } - void OnReqConnClientsListCh32() { CreateAndSendChanListForThisChan ( 32 ); } - void OnReqConnClientsListCh33() { CreateAndSendChanListForThisChan ( 33 ); } - void OnReqConnClientsListCh34() { CreateAndSendChanListForThisChan ( 34 ); } - void OnReqConnClientsListCh35() { CreateAndSendChanListForThisChan ( 35 ); } - void OnReqConnClientsListCh36() { CreateAndSendChanListForThisChan ( 36 ); } - void OnReqConnClientsListCh37() { CreateAndSendChanListForThisChan ( 37 ); } - void OnReqConnClientsListCh38() { CreateAndSendChanListForThisChan ( 38 ); } - void OnReqConnClientsListCh39() { CreateAndSendChanListForThisChan ( 39 ); } - void OnReqConnClientsListCh40() { CreateAndSendChanListForThisChan ( 40 ); } - void OnReqConnClientsListCh41() { CreateAndSendChanListForThisChan ( 41 ); } - void OnReqConnClientsListCh42() { CreateAndSendChanListForThisChan ( 42 ); } - void OnReqConnClientsListCh43() { CreateAndSendChanListForThisChan ( 43 ); } - void OnReqConnClientsListCh44() { CreateAndSendChanListForThisChan ( 44 ); } - void OnReqConnClientsListCh45() { CreateAndSendChanListForThisChan ( 45 ); } - void OnReqConnClientsListCh46() { CreateAndSendChanListForThisChan ( 46 ); } - void OnReqConnClientsListCh47() { CreateAndSendChanListForThisChan ( 47 ); } - void OnReqConnClientsListCh48() { CreateAndSendChanListForThisChan ( 48 ); } - void OnReqConnClientsListCh49() { CreateAndSendChanListForThisChan ( 49 ); } - - void OnChanInfoHasChangedCh0() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh1() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh2() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh3() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh4() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh5() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh6() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh7() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh8() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh9() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh10() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh11() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh12() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh13() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh14() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh15() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh16() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh17() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh18() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh19() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh20() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh21() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh22() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh23() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh24() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh25() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh26() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh27() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh28() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh29() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh30() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh31() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh32() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh33() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh34() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh35() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh36() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh37() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh38() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh39() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh40() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh41() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh42() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh43() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh44() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh45() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh46() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh47() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh48() { CreateAndSendChanListForAllConChannels(); } - void OnChanInfoHasChangedCh49() { CreateAndSendChanListForAllConChannels(); } - - void OnChatTextReceivedCh0 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 0, strChatText ); } - void OnChatTextReceivedCh1 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 1, strChatText ); } - void OnChatTextReceivedCh2 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 2, strChatText ); } - void OnChatTextReceivedCh3 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 3, strChatText ); } - void OnChatTextReceivedCh4 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 4, strChatText ); } - void OnChatTextReceivedCh5 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 5, strChatText ); } - void OnChatTextReceivedCh6 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 6, strChatText ); } - void OnChatTextReceivedCh7 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 7, strChatText ); } - void OnChatTextReceivedCh8 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 8, strChatText ); } - void OnChatTextReceivedCh9 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 9, strChatText ); } - void OnChatTextReceivedCh10 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 10, strChatText ); } - void OnChatTextReceivedCh11 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 11, strChatText ); } - void OnChatTextReceivedCh12 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 12, strChatText ); } - void OnChatTextReceivedCh13 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 13, strChatText ); } - void OnChatTextReceivedCh14 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 14, strChatText ); } - void OnChatTextReceivedCh15 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 15, strChatText ); } - void OnChatTextReceivedCh16 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 16, strChatText ); } - void OnChatTextReceivedCh17 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 17, strChatText ); } - void OnChatTextReceivedCh18 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 18, strChatText ); } - void OnChatTextReceivedCh19 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 19, strChatText ); } - void OnChatTextReceivedCh20 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 20, strChatText ); } - void OnChatTextReceivedCh21 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 21, strChatText ); } - void OnChatTextReceivedCh22 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 22, strChatText ); } - void OnChatTextReceivedCh23 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 23, strChatText ); } - void OnChatTextReceivedCh24 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 24, strChatText ); } - void OnChatTextReceivedCh25 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 25, strChatText ); } - void OnChatTextReceivedCh26 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 26, strChatText ); } - void OnChatTextReceivedCh27 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 27, strChatText ); } - void OnChatTextReceivedCh28 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 28, strChatText ); } - void OnChatTextReceivedCh29 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 29, strChatText ); } - void OnChatTextReceivedCh30 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 30, strChatText ); } - void OnChatTextReceivedCh31 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 31, strChatText ); } - void OnChatTextReceivedCh32 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 32, strChatText ); } - void OnChatTextReceivedCh33 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 33, strChatText ); } - void OnChatTextReceivedCh34 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 34, strChatText ); } - void OnChatTextReceivedCh35 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 35, strChatText ); } - void OnChatTextReceivedCh36 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 36, strChatText ); } - void OnChatTextReceivedCh37 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 37, strChatText ); } - void OnChatTextReceivedCh38 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 38, strChatText ); } - void OnChatTextReceivedCh39 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 39, strChatText ); } - void OnChatTextReceivedCh40 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 40, strChatText ); } - void OnChatTextReceivedCh41 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 41, strChatText ); } - void OnChatTextReceivedCh42 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 42, strChatText ); } - void OnChatTextReceivedCh43 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 43, strChatText ); } - void OnChatTextReceivedCh44 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 44, strChatText ); } - void OnChatTextReceivedCh45 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 45, strChatText ); } - void OnChatTextReceivedCh46 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 46, strChatText ); } - void OnChatTextReceivedCh47 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 47, strChatText ); } - void OnChatTextReceivedCh48 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 48, strChatText ); } - void OnChatTextReceivedCh49 ( QString strChatText ) { CreateAndSendChatTextForAllConChannels ( 49, strChatText ); } - - void OnServerAutoSockBufSizeChangeCh0 ( int iNNumFra ) { vecChannels[0].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh1 ( int iNNumFra ) { vecChannels[1].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh2 ( int iNNumFra ) { vecChannels[2].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh3 ( int iNNumFra ) { vecChannels[3].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh4 ( int iNNumFra ) { vecChannels[4].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh5 ( int iNNumFra ) { vecChannels[5].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh6 ( int iNNumFra ) { vecChannels[6].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh7 ( int iNNumFra ) { vecChannels[7].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh8 ( int iNNumFra ) { vecChannels[8].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh9 ( int iNNumFra ) { vecChannels[9].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh10 ( int iNNumFra ) { vecChannels[10].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh11 ( int iNNumFra ) { vecChannels[11].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh12 ( int iNNumFra ) { vecChannels[12].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh13 ( int iNNumFra ) { vecChannels[13].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh14 ( int iNNumFra ) { vecChannels[14].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh15 ( int iNNumFra ) { vecChannels[15].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh16 ( int iNNumFra ) { vecChannels[16].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh17 ( int iNNumFra ) { vecChannels[17].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh18 ( int iNNumFra ) { vecChannels[18].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh19 ( int iNNumFra ) { vecChannels[19].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh20 ( int iNNumFra ) { vecChannels[20].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh21 ( int iNNumFra ) { vecChannels[21].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh22 ( int iNNumFra ) { vecChannels[22].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh23 ( int iNNumFra ) { vecChannels[23].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh24 ( int iNNumFra ) { vecChannels[24].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh25 ( int iNNumFra ) { vecChannels[25].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh26 ( int iNNumFra ) { vecChannels[26].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh27 ( int iNNumFra ) { vecChannels[27].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh28 ( int iNNumFra ) { vecChannels[28].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh29 ( int iNNumFra ) { vecChannels[29].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh30 ( int iNNumFra ) { vecChannels[30].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh31 ( int iNNumFra ) { vecChannels[31].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh32 ( int iNNumFra ) { vecChannels[32].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh33 ( int iNNumFra ) { vecChannels[33].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh34 ( int iNNumFra ) { vecChannels[34].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh35 ( int iNNumFra ) { vecChannels[35].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh36 ( int iNNumFra ) { vecChannels[36].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh37 ( int iNNumFra ) { vecChannels[37].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh38 ( int iNNumFra ) { vecChannels[38].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh39 ( int iNNumFra ) { vecChannels[39].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh40 ( int iNNumFra ) { vecChannels[40].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh41 ( int iNNumFra ) { vecChannels[41].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh42 ( int iNNumFra ) { vecChannels[42].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh43 ( int iNNumFra ) { vecChannels[43].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh44 ( int iNNumFra ) { vecChannels[44].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh45 ( int iNNumFra ) { vecChannels[45].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh46 ( int iNNumFra ) { vecChannels[46].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh47 ( int iNNumFra ) { vecChannels[47].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh48 ( int iNNumFra ) { vecChannels[48].CreateJitBufMes ( iNNumFra ); } - void OnServerAutoSockBufSizeChangeCh49 ( int iNNumFra ) { vecChannels[49].CreateJitBufMes ( iNNumFra ); } - -#endif + void OnShutdown ( int ); }; diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 7717e023..7df039ed 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -342,18 +342,6 @@ lvwClients->setMinimumHeight ( 140 ); Timer.start ( GUI_CONTRL_UPDATE_TIME ); } -void CServerDlg::closeEvent ( QCloseEvent* Event ) -{ - // if server was registered at the central server, unregister on shutdown - if ( pServer->GetServerListEnabled() ) - { - pServer->UnregisterSlaveServer(); - } - - // default implementation of this event handler routine - Event->accept(); -} - void CServerDlg::OnStartOnOSStartStateChanged ( int value ) { const bool bCurAutoStartMinState = ( value == Qt::Checked ); diff --git a/src/serverdlg.h b/src/serverdlg.h index febb44ef..da06e0c4 100755 --- a/src/serverdlg.h +++ b/src/serverdlg.h @@ -58,7 +58,6 @@ public: protected: virtual void changeEvent ( QEvent* pEvent ); - virtual void closeEvent ( QCloseEvent* Event ); void UpdateGUIDependencies(); void UpdateSystemTrayIcon ( const bool bIsActive ); diff --git a/src/signalhandler.cpp b/src/signalhandler.cpp new file mode 100755 index 00000000..4c37d018 --- /dev/null +++ b/src/signalhandler.cpp @@ -0,0 +1,183 @@ +/******************************************************************************\ + * Copyright (c) 2020 + * + * Author(s): + * Peter L Jones + * + ****************************************************************************** + * + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ****************************************************************************** + * + * This code contains some ideas derived from QCtrlSignals + * https://github.com/Skycoder42/QCtrlSignals.git + * - mostly the singleton and emitSignal code, plus some of the structure + * - virtually everything else is common knowledge across SourceForge answers + * + * BSD 3-Clause License + * + * Copyright (c) 2016, Felix Barz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +\******************************************************************************/ + +#include "signalhandler.h" + +class CSignalHandlerSingleton : public CSignalHandler { +public: + inline CSignalHandlerSingleton() : CSignalHandler() {} +}; +Q_GLOBAL_STATIC ( CSignalHandlerSingleton, singleton ) + +CSignalHandler::CSignalHandler() : pSignalBase ( CSignalBase::withSignalHandler ( this ) ) {} + +CSignalHandler::~CSignalHandler() = default; + +CSignalHandler* CSignalHandler::getSingletonP() { return singleton; } + +bool CSignalHandler::emitSignal ( int sigNum ) +{ + return QMetaObject::invokeMethod( singleton, "ShutdownSignal", Qt::QueuedConnection, Q_ARG( int, sigNum ) ); +} + +#ifndef _WIN32 +void CSignalHandler::OnSocketNotify( int socket ) +{ + int sigNum; + if ( ::read ( socket, &sigNum, sizeof ( int ) ) == sizeof ( int ) ) + { + emitSignal ( sigNum ); + } +} +#endif + +// ---------------------------------------------------------- + +CSignalBase::CSignalBase ( CSignalHandler* pSignalHandler ) : + pSignalHandler ( pSignalHandler ) +{ +} + +CSignalBase::~CSignalBase() = default; + +CSignalBase* CSignalBase::withSignalHandler ( CSignalHandler* pSignalHandler ) +{ +#ifdef _WIN32 + return new CSignalWin ( pSignalHandler ); +#else + return new CSignalUnix ( pSignalHandler ); +#endif +} + +#ifdef _WIN32 +CSignalWin::CSignalWin ( CSignalHandler* nPSignalHandler ) : + CSignalBase ( nPSignalHandler ), + lock ( QReadWriteLock::Recursive ) +{ + SetConsoleCtrlHandler ( signalHandler, true ); +} + +CSignalWin::~CSignalWin() { + SetConsoleCtrlHandler ( signalHandler, false ); +} + +QReadWriteLock* CSignalWin::getLock() const +{ + return &lock; +} + +BOOL WINAPI CSignalWin::signalHandler ( _In_ DWORD sigNum ) +{ + auto self = getSelf(); + QReadLocker lock ( self->getLock() ); + return self->pSignalHandler->emitSignal ( static_cast( sigNum ) ); +} + +#else +int CSignalUnix::socketPair[2]; + +CSignalUnix::CSignalUnix ( CSignalHandler* nPSignalHandler ) : + CSignalBase ( nPSignalHandler ) +{ + if ( ::socketpair ( AF_UNIX, SOCK_STREAM, 0, socketPair ) == 0 ) + { + socketNotifier = new QSocketNotifier ( socketPair[ 1 ], QSocketNotifier::Read ); + + QObject::connect ( socketNotifier, &QSocketNotifier::activated, nPSignalHandler, &CSignalHandler::OnSocketNotify ); + + socketNotifier->setEnabled ( true ); + + setSignalHandled ( SIGINT, true ); + setSignalHandled ( SIGTERM, true ); + } +} + +CSignalUnix::~CSignalUnix() { + setSignalHandled ( SIGINT, false ); + setSignalHandled ( SIGTERM, false ); +} + +QReadWriteLock* CSignalUnix::getLock() const { return nullptr; } + +bool CSignalUnix::setSignalHandled ( int sigNum, bool state ) +{ + struct sigaction sa; + sigemptyset ( &sa.sa_mask ); + + if ( state ) + { + sa.sa_handler = CSignalUnix::signalHandler; + sa.sa_flags |= SA_RESTART; + } + else + { + sa.sa_handler = SIG_DFL; + } + + return ::sigaction ( sigNum, &sa, nullptr ) == 0; +} + +void CSignalUnix::signalHandler ( int sigNum ) +{ + const auto res = ::write ( socketPair[ 0 ], &sigNum, sizeof ( int ) ); + Q_UNUSED ( res ); +} +#endif diff --git a/src/signalhandler.h b/src/signalhandler.h new file mode 100755 index 00000000..1263ee6a --- /dev/null +++ b/src/signalhandler.h @@ -0,0 +1,177 @@ +/******************************************************************************\ + * Copyright (c) 2020 + * + * Author(s): + * Peter L Jones + * + ****************************************************************************** + * + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ****************************************************************************** + * + * This code contains some ideas derived from QCtrlSignals + * https://github.com/Skycoder42/QCtrlSignals.git + * - mostly the singleton and emitSignal code, plus some of the structure + * - virtually everything else is common knowledge across SourceForge answers + * + * BSD 3-Clause License + * + * Copyright (c) 2016, Felix Barz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +\******************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#include +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#endif + +class CSignalBase; + +class CSignalHandler : public QObject +{ + Q_OBJECT + + friend class CSignalBase; + friend class CSignalHandlerSingleton; + +public: + static CSignalHandler* getSingletonP(); + + bool emitSignal ( int ); + +#ifndef _WIN32 +public slots: + void OnSocketNotify ( int socket ); +#endif + +signals: + void ShutdownSignal ( int sigNum ); + +private: + QScopedPointer pSignalBase; + + explicit CSignalHandler(); + ~CSignalHandler() override; +}; + +// ---------------------------------------------------------- + +class CSignalBase +{ + Q_DISABLE_COPY ( CSignalBase ) + +public: + static CSignalBase* withSignalHandler ( CSignalHandler* ); + virtual ~CSignalBase(); + + virtual QReadWriteLock* getLock() const = 0; + + QSet sHandledSigNums; + +protected: + CSignalBase ( CSignalHandler* ); + + CSignalHandler* pSignalHandler; + + template + static T *getSelf() + { + return static_cast( CSignalHandler::getSingletonP()->pSignalBase.data() ); + } + +}; + +#ifdef _WIN32 + +class CSignalWin : public CSignalBase +{ +public: + CSignalWin ( CSignalHandler* ); + ~CSignalWin() override; + + virtual QReadWriteLock* getLock() const override; + +private: + mutable QReadWriteLock lock; + + static BOOL WINAPI signalHandler ( _In_ DWORD sigNum ); +}; + +#else + +class CSignalUnix : public CSignalBase +{ +public: + CSignalUnix ( CSignalHandler* ); + ~CSignalUnix() override; + + virtual QReadWriteLock* getLock() const override; + +private: + QSocketNotifier* socketNotifier = nullptr; + bool setSignalHandled ( int sigNum, bool state ); + + static int socketPair[2]; + static void signalHandler ( int sigNum ); +}; + +#endif diff --git a/src/socket.cpp b/src/socket.cpp index f4cdf5f1..ebcddb5d 100755 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -65,11 +65,9 @@ void CSocket::Init ( const quint16 iPortNumber ) } else { - // Per definition use the port number plus ten for the client to make - // it possible to run server and client on the same computer. If the - // port is not available, try "NUM_SOCKET_PORTS_TO_TRY" times with - // incremented port numbers. - quint16 iClientPortIncrement = 10; // start value: port nubmer plus ten + // if the port is not available, try "NUM_SOCKET_PORTS_TO_TRY" times + // with incremented port numbers + quint16 iClientPortIncrement = 0; bSuccess = false; // initialization for while loop while ( !bSuccess && ( iClientPortIncrement <= NUM_SOCKET_PORTS_TO_TRY ) ) diff --git a/src/util.cpp b/src/util.cpp index ec2a90ff..91a17abc 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -348,16 +348,14 @@ CAboutDlg::CAboutDlg ( QWidget* parent ) : QDialog ( parent ) { setupUi ( this ); - // set the text for the about dialog html text control - txvCredits->setOpenExternalLinks ( true ); - txvCredits->setText ( - "

" // general description of software - "" + tr ( "The " ) + APP_NAME + + // general description of software + txvAbout->setText ( + "

" + tr ( "The " ) + APP_NAME + tr ( " software enables musicians to perform real-time jam sessions " - "over the internet. There is a " ) + APP_NAME + tr ( " " + "over the internet." ) + "
" + tr ( "There is a " ) + APP_NAME + tr ( " " "server which collects the audio data from each " ) + APP_NAME + tr ( " client, mixes the audio data and sends the mix back " - "to each client." ) + "


" + "to each client." ) + "

" "

" // GPL header text "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 " @@ -370,27 +368,53 @@ CAboutDlg::CAboutDlg ( QWidget* parent ) : QDialog ( parent ) "License along with his program; if not, write to the Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 " "USA" - "


" - "

" + APP_NAME + // libraries used by this compilation + "

" ); + + // libraries used by this compilation + txvLibraries->setText ( APP_NAME + tr ( " uses the following libraries, resources or code snippets:" ) + - "

" - "" - "We would like to acknowledge the contributors listed in the " - "Github Contributors list" - "
"); + "

" + tr ( "Qt cross-platform application framework" ) + + ", http://www.qt.io

" + "

Opus Interactive Audio Codec" + ", http://www.opus-codec.org

" + "

" + tr ( "Audio reverberation code by Perry R. Cook and Gary P. Scavone" ) + + ", 1995 - 2004, " + "The Synthesis ToolKit in C++ (STK)

" + "

" + tr ( "Some pixmaps are from the" ) + " Open Clip Art Library (OCAL), " + "http://openclipart.org

" + "

" + tr ( "Country flag icons from Mark James" ) + + ", http://www.famfamfam.com

" ); + + // contributors list + txvContributors->setText ( + "

Peter L. Jones (pljones)

" + "

Jonathan Baker-Bates (gilgongo)

" + "

Daniele Masato (doloopuntil)

" + "

Simon Tomlinson (sthenos)

" + "

Marc jr. Landolt (braindef)

" + "

Olivier Humbert (trebmuh)

" + "

mirabilos (mirabilos)

" + "

newlaurent62 (newlaurent62)

" + "

Emlyn Bolton (emlynmac)

" + "

Jos van den Oever (vandenoever)

" + "

Tormod Volden (tormodvolden)

" + "

Stanislas Michalak (stanislas-m)

" + "

JP Cimalando (jpcima)

" + "
" + tr ( "For details on the contributions check out the " ) + + "" + tr ( "Github Contributors list" ) + "." ); + + // translators + txvTranslation->setText ( + "

" + tr ( "Spanish" ) + "

" + "

Daryl Hanlon (ignotus666)

" + "

" + tr ( "French" ) + "

" + "

Olivier Humbert (trebmuh)

" + "

" + tr ( "Portuguese" ) + "

" + "

Miguel de Matos (Snayler)

" + "

" + tr ( "Dutch" ) + "

" + "

Jeroen Geertzen (jerogee)

" + "

" + tr ( "German" ) + "

" + "

Volker Fischer (corrados)

" ); // set version number in about dialog lblVersion->setText ( GetVersionAndNameStr() ); @@ -406,7 +430,7 @@ QString CAboutDlg::GetVersionAndNameStr ( const bool bWithHtml ) // name, short description and GPL hint if ( bWithHtml ) { - strVersionText += "
"; + strVersionText += ""; } else { @@ -424,24 +448,14 @@ QString CAboutDlg::GetVersionAndNameStr ( const bool bWithHtml ) strVersionText += "\n *** "; } - strVersionText += tr ( "Internet Jam Session Software" ); - - if ( bWithHtml ) - { - strVersionText += "
"; - } - else + if ( !bWithHtml ) { + strVersionText += tr ( "Internet Jam Session Software" ); strVersionText += "\n *** "; } strVersionText += tr ( "Under the GNU General Public License (GPL)" ); - if ( bWithHtml ) - { - strVersionText += "
"; - } - return strVersionText; } @@ -823,7 +837,7 @@ void CMusProfDlg::OnSkillActivated ( int iCntryListItem ) // Help menu ------------------------------------------------------------------- -CHelpMenu::CHelpMenu ( const bool bIsClient, QWidget* parent ) : QMenu ( "&Help", parent ) +CHelpMenu::CHelpMenu ( const bool bIsClient, QWidget* parent ) : QMenu ( tr ( "&Help" ), parent ) { // standard help menu consists of about and what's this help if ( bIsClient ) @@ -850,7 +864,7 @@ bool NetworkUtil::ParseNetworkAddress ( QString strAddress, CHostAddress& HostAddress ) { QHostAddress InetAddr; - quint16 iNetPort = LLCON_DEFAULT_PORT_NUMBER; + quint16 iNetPort = DEFAULT_PORT_NUMBER; // init requested host address with invalid address first HostAddress = CHostAddress(); @@ -937,7 +951,7 @@ QString NetworkUtil::GetCentralServerAddress ( const ECSAddType eCentralServerAd switch ( eCentralServerAddressType ) { case AT_MANUAL: return strCentralServerAddress; - case AT_NORTH_AMERICA: return QString ( "%1:%2" ).arg ( DEFAULT_SERVER_ADDRESS ).arg ( LLCON_PORT_NUMBER_NORTHAMERICA ); + case AT_NORTH_AMERICA: return QString ( "%1:%2" ).arg ( DEFAULT_SERVER_ADDRESS ).arg ( DEFAULT_PORT_NUMBER_NORTHAMERICA ); default: return DEFAULT_SERVER_ADDRESS; // AT_DEFAULT } } @@ -989,6 +1003,8 @@ CVector& CInstPictures::GetTable() vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Oboe" ), ":/png/instr/res/instruments/oboe.png", IC_WIND_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Harp" ), ":/png/instr/res/instruments/harp.png", IC_STRING_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Viola" ), ":/png/instr/res/instruments/viola.png", IC_STRING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Congas" ), ":/png/instr/res/instruments/congas.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bongo" ), ":/png/instr/res/instruments/bongo.png", IC_PERCUSSION_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; diff --git a/src/util.h b/src/util.h index 3c688f59..a2d52844 100755 --- a/src/util.h +++ b/src/util.h @@ -39,9 +39,7 @@ #include #include #include -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) -# include -#endif +#include #include #include #include "global.h" @@ -1217,7 +1215,6 @@ public: // Timing measurement ---------------------------------------------------------- // intended for debugging the timing jitter of the sound card or server timer -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) class CTimingMeas { public: @@ -1269,7 +1266,6 @@ protected: QElapsedTimer ElapsedTimer; int iCnt; }; -#endif /******************************************************************************\