From d9abe62124b7d6074504f216ca57b37693a14674 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 13 Apr 2021 19:30:25 +0200 Subject: [PATCH 01/98] iOS sound support. opus lib modified because of "Compile sources as" "Objective C++" option when compiling for iOS. --- ios/Info.plist | 14 +- ios/sound.h | 63 +------ ios/sound.mm | 376 ++++++++++++++++++++++------------------- libs/opus/celt/modes.c | 8 +- src/main.cpp | 2 +- 5 files changed, 226 insertions(+), 237 deletions(-) diff --git a/ios/Info.plist b/ios/Info.plist index 728733ef44..eac82ccb70 100644 --- a/ios/Info.plist +++ b/ios/Info.plist @@ -2,8 +2,6 @@ - NSMicrophoneUsageDescription - We need access to your microphone to let others hear you. CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -22,17 +20,23 @@ 1 LSRequiresIPhoneOS + NSMainNibFile + LaunchScreen + NSMicrophoneUsageDescription + We need access to your microphone to let others hear you. UIApplicationSceneManifest UIApplicationSupportsMultipleScenes - + UIApplicationSupportsIndirectInputEvents + UIBackgroundModes + + audio + UILaunchScreen - UIMainStoryboardFile - LaunchScreen UIRequiredDeviceCapabilities armv7 diff --git a/ios/sound.h b/ios/sound.h index a3182c5611..636bf489ef 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * ann0see based on code from Volker Fischer + * ann0see and ngocdh based on code from Volker Fischer * ****************************************************************************** * @@ -29,8 +29,9 @@ #include "soundbase.h" #include "global.h" +#import +#import -/* Classes ********************************************************************/ class CSound : public CSoundBase { Q_OBJECT @@ -45,66 +46,20 @@ class CSound : public CSoundBase virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); + virtual void processBufferList(AudioBufferList*, CSound*); - // channel selection - virtual int GetNumInputChannels() { return iNumInChanPlusAddChan; } - virtual QString GetInputChannelName ( const int iDiD ) { return sChannelNamesInput[iDiD]; } - virtual void SetLeftInputChannel ( const int iNewChan ); - virtual void SetRightInputChannel ( const int iNewChan ); - virtual int GetLeftInputChannel() { return iSelInputLeftChannel; } - virtual int GetRightInputChannel() { return iSelInputRightChannel; } - - virtual int GetNumOutputChannels() { return iNumOutChan; } - virtual QString GetOutputChannelName ( const int iDiD ) { return sChannelNamesOutput[iDiD]; } - virtual void SetLeftOutputChannel ( const int iNewChan ); - virtual void SetRightOutputChannel ( const int iNewChan ); - virtual int GetLeftOutputChannel() { return iSelOutputLeftChannel; } - virtual int GetRightOutputChannel() { return iSelOutputRightChannel; } + AudioUnit audioUnit; // these variables/functions should be protected but cannot since we want // to access them from the callback function CVector vecsTmpAudioSndCrdStereo; int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; - long lCurDev; - int iNumInChan; - int iNumInChanPlusAddChan; // includes additional "added" channels - int iNumOutChan; - int iSelInputLeftChannel; - int iSelInputRightChannel; - int iSelOutputLeftChannel; - int iSelOutputRightChannel; - int iSelInBufferLeft; - int iSelInBufferRight; - int iSelInInterlChLeft; - int iSelInInterlChRight; - int iSelAddInBufferLeft; - int iSelAddInBufferRight; - int iSelAddInInterlChLeft; - int iSelAddInInterlChRight; - int iSelOutBufferLeft; - int iSelOutBufferRight; - int iSelOutInterlChLeft; - int iSelOutInterlChRight; - CVector vecNumInBufChan; - CVector vecNumOutBufChan; + + BOOL _audioChainIsBeingReconstructed; protected: - virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); - - QString CheckDeviceCapabilities ( const int iDriverIdx ); - void GetAvailableInOutDevices(); - - static void callbackMIDI ( const MIDIPacketList* pktlist, - void* refCon, - void* ); - - //AVAudioSession audioSession; - - MIDIPortRef midiInPortRef; - - QString sChannelNamesInput[MAX_NUM_IN_OUT_CHANNELS]; - QString sChannelNamesOutput[MAX_NUM_IN_OUT_CHANNELS]; + MIDIPortRef midiInPortRef; - QMutex Mutex; + QMutex Mutex; }; diff --git a/ios/sound.mm b/ios/sound.mm index a768b14876..6bb5efdf16 100755 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * ann0see based on code from Volker Fischer + * ann0see and ngocdh based on code from Volker Fischer * ****************************************************************************** * @@ -25,6 +25,96 @@ #include +#define kOutputBus 0 +#define kInputBus 1 + + +void checkStatus(int status){ + if (status) { + printf("Status not 0! %d\n", status); + } +} + +void checkStatus(int status, char * s){ + if (status) { + printf("Status not 0! %d - %s \n", status, s); + } +} + +/** + This callback is called when sound card needs output data to play. And because Jamulus use the same buffer to store input and output data (input is sent to server, then output is fetched from server), we actually use the output callback to read inputdata first, process it, and then copy the output fetched from server to ioData, which will then be played. + */ +static OSStatus recordingCallback(void *inRefCon, + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList *ioData) { + + CSound * pSound = static_cast ( inRefCon ); + + AudioBuffer buffer; + + buffer.mNumberChannels = 2; + buffer.mDataByteSize = pSound->iCoreAudioBufferSizeMono * sizeof(Float32) * buffer.mNumberChannels; + buffer.mData = malloc( buffer.mDataByteSize ); + + // Put buffer in a AudioBufferList + AudioBufferList bufferList; + bufferList.mNumberBuffers = 1; + bufferList.mBuffers[0] = buffer; + + + // Then: + // Obtain recorded samples + + OSStatus status; + + // Calling Unit Render to store input data to bufferList + status = AudioUnitRender(pSound->audioUnit, + ioActionFlags, + inTimeStamp, + 1, + inNumberFrames, + &bufferList); + //checkStatus(status, (char *)" Just called AudioUnitRender "); + + // Now, we have the samples we just read sitting in buffers in bufferList + // Process the new data + pSound->processBufferList(&bufferList,pSound); //THIS IS WHERE vecsStereo is filled with data from bufferList + + // release the malloc'ed data in the buffer we created earlier + free(bufferList.mBuffers[0].mData); + + Float32* pData = (Float32*) ( ioData->mBuffers[0].mData ); + + // copy output data + for ( int i = 0; i < pSound->iCoreAudioBufferSizeMono; i++ ) + { + pData[2 * i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; //left + pData[2 * i + 1] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; //right + } + + return noErr; +} + + +void CSound::processBufferList(AudioBufferList* inInputData, CSound* pSound) //got stereo input data +{ + QMutexLocker locker ( &pSound->MutexAudioProcessCallback ); + Float32* pData = static_cast ( inInputData->mBuffers[0].mData ); + + // copy input data + for ( int i = 0; i < pSound->iCoreAudioBufferSizeMono; i++ ) + { + // copy left and right channels separately + pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pData[2 * i] * _MAXSHORT ); //left + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pData[2 * i + 1] * _MAXSHORT ); //right + } + pSound->ProcessCallback(pSound->vecsTmpAudioSndCrdStereo); +} + + /* Implementation *************************************************************/ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, @@ -43,190 +133,130 @@ } }]; [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:&audioSessionError]; - - //GetAvailableInOutDevices(); } -int CSound::Init ( const int /*iNewPrefMonoBufferSize*/ ) +int CSound::Init ( const int iCoreAudioBufferSizeMono ) { - - // store buffer size - //iCoreAudioBufferSizeMono = audioSession.IOBufferDuration; - - // init base class - //CSoundBase::Init ( iCoreAudioBufferSizeMono ); - - // set internal buffer size value and calculate stereo buffer size - //iCoreAudioBufferSizeStereo = 2 * iCoreAudioBufferSizeMono; - - // create memory for intermediate audio buffer - //vecsTmpAudioSndCrdStereo.Init ( iCoreAudioBufferSizeStereo ); - + // init base class + //CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing + this->iCoreAudioBufferSizeMono = iCoreAudioBufferSizeMono; + + // set internal buffer size value and calculate stereo buffer size + iCoreAudioBufferSizeStereo = 2 * iCoreAudioBufferSizeMono; + + //create memory for intermediate audio buffer + vecsTmpAudioSndCrdStereo.Init ( iCoreAudioBufferSizeStereo ); + + AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; + + // we are going to play and record so we pick that category + NSError *error = nil; + [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionAllowBluetoothA2DP | AVAudioSessionCategoryOptionAllowAirPlay error:&error]; + + // NGOCDH - using values from jamulus settings 64 = 2.67ms/2 + NSTimeInterval bufferDuration = iCoreAudioBufferSizeMono / 48000.0; //yeah it's math + [sessionInstance setPreferredIOBufferDuration:bufferDuration error:&error]; + + // set the session's sample rate 48000 - the only supported by Jamulus ? + [sessionInstance setPreferredSampleRate:48000 error:&error]; + [[AVAudioSession sharedInstance] setActive:YES error:&error]; + + OSStatus status; + + // Describe audio component + AudioComponentDescription desc; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_RemoteIO; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + + // Get component + AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc); + + // Get audio units + status = AudioComponentInstanceNew(inputComponent, &audioUnit); + checkStatus(status); + + // Enable IO for recording + UInt32 flag = 1; + status = AudioUnitSetProperty(audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Input, + kInputBus, + &flag, + sizeof(flag)); + checkStatus(status); + + // Enable IO for playback + status = AudioUnitSetProperty(audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Output, + kOutputBus, + &flag, + sizeof(flag)); + checkStatus(status); + + // Describe format + AudioStreamBasicDescription audioFormat; + audioFormat.mSampleRate = 48000.00; + audioFormat.mFormatID = kAudioFormatLinearPCM; + audioFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; + audioFormat.mFramesPerPacket = 1; + audioFormat.mChannelsPerFrame = 2; //steoreo, so 2 interleaved channels + audioFormat.mBitsPerChannel = 32;//sizeof float32 + audioFormat.mBytesPerPacket = 8;// (sizeof float32) * 2 channels + audioFormat.mBytesPerFrame = 8;//(sizeof float32) * 2 channels + + // Apply format + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, + kInputBus, + &audioFormat, + sizeof(audioFormat)); + checkStatus(status); + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + kOutputBus, + &audioFormat, + sizeof(audioFormat)); + checkStatus(status); + + + // Set callback + AURenderCallbackStruct callbackStruct; + callbackStruct.inputProc = recordingCallback;//this is actually the playback callback + callbackStruct.inputProcRefCon = this; + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_SetRenderCallback, + kAudioUnitScope_Global, + kOutputBus, + &callbackStruct, + sizeof(callbackStruct)); + checkStatus(status); + + // Initialise + status = AudioUnitInitialize(audioUnit); + checkStatus(status); + + return iCoreAudioBufferSizeMono; } void CSound::Start() { - // ?? - // call base class - //CSoundBase::Start(); + CSoundBase::Start(); + OSStatus err = AudioOutputUnitStart(audioUnit); + checkStatus(err); } void CSound::Stop() { - // ?? + OSStatus err = AudioOutputUnitStop(audioUnit); + checkStatus(err); // call base class - //CSoundBase::Stop(); -} - -void CSound::GetAvailableInOutDevices() -{ - // https://developer.apple.com/documentation/avfoundation/avaudiosession/1616557-availableinputs?language=objc? - -} - -QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) -{ - // get the driver: check if devices are capable - // reload the driver list of available sound devices - //GetAvailableInOutDevices(); - - // find driver index from given driver name - //int iDriverIdx = INVALID_INDEX; // initialize with an invalid index - - /*for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) - { - if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) - { - iDriverIdx = i; - } - } - - // if the selected driver was not found, return an error message - if ( iDriverIdx == INVALID_INDEX ) - { - return tr ( "The current selected audio device is no longer present in the system." ); - } - - // check device capabilities if it fulfills our requirements - const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); - - // check if device is capable and if not the same device is used - if ( strStat.isEmpty() && ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) ) - { - } - // set the left/right in/output channels - - return strStat; - */ - return ""; -} - -QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) -{ - /*// This function checks if our required input/output channel - // properties are supported by the selected device. If the return - // string is empty, the device can be used, otherwise the error - // message is returned. - - // check sample rate of input - audioSession.setPreferredSampleRate( SYSTEM_SAMPLE_RATE_HZ ); - // if false, try to set it - if ( audioSession.sampleRate != SYSTEM_SAMPLE_RATE_HZ ) - { - throw CGenErr ( tr ("Could not set sample rate. Please close other applications playing audio.") ); - } - - // special case with 4 input channels: support adding channels - if ( ( lNumInChan == 4 ) && bInputChMixingSupported ) - { - // add four mixed channels (i.e. 4 normal, 4 mixed channels) - lNumInChanPlusAddChan = 8; - - for ( int iCh = 0; iCh < lNumInChanPlusAddChan; iCh++ ) - { - int iSelCH, iSelAddCH; - - GetSelCHAndAddCH ( iCh, lNumInChan, iSelCH, iSelAddCH ); - - if ( iSelAddCH >= 0 ) - { - // for mixed channels, show both audio channel names to be mixed - channelInputName[iCh] = - channelInputName[iSelCH] + " + " + channelInputName[iSelAddCH]; - } - } - } - else - { - // regular case: no mixing input channels used - lNumInChanPlusAddChan = lNumInChan; - } -*/ - // everything is ok, return empty string for "no error" case - return ""; -} - -void CSound::SetLeftInputChannel ( const int iNewChan ) -{ - /*// apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChanPlusAddChan ) ) - { - iSelInputLeftChannel = iNewChan; - } - */ -} - -void CSound::SetRightInputChannel ( const int iNewChan ) -{ - /* // apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < lNumInChanPlusAddChan ) ) - { - vSelectedInputChannels[1] = iNewChan; - }*/ -} - -void CSound::SetLeftOutputChannel ( const int iNewChan ) -{ - /*// apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < lNumOutChan ) ) - { - vSelectedOutputChannels[0] = iNewChan; - }*/ -} - -void CSound::SetRightOutputChannel ( const int iNewChan ) -{ - /*// apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < lNumOutChan ) ) - { - vSelectedOutputChannels[1] = iNewChan; - }*/ -} - - -void CSound::callbackMIDI ( const MIDIPacketList* pktlist, - void* refCon, - void* ) -{ - /* CSound* pSound = static_cast ( refCon ); - - if ( pSound->midiInPortRef != static_cast ( NULL ) ) - { - MIDIPacket* midiPacket = const_cast ( pktlist->packet ); - - for ( unsigned int j = 0; j < pktlist->numPackets; j++ ) - { - // copy packet and send it to the MIDI parser - CVector vMIDIPaketBytes ( midiPacket->length ); - for ( int i = 0; i < midiPacket->length; i++ ) - { - vMIDIPaketBytes[i] = static_cast ( midiPacket->data[i] ); - } - pSound->ParseMIDIMessage ( vMIDIPaketBytes ); - - midiPacket = MIDIPacketNext ( midiPacket ); - } - }*/ + CSoundBase::Stop(); } diff --git a/libs/opus/celt/modes.c b/libs/opus/celt/modes.c index 390c5e8aeb..d8add1feed 100644 --- a/libs/opus/celt/modes.c +++ b/libs/opus/celt/modes.c @@ -96,7 +96,7 @@ static opus_int16 *compute_ebands(opus_int32 Fs, int frame_size, int res, int *n if (Fs == 400*(opus_int32)frame_size) { *nbEBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1; - eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+1)); + eBands = (opus_int16*)opus_alloc(sizeof(opus_int16)*(*nbEBands+1)); for (i=0;i<*nbEBands+1;i++) eBands[i] = eband5ms[i]; return eBands; @@ -114,7 +114,7 @@ static opus_int16 *compute_ebands(opus_int32 Fs, int frame_size, int res, int *n low = (bark_freq[lin]+res/2)/res; high = nBark-lin; *nbEBands = low+high; - eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+2)); + eBands = (opus_int16*)opus_alloc(sizeof(opus_int16)*(*nbEBands+2)); if (eBands==NULL) return NULL; @@ -171,7 +171,7 @@ static void compute_allocation_table(CELTMode *mode) int maxBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1; mode->nbAllocVectors = BITALLOC_SIZE; - allocVectors = opus_alloc(sizeof(unsigned char)*(BITALLOC_SIZE*mode->nbEBands)); + allocVectors = (unsigned char*)opus_alloc(sizeof(unsigned char)*(BITALLOC_SIZE*mode->nbEBands)); if (allocVectors==NULL) return; @@ -305,7 +305,7 @@ CELTMode *opus_custom_mode_create(opus_int32 Fs, int frame_size, int *error) return NULL; } - mode = opus_alloc(sizeof(CELTMode)); + mode = (CELTMode*)opus_alloc(sizeof(CELTMode)); if (mode==NULL) goto failure; mode->Fs = Fs; diff --git a/src/main.cpp b/src/main.cpp index 569dc4680c..46831f49ad 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -651,7 +651,7 @@ int main ( int argc, char** argv ) QCoreApplication* pApp = new QCoreApplication ( argc, argv ); #else # if defined ( Q_OS_IOS ) - bIsClient = false; + bIsClient = true;//Ngocdh - client only now - TODO - maybe a switch in interface to change to Server? bUseGUI = true; // bUseMultithreading = true; From 60fcdef3f9f8f43a15569d31a960b0fdc4ed708b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 21:38:30 +0200 Subject: [PATCH 02/98] BOOL -> bool --- src/client.cpp | 2 +- src/client.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index cb0ddb4812..bb3505a839 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1295,7 +1295,7 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) return MathUtils::round ( fTotalBufferDelayMs + iPingTimeMs ); } -void CClient::SetBuiltinMic ( const BOOL mic ) +void CClient::SetBuiltinMic ( const bool mic ) { // iOS only, Android not yet supported #if defined (Q_OS_IOS) diff --git a/src/client.h b/src/client.h index 7fe95147bc..4946a27666 100755 --- a/src/client.h +++ b/src/client.h @@ -275,7 +275,7 @@ class CClient : public QObject void GetBufErrorRates ( CVector& vecErrRates, double& dLimit, double& dMaxUpLimit ) { Channel.GetBufErrorRates ( vecErrRates, dLimit, dMaxUpLimit ); } - void SetBuiltinMic ( const BOOL mic ); //for mobile devices - Android not yet supported + void SetBuiltinMic ( const bool mic ); //for mobile devices - Android not yet supported // settings CChannelCoreInfo ChannelInfo; From 9b9474fbaf9fd4de3e11753bc5fb8e844faa6b61 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 22:13:21 +0200 Subject: [PATCH 03/98] Android built-in mic / external device --- src/client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index bb3505a839..0712243380 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1297,8 +1297,8 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetBuiltinMic ( const bool mic ) { - // iOS only, Android not yet supported -#if defined (Q_OS_IOS) + // iOS only, Android !(not yet) supported +#if defined (Q_OS_IOS) || defined (ANDROID) Sound.setBuiltinInput( mic ); #endif } From ed1e28e46203cd7ec1376aa960117a3df41d166d Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 22:14:48 +0200 Subject: [PATCH 04/98] Update sound.h --- android/sound.h | 1 + 1 file changed, 1 insertion(+) diff --git a/android/sound.h b/android/sound.h index e16eceb0eb..516928a3b9 100644 --- a/android/sound.h +++ b/android/sound.h @@ -49,6 +49,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); + virtual void setBuiltinInput(bool builtinmic); // Call backs for Oboe virtual oboe::DataCallbackResult onAudioReady ( oboe::AudioStream* oboeStream, void* audioData, int32_t numFrames ); From 4c4eb56012f20739b22275810714b8cd8937405f Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 22:50:07 +0200 Subject: [PATCH 05/98] Update sound.cpp --- android/sound.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/android/sound.cpp b/android/sound.cpp index ffab760999..30eddd910b 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -373,3 +373,39 @@ void CSound::Stats::log() const << ",out_callback_calls: " << out_callback_calls << ",ring_overrun: " << ring_overrun; } + +void CSound::setBuiltinInput(bool builtinmic) +{ + closeStream ( mRecordingStream ); + + oboe::AudioStreamBuilder inBuilder; + + // Setup input stream + inBuilder.setDirection ( oboe::Direction::Input ); + + // Only set callback for the input direction + // the output will be handled writing directly on the stream + inBuilder.setCallback(this); + setupCommonStreamParams ( &inBuilder ); + + if (builtinmic) inBuilder.setDeviceId(0); //shooting blind - hoping builtin mic id == 0 + else (!builtinmic) inBuilder.setDeviceId(kUnspecified); + + + result = inBuilder.openManagedStream ( mRecordingStream ); + + if ( result != oboe::Result::OK ) + { + //closeStream ( mPlayStream ); + //return; + inBuilder.setDeviceId(kUnspecified); + inBuilder.openManagedStream ( mRecordingStream ); + } + + mRecordingStream->setBufferSizeInFrames ( iOboeBufferSizeStereo ); + + warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); + printStreamDetails ( mRecordingStream ); + + mRecordingStream->requestStart(); +} From 444a82088611224208e3e31879aeb189e246dceb Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 22:52:13 +0200 Subject: [PATCH 06/98] Update clientdlg.cpp --- src/clientdlg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index f8126d19ec..53afc82bcb 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -353,8 +353,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu->addMenu ( pEditMenu ); pMenu->addMenu ( new CHelpMenu ( true, this ) ); -#if defined ( Q_OS_IOS ) //|| defined ( ANDROID ) - // iOS: change device - Android not yet supported +#if defined ( Q_OS_IOS ) || defined ( ANDROID ) + // iOS: change device - Android !(not yet) supported QAction *action = pMenu->addAction ( tr ( "Builtin Mic" ) ); connect ( action, SIGNAL ( triggered() ), this, SLOT ( setBuiltinMic() ) ); From 36e7232da571ec42cd258924f167ec07387a6e44 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 23:07:20 +0200 Subject: [PATCH 07/98] Update sound.cpp --- android/sound.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 30eddd910b..2fdc48e98f 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -388,8 +388,8 @@ void CSound::setBuiltinInput(bool builtinmic) inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - if (builtinmic) inBuilder.setDeviceId(0); //shooting blind - hoping builtin mic id == 0 - else (!builtinmic) inBuilder.setDeviceId(kUnspecified); + if (builtinmic) inBuilder.setDeviceId(1); //shooting blind - hoping builtin mic id == 1 + else (!builtinmic) inBuilder.setDeviceId(oboe::kUnspecified); result = inBuilder.openManagedStream ( mRecordingStream ); @@ -398,7 +398,7 @@ void CSound::setBuiltinInput(bool builtinmic) { //closeStream ( mPlayStream ); //return; - inBuilder.setDeviceId(kUnspecified); + inBuilder.setDeviceId(oboe::kUnspecified); inBuilder.openManagedStream ( mRecordingStream ); } From 4eaf3de98110d4ae5bcf089293f1c2b0a3c67e59 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 23:21:57 +0200 Subject: [PATCH 08/98] Update sound.cpp --- android/sound.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 2fdc48e98f..144d90f1ab 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -389,10 +389,10 @@ void CSound::setBuiltinInput(bool builtinmic) setupCommonStreamParams ( &inBuilder ); if (builtinmic) inBuilder.setDeviceId(1); //shooting blind - hoping builtin mic id == 1 - else (!builtinmic) inBuilder.setDeviceId(oboe::kUnspecified); + else inBuilder.setDeviceId(oboe::kUnspecified); - result = inBuilder.openManagedStream ( mRecordingStream ); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { From 7660feb050d7ff5ab2cea43c9d38b89c8cfdb2b7 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 23:27:13 +0200 Subject: [PATCH 09/98] Update clientdlg.cpp --- src/clientdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 53afc82bcb..411e2012a2 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -353,7 +353,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu->addMenu ( pEditMenu ); pMenu->addMenu ( new CHelpMenu ( true, this ) ); -#if defined ( Q_OS_IOS ) || defined ( ANDROID ) +#if defined ( Q_OS_IOS ) || defined ( Q_OS_ANDROID ) // iOS: change device - Android !(not yet) supported QAction *action = pMenu->addAction ( tr ( "Builtin Mic" ) ); connect ( action, SIGNAL ( triggered() ), this, SLOT ( setBuiltinMic() ) ); From 6e4d23e28c0cbe4d1839991c2e874073f9151d5b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 23:28:00 +0200 Subject: [PATCH 10/98] Update clientsettingsdlg.cpp --- src/clientsettingsdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 2aabab1718..ddfe9aa728 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -35,7 +35,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, { setupUi ( this ); -#if defined ( Q_OS_IOS ) || defined ( ANDROID ) +#if defined ( Q_OS_IOS ) || defined ( Q_OS_ANDROID ) // iOS needs menu to close - and Android too QMenuBar* pMenu = new QMenuBar ( this ); QAction *action = pMenu->addAction ( tr ( "&Close" ) ); From e88bf3b0f3db875d9d72fc514a6652bb6ca8a280 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 14 Apr 2021 23:28:39 +0200 Subject: [PATCH 11/98] Update client.cpp --- src/client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client.cpp b/src/client.cpp index 0712243380..3448d9cdd8 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1298,7 +1298,7 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetBuiltinMic ( const bool mic ) { // iOS only, Android !(not yet) supported -#if defined (Q_OS_IOS) || defined (ANDROID) +#if defined (Q_OS_IOS) || defined (Q_OS_ANDROID) Sound.setBuiltinInput( mic ); #endif } From 5d5b75790903aca7c95707e9c176f0fa0d0c4e80 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 00:44:03 +0200 Subject: [PATCH 12/98] Update client.cpp --- src/client.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 3448d9cdd8..00e1482c01 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1298,7 +1298,5 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetBuiltinMic ( const bool mic ) { // iOS only, Android !(not yet) supported -#if defined (Q_OS_IOS) || defined (Q_OS_ANDROID) Sound.setBuiltinInput( mic ); -#endif } From c7b9cacff6d26b1323b614e005eeb13423846a35 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 00:44:33 +0200 Subject: [PATCH 13/98] Update clientdlg.cpp --- src/clientdlg.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 411e2012a2..4254a32c50 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -353,7 +353,6 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu->addMenu ( pEditMenu ); pMenu->addMenu ( new CHelpMenu ( true, this ) ); -#if defined ( Q_OS_IOS ) || defined ( Q_OS_ANDROID ) // iOS: change device - Android !(not yet) supported QAction *action = pMenu->addAction ( tr ( "Builtin Mic" ) ); connect ( action, SIGNAL ( triggered() ), this, SLOT ( setBuiltinMic() ) ); @@ -361,7 +360,6 @@ CClientDlg::CClientDlg ( CClient* pNCliP, action = pMenu->addAction ( tr ( "External Dev" ) ); connect ( action, SIGNAL ( triggered() ), this, SLOT ( unsetBuiltinMic() ) ); -#endif // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); From 84c49ddb70ed73d4e83ce1838066dbd69a53125a Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 00:45:12 +0200 Subject: [PATCH 14/98] Update clientsettingsdlg.cpp --- src/clientsettingsdlg.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index ddfe9aa728..db5856acb6 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -35,7 +35,6 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, { setupUi ( this ); -#if defined ( Q_OS_IOS ) || defined ( Q_OS_ANDROID ) // iOS needs menu to close - and Android too QMenuBar* pMenu = new QMenuBar ( this ); QAction *action = pMenu->addAction ( tr ( "&Close" ) ); @@ -43,7 +42,6 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); -#endif // Add help text to controls ----------------------------------------------- From 6fc18e250310c3d97726ac6f3c7ab6516f6f2e43 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 01:42:23 +0200 Subject: [PATCH 15/98] Update chatdlg.cpp --- src/chatdlg.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/chatdlg.cpp b/src/chatdlg.cpp index a11ed7d283..4cdcb6da73 100755 --- a/src/chatdlg.cpp +++ b/src/chatdlg.cpp @@ -67,11 +67,15 @@ CChatDlg::CChatDlg ( QWidget* parent ) : SLOT ( OnClearChatHistory() ), QKeySequence ( Qt::CTRL + Qt::Key_E ) ); pMenu->addMenu ( pEditMenu ); -#if defined ( Q_OS_IOS ) || defined ( ANDROID ) +#if defined ( Q_OS_IOS ) QAction *action = pMenu->addAction ( tr ( "&Close" ) ); connect ( action, SIGNAL( triggered() ), this, SLOT ( close() ) ); #endif +#if defined ( ANDROID ) + pEditMenu->addAction ( tr ( "&Close" ), this, + SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_C ) ); +#endif // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); From 99c5e58aca18d760e5cdc6e353b8054d56c89b7f Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 01:48:41 +0200 Subject: [PATCH 16/98] Update clientdlg.cpp --- src/clientdlg.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 4254a32c50..2045632b06 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -353,14 +353,19 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu->addMenu ( pEditMenu ); pMenu->addMenu ( new CHelpMenu ( true, this ) ); - // iOS: change device - Android !(not yet) supported - QAction *action = pMenu->addAction ( tr ( "Builtin Mic" ) ); - connect ( action, SIGNAL ( triggered() ), this, SLOT ( setBuiltinMic() ) ); +#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) + // Mobile input -------------------------------------------------------------- + QMenu* pMobileMenu = new QMenu ( tr ( "&Mobile input" ), this ); - action = pMenu->addAction ( tr ( "External Dev" ) ); - connect ( action, SIGNAL ( triggered() ), this, SLOT ( unsetBuiltinMic() ) ); + pMobileMenu->addAction ( tr ( "Builtin Mic" ), this, + SLOT ( setBuiltinMic() ) ); - + pMobileMenu->addAction ( tr ( "External Dev" ), this, + SLOT ( unsetBuiltinMic() ) ); + + pMenu->addMenu ( pMobileMenu ); +#endif + // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); From f36b806e917b6229ef8e6959a1958b7d70d17998 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 01:50:01 +0200 Subject: [PATCH 17/98] Update chatdlg.cpp --- src/chatdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chatdlg.cpp b/src/chatdlg.cpp index 4cdcb6da73..fa987ffa14 100755 --- a/src/chatdlg.cpp +++ b/src/chatdlg.cpp @@ -72,7 +72,7 @@ CChatDlg::CChatDlg ( QWidget* parent ) : connect ( action, SIGNAL( triggered() ), this, SLOT ( close() ) ); #endif -#if defined ( ANDROID ) +#if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) pEditMenu->addAction ( tr ( "&Close" ), this, SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_C ) ); #endif From 9ab1fa7ffc19eac2132fd52ea75f2d1ae8fdca05 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 01:55:09 +0200 Subject: [PATCH 18/98] Update clientsettingsdlg.cpp --- src/clientsettingsdlg.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index db5856acb6..273af40aa3 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -34,15 +34,18 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, pSettings ( pNSetP ) { setupUi ( this ); - + +#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) // iOS needs menu to close - and Android too QMenuBar* pMenu = new QMenuBar ( this ); - QAction *action = pMenu->addAction ( tr ( "&Close" ) ); - connect ( action, SIGNAL ( triggered() ), this, SLOT ( close() ) ); + QMenu* pCloseMenu = new QMenu ( tr ( "Close" ), this ); + pCloseMenu->addAction ( tr ( "Close" ), this, + SLOT ( close() ) ); + pMenu->addMenu ( pCloseMenu ); // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); - +#endif // Add help text to controls ----------------------------------------------- // jitter buffer From d7d06115e7abe5acf72d8d6a8cf4c82f21d84b4a Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 02:33:46 +0200 Subject: [PATCH 19/98] Update clientdlg.h --- src/clientdlg.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/clientdlg.h b/src/clientdlg.h index 0251e9123d..35a628b9d2 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -254,11 +254,15 @@ public slots: void setBuiltinMic() { + #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) pClient->SetBuiltinMic (true); + #endif } void unsetBuiltinMic() { + #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) pClient->SetBuiltinMic (false); + #endif } }; From 6e436c4974d768ef43ac4f2450fa3cef3e3db973 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 02:36:04 +0200 Subject: [PATCH 20/98] Update client.cpp --- src/client.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/client.cpp b/src/client.cpp index 00e1482c01..8cc5f9d651 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1297,6 +1297,8 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetBuiltinMic ( const bool mic ) { +#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) // iOS only, Android !(not yet) supported Sound.setBuiltinInput( mic ); +#endif } From 4d16da0da213a4cdffddd96447e0c03aaa9bc7fd Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 03:32:47 +0200 Subject: [PATCH 21/98] Update sound.cpp --- android/sound.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/sound.cpp b/android/sound.cpp index 144d90f1ab..2b3dcd0e57 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -24,6 +24,7 @@ #include "sound.h" #include "androiddebug.cpp" +#include //NGOCDH DEBUG /* Implementation *************************************************************/ @@ -116,6 +117,7 @@ void CSound::openStreams() warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); printStreamDetails ( mRecordingStream ); printStreamDetails ( mPlayStream ); + QMessageBox::warning ( this, APP_NAME, QString::number ( stream->getDeviceId() ) ); //DEBUG NGOCDH } void CSound::printStreamDetails ( oboe::ManagedStream& stream ) From 133feb8a95ef27bd687bde51fc7fe687c56d7e5b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 03:35:07 +0200 Subject: [PATCH 22/98] Update sound.cpp --- android/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 2b3dcd0e57..4413a6c9c9 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -117,7 +117,7 @@ void CSound::openStreams() warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); printStreamDetails ( mRecordingStream ); printStreamDetails ( mPlayStream ); - QMessageBox::warning ( this, APP_NAME, QString::number ( stream->getDeviceId() ) ); //DEBUG NGOCDH + QMessageBox::warning ( this, APP_NAME, QString::number ( mRecordingStream->getDeviceId() ) ); //DEBUG NGOCDH } void CSound::printStreamDetails ( oboe::ManagedStream& stream ) From 4ad56809e494a1481578494b7b5b4f53aaf37517 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 04:04:43 +0200 Subject: [PATCH 23/98] Update sound.h move mRecordingStream to public for DEBUGING (find devid) --- android/sound.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/sound.h b/android/sound.h index 516928a3b9..8e35c49744 100644 --- a/android/sound.h +++ b/android/sound.h @@ -68,6 +68,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback std::size_t out_callback_calls; std::size_t ring_overrun; }; + oboe::ManagedStream mRecordingStream; //NGOCDH DEBUG protected: CVector vecsTmpInputAudioSndCrdStereo; @@ -88,7 +89,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback void addOutputData(int channel_count); - oboe::ManagedStream mRecordingStream; + //oboe::ManagedStream mRecordingStream; oboe::ManagedStream mPlayStream; // used to reach a state where the input buffer is From 16f22846e805c7b7c9599c0f5069fb2e41226ed1 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 04:05:18 +0200 Subject: [PATCH 24/98] Update sound.cpp --- android/sound.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 4413a6c9c9..144d90f1ab 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -24,7 +24,6 @@ #include "sound.h" #include "androiddebug.cpp" -#include //NGOCDH DEBUG /* Implementation *************************************************************/ @@ -117,7 +116,6 @@ void CSound::openStreams() warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); printStreamDetails ( mRecordingStream ); printStreamDetails ( mPlayStream ); - QMessageBox::warning ( this, APP_NAME, QString::number ( mRecordingStream->getDeviceId() ) ); //DEBUG NGOCDH } void CSound::printStreamDetails ( oboe::ManagedStream& stream ) From ef748a7bf2fb3f18d5c0d6af0b7e55a9a53918eb Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 04:13:46 +0200 Subject: [PATCH 25/98] Update clientdlg.cpp --- src/clientdlg.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 2045632b06..e8f78e184a 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1191,6 +1191,12 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() QMessageBox::warning ( this, APP_NAME, tr ( "Your sound card is not working correctly. " "Please open the settings dialog and check the device selection and the driver settings." ) ); } + else + { + #if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) + QMessageBox::warning ( this, APP_NAME, QString::number ( pClient->Sound.mRecordingStream->getDeviceId() ) ); //DEBUG NGOCDH + #endif + } } void CClientDlg::OnSoundDeviceChanged ( QString strError ) From 4d189e74689c92136082f5d754ec72b30698dc53 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 04:28:49 +0200 Subject: [PATCH 26/98] Update client.h --- src/client.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/client.h b/src/client.h index 4946a27666..637762d0a4 100755 --- a/src/client.h +++ b/src/client.h @@ -286,6 +286,8 @@ class CClient : public QObject CSound* GetSound() { return &Sound; } #endif + CSound Sound; //NGOCDH DEBUG - check device id + protected: // callback function must be static, otherwise it does not work static void AudioCallback ( CVector& psData, void* arg ); @@ -327,7 +329,7 @@ class CClient : public QObject CVector vecCeltData; CHighPrioSocket Socket; - CSound Sound; + //CSound Sound; //DEBUG move to public CStereoSignalLevelMeter SignalLevelMeter; CVector vecbyNetwData; From f853767335a4087ac8c17195237e81946b69e966 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 09:39:20 +0200 Subject: [PATCH 27/98] Update sound.cpp --- android/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 144d90f1ab..923dadea49 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -388,7 +388,7 @@ void CSound::setBuiltinInput(bool builtinmic) inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - if (builtinmic) inBuilder.setDeviceId(1); //shooting blind - hoping builtin mic id == 1 + if (builtinmic) inBuilder.setDeviceId(-1); //shooting blind - hoping builtin mic id == 1 else inBuilder.setDeviceId(oboe::kUnspecified); From 68f78811ad3df283ce587148c4c355011d0b03a0 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 11:06:26 +0200 Subject: [PATCH 28/98] Update sound.h --- android/sound.h | 148 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 146 insertions(+), 2 deletions(-) diff --git a/android/sound.h b/android/sound.h index 8e35c49744..7e6ea91886 100644 --- a/android/sound.h +++ b/android/sound.h @@ -31,6 +31,7 @@ #include #include "ring_buffer.h" #include +#include "jni.h" /* Classes ********************************************************************/ class CSound : public CSoundBase, public oboe::AudioStreamCallback @@ -68,7 +69,66 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback std::size_t out_callback_calls; std::size_t ring_overrun; }; - oboe::ManagedStream mRecordingStream; //NGOCDH DEBUG + +/*NGOCDH */ + QString getAvailableDevices() + { + auto sampleRates = OboeAudioIODevice::getDefaultSampleRates(); + + inputDevices .add ({ "System Default (Input)", oboe::kUnspecified, sampleRates, 1 }); + outputDevices.add ({ "System Default (Output)", oboe::kUnspecified, sampleRates, 2 }); + + if (! supportsDevicesInfo()) + return; + + auto* env = getEnv(); + + jclass audioManagerClass = env->FindClass ("android/media/AudioManager"); + + // We should be really entering here only if API supports it. + jassert (audioManagerClass != nullptr); + + if (audioManagerClass == nullptr) + return; + + auto audioManager = LocalRef (env->CallObjectMethod (getAppContext().get(), + AndroidContext.getSystemService, + javaString ("audio").get())); + + static jmethodID getDevicesMethod = env->GetMethodID (audioManagerClass, "getDevices", + "(I)[Landroid/media/AudioDeviceInfo;"); + + static constexpr int allDevices = 3; + auto devices = LocalRef ((jobjectArray) env->CallObjectMethod (audioManager, + getDevicesMethod, + allDevices)); + + const int numDevices = env->GetArrayLength (devices.get()); + + for (int i = 0; i < numDevices; ++i) + { + auto device = LocalRef ((jobject) env->GetObjectArrayElement (devices.get(), i)); + addDevice (device, env); + } + + QString strAvailableDevices = "Inputs: "; + //JUCE_OBOE_LOG ("-----InputDevices:"); + + for (auto& device : inputDevices) + { + strAvailableDevices = strAvailableDevices + "name = " + device.name; + strAvailableDevices = strAvailableDevices + ", id = " + String (device.id) + "; "; + } + + //JUCE_OBOE_LOG ("-----OutputDevices:"); + strAvailableDevices = strAvailableDevices + " | Outputs: "; + for (auto& device : outputDevices) + { + strAvailableDevices = strAvailableDevices + "name = " + device.name; + strAvailableDevices = strAvailableDevices + ", id = " + String (device.id) + "; "; + } + } +/*end of NGOCDH */ protected: CVector vecsTmpInputAudioSndCrdStereo; @@ -89,7 +149,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback void addOutputData(int channel_count); - //oboe::ManagedStream mRecordingStream; + oboe::ManagedStream mRecordingStream; oboe::ManagedStream mPlayStream; // used to reach a state where the input buffer is @@ -97,4 +157,88 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback static constexpr int32_t kNumCallbacksToDrain = 10; int32_t mCountCallbacksToDrain = kNumCallbacksToDrain; Stats mStats; + + JavaVM* androidJNIJavaVM = nullptr; + jobject androidApkContext = nullptr; + + //============================================================================== + JNIEnv* getEnv() noexcept + { + if (androidJNIJavaVM != nullptr) + { + JNIEnv* env; + androidJNIJavaVM->AttachCurrentThread (&env, nullptr); + + return env; + } + + // You did not call Thread::initialiseJUCE which must be called at least once in your apk + // before using any JUCE APIs. The Projucer will automatically generate java code + // which will invoke Thread::initialiseJUCE for you. + jassertfalse; + return nullptr; + } + + void JNICALL javainitialiseJamulus (JNIEnv* env, jobject /*jclass*/, jobject context) + { + Thread::initialiseJamulusJava (env, context); + } + // step 1 + // this method is called automatically by Java VM + // after the .so file is loaded + JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) + { + // Huh? JNI_OnLoad was called two times! + jassert (androidJNIJavaVM == nullptr); + + androidJNIJavaVM = vm; + + auto* env = getEnv(); + + // register the initialisation function + auto juceJavaClass = env->FindClass("com/rmsl/juce/Java"); + + if (juceJavaClass != nullptr) + { + JNINativeMethod method {"initialiseJamulusJava", "(Landroid/content/Context;)V", + reinterpret_cast (javainitialiseJamulus)}; + + auto status = env->RegisterNatives (juceJavaClass, &method, 1); + jassert (status == 0); + } + else + { + // com.rmsl.juce.Java class not found. Apparently this project is a library + // or was not generated by the Projucer. That's ok, the user will have to + // call Thread::initialiseJUCE manually + env->ExceptionClear(); + } + + JNIClassBase::initialiseAllClasses (env); + + return JNI_VERSION_1_6; + } + + void Thread::initialiseJamulusJava (void* jniEnv, void* context) + { + static CriticalSection cs; + ScopedLock lock (cs); + + // jniEnv and context should not be null! + jassert (jniEnv != nullptr && context != nullptr); + + auto* env = static_cast (jniEnv); + + if (androidJNIJavaVM == nullptr) + { + JavaVM* javaVM = nullptr; + + auto status = env->GetJavaVM (&javaVM); + jassert (status == 0 && javaVM != nullptr); + + androidJNIJavaVM = javaVM; + } + + } + }; From e5f437204e954f2dab7ac2bdc10119c1042a8a33 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 11:09:45 +0200 Subject: [PATCH 29/98] Update clientdlg.cpp --- src/clientdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index e8f78e184a..fda5e7b80f 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1194,7 +1194,7 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() else { #if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) - QMessageBox::warning ( this, APP_NAME, QString::number ( pClient->Sound.mRecordingStream->getDeviceId() ) ); //DEBUG NGOCDH + QMessageBox::warning ( this, APP_NAME, pClient->Sound.getAvailableDevices() ); //DEBUG NGOCDH #endif } } From faf9fb2dd43b410000ba4bd3d1837168ab8c3061 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 12:39:15 +0200 Subject: [PATCH 30/98] Update sound.h --- android/sound.h | 82 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/android/sound.h b/android/sound.h index 7e6ea91886..10507a40bb 100644 --- a/android/sound.h +++ b/android/sound.h @@ -73,11 +73,6 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback /*NGOCDH */ QString getAvailableDevices() { - auto sampleRates = OboeAudioIODevice::getDefaultSampleRates(); - - inputDevices .add ({ "System Default (Input)", oboe::kUnspecified, sampleRates, 1 }); - outputDevices.add ({ "System Default (Output)", oboe::kUnspecified, sampleRates, 2 }); - if (! supportsDevicesInfo()) return; @@ -125,9 +120,80 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback for (auto& device : outputDevices) { strAvailableDevices = strAvailableDevices + "name = " + device.name; - strAvailableDevices = strAvailableDevices + ", id = " + String (device.id) + "; "; + strAvailableDevices = strAvailableDevices + ", id = " + QString (device.id) + "; "; + } + } + + bool supportsDevicesInfo() const + { + static auto result = getAndroidSDKVersion() >= 23; + return result; + } + + void addDevice (const LocalRef& device, JNIEnv* env) + { + auto deviceClass = LocalRef ((jclass) env->FindClass ("android/media/AudioDeviceInfo")); + + jmethodID getProductNameMethod = env->GetMethodID (deviceClass, "getProductName", + "()Ljava/lang/CharSequence;"); + + jmethodID getTypeMethod = env->GetMethodID (deviceClass, "getType", "()I"); + jmethodID getIdMethod = env->GetMethodID (deviceClass, "getId", "()I"); + jmethodID getSampleRatesMethod = env->GetMethodID (deviceClass, "getSampleRates", "()[I"); + jmethodID getChannelCountsMethod = env->GetMethodID (deviceClass, "getChannelCounts", "()[I"); + jmethodID isSourceMethod = env->GetMethodID (deviceClass, "isSource", "()Z"); + + auto deviceTypeString = deviceTypeToString (env->CallIntMethod (device, getTypeMethod)); + + if (deviceTypeString.isEmpty()) // unknown device + return; + + auto name = QString ((jstring) env->CallObjectMethod (device, getProductNameMethod)) + " " + deviceTypeString; + auto id = env->CallIntMethod (device, getIdMethod); + auto isInput = env->CallBooleanMethod (device, isSourceMethod); + auto& devices = isInput ? inputDevices : outputDevices; + + devices.add ({ name, id, [], [] }); + } + + static QString deviceTypeToString (int type) + { + switch (type) + { + case 0: return {}; + case 1: return "built-in earphone speaker"; + case 2: return "built-in speaker"; + case 3: return "wired headset"; + case 4: return "wired headphones"; + case 5: return "line analog"; + case 6: return "line digital"; + case 7: return "Bluetooth device typically used for telephony"; + case 8: return "Bluetooth device supporting the A2DP profile"; + case 9: return "HDMI"; + case 10: return "HDMI audio return channel"; + case 11: return "USB device"; + case 12: return "USB accessory"; + case 13: return "DOCK"; + case 14: return "FM"; + case 15: return "built-in microphone"; + case 16: return "FM tuner"; + case 17: return "TV tuner"; + case 18: return "telephony"; + case 19: return "auxiliary line-level connectors"; + case 20: return "IP"; + case 21: return "BUS"; + case 22: return "USB headset"; + case 23: return "hearing aid"; + case 24: return "built-in speaker safe"; + case 25: return {}; + default: jassertfalse; return {}; // type not supported yet, needs to be added! } } + + inline LocalRef javaString (const QString& s) + { + return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); + } /*end of NGOCDH */ protected: @@ -181,7 +247,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback void JNICALL javainitialiseJamulus (JNIEnv* env, jobject /*jclass*/, jobject context) { - Thread::initialiseJamulusJava (env, context); + QThread::initialiseJamulusJava (env, context); } // step 1 // this method is called automatically by Java VM @@ -219,7 +285,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback return JNI_VERSION_1_6; } - void Thread::initialiseJamulusJava (void* jniEnv, void* context) + void QThread::initialiseJamulusJava (void* jniEnv, void* context) { static CriticalSection cs; ScopedLock lock (cs); From 45e217c66007c9d36bc3f52921c2fb4df3815b54 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 14:09:34 +0200 Subject: [PATCH 31/98] Update sound.h --- android/sound.h | 249 +++++++++++++++++++++++++++++------------------- 1 file changed, 153 insertions(+), 96 deletions(-) diff --git a/android/sound.h b/android/sound.h index 10507a40bb..d606cd5bb1 100644 --- a/android/sound.h +++ b/android/sound.h @@ -71,17 +71,42 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback }; /*NGOCDH */ + DECLARE_JNI_CLASS (AndroidContext, "android/content/Context") + LocalRef getAppContext() noexcept + { + auto* env = getEnv(); + auto context = androidApkContext; + + // You did not call Thread::initialiseJUCE which must be called at least once in your apk + // before using any JUCE APIs. The Projucer will automatically generate java code + // which will invoke Thread::initialiseJUCE for you. + jassert (env != nullptr && context != nullptr); + + if (context == nullptr) + return LocalRef(); + + if (env->IsInstanceOf (context, AndroidApplication) != 0) + return LocalRef (env->NewLocalRef (context)); + + LocalRef applicationContext (env->CallObjectMethod (context, AndroidContext.getApplicationContext)); + + if (applicationContext == nullptr) + return LocalRef (env->NewLocalRef (context)); + + return applicationContext; + } + + + QString getAvailableDevices() { - if (! supportsDevicesInfo()) - return; auto* env = getEnv(); jclass audioManagerClass = env->FindClass ("android/media/AudioManager"); // We should be really entering here only if API supports it. - jassert (audioManagerClass != nullptr); + //jassert (audioManagerClass != nullptr); if (audioManagerClass == nullptr) return; @@ -100,100 +125,19 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback const int numDevices = env->GetArrayLength (devices.get()); + + QString strAvailableDevices = ""; for (int i = 0; i < numDevices; ++i) { auto device = LocalRef ((jobject) env->GetObjectArrayElement (devices.get(), i)); - addDevice (device, env); + strAvailableDevices = strAvailableDevices + getDeviceInfo (device, env); } - QString strAvailableDevices = "Inputs: "; - //JUCE_OBOE_LOG ("-----InputDevices:"); - for (auto& device : inputDevices) - { - strAvailableDevices = strAvailableDevices + "name = " + device.name; - strAvailableDevices = strAvailableDevices + ", id = " + String (device.id) + "; "; - } - - //JUCE_OBOE_LOG ("-----OutputDevices:"); - strAvailableDevices = strAvailableDevices + " | Outputs: "; - for (auto& device : outputDevices) - { - strAvailableDevices = strAvailableDevices + "name = " + device.name; - strAvailableDevices = strAvailableDevices + ", id = " + QString (device.id) + "; "; - } + + return strAvailableDevices; } - bool supportsDevicesInfo() const - { - static auto result = getAndroidSDKVersion() >= 23; - return result; - } - - void addDevice (const LocalRef& device, JNIEnv* env) - { - auto deviceClass = LocalRef ((jclass) env->FindClass ("android/media/AudioDeviceInfo")); - - jmethodID getProductNameMethod = env->GetMethodID (deviceClass, "getProductName", - "()Ljava/lang/CharSequence;"); - - jmethodID getTypeMethod = env->GetMethodID (deviceClass, "getType", "()I"); - jmethodID getIdMethod = env->GetMethodID (deviceClass, "getId", "()I"); - jmethodID getSampleRatesMethod = env->GetMethodID (deviceClass, "getSampleRates", "()[I"); - jmethodID getChannelCountsMethod = env->GetMethodID (deviceClass, "getChannelCounts", "()[I"); - jmethodID isSourceMethod = env->GetMethodID (deviceClass, "isSource", "()Z"); - - auto deviceTypeString = deviceTypeToString (env->CallIntMethod (device, getTypeMethod)); - - if (deviceTypeString.isEmpty()) // unknown device - return; - - auto name = QString ((jstring) env->CallObjectMethod (device, getProductNameMethod)) + " " + deviceTypeString; - auto id = env->CallIntMethod (device, getIdMethod); - auto isInput = env->CallBooleanMethod (device, isSourceMethod); - auto& devices = isInput ? inputDevices : outputDevices; - - devices.add ({ name, id, [], [] }); - } - - static QString deviceTypeToString (int type) - { - switch (type) - { - case 0: return {}; - case 1: return "built-in earphone speaker"; - case 2: return "built-in speaker"; - case 3: return "wired headset"; - case 4: return "wired headphones"; - case 5: return "line analog"; - case 6: return "line digital"; - case 7: return "Bluetooth device typically used for telephony"; - case 8: return "Bluetooth device supporting the A2DP profile"; - case 9: return "HDMI"; - case 10: return "HDMI audio return channel"; - case 11: return "USB device"; - case 12: return "USB accessory"; - case 13: return "DOCK"; - case 14: return "FM"; - case 15: return "built-in microphone"; - case 16: return "FM tuner"; - case 17: return "TV tuner"; - case 18: return "telephony"; - case 19: return "auxiliary line-level connectors"; - case 20: return "IP"; - case 21: return "BUS"; - case 22: return "USB headset"; - case 23: return "hearing aid"; - case 24: return "built-in speaker safe"; - case 25: return {}; - default: jassertfalse; return {}; // type not supported yet, needs to be added! - } - } - - inline LocalRef javaString (const QString& s) - { - return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); - } /*end of NGOCDH */ protected: @@ -241,7 +185,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback // You did not call Thread::initialiseJUCE which must be called at least once in your apk // before using any JUCE APIs. The Projucer will automatically generate java code // which will invoke Thread::initialiseJUCE for you. - jassertfalse; + //jassertfalse; return nullptr; } @@ -255,12 +199,12 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) { // Huh? JNI_OnLoad was called two times! - jassert (androidJNIJavaVM == nullptr); + //jassert (androidJNIJavaVM == nullptr); androidJNIJavaVM = vm; auto* env = getEnv(); - +/* // register the initialisation function auto juceJavaClass = env->FindClass("com/rmsl/juce/Java"); @@ -270,7 +214,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback reinterpret_cast (javainitialiseJamulus)}; auto status = env->RegisterNatives (juceJavaClass, &method, 1); - jassert (status == 0); + //jassert (status == 0); } else { @@ -279,7 +223,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback // call Thread::initialiseJUCE manually env->ExceptionClear(); } - +*/ JNIClassBase::initialiseAllClasses (env); return JNI_VERSION_1_6; @@ -291,7 +235,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback ScopedLock lock (cs); // jniEnv and context should not be null! - jassert (jniEnv != nullptr && context != nullptr); + //jassert (jniEnv != nullptr && context != nullptr); auto* env = static_cast (jniEnv); @@ -300,11 +244,124 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback JavaVM* javaVM = nullptr; auto status = env->GetJavaVM (&javaVM); - jassert (status == 0 && javaVM != nullptr); + //jassert (status == 0 && javaVM != nullptr); androidJNIJavaVM = javaVM; } } + + + QString getDeviceInfo (const LocalRef& device, JNIEnv* env) + { + auto deviceClass = LocalRef ((jclass) env->FindClass ("android/media/AudioDeviceInfo")); + + jmethodID getProductNameMethod = env->GetMethodID (deviceClass, "getProductName", + "()Ljava/lang/CharSequence;"); + + jmethodID getTypeMethod = env->GetMethodID (deviceClass, "getType", "()I"); + jmethodID getIdMethod = env->GetMethodID (deviceClass, "getId", "()I"); + jmethodID getSampleRatesMethod = env->GetMethodID (deviceClass, "getSampleRates", "()[I"); + jmethodID getChannelCountsMethod = env->GetMethodID (deviceClass, "getChannelCounts", "()[I"); + jmethodID isSourceMethod = env->GetMethodID (deviceClass, "isSource", "()Z"); + + auto deviceTypeString = deviceTypeToString (env->CallIntMethod (device, getTypeMethod)); + + if (deviceTypeString.isEmpty()) // unknown device + return; + + auto name = QString ((jstring) env->CallObjectMethod (device, getProductNameMethod)) + " " + deviceTypeString; + auto id = env->CallIntMethod (device, getIdMethod); + auto isInput = env->CallBooleanMethod (device, isSourceMethod); + auto& devices = isInput ? inputDevices : outputDevices; + + return (isInput ? QString("In: "):QString("Out: ")) + name + " - " + id + "; "; + } + + static QString deviceTypeToString (int type) + { + switch (type) + { + case 0: return {}; + case 1: return "built-in earphone speaker"; + case 2: return "built-in speaker"; + case 3: return "wired headset"; + case 4: return "wired headphones"; + case 5: return "line analog"; + case 6: return "line digital"; + case 7: return "Bluetooth device typically used for telephony"; + case 8: return "Bluetooth device supporting the A2DP profile"; + case 9: return "HDMI"; + case 10: return "HDMI audio return channel"; + case 11: return "USB device"; + case 12: return "USB accessory"; + case 13: return "DOCK"; + case 14: return "FM"; + case 15: return "built-in microphone"; + case 16: return "FM tuner"; + case 17: return "TV tuner"; + case 18: return "telephony"; + case 19: return "auxiliary line-level connectors"; + case 20: return "IP"; + case 21: return "BUS"; + case 22: return "USB headset"; + case 23: return "hearing aid"; + case 24: return "built-in speaker safe"; + case 25: return {}; + default: return {};//jassertfalse; return {}; // type not supported yet, needs to be added! + } + } + + inline LocalRef javaString (const QString& s) + { + return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); + } + +}; + +template +class LocalRef +{ +public: + explicit inline LocalRef() noexcept : obj (nullptr) {} + explicit inline LocalRef (JavaType o) noexcept : obj (o) {} + inline LocalRef (const LocalRef& other) noexcept : obj (retain (other.obj)) {} + inline LocalRef (LocalRef&& other) noexcept : obj (nullptr) { std::swap (obj, other.obj); } + ~LocalRef() { clear(); } + + void clear() + { + if (obj != nullptr) + { + getEnv()->DeleteLocalRef (obj); + obj = nullptr; + } + } + + LocalRef& operator= (const LocalRef& other) + { + JavaType newObj = retain (other.obj); + clear(); + obj = newObj; + return *this; + } + + LocalRef& operator= (LocalRef&& other) + { + clear(); + std::swap (other.obj, obj); + return *this; + } + + inline operator JavaType() const noexcept { return obj; } + inline JavaType get() const noexcept { return obj; } + +private: + JavaType obj; + + static JavaType retain (JavaType obj) + { + return obj == nullptr ? nullptr : (JavaType) getEnv()->NewLocalRef (obj); + } }; From 108c6ab5826db7173194469af7fa6b1430f575b5 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 14:39:06 +0200 Subject: [PATCH 32/98] Update sound.h --- android/sound.h | 132 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 110 insertions(+), 22 deletions(-) diff --git a/android/sound.h b/android/sound.h index d606cd5bb1..d19b4bc07f 100644 --- a/android/sound.h +++ b/android/sound.h @@ -71,7 +71,57 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback }; /*NGOCDH */ - DECLARE_JNI_CLASS (AndroidContext, "android/content/Context") +#define CREATE_JNI_METHOD(methodID, stringName, params) methodID = resolveMethod (env, stringName, params); +#define CREATE_JNI_STATICMETHOD(methodID, stringName, params) methodID = resolveStaticMethod (env, stringName, params); +#define CREATE_JNI_FIELD(fieldID, stringName, signature) fieldID = resolveField (env, stringName, signature); +#define CREATE_JNI_STATICFIELD(fieldID, stringName, signature) fieldID = resolveStaticField (env, stringName, signature); +#define CREATE_JNI_CALLBACK(callbackName, stringName, signature) callbacks.add ({stringName, signature, (void*) callbackName}); +#define DECLARE_JNI_METHOD(methodID, stringName, params) jmethodID methodID; +#define DECLARE_JNI_FIELD(fieldID, stringName, signature) jfieldID fieldID; +#define DECLARE_JNI_CALLBACK(fieldID, stringName, signature) + +#define DECLARE_JNI_CLASS_WITH_BYTECODE(CppClassName, javaPath, minSDK, byteCodeData, byteCodeSize) \ + class CppClassName ## _Class : public JNIClassBase \ + { \ + public: \ + CppClassName ## _Class() : JNIClassBase (javaPath, minSDK, byteCodeData, byteCodeSize) {} \ + \ + void initialiseFields (JNIEnv* env) \ + { \ + Array callbacks; \ + JNI_CLASS_MEMBERS (CREATE_JNI_METHOD, CREATE_JNI_STATICMETHOD, CREATE_JNI_FIELD, CREATE_JNI_STATICFIELD, CREATE_JNI_CALLBACK); \ + resolveCallbacks (env, callbacks); \ + } \ + \ + JNI_CLASS_MEMBERS (DECLARE_JNI_METHOD, DECLARE_JNI_METHOD, DECLARE_JNI_FIELD, DECLARE_JNI_FIELD, DECLARE_JNI_CALLBACK) \ + }; \ + static CppClassName ## _Class CppClassName; + +//============================================================================== +#define DECLARE_JNI_CLASS_WITH_MIN_SDK(CppClassName, javaPath, minSDK) \ + DECLARE_JNI_CLASS_WITH_BYTECODE (CppClassName, javaPath, minSDK, nullptr, 0) + +//============================================================================== +#define DECLARE_JNI_CLASS(CppClassName, javaPath) \ + DECLARE_JNI_CLASS_WITH_MIN_SDK (CppClassName, javaPath, 16) + +//============================================================================== +#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ + METHOD (getAssets, "getAssets", "()Landroid/content/res/AssetManager;") \ + METHOD (getSystemService, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;") \ + METHOD (getPackageManager, "getPackageManager", "()Landroid/content/pm/PackageManager;") \ + METHOD (getPackageName, "getPackageName", "()Ljava/lang/String;") \ + METHOD (getResources, "getResources", "()Landroid/content/res/Resources;") \ + METHOD (bindService, "bindService", "(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z") \ + METHOD (unbindService, "unbindService", "(Landroid/content/ServiceConnection;)V") \ + METHOD (startActivity, "startActivity", "(Landroid/content/Intent;)V") \ + METHOD (getContentResolver, "getContentResolver", "()Landroid/content/ContentResolver;") \ + METHOD (getApplicationContext, "getApplicationContext", "()Landroid/content/Context;") \ + METHOD (getApplicationInfo, "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;") \ + METHOD (checkCallingOrSelfPermission, "checkCallingOrSelfPermission", "(Ljava/lang/String;)I") \ + METHOD (getCacheDir, "getCacheDir", "()Ljava/io/File;") + + DECLARE_JNI_CLASS (AndroidContext, "android/content/Context"); LocalRef getAppContext() noexcept { auto* env = getEnv(); @@ -80,7 +130,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback // You did not call Thread::initialiseJUCE which must be called at least once in your apk // before using any JUCE APIs. The Projucer will automatically generate java code // which will invoke Thread::initialiseJUCE for you. - jassert (env != nullptr && context != nullptr); + //jassert (env != nullptr && context != nullptr); if (context == nullptr) return LocalRef(); @@ -94,7 +144,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback return LocalRef (env->NewLocalRef (context)); return applicationContext; - } + }; @@ -136,7 +186,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback return strAvailableDevices; - } + }; /*end of NGOCDH */ @@ -187,12 +237,12 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback // which will invoke Thread::initialiseJUCE for you. //jassertfalse; return nullptr; - } + }; - void JNICALL javainitialiseJamulus (JNIEnv* env, jobject /*jclass*/, jobject context) - { - QThread::initialiseJamulusJava (env, context); - } + //void JNICALL javainitialiseJamulus (JNIEnv* env, jobject /*jclass*/, jobject context) + //{ + // QThread::initialiseJamulusJava (env, context); + //} // step 1 // this method is called automatically by Java VM // after the .so file is loaded @@ -227,9 +277,9 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback JNIClassBase::initialiseAllClasses (env); return JNI_VERSION_1_6; - } + }; - void QThread::initialiseJamulusJava (void* jniEnv, void* context) + /*void QThread::initialiseJamulusJava (void* jniEnv, void* context) { static CriticalSection cs; ScopedLock lock (cs); @@ -249,9 +299,12 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback androidJNIJavaVM = javaVM; } - } - + }*/ + inline LocalRef javaString (const QString& s) + { + return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); + }; QString getDeviceInfo (const LocalRef& device, JNIEnv* env) { @@ -269,15 +322,15 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback auto deviceTypeString = deviceTypeToString (env->CallIntMethod (device, getTypeMethod)); if (deviceTypeString.isEmpty()) // unknown device - return; + return ""; auto name = QString ((jstring) env->CallObjectMethod (device, getProductNameMethod)) + " " + deviceTypeString; auto id = env->CallIntMethod (device, getIdMethod); auto isInput = env->CallBooleanMethod (device, isSourceMethod); - auto& devices = isInput ? inputDevices : outputDevices; + //auto& devices = isInput ? inputDevices : outputDevices; return (isInput ? QString("In: "):QString("Out: ")) + name + " - " + id + "; "; - } + }; static QString deviceTypeToString (int type) { @@ -311,15 +364,50 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback case 25: return {}; default: return {};//jassertfalse; return {}; // type not supported yet, needs to be added! } - } - - inline LocalRef javaString (const QString& s) - { - return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); - } + }; }; +class JNIClassBase +{ +public: + explicit JNIClassBase (const char* classPath, int minSDK, const void* byteCode, size_t byteCodeSize); + virtual ~JNIClassBase(); + + inline operator jclass() const noexcept { return classRef; } + + static void initialiseAllClasses (JNIEnv*); + static void releaseAllClasses (JNIEnv*); + + inline const char* getClassPath() const noexcept { return classPath; } + +protected: + virtual void initialiseFields (JNIEnv*) = 0; + + jmethodID resolveMethod (JNIEnv*, const char* methodName, const char* params); + jmethodID resolveStaticMethod (JNIEnv*, const char* methodName, const char* params); + jfieldID resolveField (JNIEnv*, const char* fieldName, const char* signature); + jfieldID resolveStaticField (JNIEnv*, const char* fieldName, const char* signature); + void resolveCallbacks (JNIEnv*, const Array&); + +private: + friend struct SystemJavaClassComparator; + + const char* const classPath; + const void* byteCode; + size_t byteCodeSize; + + int minSDK; + jclass classRef = nullptr; + + static Array& getClasses(); + void initialise (JNIEnv*); + void release (JNIEnv*); + void tryLoadingClassWithClassLoader (JNIEnv* env, jobject classLoader); + +}; + + template class LocalRef { From 3adc7f855c1e55105f5b74045edf83fea2a7071b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 15:52:47 +0200 Subject: [PATCH 33/98] Update sound.h --- android/sound.h | 354 ------------------------------------------------ 1 file changed, 354 deletions(-) diff --git a/android/sound.h b/android/sound.h index d19b4bc07f..59af64c67d 100644 --- a/android/sound.h +++ b/android/sound.h @@ -70,126 +70,6 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback std::size_t ring_overrun; }; -/*NGOCDH */ -#define CREATE_JNI_METHOD(methodID, stringName, params) methodID = resolveMethod (env, stringName, params); -#define CREATE_JNI_STATICMETHOD(methodID, stringName, params) methodID = resolveStaticMethod (env, stringName, params); -#define CREATE_JNI_FIELD(fieldID, stringName, signature) fieldID = resolveField (env, stringName, signature); -#define CREATE_JNI_STATICFIELD(fieldID, stringName, signature) fieldID = resolveStaticField (env, stringName, signature); -#define CREATE_JNI_CALLBACK(callbackName, stringName, signature) callbacks.add ({stringName, signature, (void*) callbackName}); -#define DECLARE_JNI_METHOD(methodID, stringName, params) jmethodID methodID; -#define DECLARE_JNI_FIELD(fieldID, stringName, signature) jfieldID fieldID; -#define DECLARE_JNI_CALLBACK(fieldID, stringName, signature) - -#define DECLARE_JNI_CLASS_WITH_BYTECODE(CppClassName, javaPath, minSDK, byteCodeData, byteCodeSize) \ - class CppClassName ## _Class : public JNIClassBase \ - { \ - public: \ - CppClassName ## _Class() : JNIClassBase (javaPath, minSDK, byteCodeData, byteCodeSize) {} \ - \ - void initialiseFields (JNIEnv* env) \ - { \ - Array callbacks; \ - JNI_CLASS_MEMBERS (CREATE_JNI_METHOD, CREATE_JNI_STATICMETHOD, CREATE_JNI_FIELD, CREATE_JNI_STATICFIELD, CREATE_JNI_CALLBACK); \ - resolveCallbacks (env, callbacks); \ - } \ - \ - JNI_CLASS_MEMBERS (DECLARE_JNI_METHOD, DECLARE_JNI_METHOD, DECLARE_JNI_FIELD, DECLARE_JNI_FIELD, DECLARE_JNI_CALLBACK) \ - }; \ - static CppClassName ## _Class CppClassName; - -//============================================================================== -#define DECLARE_JNI_CLASS_WITH_MIN_SDK(CppClassName, javaPath, minSDK) \ - DECLARE_JNI_CLASS_WITH_BYTECODE (CppClassName, javaPath, minSDK, nullptr, 0) - -//============================================================================== -#define DECLARE_JNI_CLASS(CppClassName, javaPath) \ - DECLARE_JNI_CLASS_WITH_MIN_SDK (CppClassName, javaPath, 16) - -//============================================================================== -#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ - METHOD (getAssets, "getAssets", "()Landroid/content/res/AssetManager;") \ - METHOD (getSystemService, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;") \ - METHOD (getPackageManager, "getPackageManager", "()Landroid/content/pm/PackageManager;") \ - METHOD (getPackageName, "getPackageName", "()Ljava/lang/String;") \ - METHOD (getResources, "getResources", "()Landroid/content/res/Resources;") \ - METHOD (bindService, "bindService", "(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z") \ - METHOD (unbindService, "unbindService", "(Landroid/content/ServiceConnection;)V") \ - METHOD (startActivity, "startActivity", "(Landroid/content/Intent;)V") \ - METHOD (getContentResolver, "getContentResolver", "()Landroid/content/ContentResolver;") \ - METHOD (getApplicationContext, "getApplicationContext", "()Landroid/content/Context;") \ - METHOD (getApplicationInfo, "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;") \ - METHOD (checkCallingOrSelfPermission, "checkCallingOrSelfPermission", "(Ljava/lang/String;)I") \ - METHOD (getCacheDir, "getCacheDir", "()Ljava/io/File;") - - DECLARE_JNI_CLASS (AndroidContext, "android/content/Context"); - LocalRef getAppContext() noexcept - { - auto* env = getEnv(); - auto context = androidApkContext; - - // You did not call Thread::initialiseJUCE which must be called at least once in your apk - // before using any JUCE APIs. The Projucer will automatically generate java code - // which will invoke Thread::initialiseJUCE for you. - //jassert (env != nullptr && context != nullptr); - - if (context == nullptr) - return LocalRef(); - - if (env->IsInstanceOf (context, AndroidApplication) != 0) - return LocalRef (env->NewLocalRef (context)); - - LocalRef applicationContext (env->CallObjectMethod (context, AndroidContext.getApplicationContext)); - - if (applicationContext == nullptr) - return LocalRef (env->NewLocalRef (context)); - - return applicationContext; - }; - - - - QString getAvailableDevices() - { - - auto* env = getEnv(); - - jclass audioManagerClass = env->FindClass ("android/media/AudioManager"); - - // We should be really entering here only if API supports it. - //jassert (audioManagerClass != nullptr); - - if (audioManagerClass == nullptr) - return; - - auto audioManager = LocalRef (env->CallObjectMethod (getAppContext().get(), - AndroidContext.getSystemService, - javaString ("audio").get())); - - static jmethodID getDevicesMethod = env->GetMethodID (audioManagerClass, "getDevices", - "(I)[Landroid/media/AudioDeviceInfo;"); - - static constexpr int allDevices = 3; - auto devices = LocalRef ((jobjectArray) env->CallObjectMethod (audioManager, - getDevicesMethod, - allDevices)); - - const int numDevices = env->GetArrayLength (devices.get()); - - - QString strAvailableDevices = ""; - for (int i = 0; i < numDevices; ++i) - { - auto device = LocalRef ((jobject) env->GetObjectArrayElement (devices.get(), i)); - strAvailableDevices = strAvailableDevices + getDeviceInfo (device, env); - } - - - - return strAvailableDevices; - }; - -/*end of NGOCDH */ - protected: CVector vecsTmpInputAudioSndCrdStereo; RingBuffer mOutBuffer; @@ -218,238 +98,4 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback int32_t mCountCallbacksToDrain = kNumCallbacksToDrain; Stats mStats; - JavaVM* androidJNIJavaVM = nullptr; - jobject androidApkContext = nullptr; - - //============================================================================== - JNIEnv* getEnv() noexcept - { - if (androidJNIJavaVM != nullptr) - { - JNIEnv* env; - androidJNIJavaVM->AttachCurrentThread (&env, nullptr); - - return env; - } - - // You did not call Thread::initialiseJUCE which must be called at least once in your apk - // before using any JUCE APIs. The Projucer will automatically generate java code - // which will invoke Thread::initialiseJUCE for you. - //jassertfalse; - return nullptr; - }; - - //void JNICALL javainitialiseJamulus (JNIEnv* env, jobject /*jclass*/, jobject context) - //{ - // QThread::initialiseJamulusJava (env, context); - //} - // step 1 - // this method is called automatically by Java VM - // after the .so file is loaded - JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) - { - // Huh? JNI_OnLoad was called two times! - //jassert (androidJNIJavaVM == nullptr); - - androidJNIJavaVM = vm; - - auto* env = getEnv(); -/* - // register the initialisation function - auto juceJavaClass = env->FindClass("com/rmsl/juce/Java"); - - if (juceJavaClass != nullptr) - { - JNINativeMethod method {"initialiseJamulusJava", "(Landroid/content/Context;)V", - reinterpret_cast (javainitialiseJamulus)}; - - auto status = env->RegisterNatives (juceJavaClass, &method, 1); - //jassert (status == 0); - } - else - { - // com.rmsl.juce.Java class not found. Apparently this project is a library - // or was not generated by the Projucer. That's ok, the user will have to - // call Thread::initialiseJUCE manually - env->ExceptionClear(); - } -*/ - JNIClassBase::initialiseAllClasses (env); - - return JNI_VERSION_1_6; - }; - - /*void QThread::initialiseJamulusJava (void* jniEnv, void* context) - { - static CriticalSection cs; - ScopedLock lock (cs); - - // jniEnv and context should not be null! - //jassert (jniEnv != nullptr && context != nullptr); - - auto* env = static_cast (jniEnv); - - if (androidJNIJavaVM == nullptr) - { - JavaVM* javaVM = nullptr; - - auto status = env->GetJavaVM (&javaVM); - //jassert (status == 0 && javaVM != nullptr); - - androidJNIJavaVM = javaVM; - } - - }*/ - - inline LocalRef javaString (const QString& s) - { - return LocalRef (getEnv()->NewStringUTF (s.toUtf8()));//(s.toUTF8())); - }; - - QString getDeviceInfo (const LocalRef& device, JNIEnv* env) - { - auto deviceClass = LocalRef ((jclass) env->FindClass ("android/media/AudioDeviceInfo")); - - jmethodID getProductNameMethod = env->GetMethodID (deviceClass, "getProductName", - "()Ljava/lang/CharSequence;"); - - jmethodID getTypeMethod = env->GetMethodID (deviceClass, "getType", "()I"); - jmethodID getIdMethod = env->GetMethodID (deviceClass, "getId", "()I"); - jmethodID getSampleRatesMethod = env->GetMethodID (deviceClass, "getSampleRates", "()[I"); - jmethodID getChannelCountsMethod = env->GetMethodID (deviceClass, "getChannelCounts", "()[I"); - jmethodID isSourceMethod = env->GetMethodID (deviceClass, "isSource", "()Z"); - - auto deviceTypeString = deviceTypeToString (env->CallIntMethod (device, getTypeMethod)); - - if (deviceTypeString.isEmpty()) // unknown device - return ""; - - auto name = QString ((jstring) env->CallObjectMethod (device, getProductNameMethod)) + " " + deviceTypeString; - auto id = env->CallIntMethod (device, getIdMethod); - auto isInput = env->CallBooleanMethod (device, isSourceMethod); - //auto& devices = isInput ? inputDevices : outputDevices; - - return (isInput ? QString("In: "):QString("Out: ")) + name + " - " + id + "; "; - }; - - static QString deviceTypeToString (int type) - { - switch (type) - { - case 0: return {}; - case 1: return "built-in earphone speaker"; - case 2: return "built-in speaker"; - case 3: return "wired headset"; - case 4: return "wired headphones"; - case 5: return "line analog"; - case 6: return "line digital"; - case 7: return "Bluetooth device typically used for telephony"; - case 8: return "Bluetooth device supporting the A2DP profile"; - case 9: return "HDMI"; - case 10: return "HDMI audio return channel"; - case 11: return "USB device"; - case 12: return "USB accessory"; - case 13: return "DOCK"; - case 14: return "FM"; - case 15: return "built-in microphone"; - case 16: return "FM tuner"; - case 17: return "TV tuner"; - case 18: return "telephony"; - case 19: return "auxiliary line-level connectors"; - case 20: return "IP"; - case 21: return "BUS"; - case 22: return "USB headset"; - case 23: return "hearing aid"; - case 24: return "built-in speaker safe"; - case 25: return {}; - default: return {};//jassertfalse; return {}; // type not supported yet, needs to be added! - } - }; - -}; - -class JNIClassBase -{ -public: - explicit JNIClassBase (const char* classPath, int minSDK, const void* byteCode, size_t byteCodeSize); - virtual ~JNIClassBase(); - - inline operator jclass() const noexcept { return classRef; } - - static void initialiseAllClasses (JNIEnv*); - static void releaseAllClasses (JNIEnv*); - - inline const char* getClassPath() const noexcept { return classPath; } - -protected: - virtual void initialiseFields (JNIEnv*) = 0; - - jmethodID resolveMethod (JNIEnv*, const char* methodName, const char* params); - jmethodID resolveStaticMethod (JNIEnv*, const char* methodName, const char* params); - jfieldID resolveField (JNIEnv*, const char* fieldName, const char* signature); - jfieldID resolveStaticField (JNIEnv*, const char* fieldName, const char* signature); - void resolveCallbacks (JNIEnv*, const Array&); - -private: - friend struct SystemJavaClassComparator; - - const char* const classPath; - const void* byteCode; - size_t byteCodeSize; - - int minSDK; - jclass classRef = nullptr; - - static Array& getClasses(); - void initialise (JNIEnv*); - void release (JNIEnv*); - void tryLoadingClassWithClassLoader (JNIEnv* env, jobject classLoader); - -}; - - -template -class LocalRef -{ -public: - explicit inline LocalRef() noexcept : obj (nullptr) {} - explicit inline LocalRef (JavaType o) noexcept : obj (o) {} - inline LocalRef (const LocalRef& other) noexcept : obj (retain (other.obj)) {} - inline LocalRef (LocalRef&& other) noexcept : obj (nullptr) { std::swap (obj, other.obj); } - ~LocalRef() { clear(); } - - void clear() - { - if (obj != nullptr) - { - getEnv()->DeleteLocalRef (obj); - obj = nullptr; - } - } - - LocalRef& operator= (const LocalRef& other) - { - JavaType newObj = retain (other.obj); - clear(); - obj = newObj; - return *this; - } - - LocalRef& operator= (LocalRef&& other) - { - clear(); - std::swap (other.obj, obj); - return *this; - } - - inline operator JavaType() const noexcept { return obj; } - inline JavaType get() const noexcept { return obj; } - -private: - JavaType obj; - - static JavaType retain (JavaType obj) - { - return obj == nullptr ? nullptr : (JavaType) getEnv()->NewLocalRef (obj); - } }; From bced5682c25528e09a888022fad46796a7ffd388 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 15:56:12 +0200 Subject: [PATCH 34/98] Update clientdlg.cpp --- src/clientdlg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index fda5e7b80f..faa3b4d07f 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1191,12 +1191,12 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() QMessageBox::warning ( this, APP_NAME, tr ( "Your sound card is not working correctly. " "Please open the settings dialog and check the device selection and the driver settings." ) ); } - else + /*else { #if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) QMessageBox::warning ( this, APP_NAME, pClient->Sound.getAvailableDevices() ); //DEBUG NGOCDH #endif - } + }*/ } void CClientDlg::OnSoundDeviceChanged ( QString strError ) From 055fbe3abe95a11a1d856c940c5f0674acbeda9c Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 15:57:53 +0200 Subject: [PATCH 35/98] Update client.h --- src/client.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/client.h b/src/client.h index 637762d0a4..b60f23b637 100755 --- a/src/client.h +++ b/src/client.h @@ -286,8 +286,6 @@ class CClient : public QObject CSound* GetSound() { return &Sound; } #endif - CSound Sound; //NGOCDH DEBUG - check device id - protected: // callback function must be static, otherwise it does not work static void AudioCallback ( CVector& psData, void* arg ); @@ -329,7 +327,7 @@ class CClient : public QObject CVector vecCeltData; CHighPrioSocket Socket; - //CSound Sound; //DEBUG move to public + CSound Sound; CStereoSignalLevelMeter SignalLevelMeter; CVector vecbyNetwData; From 3167c95aa2ab2501b8e6eb2345e31d9d49713265 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 16:24:46 +0200 Subject: [PATCH 36/98] Update sound.cpp --- android/sound.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 923dadea49..9a09b1e909 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -388,16 +388,19 @@ void CSound::setBuiltinInput(bool builtinmic) inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - if (builtinmic) inBuilder.setDeviceId(-1); //shooting blind - hoping builtin mic id == 1 - else inBuilder.setDeviceId(oboe::kUnspecified); - - - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + if (builtinmic) + { + for(int i=1; i< 100; i++) + { + inBuilder.setDeviceId(i); //shooting blind - hoping builtin mic id == 1 - if ( result != oboe::Result::OK ) + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId()==i ) break; + if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + } + } + else { - //closeStream ( mPlayStream ); - //return; inBuilder.setDeviceId(oboe::kUnspecified); inBuilder.openManagedStream ( mRecordingStream ); } From 3b5c53075f8b8646370d9c2767be4a7220c78a18 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 17:36:06 +0200 Subject: [PATCH 37/98] Update sound.cpp --- android/sound.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 9a09b1e909..f3243e49a9 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -390,14 +390,24 @@ void CSound::setBuiltinInput(bool builtinmic) if (builtinmic) { - for(int i=1; i< 100; i++) + int i; + for(i=1; i< 100; i++) { - inBuilder.setDeviceId(i); //shooting blind - hoping builtin mic id == 1 + inBuilder.setDeviceId(i); //shooting blind - trying positive numbers oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); - //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId()==i ) break; - if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; + //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 } + if( mRecordingStream->getDeviceId() != i ) + for(i=-1; i> -100; i--) + { + inBuilder.setDeviceId(i); //shooting blind - negative now + + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; + //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + } } else { From 4c4de4d46ca0d1a833ff380f5741fc10f2d9ccfc Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 18:06:29 +0200 Subject: [PATCH 38/98] Update sound.cpp --- android/sound.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index f3243e49a9..7ecf08ee98 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -390,7 +390,7 @@ void CSound::setBuiltinInput(bool builtinmic) if (builtinmic) { - int i; + /*int i; for(i=1; i< 100; i++) { inBuilder.setDeviceId(i); //shooting blind - trying positive numbers @@ -407,7 +407,14 @@ void CSound::setBuiltinInput(bool builtinmic) oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 - } + }*/ + inBuilder.setDeviceId(7); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + if ( result != oboe::Result::OK ) + { + inBuilder.setDeviceId(oboe::kUnspecified); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + } } else { From 55dfa4cb977cdb1fae04f09366154c14fb4ec7f2 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 18:07:02 +0200 Subject: [PATCH 39/98] test device 9 --- android/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 7ecf08ee98..1c16549b8a 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -408,7 +408,7 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - inBuilder.setDeviceId(7); + inBuilder.setDeviceId(9); oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { From 64bf82034cc250ae0ed777748501e57c82399783 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 15 Apr 2021 18:41:01 +0200 Subject: [PATCH 40/98] android build only --- .github/workflows/autobuild.yml | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index f8196ad87e..3789f9f6c2 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -100,37 +100,6 @@ jobs: cmd3_postbuild: "./autobuild/android/autobuild_apk_3_copy_files.sh" uses_codeql: true - - config_name: Linux (artifacts+codeQL) - target_os: linux - building_on_os: ubuntu-18.04 - cmd1_prebuild: "sh ./autobuild/linux/autobuild_deb_1_prepare.sh" # this step needs sh instead of bash for permissions - cmd2_build: "./autobuild/linux/autobuild_deb_2_build.sh" - cmd3_postbuild: "./autobuild/linux/autobuild_deb_3_copy_files.sh" - uses_codeql: true - - - config_name: MacOS (codeQL) - target_os: macos - building_on_os: macos-10.15 - cmd1_prebuild: "./autobuild/mac/codeQL/autobuild_mac_1_prepare.sh" - cmd2_build: "./autobuild/mac/codeQL/autobuild_mac_2_build.sh" - cmd3_postbuild: false - uses_codeql: true - - - config_name: MacOS (artifacts) - target_os: macos - building_on_os: macos-10.15 - cmd1_prebuild: "./autobuild/mac/artifacts/autobuild_mac_1_prepare.sh" - cmd2_build: "./autobuild/mac/artifacts/autobuild_mac_2_build.sh" - cmd3_postbuild: "./autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh" - uses_codeql: false - - - config_name: Windows (artifact+codeQL) - target_os: windows - building_on_os: windows-latest - cmd1_prebuild: powershell .\autobuild\windows\autobuild_windowsinstaller_1_prepare.ps1 - cmd2_build: powershell .\autobuild\windows\autobuild_windowsinstaller_2_build.ps1 - cmd3_postbuild: powershell .\autobuild\windows\autobuild_windowsinstaller_3_copy_files.ps1 - uses_codeql: true runs-on: ${{ matrix.config.building_on_os }} steps: From b918af5076d4e0e4ab4e412b99f94d12a71ce22d Mon Sep 17 00:00:00 2001 From: ngocdh Date: Fri, 16 Apr 2021 11:57:55 +0200 Subject: [PATCH 41/98] Revert changes in opus, remove Foundation.h, remove unused BOOL. Add app icon --- ios/Info.plist | 4 ++++ ios/sound.h | 3 +-- libs/opus/celt/modes.c | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ios/Info.plist b/ios/Info.plist index 4ae5d508a7..f06efc8250 100644 --- a/ios/Info.plist +++ b/ios/Info.plist @@ -6,6 +6,10 @@ $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) + CFBundleIcons + + CFBundleIcons~ipad + CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion diff --git a/ios/sound.h b/ios/sound.h index 317235d288..849f005916 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -29,7 +29,7 @@ #include "soundbase.h" #include "global.h" -#import +//#import #import class CSound : public CSoundBase @@ -57,7 +57,6 @@ class CSound : public CSoundBase int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; - BOOL _audioChainIsBeingReconstructed; protected: MIDIPortRef midiInPortRef; diff --git a/libs/opus/celt/modes.c b/libs/opus/celt/modes.c index d8add1feed..390c5e8aeb 100644 --- a/libs/opus/celt/modes.c +++ b/libs/opus/celt/modes.c @@ -96,7 +96,7 @@ static opus_int16 *compute_ebands(opus_int32 Fs, int frame_size, int res, int *n if (Fs == 400*(opus_int32)frame_size) { *nbEBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1; - eBands = (opus_int16*)opus_alloc(sizeof(opus_int16)*(*nbEBands+1)); + eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+1)); for (i=0;i<*nbEBands+1;i++) eBands[i] = eband5ms[i]; return eBands; @@ -114,7 +114,7 @@ static opus_int16 *compute_ebands(opus_int32 Fs, int frame_size, int res, int *n low = (bark_freq[lin]+res/2)/res; high = nBark-lin; *nbEBands = low+high; - eBands = (opus_int16*)opus_alloc(sizeof(opus_int16)*(*nbEBands+2)); + eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+2)); if (eBands==NULL) return NULL; @@ -171,7 +171,7 @@ static void compute_allocation_table(CELTMode *mode) int maxBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1; mode->nbAllocVectors = BITALLOC_SIZE; - allocVectors = (unsigned char*)opus_alloc(sizeof(unsigned char)*(BITALLOC_SIZE*mode->nbEBands)); + allocVectors = opus_alloc(sizeof(unsigned char)*(BITALLOC_SIZE*mode->nbEBands)); if (allocVectors==NULL) return; @@ -305,7 +305,7 @@ CELTMode *opus_custom_mode_create(opus_int32 Fs, int frame_size, int *error) return NULL; } - mode = (CELTMode*)opus_alloc(sizeof(CELTMode)); + mode = opus_alloc(sizeof(CELTMode)); if (mode==NULL) goto failure; mode->Fs = Fs; From 022a0044d893d880b8e952c698689e3ea39f4d96 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Fri, 16 Apr 2021 11:59:59 +0200 Subject: [PATCH 42/98] Revert "android build only" This reverts commit 64bf82034cc250ae0ed777748501e57c82399783. --- .github/workflows/autobuild.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 3789f9f6c2..f8196ad87e 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -100,6 +100,37 @@ jobs: cmd3_postbuild: "./autobuild/android/autobuild_apk_3_copy_files.sh" uses_codeql: true + - config_name: Linux (artifacts+codeQL) + target_os: linux + building_on_os: ubuntu-18.04 + cmd1_prebuild: "sh ./autobuild/linux/autobuild_deb_1_prepare.sh" # this step needs sh instead of bash for permissions + cmd2_build: "./autobuild/linux/autobuild_deb_2_build.sh" + cmd3_postbuild: "./autobuild/linux/autobuild_deb_3_copy_files.sh" + uses_codeql: true + + - config_name: MacOS (codeQL) + target_os: macos + building_on_os: macos-10.15 + cmd1_prebuild: "./autobuild/mac/codeQL/autobuild_mac_1_prepare.sh" + cmd2_build: "./autobuild/mac/codeQL/autobuild_mac_2_build.sh" + cmd3_postbuild: false + uses_codeql: true + + - config_name: MacOS (artifacts) + target_os: macos + building_on_os: macos-10.15 + cmd1_prebuild: "./autobuild/mac/artifacts/autobuild_mac_1_prepare.sh" + cmd2_build: "./autobuild/mac/artifacts/autobuild_mac_2_build.sh" + cmd3_postbuild: "./autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh" + uses_codeql: false + + - config_name: Windows (artifact+codeQL) + target_os: windows + building_on_os: windows-latest + cmd1_prebuild: powershell .\autobuild\windows\autobuild_windowsinstaller_1_prepare.ps1 + cmd2_build: powershell .\autobuild\windows\autobuild_windowsinstaller_2_build.ps1 + cmd3_postbuild: powershell .\autobuild\windows\autobuild_windowsinstaller_3_copy_files.ps1 + uses_codeql: true runs-on: ${{ matrix.config.building_on_os }} steps: From 726060aaed1925821923cd4143cc8fa0832c3c87 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Fri, 16 Apr 2021 12:05:01 +0200 Subject: [PATCH 43/98] resolving conflict in src/clientdlg.h (add SendTabChange) --- src/clientdlg.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/clientdlg.h b/src/clientdlg.h index 0251e9123d..bae6ced00b 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -261,4 +261,8 @@ public slots: { pClient->SetBuiltinMic (false); } + +signals: + void SendTabChange ( int iTabIdx ); + }; From d526b1b4358ea479ae1e820a7d0683a540069a53 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 00:34:52 +0200 Subject: [PATCH 44/98] trying setAudioApi AAudio --- android/sound.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 1c16549b8a..902fdfbe0c 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -387,29 +387,31 @@ void CSound::setBuiltinInput(bool builtinmic) // the output will be handled writing directly on the stream inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); + if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( AudioApi::AAudio ); if (builtinmic) { - /*int i; + oboe::Result result; + int i; for(i=1; i< 100; i++) { inBuilder.setDeviceId(i); //shooting blind - trying positive numbers - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + result = inBuilder.openManagedStream ( mRecordingStream ); if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 } - if( mRecordingStream->getDeviceId() != i ) + /*if( mRecordingStream->getDeviceId() != i ) for(i=-1; i> -100; i--) { inBuilder.setDeviceId(i); //shooting blind - negative now - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + result = inBuilder.openManagedStream ( mRecordingStream ); if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - inBuilder.setDeviceId(9); - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + //inBuilder.setDeviceId(9); + //oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { inBuilder.setDeviceId(oboe::kUnspecified); From 88770024cddea9dcd48c7904363c02a2b84db6be Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 00:49:12 +0200 Subject: [PATCH 45/98] Update sound.cpp --- android/sound.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 902fdfbe0c..c5dc5d53a2 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -387,7 +387,7 @@ void CSound::setBuiltinInput(bool builtinmic) // the output will be handled writing directly on the stream inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( AudioApi::AAudio ); + if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); if (builtinmic) { @@ -415,7 +415,7 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result != oboe::Result::OK ) { inBuilder.setDeviceId(oboe::kUnspecified); - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + result = inBuilder.openManagedStream ( mRecordingStream ); } } else From 6d2a71e109a448cef67f0c7ed480d4e533e6ec98 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 01:41:25 +0200 Subject: [PATCH 46/98] dev 9 aaudio --- android/sound.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index c5dc5d53a2..3ca5e47658 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -391,7 +391,7 @@ void CSound::setBuiltinInput(bool builtinmic) if (builtinmic) { - oboe::Result result; + /*oboe::Result result; int i; for(i=1; i< 100; i++) { @@ -400,7 +400,7 @@ void CSound::setBuiltinInput(bool builtinmic) result = inBuilder.openManagedStream ( mRecordingStream ); if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 - } + }*/ /*if( mRecordingStream->getDeviceId() != i ) for(i=-1; i> -100; i--) { @@ -410,11 +410,11 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - //inBuilder.setDeviceId(9); - //oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + inBuilder.setDeviceId(9); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { - inBuilder.setDeviceId(oboe::kUnspecified); + inBuilder.setDeviceId( oboe::kUnspecified ); result = inBuilder.openManagedStream ( mRecordingStream ); } } From b6b2ebf437bc0e2f18e84d1e58164ed62c51dc93 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 08:50:01 +0200 Subject: [PATCH 47/98] Update sound.cpp --- android/sound.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 3ca5e47658..29c42397ac 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -391,16 +391,16 @@ void CSound::setBuiltinInput(bool builtinmic) if (builtinmic) { - /*oboe::Result result; + oboe::Result result; int i; - for(i=1; i< 100; i++) + for(i=100; i > 0; i--) { inBuilder.setDeviceId(i); //shooting blind - trying positive numbers result = inBuilder.openManagedStream ( mRecordingStream ); - if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; - //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 - }*/ + //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; + if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + } /*if( mRecordingStream->getDeviceId() != i ) for(i=-1; i> -100; i--) { @@ -410,8 +410,8 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - inBuilder.setDeviceId(9); - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + //inBuilder.setDeviceId(9); + //oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { inBuilder.setDeviceId( oboe::kUnspecified ); From 27ffe92e65c3d5d4f32e4a9d7d5ec1c3130ab4f5 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 09:45:26 +0200 Subject: [PATCH 48/98] check getDeviceId() instead of oboe::Result::OK --- android/sound.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 29c42397ac..1bae6f3a7a 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -399,7 +399,8 @@ void CSound::setBuiltinInput(bool builtinmic) result = inBuilder.openManagedStream ( mRecordingStream ); //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; - if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 + if ( mRecordingStream->getDeviceId() == i ) break; } /*if( mRecordingStream->getDeviceId() != i ) for(i=-1; i> -100; i--) From 6ee719734e009ff7e89f54a9226cc36efd304027 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 10:45:19 +0200 Subject: [PATCH 49/98] AAudio 7 only when builtinmic=true --- android/sound.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 1bae6f3a7a..2a5d6628cb 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -387,11 +387,11 @@ void CSound::setBuiltinInput(bool builtinmic) // the output will be handled writing directly on the stream inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); - + if (builtinmic) { - oboe::Result result; + if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); + /*oboe::Result result; int i; for(i=100; i > 0; i--) { @@ -401,7 +401,7 @@ void CSound::setBuiltinInput(bool builtinmic) //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 if ( mRecordingStream->getDeviceId() == i ) break; - } + }*/ /*if( mRecordingStream->getDeviceId() != i ) for(i=-1; i> -100; i--) { @@ -411,8 +411,8 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - //inBuilder.setDeviceId(9); - //oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + inBuilder.setDeviceId(7); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { inBuilder.setDeviceId( oboe::kUnspecified ); From 0465a5da03e7c53bbc55b133b92ec25e8dac4499 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 15:07:26 +0200 Subject: [PATCH 50/98] dev 20 for google pixel 5 --- android/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 2a5d6628cb..f7a7ee8f8f 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -411,7 +411,7 @@ void CSound::setBuiltinInput(bool builtinmic) if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 }*/ - inBuilder.setDeviceId(7); + inBuilder.setDeviceId(20); oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { From b7f8b3d442c146613ae7a00ebd382644966a5812 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 17:47:12 +0200 Subject: [PATCH 51/98] Add input device id text box --- src/clientsettingsdlgbase.ui | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index fbcd686e47..57b1d0bdc3 100644 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -1070,6 +1070,20 @@ + + + + Built-in mic device Id + + + + + + + + + + From 9c2d4ab6e5edbd97156c71e7eb6ee37a09487c2c Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 17:49:31 +0200 Subject: [PATCH 52/98] void OnBuiltInMicIdChanged(); --- src/clientsettingsdlg.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index 6ca92bb004..d9bdb767c9 100644 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -120,6 +120,7 @@ public slots: void OnTabChanged(); void OnMakeTabChange ( int iTabIdx ); void OnAudioPanValueChanged ( int value ); + void OnBuiltInMicIdChanged(); signals: void GUIDesignChanged(); From 56ac5e398405367340c8d3c4aa5ef88f06e5f572 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 17:54:50 +0200 Subject: [PATCH 53/98] edtBuiltInMicId and OnBuiltInMicIdChanged --- src/clientsettingsdlg.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 555d0c251e..8a3e400f94 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -300,6 +300,13 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, cbxInputBoost->setWhatsThis ( strInputBoost ); cbxInputBoost->setAccessibleName ( tr ( "Input Boost combo box" ) ); + // Built-in Mic + QString strBuiltInMic = "" + tr ( "Built-in Mic Device Id" ) + ": " + + tr ( "Choose Input device Id. Use LiveEffect for references." ); + lblBuiltInMicId->setWhatsThis ( strBuiltInMic ); + edtBuiltInMicId->setWhatsThis ( strBuiltInMic ); + edtBuiltInMicId->setAccessibleName ( tr ( "Built-in Mic Device Id edit box" ) ); + // custom central server address QString strCentrServAddr = "" + tr ( "Custom Central Server Address" ) + ": " + tr ( "Leave this blank unless you need to enter the address of a central " @@ -358,6 +365,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, lblOverallDelayValue->setText ( "---" ); lblUpstreamValue->setText ( "---" ); edtNewClientLevel->setValidator ( new QIntValidator ( 0, 100, this ) ); // % range from 0-100 + edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); //input device - from 0 to 1000 // init slider controls --- @@ -572,6 +580,10 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QObject::connect ( edtNewClientLevel, &QLineEdit::editingFinished, this, &CClientSettingsDlg::OnNewClientLevelEditingFinished ); + // line edits + QObject::connect ( edtBuiltInMicId, &QLineEdit::editingFinished, + this, &CClientSettingsDlg::OnBuiltInMicIdChanged ); + // combo boxes QObject::connect ( cbxSoundcard, static_cast ( &QComboBox::activated ), this, &CClientSettingsDlg::OnSoundcardActivated ); @@ -1114,3 +1126,9 @@ void CClientSettingsDlg::OnAudioPanValueChanged ( int value ) UpdateAudioFaderSlider(); } +void CClientSettingsDlg::OnBuiltInMicIdChanged() +{ + // index is zero-based while boost factor must be 1-based: + pSettings->iBuiltInMicId = edtBuiltInMicId->text().toInt(); + pClient->SetInputDeviceId ( pSettings->iBuiltInMicId ); +} From 8556f81ba1f4aff57acf146dbc6b4b39e70f3123 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 17:57:27 +0200 Subject: [PATCH 54/98] iBuiltInMicId --- src/settings.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/settings.h b/src/settings.h index 3655499709..da485cac14 100644 --- a/src/settings.h +++ b/src/settings.h @@ -146,6 +146,7 @@ class CClientSettings : public CSettings vstrIPAddress ( MAX_NUM_SERVER_ADDR_ITEMS, "" ), iNewClientFaderLevel ( 100 ), iInputBoost ( 1 ), + iBuiltInMicId ( 0 ), bConnectDlgShowAllMusicians ( true ), eChannelSortType ( ST_NO_SORT ), iNumMixerPanelRows ( 1 ), @@ -173,6 +174,7 @@ class CClientSettings : public CSettings CVector vstrIPAddress; int iNewClientFaderLevel; int iInputBoost; + int iBuiltInMicId; //0 for external bool bConnectDlgShowAllMusicians; EChSortType eChannelSortType; int iNumMixerPanelRows; From 284518f1f1354c5b3ef0325d3c1af3d4c583381a Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:02:39 +0200 Subject: [PATCH 55/98] SetInputDeviceId iBuiltInMicId --- src/client.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 8cc5f9d651..ac664926b3 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -53,6 +53,7 @@ CClient::CClient ( const quint16 iPortNumber, bReverbOnLeftChan ( false ), iReverbLevel ( 0 ), iInputBoost ( 1 ), + iBuiltInMicId ( 0 ), iSndCrdPrefFrameSizeFactor ( FRAME_SIZE_FACTOR_DEFAULT ), iSndCrdFrameSizeFactor ( FRAME_SIZE_FACTOR_DEFAULT ), bSndCrdConversionBufferRequired ( false ), @@ -1295,10 +1296,10 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) return MathUtils::round ( fTotalBufferDelayMs + iPingTimeMs ); } -void CClient::SetBuiltinMic ( const bool mic ) +void CClient::SetInputDeviceId ( const int deviceid ) { #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) // iOS only, Android !(not yet) supported - Sound.setBuiltinInput( mic ); + Sound.SetInputDeviceId( deviceid ); #endif } From 3bcdba8f55dc3c6d7035116352735ef8697c077f Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:06:14 +0200 Subject: [PATCH 56/98] iBuiltInMicId - SetInputDeviceId ( const int deviceid ) --- src/client.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client.h b/src/client.h index b60f23b637..0c6563e641 100755 --- a/src/client.h +++ b/src/client.h @@ -275,7 +275,7 @@ class CClient : public QObject void GetBufErrorRates ( CVector& vecErrRates, double& dLimit, double& dMaxUpLimit ) { Channel.GetBufErrorRates ( vecErrRates, dLimit, dMaxUpLimit ); } - void SetBuiltinMic ( const bool mic ); //for mobile devices - Android not yet supported + void SetInputDeviceId ( const int deviceid ); //for mobile devices - 0 for external devices // settings CChannelCoreInfo ChannelInfo; @@ -337,6 +337,7 @@ class CClient : public QObject int iReverbLevel; CAudioReverb AudioReverb; int iInputBoost; + int iBuiltInMicId; int iSndCrdPrefFrameSizeFactor; int iSndCrdFrameSizeFactor; From 81ee2d518f10f64452dc01aa7b9548c676293ab2 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:07:53 +0200 Subject: [PATCH 57/98] SetInputDeviceId ( int deviceid ); --- android/sound.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sound.h b/android/sound.h index 59af64c67d..7604bf4eb8 100644 --- a/android/sound.h +++ b/android/sound.h @@ -50,7 +50,7 @@ class CSound : public CSoundBase, public oboe::AudioStreamCallback virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); - virtual void setBuiltinInput(bool builtinmic); + virtual void SetInputDeviceId ( int deviceid ); // Call backs for Oboe virtual oboe::DataCallbackResult onAudioReady ( oboe::AudioStream* oboeStream, void* audioData, int32_t numFrames ); From 742e7a1f89a487913231beaadab49990c58aedea Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:12:38 +0200 Subject: [PATCH 58/98] void CSound::SetInputDeviceId ( int deviceid ) --- android/sound.cpp | 46 ++++++++++------------------------------------ 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index f7a7ee8f8f..57e094ebc7 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -374,7 +374,7 @@ void CSound::Stats::log() const << ",ring_overrun: " << ring_overrun; } -void CSound::setBuiltinInput(bool builtinmic) +void CSound::SetInputDeviceId ( int deviceid ) //0 for external device (auto to be exact) { closeStream ( mRecordingStream ); @@ -387,44 +387,18 @@ void CSound::setBuiltinInput(bool builtinmic) // the output will be handled writing directly on the stream inBuilder.setCallback(this); setupCommonStreamParams ( &inBuilder ); - - if (builtinmic) - { - if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); - /*oboe::Result result; - int i; - for(i=100; i > 0; i--) - { - inBuilder.setDeviceId(i); //shooting blind - trying positive numbers - - result = inBuilder.openManagedStream ( mRecordingStream ); - //if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; - //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 - if ( mRecordingStream->getDeviceId() == i ) break; - }*/ - /*if( mRecordingStream->getDeviceId() != i ) - for(i=-1; i> -100; i--) - { - inBuilder.setDeviceId(i); //shooting blind - negative now - - result = inBuilder.openManagedStream ( mRecordingStream ); - if ( result == oboe::Result::OK && mRecordingStream->getDeviceId() == i ) break; - //if ( result == oboe::Result::OK ) break; // there's a chance mRecordingStream->getDeviceId() always =0 - }*/ - inBuilder.setDeviceId(20); - oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); - if ( result != oboe::Result::OK ) - { - inBuilder.setDeviceId( oboe::kUnspecified ); - result = inBuilder.openManagedStream ( mRecordingStream ); - } - } - else + + if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); + + inBuilder.setDeviceId(deviceid); + oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); + if ( result != oboe::Result::OK ) { - inBuilder.setDeviceId(oboe::kUnspecified); - inBuilder.openManagedStream ( mRecordingStream ); + inBuilder.setDeviceId( oboe::kUnspecified ); + result = inBuilder.openManagedStream ( mRecordingStream ); } + mRecordingStream->setBufferSizeInFrames ( iOboeBufferSizeStereo ); warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); From 5726ecb26de966ff5a106f8b080f427458e0a95a Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:13:48 +0200 Subject: [PATCH 59/98] SetInputDeviceId( int deviceid ); --- ios/sound.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/sound.h b/ios/sound.h index 849f005916..4e807b211a 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -46,8 +46,8 @@ class CSound : public CSoundBase virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); - virtual void processBufferList(AudioBufferList*, CSound*); - virtual void setBuiltinInput(bool builtinmic); + virtual void processBufferList( AudioBufferList*, CSound* ); + virtual void SetInputDeviceId( int deviceid ); AudioUnit audioUnit; From 7fdb2d65731f82f5bb3dcb9eb980c4cd4dc597f2 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:16:26 +0200 Subject: [PATCH 60/98] Update sound.mm --- ios/sound.mm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ios/sound.mm b/ios/sound.mm index 0cb7cd1ce6..f056954d68 100755 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -260,9 +260,12 @@ static OSStatus recordingCallback(void *inRefCon, CSoundBase::Stop(); } -void CSound::setBuiltinInput(bool builtinmic) +void CSound::SetInputDeviceId( int deviceid ) { NSError *error = nil; + bool builtinmic = true; + + if (deviceid==0) builtinmic = false; //try external device AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; //assumming iOS only has max 2 inputs: 0 for builtin mic and 1 for external device From 0846c5b78176656484e764500a88c69e7ed69a84 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:22:17 +0200 Subject: [PATCH 61/98] setBuiltinMic unsetBuiltinMic --- src/clientdlg.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/clientdlg.h b/src/clientdlg.h index 654137e564..d3c369f0da 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -251,15 +251,18 @@ public slots: void setBuiltinMic() { - #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - pClient->SetBuiltinMic (true); + #if defined ( Q_OS_IOS ) + pClient->SetBuiltinMic ( 1 ); + #endif + #if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) + pClient->SetBuiltinMic ( pClient->iBuiltInMicId ); #endif } void unsetBuiltinMic() { #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - pClient->SetBuiltinMic (false); + pClient->SetBuiltinMic ( 0 ); #endif } From ea4614e4e41a9c7b5e6a1c17d5339e4090abbb92 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:23:28 +0200 Subject: [PATCH 62/98] auto dev --- src/clientdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 04277414d0..02e68e9740 100644 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -337,7 +337,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMobileMenu->addAction ( tr ( "Builtin Mic" ), this, SLOT ( setBuiltinMic() ) ); - pMobileMenu->addAction ( tr ( "External Dev" ), this, + pMobileMenu->addAction ( tr ( "Auto" ), this, SLOT ( unsetBuiltinMic() ) ); pMenu->addMenu ( pMobileMenu ); From f2d3302a219a3c57e5e22adf006bb2e57e2cd060 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:26:18 +0200 Subject: [PATCH 63/98] Update sound.h --- android/sound.h | 1 - 1 file changed, 1 deletion(-) diff --git a/android/sound.h b/android/sound.h index 7604bf4eb8..164a8c7a16 100644 --- a/android/sound.h +++ b/android/sound.h @@ -31,7 +31,6 @@ #include #include "ring_buffer.h" #include -#include "jni.h" /* Classes ********************************************************************/ class CSound : public CSoundBase, public oboe::AudioStreamCallback From 9e3a60a67934533ea83c0fc6373bfd26554ac234 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:28:18 +0200 Subject: [PATCH 64/98] SetInputDeviceId ( int deviceid ); --- ios/sound.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/sound.h b/ios/sound.h index 849f005916..8c989409cd 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -46,8 +46,8 @@ class CSound : public CSoundBase virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); - virtual void processBufferList(AudioBufferList*, CSound*); - virtual void setBuiltinInput(bool builtinmic); + virtual void processBufferList ( AudioBufferList*, CSound* ); + virtual void SetInputDeviceId ( int deviceid ); AudioUnit audioUnit; From 1372fb6c10d556c9fb3462f76b1a071dcbc5bcab Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:30:46 +0200 Subject: [PATCH 65/98] revert change (committed by error) --- ios/sound.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/sound.h b/ios/sound.h index 8c989409cd..9ed3263aac 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -47,7 +47,7 @@ class CSound : public CSoundBase virtual void Start(); virtual void Stop(); virtual void processBufferList ( AudioBufferList*, CSound* ); - virtual void SetInputDeviceId ( int deviceid ); + virtual void setBuiltinInput ( bool mic ); AudioUnit audioUnit; From e76929caf0fe581d10e9667c2c2dff5b5fe409e2 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:47:03 +0200 Subject: [PATCH 66/98] remove SetBuiltinMic --- src/clientdlg.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/clientdlg.h b/src/clientdlg.h index d3c369f0da..adf593e94a 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -252,17 +252,17 @@ public slots: void setBuiltinMic() { #if defined ( Q_OS_IOS ) - pClient->SetBuiltinMic ( 1 ); + pClient->SetInputDeviceId ( 1 ); #endif #if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - pClient->SetBuiltinMic ( pClient->iBuiltInMicId ); + pClient->SetInputDeviceId ( pClient->iBuiltInMicId ); #endif } void unsetBuiltinMic() { #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - pClient->SetBuiltinMic ( 0 ); + pClient->SetInputDeviceId ( 0 ); #endif } From 7527ade5ab5c1db8a7f374f6483227a72f894413 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:55:02 +0200 Subject: [PATCH 67/98] SetBuiltInMicId GetBuiltInMicId --- src/client.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client.h b/src/client.h index 0c6563e641..c7e6a30de8 100755 --- a/src/client.h +++ b/src/client.h @@ -245,6 +245,9 @@ class CClient : public QObject { Channel.SetRemoteChanPan ( iId, fPan ); } void SetInputBoost ( const int iNewBoost ) { iInputBoost = iNewBoost; } + + void SetBuiltInMicId ( const int iNewMicId ) { iBuiltInMicId = iNewMicId; } + int GetBuiltInMicId () { return iBuiltInMicId; } void SetRemoteInfo() { Channel.SetRemoteInfo ( ChannelInfo ); } From 1dc63a04fa72a30c880906ed7fee2e4395b65bdd Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:57:27 +0200 Subject: [PATCH 68/98] GetBuiltInMicId instead of direct access --- src/clientdlg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientdlg.h b/src/clientdlg.h index adf593e94a..21ce539004 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -255,7 +255,7 @@ public slots: pClient->SetInputDeviceId ( 1 ); #endif #if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - pClient->SetInputDeviceId ( pClient->iBuiltInMicId ); + pClient->SetInputDeviceId ( pClient->GetBuiltInMicId() ); #endif } From 83311abc6c9a83832ffde6aa1f0d2f5cb3842c3d Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 18:59:39 +0200 Subject: [PATCH 69/98] pClient->SetBuiltInMicId --- src/clientsettingsdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 8a3e400f94..b3a10f1d15 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -1130,5 +1130,5 @@ void CClientSettingsDlg::OnBuiltInMicIdChanged() { // index is zero-based while boost factor must be 1-based: pSettings->iBuiltInMicId = edtBuiltInMicId->text().toInt(); - pClient->SetInputDeviceId ( pSettings->iBuiltInMicId ); + pClient->SetBuiltInMicId ( pSettings->iBuiltInMicId ); //change value in variable only, not yet effective } From 5e2dbb2154edc1015a85fa4583dae1bd9a5b2e45 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 21:07:41 +0200 Subject: [PATCH 70/98] close menu action --- src/clientsettingsdlg.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index b3a10f1d15..231fe737d2 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -38,11 +38,9 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) // iOS needs menu to close - and Android too QMenuBar* pMenu = new QMenuBar ( this ); - QMenu* pCloseMenu = new QMenu ( tr ( "Close" ), this ); + QAction *action = pMenu->addAction ( tr ( "&Close" ) ); + connect ( action, SIGNAL ( triggered() ), this, SLOT ( close() ) ); - pCloseMenu->addAction ( tr ( "Close" ), this, - SLOT ( close() ) ); - pMenu->addMenu ( pCloseMenu ); // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); #endif From 276ae3b84353857039bf2188a31b3169a8095249 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 21:13:06 +0200 Subject: [PATCH 71/98] Device id text box for Android only --- src/clientsettingsdlgbase.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index 57b1d0bdc3..9d1f9e8b58 100644 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -1073,7 +1073,7 @@ - Built-in mic device Id + Built-in Mic DeviceId (Android only) From dd2929938b445085b579abd77d5f8799428f4f0c Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 20 Apr 2021 22:35:17 +0200 Subject: [PATCH 72/98] different close menu for ios and android --- src/clientsettingsdlg.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 231fe737d2..d8e4c3ecbf 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -35,8 +35,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, { setupUi ( this ); -#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - // iOS needs menu to close - and Android too +#if defined ( Q_OS_IOS ) + // iOS needs menu to close QMenuBar* pMenu = new QMenuBar ( this ); QAction *action = pMenu->addAction ( tr ( "&Close" ) ); connect ( action, SIGNAL ( triggered() ), this, SLOT ( close() ) ); @@ -45,6 +45,16 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, layout()->setMenuBar ( pMenu ); #endif +#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) + // Android too + QMenuBar* pMenu = new QMenuBar ( this ); + QMenu* pCloseMenu = new QMenu ( tr ( "Close" ), this ); + pCloseMenu->addAction ( tr ( "Close" ), this, SLOT ( close() ) ); + pMenu->addMenu ( pCloseMenu ); + + // Now tell the layout about the menu + layout()->setMenuBar ( pMenu ); +#endif // Add help text to controls ----------------------------------------------- // local audio input fader QString strAudFader = "" + tr ( "Local Audio Input Fader" ) + ": " + From 2daaf6af07c81804a49c5d12afb7e7d7a07051ad Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 22 Apr 2021 11:20:50 +0200 Subject: [PATCH 73/98] experimental textbox for Built-in Mic deviceid input - Android only (iOS already ok) --- ios/Info.plist | 1 + src/client.cpp | 4 ++-- src/clientsettingsdlg.cpp | 8 +++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ios/Info.plist b/ios/Info.plist index f06efc8250..a697c87a8a 100644 --- a/ios/Info.plist +++ b/ios/Info.plist @@ -51,6 +51,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad diff --git a/src/client.cpp b/src/client.cpp index ac664926b3..1362504e4a 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1299,7 +1299,7 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetInputDeviceId ( const int deviceid ) { #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) - // iOS only, Android !(not yet) supported - Sound.SetInputDeviceId( deviceid ); + // iOS ok, Android experimental + Sound.SetInputDeviceId ( deviceid ); #endif } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index d8e4c3ecbf..76c0a46bf4 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -308,13 +308,19 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, cbxInputBoost->setWhatsThis ( strInputBoost ); cbxInputBoost->setAccessibleName ( tr ( "Input Boost combo box" ) ); +#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) //Built-Mic for Android - experimental feature - requires User inputting correct deviceId // Built-in Mic QString strBuiltInMic = "" + tr ( "Built-in Mic Device Id" ) + ": " + tr ( "Choose Input device Id. Use LiveEffect for references." ); lblBuiltInMicId->setWhatsThis ( strBuiltInMic ); edtBuiltInMicId->setWhatsThis ( strBuiltInMic ); edtBuiltInMicId->setAccessibleName ( tr ( "Built-in Mic Device Id edit box" ) ); - +#else + if ( horizontalLayout_14 ) horizontalLayout_14->deleteLater(); + if ( lblBuiltInMicId ) lblBuiltInMicId->deleteLater(); + if ( edtBuiltInMicId ) edtBuiltInMicId->deleteLater(); +#endif + // custom central server address QString strCentrServAddr = "" + tr ( "Custom Central Server Address" ) + ": " + tr ( "Leave this blank unless you need to enter the address of a central " From 4ca2e307198207a9111a6565132928a79c81c242 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 19 May 2021 22:59:42 +0200 Subject: [PATCH 74/98] Client.cpp: iOS 4 sound inits down to 1 <- reduce launch time --- ios/Info.plist | 4 ++-- src/client.cpp | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ios/Info.plist b/ios/Info.plist index a697c87a8a..1631f2ca2d 100644 --- a/ios/Info.plist +++ b/ios/Info.plist @@ -24,8 +24,6 @@ 1 LSRequiresIPhoneOS - NSMainNibFile - LaunchScreen NSMicrophoneUsageDescription We need access to your microphone to let others hear you. UIApplicationSceneManifest @@ -43,6 +41,8 @@ UILaunchStoryboardName LaunchScreen + UIMainStoryboardFile + LaunchScreen UIRequiredDeviceCapabilities armv7 diff --git a/src/client.cpp b/src/client.cpp index f3cd2583f6..b03231c86c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -768,10 +768,16 @@ void CClient::Init() const int iFraSizeDefault = SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_DEFAULT; const int iFraSizeSafe = SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_SAFE; +# if defined ( Q_OS_IOS ) + bFraSiFactPrefSupported = TRUE; //to reduce sound init time, because we know it's supported in iOS + bFraSiFactDefSupported = TRUE; + bFraSiFactSafeSupported = TRUE; +# else bFraSiFactPrefSupported = ( Sound.Init ( iFraSizePreffered ) == iFraSizePreffered ); bFraSiFactDefSupported = ( Sound.Init ( iFraSizeDefault ) == iFraSizeDefault ); bFraSiFactSafeSupported = ( Sound.Init ( iFraSizeSafe ) == iFraSizeSafe ); - +# endif + // translate block size index in actual block size const int iPrefMonoFrameSize = iSndCrdPrefFrameSizeFactor * SYSTEM_FRAME_SIZE_SAMPLES; From 3cbb2c404a354aae3d1d698b8cc287ad8b403ff5 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 20 May 2021 09:15:52 +0200 Subject: [PATCH 75/98] iOS: Sound inits down to 1 from 36 --- ios/sound.h | 1 + ios/sound.mm | 4 ++++ src/client.cpp | 15 +++++++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ios/sound.h b/ios/sound.h index 968e5c37e7..c7615ec57d 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -56,6 +56,7 @@ class CSound : public CSoundBase CVector vecsTmpAudioSndCrdStereo; int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; + bool isInitialized; protected: diff --git a/ios/sound.mm b/ios/sound.mm index f056954d68..2ac656f8da 100644 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -133,10 +133,12 @@ static OSStatus recordingCallback(void *inRefCon, } }]; [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:&audioSessionError]; + isInitialized = false; } int CSound::Init ( const int iCoreAudioBufferSizeMono ) { + //printf("Init sound ..."); <= to check the number of Sound inits at launch // init base class //CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing this->iCoreAudioBufferSizeMono = iCoreAudioBufferSizeMono; @@ -241,6 +243,8 @@ static OSStatus recordingCallback(void *inRefCon, status = AudioUnitInitialize(audioUnit); checkStatus(status); + isInitialized = true; + return iCoreAudioBufferSizeMono; } diff --git a/src/client.cpp b/src/client.cpp index b03231c86c..95b0ce82f1 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -769,9 +769,9 @@ void CClient::Init() const int iFraSizeSafe = SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_SAFE; # if defined ( Q_OS_IOS ) - bFraSiFactPrefSupported = TRUE; //to reduce sound init time, because we know it's supported in iOS - bFraSiFactDefSupported = TRUE; - bFraSiFactSafeSupported = TRUE; + bFraSiFactPrefSupported = true; //to reduce sound init time, because we know it's supported in iOS + bFraSiFactDefSupported = true; + bFraSiFactSafeSupported = true; # else bFraSiFactPrefSupported = ( Sound.Init ( iFraSizePreffered ) == iFraSizePreffered ); bFraSiFactDefSupported = ( Sound.Init ( iFraSizeDefault ) == iFraSizeDefault ); @@ -782,8 +782,15 @@ void CClient::Init() const int iPrefMonoFrameSize = iSndCrdPrefFrameSizeFactor * SYSTEM_FRAME_SIZE_SAMPLES; // get actual sound card buffer size using preferred size +# if defined ( Q_OS_IOS ) //iOS needs 1 init only, without this: 9 inits at launch <- slow + if ( Sound.isInitialized ) + iMonoBlockSizeSam = iPrefMonoFrameSize; + else + iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); +# else iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); - +# endif + // Calculate the current sound card frame size factor. In case // the current mono block size is not a multiple of the system // frame size, we have to use a sound card conversion buffer. From ab49a72a4b853c6c54187211e6b5c5095b4706df Mon Sep 17 00:00:00 2001 From: ngocdh Date: Thu, 20 May 2021 19:27:28 +0200 Subject: [PATCH 76/98] Sound inits back to 9 times (not 9*4=36) until a way to check if app is done launching is found --- src/client.cpp | 15 ++++++++------- src/clientsettingsdlg.cpp | 1 - 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 95b0ce82f1..04a4313f86 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -782,14 +782,15 @@ void CClient::Init() const int iPrefMonoFrameSize = iSndCrdPrefFrameSizeFactor * SYSTEM_FRAME_SIZE_SAMPLES; // get actual sound card buffer size using preferred size -# if defined ( Q_OS_IOS ) //iOS needs 1 init only, without this: 9 inits at launch <- slow - if ( Sound.isInitialized ) - iMonoBlockSizeSam = iPrefMonoFrameSize; - else - iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); -# else +//TODO - iOS needs 1 init only, now: 9 inits at launch <- slow +// Initially, I tried to fix this as follows (inside #ifdef ios tag): +// if ( Sound.isInitialized ) +// iMonoBlockSizeSam = iPrefMonoFrameSize; +// else +// iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); +//Problem is legitimate setting changes (buffer size for example). +//so the condition should be something like "if ( Sound.isInitialized and APP_IS_INIALIZING)" iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); -# endif // Calculate the current sound card frame size factor. In case // the current mono block size is not a multiple of the system diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index b01bb282f1..4e921925ba 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -1206,7 +1206,6 @@ void CClientSettingsDlg::OnAudioPanValueChanged ( int value ) void CClientSettingsDlg::OnBuiltInMicIdChanged() { - // index is zero-based while boost factor must be 1-based: pSettings->iBuiltInMicId = edtBuiltInMicId->text().toInt(); pClient->SetBuiltInMicId ( pSettings->iBuiltInMicId ); //change value in variable only, not yet effective } From 474e0b847a8626c3f89002e067f14b0d5b2a6752 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 26 May 2021 11:23:46 +0200 Subject: [PATCH 77/98] Remove unused libs to speed up launch --- Jamulus.pro | 8 ++------ ios/sound.h | 2 -- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Jamulus.pro b/Jamulus.pro index 39ce276416..6eef3615fe 100644 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -173,12 +173,8 @@ win32 { OBJECTIVE_SOURCES += ios/sound.mm QMAKE_TARGET_BUNDLE_PREFIX = com.jamulussoftware.jamulus QMAKE_APPLICATION_BUNDLE_NAME. = $$TARGET - LIBS += -framework CoreFoundation \ - -framework CoreServices \ - -framework AVFoundation \ - -framework CoreMIDI \ - -framework AudioToolbox \ - -framework Foundation + LIBS += -framework AVFoundation \ + -framework AudioToolbox } else:android { # we want to compile with C++14 CONFIG += c++14 diff --git a/ios/sound.h b/ios/sound.h index c7615ec57d..6955c7416c 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -23,13 +23,11 @@ \******************************************************************************/ #pragma once -#include #include #include #include "soundbase.h" #include "global.h" -//#import #import class CSound : public CSoundBase From 92010f5c07f5c87978a086b8ce2446c1d9f9c699 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 26 May 2021 11:27:55 +0200 Subject: [PATCH 78/98] iOS: remove unused libs --- ios/sound.h | 1 - 1 file changed, 1 deletion(-) diff --git a/ios/sound.h b/ios/sound.h index 6955c7416c..d7682cdb5c 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -24,7 +24,6 @@ #pragma once #include -#include #include "soundbase.h" #include "global.h" From eea2908b8e7b6c26879322fc58d1d77b95586403 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 26 May 2021 12:54:40 +0200 Subject: [PATCH 79/98] autobuild: +x bit for mac or else check will fail --- autobuild/mac/codeQL/autobuild_mac_1_prepare.sh | 0 autobuild/mac/codeQL/autobuild_mac_2_build.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 autobuild/mac/codeQL/autobuild_mac_1_prepare.sh mode change 100644 => 100755 autobuild/mac/codeQL/autobuild_mac_2_build.sh diff --git a/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh b/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh old mode 100644 new mode 100755 diff --git a/autobuild/mac/codeQL/autobuild_mac_2_build.sh b/autobuild/mac/codeQL/autobuild_mac_2_build.sh old mode 100644 new mode 100755 From 4d6178419fb563f14c5d803a624fbe189955b70d Mon Sep 17 00:00:00 2001 From: ngocdh Date: Wed, 26 May 2021 13:38:35 +0200 Subject: [PATCH 80/98] autobuild mac artifacts +x --- autobuild/mac/artifacts/autobuild_mac_1_prepare.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 autobuild/mac/artifacts/autobuild_mac_1_prepare.sh diff --git a/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh b/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh old mode 100644 new mode 100755 From c5edb9d3f14e1825b62bddf47d4941689f260232 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Mon, 7 Jun 2021 01:13:23 +0200 Subject: [PATCH 81/98] Fix connect button crash --- ios/sound.mm | 217 ++++++++++++++++++++++++++------------------------- 1 file changed, 112 insertions(+), 105 deletions(-) diff --git a/ios/sound.mm b/ios/sound.mm index 2ac656f8da..7df5024b75 100644 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -138,114 +138,121 @@ static OSStatus recordingCallback(void *inRefCon, int CSound::Init ( const int iCoreAudioBufferSizeMono ) { - //printf("Init sound ..."); <= to check the number of Sound inits at launch - // init base class - //CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing - this->iCoreAudioBufferSizeMono = iCoreAudioBufferSizeMono; + try + { + //printf("Init sound ..."); <= to check the number of Sound inits at launch + // init base class + //CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing + this->iCoreAudioBufferSizeMono = iCoreAudioBufferSizeMono; - // set internal buffer size value and calculate stereo buffer size - iCoreAudioBufferSizeStereo = 2 * iCoreAudioBufferSizeMono; + // set internal buffer size value and calculate stereo buffer size + iCoreAudioBufferSizeStereo = 2 * iCoreAudioBufferSizeMono; - //create memory for intermediate audio buffer - vecsTmpAudioSndCrdStereo.Init ( iCoreAudioBufferSizeStereo ); - - AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; - - // we are going to play and record so we pick that category - NSError *error = nil; - [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionAllowBluetoothA2DP | AVAudioSessionCategoryOptionAllowAirPlay error:&error]; - - // NGOCDH - using values from jamulus settings 64 = 2.67ms/2 - NSTimeInterval bufferDuration = iCoreAudioBufferSizeMono / 48000.0; //yeah it's math - [sessionInstance setPreferredIOBufferDuration:bufferDuration error:&error]; - - // set the session's sample rate 48000 - the only supported by Jamulus ? - [sessionInstance setPreferredSampleRate:48000 error:&error]; - [[AVAudioSession sharedInstance] setActive:YES error:&error]; - - OSStatus status; - - // Describe audio component - AudioComponentDescription desc; - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_RemoteIO; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - - // Get component - AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc); - - // Get audio units - status = AudioComponentInstanceNew(inputComponent, &audioUnit); - checkStatus(status); - - // Enable IO for recording - UInt32 flag = 1; - status = AudioUnitSetProperty(audioUnit, - kAudioOutputUnitProperty_EnableIO, - kAudioUnitScope_Input, - kInputBus, - &flag, - sizeof(flag)); - checkStatus(status); - - // Enable IO for playback - status = AudioUnitSetProperty(audioUnit, - kAudioOutputUnitProperty_EnableIO, - kAudioUnitScope_Output, - kOutputBus, - &flag, - sizeof(flag)); - checkStatus(status); - - // Describe format - AudioStreamBasicDescription audioFormat; - audioFormat.mSampleRate = 48000.00; - audioFormat.mFormatID = kAudioFormatLinearPCM; - audioFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; - audioFormat.mFramesPerPacket = 1; - audioFormat.mChannelsPerFrame = 2; //steoreo, so 2 interleaved channels - audioFormat.mBitsPerChannel = 32;//sizeof float32 - audioFormat.mBytesPerPacket = 8;// (sizeof float32) * 2 channels - audioFormat.mBytesPerFrame = 8;//(sizeof float32) * 2 channels - - // Apply format - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - kInputBus, - &audioFormat, - sizeof(audioFormat)); - checkStatus(status); - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, - kOutputBus, - &audioFormat, - sizeof(audioFormat)); - checkStatus(status); - - - // Set callback - AURenderCallbackStruct callbackStruct; - callbackStruct.inputProc = recordingCallback;//this is actually the playback callback - callbackStruct.inputProcRefCon = this; - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_SetRenderCallback, - kAudioUnitScope_Global, - kOutputBus, - &callbackStruct, - sizeof(callbackStruct)); - checkStatus(status); - - // Initialise - status = AudioUnitInitialize(audioUnit); - checkStatus(status); - - isInitialized = true; + //create memory for intermediate audio buffer + vecsTmpAudioSndCrdStereo.Init ( iCoreAudioBufferSizeStereo ); + + AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; + + // we are going to play and record so we pick that category + NSError *error = nil; + [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionAllowBluetoothA2DP | AVAudioSessionCategoryOptionAllowAirPlay error:&error]; + + // NGOCDH - using values from jamulus settings 64 = 2.67ms/2 + NSTimeInterval bufferDuration = iCoreAudioBufferSizeMono / 48000.0; //yeah it's math + [sessionInstance setPreferredIOBufferDuration:bufferDuration error:&error]; + + // set the session's sample rate 48000 - the only supported by Jamulus ? + [sessionInstance setPreferredSampleRate:48000 error:&error]; + [[AVAudioSession sharedInstance] setActive:YES error:&error]; + + OSStatus status; + + // Describe audio component + AudioComponentDescription desc; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_RemoteIO; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + + // Get component + AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc); + + // Get audio units + status = AudioComponentInstanceNew(inputComponent, &audioUnit); + checkStatus(status); + + // Enable IO for recording + UInt32 flag = 1; + status = AudioUnitSetProperty(audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Input, + kInputBus, + &flag, + sizeof(flag)); + checkStatus(status); + + // Enable IO for playback + status = AudioUnitSetProperty(audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Output, + kOutputBus, + &flag, + sizeof(flag)); + checkStatus(status); + + // Describe format + AudioStreamBasicDescription audioFormat; + audioFormat.mSampleRate = 48000.00; + audioFormat.mFormatID = kAudioFormatLinearPCM; + audioFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; + audioFormat.mFramesPerPacket = 1; + audioFormat.mChannelsPerFrame = 2; //steoreo, so 2 interleaved channels + audioFormat.mBitsPerChannel = 32;//sizeof float32 + audioFormat.mBytesPerPacket = 8;// (sizeof float32) * 2 channels + audioFormat.mBytesPerFrame = 8;//(sizeof float32) * 2 channels + + // Apply format + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, + kInputBus, + &audioFormat, + sizeof(audioFormat)); + checkStatus(status); + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + kOutputBus, + &audioFormat, + sizeof(audioFormat)); + checkStatus(status); + + + // Set callback + AURenderCallbackStruct callbackStruct; + callbackStruct.inputProc = recordingCallback;//this is actually the playback callback + callbackStruct.inputProcRefCon = this; + status = AudioUnitSetProperty(audioUnit, + kAudioUnitProperty_SetRenderCallback, + kAudioUnitScope_Global, + kOutputBus, + &callbackStruct, + sizeof(callbackStruct)); + checkStatus(status); + + // Initialise + status = AudioUnitInitialize(audioUnit); + checkStatus(status); + + isInitialized = true; + } + catch ( const CGenErr& generr ) + { + qDebug ( "Sound Init exception ...." ); //This try-catch seems to fix Connect button crash + } - return iCoreAudioBufferSizeMono; + return iCoreAudioBufferSizeMono; } void CSound::Start() From cc13fc6f638174b2ed125ac62b094fea30a3be04 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Mon, 7 Jun 2021 10:57:50 +0200 Subject: [PATCH 82/98] really fix connect crash? --- ios/sound.mm | 55 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/ios/sound.mm b/ios/sound.mm index 7df5024b75..9f2b61dd04 100644 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -249,7 +249,7 @@ static OSStatus recordingCallback(void *inRefCon, } catch ( const CGenErr& generr ) { - qDebug ( "Sound Init exception ...." ); //This try-catch seems to fix Connect button crash + qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash } return iCoreAudioBufferSizeMono; @@ -259,35 +259,54 @@ static OSStatus recordingCallback(void *inRefCon, { // call base class CSoundBase::Start(); - OSStatus err = AudioOutputUnitStart(audioUnit); - checkStatus(err); + try + { + OSStatus err = AudioOutputUnitStart(audioUnit); + checkStatus(err); + } + catch ( const CGenErr& generr ) + { + qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash + } } void CSound::Stop() { - OSStatus err = AudioOutputUnitStop(audioUnit); - checkStatus(err); + try{ + OSStatus err = AudioOutputUnitStop(audioUnit); + checkStatus(err); + } + catch ( const CGenErr& generr ) + { + qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash + } // call base class CSoundBase::Stop(); } void CSound::SetInputDeviceId( int deviceid ) { - NSError *error = nil; - bool builtinmic = true; - - if (deviceid==0) builtinmic = false; //try external device - - AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; - //assumming iOS only has max 2 inputs: 0 for builtin mic and 1 for external device - if ( builtinmic ) + try { - [sessionInstance setPreferredInput:sessionInstance.availableInputs[0] error:&error]; + NSError *error = nil; + bool builtinmic = true; + + if (deviceid==0) builtinmic = false; //try external device + + AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; + //assumming iOS only has max 2 inputs: 0 for builtin mic and 1 for external device + if ( builtinmic ) + { + [sessionInstance setPreferredInput:sessionInstance.availableInputs[0] error:&error]; + } + else + { + unsigned long lastInput = sessionInstance.availableInputs.count - 1; + [sessionInstance setPreferredInput:sessionInstance.availableInputs[lastInput] error:&error]; + } } - else + catch ( const CGenErr& generr ) { - unsigned long lastInput = sessionInstance.availableInputs.count - 1; - [sessionInstance setPreferredInput:sessionInstance.availableInputs[lastInput] error:&error]; + qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash } - //TODO - error checking } From cb53bea6468e82c0e742a997dfb78d62a64b60de Mon Sep 17 00:00:00 2001 From: ngocdh Date: Mon, 7 Jun 2021 12:07:39 +0200 Subject: [PATCH 83/98] connect crash --- ios/sound.mm | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/ios/sound.mm b/ios/sound.mm index 9f2b61dd04..ec582e77af 100644 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -124,15 +124,22 @@ static OSStatus recordingCallback(void *inRefCon, CSoundBase ( "CoreAudio iOS", fpNewProcessCallback, arg, strMIDISetup ), midiInPortRef ( static_cast ( NULL ) ) { - NSError *audioSessionError = nil; - - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError]; - [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { - if (granted) { - // ok - } - }]; - [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:&audioSessionError]; + try + { + NSError *audioSessionError = nil; + + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError]; + [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { + if (granted) { + // ok + } + }]; + [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:&audioSessionError]; + } + catch ( const CGenErr& generr ) + { + qDebug ( "Sound exception ...." ); // This try-catch seems to fix Connect button crash + } isInitialized = false; } @@ -266,7 +273,7 @@ static OSStatus recordingCallback(void *inRefCon, } catch ( const CGenErr& generr ) { - qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash + qDebug ( "Sound Start exception ...." ); // This try-catch seems to fix Connect button crash } } @@ -278,7 +285,7 @@ static OSStatus recordingCallback(void *inRefCon, } catch ( const CGenErr& generr ) { - qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash + qDebug ( "Sound Stop exception ...." ); // This try-catch seems to fix Connect button crash } // call base class CSoundBase::Stop(); @@ -307,6 +314,6 @@ static OSStatus recordingCallback(void *inRefCon, } catch ( const CGenErr& generr ) { - qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash + qDebug ( "Sound dev change exception ...." ); // This try-catch seems to fix Connect button crash } } From 114460efe3ab87575659faa39367aec57feafc6b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Mon, 7 Jun 2021 15:21:06 +0200 Subject: [PATCH 84/98] Temporary crash fix, TODO: reopen socket when SIGPIPE --- src/socket.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/socket.cpp b/src/socket.cpp index 94d254920f..171a99ca9e 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -45,6 +45,12 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const const char tos = (char) iQosNumber; // Quality of Service setsockopt ( UdpSocket, IPPROTO_IP, IP_TOS, &tos, sizeof ( tos ) ); +#ifdef Q_OS_IOS + //ignore the broken pipe signal to avoid crash (iOS) + int valueone = 1; + setsockopt(UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof(valueone)); +#endif + // allocate memory for network receive and send buffer in samples vecbyRecBuf.Init ( MAX_SIZE_BYTES_NETW_BUF ); From 99a62309afd7bc5777d0eff5d4e87b248b86118e Mon Sep 17 00:00:00 2001 From: ngocdh Date: Tue, 8 Jun 2021 00:06:38 +0200 Subject: [PATCH 85/98] Fix iOS return-from-idle crash: reopen socket --- src/socket.cpp | 32 ++++++++++++++++++++++++++------ src/socket.h | 4 ++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/socket.cpp b/src/socket.cpp index 171a99ca9e..7f63ce2ca2 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -28,6 +28,11 @@ /* Implementation *************************************************************/ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QString& strServerBindIP ) { + // first store parameters, in case reinit is required (mostly for iOS) + iPortNumber_ = iPortNumber; + iQosNumber_ = iQosNumber; + strServerBindIP_ = strServerBindIP; + #ifdef _WIN32 // for the Windows socket usage we have to start it up first @@ -121,6 +126,7 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const // Connections ------------------------------------------------------------- // it is important to do the following connections in this class since we // have a thread transition + if ( bIsInitRan ) return; // we have different connections for client and server if ( bIsClient ) @@ -148,6 +154,8 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QObject::connect ( this, &CSocket::ServerFull, pServer, &CServer::OnServerFull ); } + + bIsInitRan = true; // QObject::connect once only } void CSocket::Close() @@ -194,12 +202,24 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr UdpSocketOutAddr.sin_port = htons ( HostAddr.iPort ); UdpSocketOutAddr.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); - sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ); + if ( + sendto ( UdpSocket, + (const char*) &( (CVector) vecbySendBuf )[0], + iVecSizeOut, + 0, + (sockaddr*) &UdpSocketOutAddr, + sizeof ( sockaddr_in ) ) + < 0 ) + { + // qDebug("Socket send exception - mostly happens in iOS when returning from idle"); + Init( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit + sendto ( UdpSocket, + (const char*) &( (CVector) vecbySendBuf )[0], + iVecSizeOut, + 0, + (sockaddr*) &UdpSocketOutAddr, + sizeof ( sockaddr_in ) ); + } } } diff --git a/src/socket.h b/src/socket.h index bbf6c49880..d4d9714492 100644 --- a/src/socket.h +++ b/src/socket.h @@ -78,6 +78,10 @@ class CSocket : public QObject protected: void Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QString& strServerBindIP ); + quint16 iPortNumber_; + quint16 iQosNumber_; + QString strServerBindIP_; + bool bIsInitRan; #ifdef _WIN32 SOCKET UdpSocket; From ab020499c4363ae212be0b03ffff13cbe37dc9dc Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sat, 12 Jun 2021 18:44:34 +0200 Subject: [PATCH 86/98] Merge master into master --- .clang-format-ignore | 3 + .github/workflows/autobuild.yml | 12 +- .github/workflows/coding-style-check.yml | 20 + COMPILING.md | 155 ++++ ChangeLog | 116 ++- Jamulus.pro | 32 +- README.md | 2 +- .../mac/artifacts/autobuild_mac_1_prepare.sh | 11 +- .../artifacts/autobuild_mac_3_copy_files.sh | 6 +- .../mac/codeQL/autobuild_mac_1_prepare.sh | 11 +- mac/deploy_mac.sh | 2 +- src/client.cpp | 2 - src/clientdlg.cpp | 61 +- src/clientdlg.h | 1 + src/clientdlgbase.ui | 755 +++++++++------- src/clientsettingsdlg.cpp | 65 +- src/clientsettingsdlg.h | 11 +- src/clientsettingsdlgbase.ui | 164 +--- src/main.cpp | 31 +- src/multicolorled.cpp | 4 +- src/recorder/jamrecorder.cpp | 50 +- src/recorder/jamrecorder.h | 3 +- src/res/IndicatorRedFancy.png | Bin 0 -> 678 bytes src/res/IndicatorYellowFancy.png | Bin 0 -> 631 bytes src/res/translation/translation_de_DE.ts | 440 ++++----- src/res/translation/translation_es_ES.ts | 476 +++++----- src/res/translation/translation_fr_FR.ts | 456 +++++----- src/res/translation/translation_it_IT.ts | 436 ++++----- src/res/translation/translation_nl_NL.ts | 450 ++++----- src/res/translation/translation_pl_PL.ts | 440 ++++----- src/res/translation/translation_pt_BR.ts | 460 +++++----- src/res/translation/translation_pt_PT.ts | 436 ++++----- src/res/translation/translation_sk_SK.ts | 448 ++++----- src/res/translation/translation_sv_SE.ts | 440 ++++----- src/resources.qrc | 2 + src/serverdlg.cpp | 7 +- src/serverdlg.h | 1 + src/settings.cpp | 12 + windows/deploy_windows.ps1 | 8 +- windows/nsProcess/ConvFunc.h | 855 +++++++++--------- windows/nsProcess/api.h | 67 +- windows/nsProcess/nsis_tchar.h | 270 +++--- windows/nsProcess/pluginapi.h | 152 ++-- 43 files changed, 3851 insertions(+), 3522 deletions(-) create mode 100644 .clang-format-ignore create mode 100644 .github/workflows/coding-style-check.yml create mode 100644 COMPILING.md create mode 100644 src/res/IndicatorRedFancy.png create mode 100644 src/res/IndicatorYellowFancy.png diff --git a/.clang-format-ignore b/.clang-format-ignore new file mode 100644 index 0000000000..4b7b414bb9 --- /dev/null +++ b/.clang-format-ignore @@ -0,0 +1,3 @@ +# exclude third party code from clang-format checks +./libs +./windows/nsProcess diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index d6fb37e932..6131504d9c 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -111,7 +111,7 @@ jobs: - config_name: MacOS (codeQL) target_os: macos building_on_os: macos-10.15 - cmd1_prebuild: "./autobuild/mac/codeQL/autobuild_mac_1_prepare.sh" + cmd1_prebuild: "./autobuild/mac/codeQL/autobuild_mac_1_prepare.sh 5.15.2" cmd2_build: "./autobuild/mac/codeQL/autobuild_mac_2_build.sh" cmd3_postbuild: false uses_codeql: true @@ -119,11 +119,19 @@ jobs: - config_name: MacOS (artifacts) target_os: macos building_on_os: macos-10.15 - cmd1_prebuild: "./autobuild/mac/artifacts/autobuild_mac_1_prepare.sh" + cmd1_prebuild: "./autobuild/mac/artifacts/autobuild_mac_1_prepare.sh 5.15.2" cmd2_build: "./autobuild/mac/artifacts/autobuild_mac_2_build.sh" cmd3_postbuild: "./autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh" uses_codeql: false + - config_name: MacOS Legacy (artifacts) + target_os: macos + building_on_os: macos-10.15 + cmd1_prebuild: "./autobuild/mac/artifacts/autobuild_mac_1_prepare.sh 5.9.9" + cmd2_build: "./autobuild/mac/artifacts/autobuild_mac_2_build.sh" + cmd3_postbuild: "./autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh legacy" + uses_codeql: false + - config_name: Windows (artifact+codeQL) target_os: windows building_on_os: windows-latest diff --git a/.github/workflows/coding-style-check.yml b/.github/workflows/coding-style-check.yml new file mode 100644 index 0000000000..26ab8fadad --- /dev/null +++ b/.github/workflows/coding-style-check.yml @@ -0,0 +1,20 @@ +name: Coding Style Check + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + clang-format: + name: Verify Clang-Format compliance + permissions: + contents: read + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: DoozyX/clang-format-lint-action@2a28e3a8d9553f244243f7e1ff94f6685dff87be + with: + clangFormatVersion: 10 + extensions: 'cpp,h' diff --git a/COMPILING.md b/COMPILING.md new file mode 100644 index 0000000000..b55effddcb --- /dev/null +++ b/COMPILING.md @@ -0,0 +1,155 @@ +## Points to note + +- Jamulus can be compiled for Linux, Windows and macOS. However, the preferred method of supporting these platforms is to use the binaries generated by the autobuild process in the Jamulus repository. +- For unattended installs, see the contributed [installation scripts](https://github.com/jamulussoftware/installscripts) +- There are reports from people who successfully compile and run Jamulus on BSDs. +- Android and iOS are not officially supported. + +--- + + +## Download sources + +For .tar.gz [use this link](https://github.com/jamulussoftware/jamulus/archive/latest.tar.gz) to download the latest release + +For .zip [use this link](https://github.com/jamulussoftware/jamulus/archive/latest.zip) + +## Linux + +#### Install dependencies + +On Ubuntu-based distributions 18.04+, Debian 9+, and Raspberry Pi OS: + +* build-essential +* qt5-qmake +* qtdeclarative5-dev +* qt5-default +* qttools5-dev-tools +* libjack-jackd2-dev + +#### On Fedora 33+ + +* qt5-qtdeclarative-devel +* jack-audio-connection-kit-dbus +* qt5-qtbase +* jack-audio-connection-kit-devel +* qt5-linguist + +#### For all desktop distributions + +[QjackCtl](https://qjackctl.sourceforge.io/) is optional, but recommended to configure JACK. + + +### Standard desktop build + +``` +make distclean +qmake # qmake-qt5 on Fedora 33 +make +sudo make install +``` + +`make distclean` is optional but ensures a clean build environment. `make install` is optional and puts the Jamulus binary into `/usr/local/bin`. + +### “Headless” server build + +Although not strictly necessary, we recommend using the headless flag to avoid having to install some of the dependent packages, save some disk space and/or speed up your build time. + +Note that you don’t need to install the JACK package(s) for a headless build. If you plan to run headless on Gentoo, or are compiling under Ubuntu for use on another Ubuntu machine, the only packages you should need for a headless build are `qtcore`, `qtnetwork`, `qtconcurrent` and `qtxml` (both for building and running the server). + +Compile the sources to ignore the JACK sound library: + +``` +make distclean # recommended +qmake "CONFIG+=nosound headless" +make +sudo make install # optional +``` + +To control the server with systemd, see this [unit file example](https://github.com/jamulussoftware/jamulus/blob/master/distributions/jamulus-server.service). See also runtime [configuration options](https://jamulus.io/wiki/Command-Line-Options), and [this information](https://jamulus.io/wiki/Tips-Tricks-More#controlling-recordings-on-linux-headless-servers) on controlling recordings on headless servers. + +--- + +## Windows + + +You will need [Qt](https://www.qt.io/download) + +* Use the free GPLv2 license for Open Source development +* To determine the Qt version you need, check [qt-installer-windows.qs](https://github.com/jamulussoftware/jamulus/blob/master/windows/qt-installer-windows.qs): under INSTALL_COMPONENTS you will see `qt.qt5.[version]`, e.g., 5123 means version 5.12.3. +* Select Components during installation: Expand the Qt section, find the matching version, e.g., **Qt 5.12.3**, and add the compiler components for your compiler, e.g., `MSVC 2017 32-bit/64-bit` for Visual Studio 2019 +* [ASIO development files](https://www.steinberg.net/en/company/developer.html) + +### Compiling and building installer + +Most users will probably want to use this method: + +1. Open PowerShell +1. Navigate to the `jamulus` directory +1. To allow unsigned scripts, right-click on the `windows\deploy_windows.ps1` script, select properties and allow the execution of this script. You can also run `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`. (You can revert this after having run this script. For more information see the [Microsoft PowerShell documentation page](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy)). +1. Edit the $QtCompile32 and $QtCompile64 variables. +1. Run the Jamulus compilation and installer script in PowerShell: `.\windows\deploy_windows.ps1`. +1. You can now find the Jamulus installer in the `.\deploy` directory. + +### Compiling only + +1. Create a folder under `\windows` called ASIOSDK2 +1. Download the [ASIOSDK](https://www.steinberg.net/asiosdk), open the top level folder in the .zip file and copy the contents into `[\path\to\jamulus\source]\windows\ASIOSDK2` so that, e.g., the folder `[\path\to\jamulus\source]\windows\ASIOSDK2\common` exists +1. Open Jamulus.pro in Qt Creator, configure the project with a default kit, then compile & run + +--- + +## macOS +You will need XCode and Qt as follows: + +``` +brew install qt5 +brew link qt5 --force +``` + +### Generate XCode Project file + +`qmake -spec macx-xcode Jamulus.pro` + +### Print build targets and configuration in console + +`xcodebuild -list -project Jamulus.xcodeproj` + +will prompt + +``` +Targets: + Jamulus + Qt Preprocess + +Build Configurations: + Debug + Release +``` + +If no build configuration is specified and `-scheme` is not passed then "Release" is used. + +``` +Schemes: + Jamulus +``` + +### Build the project + +`xcodebuild build` + +Will build the file and make it available in `./Release/Jamulus.app` + +## iOS +* Make sure to install qt5 with the Qt Installer (not homebrew), and explicitly select iOS when choosing the Qt version +* Run `/path/to/qt/5.15.2/ios/bin/qmake -spec macx-xcode Jamulus.pro` +* Open the generated .xcodeproject in XCode, check the Signing & Capabilities and configure a team +* To run on a iOS device, build and run on the device, you'll have first trust your developer profile in device's Settings. + +## Android +* Install Qt, including the Android support from the Qt installer +* Follow Qt's [Getting Started with Qt for Android](https://doc.qt.io/qt-5/android-getting-started.html) instructions +* Make sure Jamulus submodules are present, notably oboe: +`git submodule update --init` +* Open Jamulus.pro in Qt Creator +* Now you should be able to Build & Run for Android. diff --git a/ChangeLog b/ChangeLog index efbb9a885d..61a9824ea5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12 +1,40 @@ -### 3.8.0rc1dev <- NOTE: the release version number will be 3.8.0 ### +### 3.8.0dev <- NOTE: the release version number will be 3.8.1 ### -- Mac: Updated to use Qt 5.12.10 for better compatibility with Big Sur (#1687). - This drops support for Yosemite and El Capitan in the distributed version. +- CLI: Jamulus now shows a link to the Website for translated content (#1759). + (contributed by @henkdegroot) + +- Client: JACK support on Windows has been improved (#1718). + (contributed by @jujudusud, @henkdegroot) + +- Server: A single click on the server application in the systemtray now opens the Jamulus Server main window (#1722). + (contributed by @henkdegroot) + +- Bug Fix: Mute myself has been made more consistent (#1838). + (contributed by @ngocdh) + +### 3.8.0 (2021-06-02) ### + +- The term "Central server" has been replaced with "Directory server" (#1407, #1715, #1629). + Note that the program will still accept the --centralserver option for backward + compatibility with existing system startup scripts, but its usage is deprecated. + (contributed by @pljones, @softins) + +- Mac: Generate build with Qt 5.15.2 for better compatibility with Big Sur (#1687, #1768). + We still build a legacy version with Qt 5.9.9 to support older versions of macOS: + * Users of 10.13 (High sierra) or newer should use the standard build with Qt 5.15.2 + * Users of Yosemite, El Capitan or Sierra should use the legacy build with Qt 5.9.9 (contributed by @softins) -- Code: Added automatic code formatting with clang-format (#901, #1127). - (contributed by @passing) +- GUI: Settings window has been reorganized into tabs (#1415, #1554, #1542, #1588): + * User Profile window has been integrated into the settings window. + * Input Pan has been moved to the newly created Advanced tab and removed from main window. + (contributed by @dcorson-ticino-com, @pljones) + +- GUI: Moved the Ping and Delay stats from the Settings window to the main window (#1762): + This was partly to work around a Mac issue with updates to the settings window (#1643) + and is actually an improvement anyway, as the settings window does not need to remain open. + (contributed by @dcorson-ticino-com and @softins) - GUI: Added "About Qt" to the help menu to display version of Qt (#1685, #1692). (contributed by @softins) @@ -20,16 +48,6 @@ - Added new icons for Linux desktop use (#1672). (contributed by @jujudusud) -- Server: Improvements to multi-threading performance (#960) - (contributed by @menzels, @softins) - -- Github autobuild for Mac now uses Xcode 11.7 and SDK 10.15 for compatibility - with Qt5 (#1655). - (contributed by @softins) - -- GUI: Alignment of delay measurements display improved (#1606, #1617). - (contributed by @pljones) - - GUI: Corrected handling of custom directory server in the server, to prevent unintended registration with a directory server (#1624, #1627). (contributed by @softins) @@ -37,15 +55,6 @@ - GUI: Corrected alignment of Mute icon above fader (#811, #1312, #1640). (contributed by @vimpostor) -- The term "Central server" has been replaced with "Directory server" (#1407). - (contributed by @pljones) - -- GUI: Settings window has been reorganized into tabs (#1415, #1554, #1542): - * User Profile window has been integrated into the settings window. - * Input Pan has been moved to the newly created Advanced tab and removed from main window. - * Network and stats have been moved to the right in the Settings window. - (contributed by @dcorson-ticino-com, @pljones) - - GUI: Support for more than two mixer rows has been added (#1549, #1560). (contributed by @pljones) @@ -53,29 +62,30 @@ (contributed by @dcorson-ticino-com) - GUI: Translations have been updated - * Dutch, by @henkdegroot (#1562, #1623) - * French, by @jujudusud (#1648) - * German, by @rolamos (#1677) + * Dutch, by @henkdegroot (#1562, #1623, #1714, #1557) + * French, by @jujudusud (#1648, #1708) + * German, by @rolamos (#1677, #1810) * Italian, by @dzpex (#1620) * Polish, by @SeeLook (#1619) - * Portuguese Brazilian, by @melcon (#1671) + * Portuguese Brazilian, by @melcon (#1671, #1807) * Portuguese European, by @Snayler (#1689) * Slovak, by @jose1711 (#1647) - * Spanish, by @ignotus666 (#1621) + * Spanish, by @ignotus666 (#1621, #1730, #1808) * Swedish, by @genesisproject2020 (#1664, #1696) -- Client: Automatic channel fader adjustment simplifies mixer setup by using the channel level meters (#1071). - (contributed by @JohannesBrx) - -- Client: Basic audio feedback detection has been added (#1179). - (contributed by @JohannesBrx) - - Network: Support for DSCP Quality of Service flags has been added (#1310). This is supposed to lead to improved network performance. It is enabled by default. On Windows, this requires additional configuration in order to work. + Please see the Tips & Tricks page on the website for a setup guide for Windows. (contributed by @DavidSavinkoff) +- Client: Automatic channel fader adjustment simplifies mixer setup by using the channel level meters (#1071). + (contributed by @JohannesBrx) + +- Client: Basic audio feedback detection has been added (#1179). + (contributed by @JohannesBrx) + - Client: Support for input gain boost has been added (#1222, #1030) (contributed by @hoffie) @@ -85,19 +95,22 @@ - Client: A hint regarding non-default Jack support has been added (#1397, #1438). (contributed by @djfun) -- Server: Support for Delay Panning has been added (#332, #567, #1151, #1417): +- Server: Support for Delay Panning has been added (#332, #567, #1151, #1417, #1744): This feature can be enabled on servers using the new --delaypan option. Enabling this feature will slightly increase server CPU usage. It can create a much more realistic spatial sound impression for clients that are set to Stereo or Mono-in/Stereo-out mode. - (contributed by @DetlefHennings, @Hk1020, @softins) + (contributed by @DetlefHennings, @Hk1020, @softins, @henkdegroot) + +- Server: Multi-threading performance has been improved (#960). + (contributed by @menzels, @softins) - Server: Half-connected clients will no longer receive audio (#1243, #1589): Note: This breaks compatibility with client versions before 3.3.0 (Feb 2013). If you update your server, ensure that all clients use 3.3.0 or later as well. (contributed by @softins) -- Server: HTML status file is now emptied on exit (#1423, #1427) +- Server: HTML status file is now emptied on exit (#1423, #1427). (contributed by @hoffie, @drummer1154) - Server: An explicit bind address can now be specified (#141, #1561). @@ -108,7 +121,7 @@ Non-ASCII characters are now stripped out when creating filenames. (contributed by @softins, @gilgongo, @reinhardwh) -- Recorder: Failures to start recording no longer result in crashes (#1163, #1289, #1463) +- Recorder: Failures to start recording no longer result in crashes (#1163, #1289, #1463). (contributed by @hoffie, @softins, @pljones) - Recorder: Logging has been improved (#1284, #1463). @@ -132,24 +145,35 @@ - Bug fix: The Windows installer now correctly compiles in a path with spaces (#864, #1319). (contributed by @henkdegroot) -- Performance: Opus encoding/decoding now uses machine-specific optimizations again (#1105). +- Performance: Opus encoding/decoding now uses machine-specific optimizations (#1105). (contributed by @npostavs) -- Performance: Timer configuration for Windows has been improved (#1536). +- Performance: Timer configuration for Windows servers has been improved (#1536). (contributed by @npostavs) -- iOS support is being worked on (#1450) +- iOS support is being worked on (#1450). (contributed by @jeroenvv) +- Github autobuild for Mac now uses Xcode 11.7 and SDK 10.15 for compatibility with Qt5 (#1655). + (contributed by @softins) + - Build: Creation of debug builds has been simplified (#1516). (contributed by @hoffie) -- Internal constants for Jack usage have been renamed (#1429). +- Internal: Constants for JACK usage have been renamed (#1429). (contributed by @djfun) -- Internal legacy IP address variables have been cleaned up (#1400). +- Internal: Legacy IP address variables have been cleaned up (#1400). (contributed by @wferi) +- Internal: Added automatic code formatting with clang-format (#901, #1127, #1751). + (contributed by @passing) + +- Internal: New pull requests will now be checked for coding style automatically (#1735). + (contributed by @passing) + +- Internal: Windows deploy script has been aligned to autobuilds (#1720). + (contributed by @henkdegroot) ### 3.7.0 (2021-03-17) ### @@ -807,7 +831,7 @@ - removed unnecessary settings and LED indicators -- bug fix: the fader level could not be changed if the fader was on solo +- bug fix: the fader level could not be changed if the fader was on solo ### 3.3.3 (2013-12-30) ### @@ -842,7 +866,7 @@ - improved server performance under Linux - changed the network buffer for improved OPUS PLC performance - + - added protocol overhead for DSL line for upload rate calculation - fixed outstanding renaming from llcon to Jamulus diff --git a/Jamulus.pro b/Jamulus.pro index 6eef3615fe..b0ac5a3998 100644 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -1,4 +1,4 @@ -VERSION = 3.8.0rc1dev +VERSION = 3.8.0dev # use target name which does not use a captital letter at the beginning contains(CONFIG, "noupcasename") { @@ -93,10 +93,22 @@ win32 { # replace ASIO with jack if requested contains(CONFIG, "jackonwindows") { - message(Using Jack instead of ASIO.) - - !exists("C:/Program Files (x86)/Jack/includes/jack/jack.h") { - message(Warning: jack.h was not found at the usual place, maybe jack is not installed) + contains(QT_ARCH, "i386") { + exists("C:/Program Files (x86)") { + message("Cross compilation build") + programfilesdir = "C:/Program Files (x86)" + } else { + message("Native i386 build") + programfilesdir = "C:/Program Files" + } + libjackname = "libjack.lib" + } else { + message("Native x86_64 build") + programfilesdir = "C:/Program Files" + libjackname = "libjack64.lib" + } + !exists("$${programfilesdir}/JACK2/include/jack/jack.h") { + message("Warning: jack.h was not found in the expected location ($${programfilesdir}). Ensure that the right JACK2 variant is installed (32bit vs. 64bit).") } HEADERS -= windows/sound.h @@ -106,9 +118,10 @@ win32 { DEFINES += WITH_JACK DEFINES += JACK_REPLACES_ASIO DEFINES += _STDINT_H # supposed to solve compilation error in systemdeps.h - INCLUDEPATH += "C:/Program Files (x86)/Jack/includes" - LIBS += "C:/Program Files (x86)/Jack/lib/libjack64.lib" + INCLUDEPATH += "$${programfilesdir}/JACK2/include" + LIBS += "$${programfilesdir}/JACK2/lib/$${libjackname}" } + } else:macx { contains(CONFIG, "server_bundle") { message(The generated application bundle will run a server instance.) @@ -151,7 +164,7 @@ win32 { !exists(/usr/include/jack/jack.h) { !exists(/usr/local/include/jack/jack.h) { - message(Warning: jack.h was not found at the usual place, maybe jack is not installed) + message("Warning: jack.h was not found at the usual place, maybe jack is not installed") } } @@ -728,6 +741,8 @@ DISTFILES += ChangeLog \ src/res/IndicatorGreen.png \ src/res/IndicatorYellow.png \ src/res/IndicatorRed.png \ + src/res/IndicatorYellowFancy.png \ + src/res/IndicatorRedFancy.png \ src/res/faderbackground.png \ src/res/faderhandle.png \ src/res/faderhandlesmall.png \ @@ -1126,3 +1141,4 @@ contains(CONFIG, "disable_version_check") { } ANDROID_ABIS = armeabi-v7a arm64-v8a x86 x86_64 + diff --git a/README.md b/README.md index 9313e2cb6c..69851ec232 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Bugs and feature requests can be [reported here](https://github.com/jamulussoftw Compilation ----------- -[Please see these instructions](https://jamulus.io/wiki/Compiling) +[Please see these instructions](COMPILING.md) Contributing diff --git a/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh b/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh index 3f59b370a8..48642db6a1 100755 --- a/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh +++ b/autobuild/mac/artifacts/autobuild_mac_1_prepare.sh @@ -2,16 +2,23 @@ # autobuild_1_prepare: set up environment, install Qt & dependencies +if [ "$#" -ne "1" ]; then + echo "need to specify Qt version" + exit 1 +fi + +QT_VER=$1 + ################### ### PROCEDURE ### ################### echo "Install dependencies..." python3 -m pip install aqtinstall -python3 -m aqt install --outputdir /usr/local/opt/qt 5.12.10 mac desktop +python3 -m aqt install --outputdir /usr/local/opt/qt ${QT_VER} mac desktop # add the qt binaries to the path -export -p PATH=/usr/local/opt/qt/5.12.10/clang_64/bin:"${PATH}" +export -p PATH=/usr/local/opt/qt/${QT_VER}/clang_64/bin:"${PATH}" echo "::set-env name=PATH::${PATH}" echo "the path is ${PATH}" diff --git a/autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh b/autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh index 64dd55d690..32f4205e00 100755 --- a/autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh +++ b/autobuild/mac/artifacts/autobuild_mac_3_copy_files.sh @@ -2,6 +2,10 @@ # autobuild_3_copy_files: copy the built files to deploy folder +if [ "$#" -gt 1 ]; then + BUILD_SUFFIX=_$1 + shift +fi #################### ### PARAMETERS ### @@ -23,7 +27,7 @@ echo "" echo "" echo "" -artifact_deploy_filename=jamulus_${jamulus_buildversionstring}_mac.dmg +artifact_deploy_filename=jamulus_${jamulus_buildversionstring}_mac${BUILD_SUFFIX}.dmg echo "Move/Rename the built file to deploy/${artifact_deploy_filename}" mv "${THIS_JAMULUS_PROJECT_PATH}"/deploy/Jamulus-*installer-mac.dmg "${THIS_JAMULUS_PROJECT_PATH}"/deploy/"${artifact_deploy_filename}" diff --git a/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh b/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh index 1872decd24..a12262bb05 100755 --- a/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh +++ b/autobuild/mac/codeQL/autobuild_mac_1_prepare.sh @@ -2,16 +2,23 @@ # autobuild_1_prepare: set up environment, install Qt & dependencies +if [ "$#" -ne "1" ]; then + echo "need to specify Qt version" + exit 1 +fi + +QT_VER=$1 + ################### ### PROCEDURE ### ################### echo "Install dependencies..." python3 -m pip install aqtinstall -python3 -m aqt install --outputdir /usr/local/opt/qt 5.12.10 mac desktop +python3 -m aqt install --outputdir /usr/local/opt/qt ${QT_VER} mac desktop # add the qt binaries to the path -export -p PATH=/usr/local/opt/qt/5.12.10/clang_64/bin:"${PATH}" +export -p PATH=/usr/local/opt/qt/${QT_VER}/clang_64/bin:"${PATH}" echo "::set-env name=PATH::${PATH}" echo "the path is ${PATH}" diff --git a/mac/deploy_mac.sh b/mac/deploy_mac.sh index 80163d4dbf..19b1c307e3 100755 --- a/mac/deploy_mac.sh +++ b/mac/deploy_mac.sh @@ -44,7 +44,7 @@ build_installer_image() { # Install dmgbuild (for the current user), this is required to build the installer image python -m ensurepip --user --default-pip - python -m pip install --user dmgbuild + python -m pip install --user dmgbuild==1.4.2 local dmgbuild_bin="$(python -c 'import site; print(site.USER_BASE)')/bin/dmgbuild" # Get Jamulus version diff --git a/src/client.cpp b/src/client.cpp index 04a4313f86..6ce1e6b6ee 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -942,8 +942,6 @@ void CClient::Init() vecZeros.Init ( iStereoBlockSizeSam, 0 ); vecsStereoSndCrdMuteStream.Init ( iStereoBlockSizeSam ); - fMuteOutStreamGain = 1.0f; - opus_custom_encoder_ctl ( CurOpusEncoder, OPUS_SET_BITRATE ( CalcBitRateBitsPerSecFromCodedBytes ( iCeltNumCodedBytes, iOPUSFrameSizeSamples ) ) ); diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index e1aa463436..86b57fbba8 100644 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -181,6 +181,34 @@ CClientDlg::CClientDlg ( CClient* pNCliP, ledBuffers->setAccessibleName ( tr ( "Buffers status LED indicator" ) ); + // current connection status parameter + QString strConnStats = "" + + tr ( "Current Connection Status " + "Parameter" ) + + ": " + + tr ( "The Ping Time is the time required for the audio " + "stream to travel from the client to the server and back again. This " + "delay is introduced by the network and should be about " + "20-30 ms. If this delay is higher than about 50 ms, your distance to " + "the server is too large or your internet connection is not " + "sufficient." ) + + "
" + + tr ( "Overall Delay is calculated from the current Ping Time and the " + "delay introduced by the current buffer settings." ); + + lblPing->setWhatsThis ( strConnStats ); + lblPingVal->setWhatsThis ( strConnStats ); + lblDelay->setWhatsThis ( strConnStats ); + lblDelayVal->setWhatsThis ( strConnStats ); + ledDelay->setWhatsThis ( strConnStats ); + ledDelay->setToolTip ( tr ( "If this LED indicator turns red, " + "you will not have much fun using the " ) + + APP_NAME + tr ( " software." ) + TOOLTIP_COM_END_TEXT ); + lblPingVal->setText ( "---" ); + lblPingUnit->setText ( "" ); + lblDelayVal->setText ( "---" ); + lblDelayUnit->setText ( "" ); + // init GUI design SetGUIDesign ( pClient->GetGUIDesign() ); @@ -1048,7 +1076,6 @@ void CClientDlg::OnTimerBuffersLED() // update the buffer LED and the general settings dialog, too ledBuffers->SetLight ( eCurStatus ); - ClientSettingsDlg.SetStatus ( eCurStatus ); } void CClientDlg::OnTimerPing() @@ -1086,8 +1113,9 @@ void CClientDlg::OnPingTimeResult ( int iPingTime ) if ( ClientSettingsDlg.isVisible() ) { // set ping time result to general settings dialog - ClientSettingsDlg.SetPingTimeResult ( iPingTime, iOverallDelayMs, eOverallDelayLEDColor ); + ClientSettingsDlg.UpdateUploadRate(); } + SetPingTime ( iPingTime, iOverallDelayMs, eOverallDelayLEDColor ); // update delay LED on the main window ledDelay->SetLight ( eOverallDelayLEDColor ); @@ -1243,7 +1271,12 @@ OnTimerStatus(); // reset LEDs ledBuffers->Reset(); ledDelay->Reset(); - ClientSettingsDlg.ResetStatusAndPingLED(); + + // clear text labels with client parameters + lblPingVal->setText ( "---" ); + lblPingUnit->setText ( "" ); + lblDelayVal->setText ( "---" ); + lblDelayUnit->setText ( "" ); // clear mixer board (remove all faders) MainMixerBoard->HideAll(); @@ -1397,3 +1430,25 @@ void CClientDlg::SetMixerBoardDeco ( const ERecorderState newRecorderState, cons } } } + +void CClientDlg::SetPingTime ( const int iPingTime, const int iOverallDelayMs, const CMultiColorLED::ELightColor eOverallDelayLEDColor ) +{ + // apply values to GUI labels, take special care if ping time exceeds + // a certain value + if ( iPingTime > 500 ) + { + const QString sErrorText = ">500"; + lblPingVal->setText ( sErrorText ); + lblDelayVal->setText ( sErrorText ); + } + else + { + lblPingVal->setText ( QString().setNum ( iPingTime ) ); + lblDelayVal->setText ( QString().setNum ( iOverallDelayMs ) ); + } + lblPingUnit->setText ( "ms" ); + lblDelayUnit->setText ( "ms" ); + + // set current LED status + ledDelay->SetLight ( eOverallDelayLEDColor ); +} diff --git a/src/clientdlg.h b/src/clientdlg.h index 84a04851df..3736bc3e0f 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -95,6 +95,7 @@ class CClientDlg : public CBaseDlg, private Ui_CClientDlgBase void Connect ( const QString& strSelectedAddress, const QString& strMixerBoardLabel ); void Disconnect(); void ManageDragNDrop ( QDropEvent* Event, const bool bCheckAccept ); + void SetPingTime ( const int iPingTime, const int iOverallDelayMs, const CMultiColorLED::ELightColor eOverallDelayLEDColor ); CClient* pClient; CClientSettings* pSettings; diff --git a/src/clientdlgbase.ui b/src/clientdlgbase.ui index 63d7f7062b..0c652d7325 100644 --- a/src/clientdlgbase.ui +++ b/src/clientdlgbase.ui @@ -53,437 +53,502 @@ QFrame::Plain - + - + - + + + 6 + - + + + 3 + - - - 3 - - - - - Qt::Vertical - - - - 20 - 10 - - - - + - - - - 0 - 0 - - - - :/png/main/res/fronticon.png - - - Qt::AlignCenter - - - false - - - - - - - Qt::Vertical - - - - 10 - 10 - - - - - - + - - - 3 + + + + 0 + 0 + + + :/png/main/res/fronticon.png + + + Qt::AlignCenter + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 13 + 10 + + + + + + - - - Reverb + + + 3 - - Qt::AlignCenter - - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum + + + Reverb - - - 0 - 20 - + + Qt::AlignCenter - + - - - - 0 - 100 - - - - 1 - - - Qt::Vertical - - - QSlider::TicksBothSides + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 0 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 125 + + + + + 16777215 + 300 + + + + 1 + + + Qt::Vertical + + + QSlider::TicksBothSides + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 0 + 20 + + + + + + + + + + + + 3 + + + + + Left - - - Qt::Horizontal - - - QSizePolicy::Minimum + + + Right - - - 0 - 20 - - - + - - - 3 + + + Qt::Vertical - - - - Left - - - - - - - Right - - - - - - - - - - - Qt::Vertical - - - - 10 - 0 - - - - - - - - - - Delay - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - - - - - - 0 - 0 - - - - - 14 - 14 - + + QSizePolicy::Expanding - + - 14 - 14 + 13 + 10 - +
- + Qt::Vertical - - QSizePolicy::Fixed - - - - 10 - 5 - - - + - + - + - Buffers + Input - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false + Qt::AlignCenter - - - - 0 - 0 - - - - - 14 - 14 - - - - - 14 - 14 - - - + + + + + + 0 + 0 + + + + + 19 + 88 + + + + + + + + + 0 + 0 + + + + + 19 + 88 + + + + + + + + + + + + L + + + Qt::AlignCenter + + + + + + + R + + + Qt::AlignCenter + + + + - - - - Qt::Vertical - - - - 10 - 0 - - - - - + - Qt::Vertical + Qt::Horizontal - - - + + + - Input + Jitter - Qt::AlignCenter + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false - - - - - - - 0 - 0 - - - - - 19 - 88 - - - - - - - - - 0 - 0 - - - - - 19 - 88 - - - - - + + + + Delay + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + - - - - - - L - - - Qt::AlignCenter - - - - - - - R - - - Qt::AlignCenter - - - - + + + + Ping + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + 34 + 0 + + + + Qt::LeftToRight + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 22 + 0 + + + + + 22 + 16777215 + + + + ms + + + + + + + + 34 + 0 + + + + Qt::LeftToRight + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 22 + 0 + + + + + 22 + 16777215 + + + + ms + + + + + + + + 0 + 0 + + + + + 14 + 14 + + + + + 14 + 14 + + + + + + + + + 0 + 0 + + + + + 14 + 14 + + + + + 14 + 14 + + + - + Qt::Horizontal - - QSizePolicy::Minimum + + + + + + &Mute Myself + + + + + + + &Settings + + + + + + + &Chat - + + + + + + + 0 + 0 + + + - 0 - 20 + 120 + 45 - + + C&onnect + + + false + + + false + + - + - Qt::Horizontal - - - - - - - &Mute Myself - - - - - - - &Settings - - - - - - - &Chat - - - - - - - - 0 - 45 - - - - C&onnect - - - false - - - false + Qt::Vertical - - - - Qt::Vertical - - - diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 4e921925ba..f5b59017b2 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -114,8 +114,6 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet sldNetBufServer->setToolTip ( strJitterBufferSizeTT ); chbAutoJitBuf->setAccessibleName ( tr ( "Auto jitter buffer switch" ) ); chbAutoJitBuf->setToolTip ( strJitterBufferSizeTT ); - ledNetw->setAccessibleName ( tr ( "Jitter buffer status LED indicator" ) ); - ledNetw->setToolTip ( strJitterBufferSizeTT ); // sound card device lblSoundcardDevice->setWhatsThis ( "" + tr ( "Sound Card Device" ) + ": " + tr ( "The ASIO driver (sound card) can be selected using " ) + @@ -360,35 +358,13 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet cbxCentralServerAddress->setAccessibleName ( tr ( "Directory server address combo box" ) ); // current connection status parameter - QString strConnStats = "" + - tr ( "Current Connection Status " - "Parameter" ) + - ": " + - tr ( "The Ping Time is the time required for the audio " - "stream to travel from the client to the server and back again. This " - "delay is introduced by the network and should be about " - "20-30 ms. If this delay is higher than about 50 ms, your distance to " - "the server is too large or your internet connection is not " - "sufficient." ) + - "
" + - tr ( "Overall Delay is calculated from the current Ping Time and the " - "delay introduced by the current buffer settings." ) + - "
" + - tr ( "Audio Upstream Rate depends on the current audio packet size and " + QString strConnStats = tr ( "Audio Upstream Rate depends on the current audio packet size and " "compression setting. Make sure that the upstream rate is not " "higher than your available internet upload speed (check this with a " "service such as speedtest.net)." ); - lblPingTime->setWhatsThis ( strConnStats ); - lblPingTimeValue->setWhatsThis ( strConnStats ); - lblOverallDelay->setWhatsThis ( strConnStats ); - lblOverallDelayValue->setWhatsThis ( strConnStats ); - lblUpstream->setWhatsThis ( strConnStats ); lblUpstreamValue->setWhatsThis ( strConnStats ); - ledOverallDelay->setWhatsThis ( strConnStats ); - ledOverallDelay->setToolTip ( tr ( "If this LED indicator turns red, " - "you will not have much fun using the " ) + - APP_NAME + tr ( " software." ) + TOOLTIP_COM_END_TEXT ); + grbUpstreamValue->setWhatsThis ( strConnStats ); QString strNumMixerPanelRows = "" + tr ( "Number of Mixer Panel Rows" ) + ": " + tr ( "Adjust the number of rows used to arrange the mixer panel." ); @@ -417,16 +393,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet UpdateAudioFaderSlider(); // init delay and other information controls - ledNetw->Reset(); - ledOverallDelay->Reset(); - ledNetw->SetType ( CMultiColorLED::MT_INDICATOR ); - ledOverallDelay->SetType ( CMultiColorLED::MT_INDICATOR ); lblUpstreamValue->setText ( "---" ); lblUpstreamUnit->setText ( "" ); - lblPingTimeValue->setText ( "---" ); - lblPingTimeUnit->setText ( "" ); - lblOverallDelayValue->setText ( "---" ); - lblOverallDelayUnit->setText ( "" ); edtNewClientLevel->setValidator ( new QIntValidator ( 0, 100, this ) ); // % range from 0-100 edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); //input device - from 0 to 1000 @@ -1031,32 +999,11 @@ void CClientSettingsDlg::OnSndCrdBufferDelayButtonGroupClicked ( QAbstractButton UpdateDisplay(); } -void CClientSettingsDlg::SetPingTimeResult ( const int iPingTime, const int iOverallDelayMs, const CMultiColorLED::ELightColor eOverallDelayLEDColor ) +void CClientSettingsDlg::UpdateUploadRate() { - // apply values to GUI labels, take special care if ping time exceeds - // a certain value - if ( iPingTime > 500 ) - { - const QString sErrorText = ">500 ms"; - lblPingTimeValue->setText ( sErrorText ); - lblOverallDelayValue->setText ( sErrorText ); - } - else - { - lblPingTimeValue->setText ( QString().setNum ( iPingTime ) ); - lblPingTimeUnit->setText ( "ms" ); - lblOverallDelayValue->setText ( QString().setNum ( iOverallDelayMs ) ); - lblOverallDelayUnit->setText ( "ms" ); - } - - // update upstream rate information label (note that we update this together - // with the ping time since the network packet sequence number feature might - // be enabled at any time which has influence on the upstream rate) + // update upstream rate information label lblUpstreamValue->setText ( QString().setNum ( pClient->GetUploadRateKbps() ) ); lblUpstreamUnit->setText ( "kbps" ); - - // set current LED status - ledOverallDelay->SetLight ( eOverallDelayLEDColor ); } void CClientSettingsDlg::UpdateDisplay() @@ -1068,10 +1015,6 @@ void CClientSettingsDlg::UpdateDisplay() if ( !pClient->IsRunning() ) { // clear text labels with client parameters - lblPingTimeValue->setText ( "---" ); - lblPingTimeUnit->setText ( "" ); - lblOverallDelayValue->setText ( "---" ); - lblOverallDelayUnit->setText ( "" ); lblUpstreamValue->setText ( "---" ); lblUpstreamUnit->setText ( "" ); } diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index 900e3112fd..26c6ceac8f 100644 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -56,16 +56,7 @@ class CClientSettingsDlg : public CBaseDlg, private Ui_CClientSettingsDlgBase public: CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSetP, QWidget* parent = nullptr ); - void SetStatus ( const CMultiColorLED::ELightColor eStatus ) { ledNetw->SetLight ( eStatus ); } - - void ResetStatusAndPingLED() - { - ledNetw->Reset(); - ledOverallDelay->Reset(); - } - - void SetPingTimeResult ( const int iPingTime, const int iOverallDelayMs, const CMultiColorLED::ELightColor eOverallDelayLEDColor ); - + void UpdateUploadRate(); void UpdateDisplay(); void UpdateSoundDeviceChannelSelectionFrame(); diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index 6fae28021a..4e42dda285 100644 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -30,7 +30,7 @@ - 0 + 1 true @@ -640,22 +640,6 @@
- - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 17 - 10 - - - - @@ -846,9 +830,9 @@ - + - Measurements + Audio Stream Rate @@ -856,30 +840,20 @@ - - - - Audio Stream Rate - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - val - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + Qt::Horizontal - - 2 + + + 1 + 5 + - + - + kbps @@ -889,45 +863,8 @@ - - - - Ping Time - - - - - - - val - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 2 - - - - - - - ms - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Overall Delay - - - - - + + val @@ -939,66 +876,18 @@ - - - - ms - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 20 - 20 - - - - - 20 - 20 - - - - - - - - Local Jitter Buffer - - - - - - - - 0 - 0 - - - - - 20 - 20 - + + + + Qt::Horizontal - + - 20 - 20 + 1 + 5 - + @@ -1382,11 +1271,6 @@ - - CMultiColorLED - QWidget -
multicolorled.h
-
CLanguageComboBox QComboBox diff --git a/src/main.cpp b/src/main.cpp index 0ed7a74bbd..8c939fa859 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -732,19 +732,22 @@ int main ( int argc, char** argv ) \******************************************************************************/ QString UsageArguments ( char** argv ) { - return "Usage: " + QString ( argv[0] ) + - " [option] [optional argument]\n" - "\nGeneral options:\n" + // clang-format off + return "\n" + "Usage: " + QString ( argv[0] ) + " [option] [optional argument]\n" + "\n" + "General options:\n" " -h, -?, --help display this help text and exit\n" - " -i, --inifile initialization file name (not\n" - " supported for headless server mode)\n" + " -i, --inifile initialization file name\n" + " (not supported for headless server mode)\n" " -n, --nogui disable GUI\n" " -p, --port set the local port number\n" " -Q, --qos set the QoS value. Default is 128. Disable with 0\n" " (see the Jamulus website to enable QoS on Windows)\n" " -t, --notranslation disable translation (use English language)\n" " -v, --version output version information and exit\n" - "\nServer only:\n" + "\n" + "Server only:\n" " -d, --discononquit disconnect all clients on quit\n" " -e, --directoryserver address of the directory server with which to register\n" " (or 'localhost' to host a server list on this server)\n" @@ -769,15 +772,21 @@ QString UsageArguments ( char** argv ) " running a slave and your own directory server\n" " behind the same NAT\n" " --serverbindip specify the IP address the server will bind to\n" - "\nClient only:\n" + "\n" + "Client only:\n" " -M, --mutestream starts the application in muted state\n" " --mutemyown mute me in my personal mix (headless only)\n" " -c, --connect connect to given server address on startup\n" - " -j, --nojackconnect disable auto Jack connections\n" + " -j, --nojackconnect disable auto JACK connections\n" " --ctrlmidich MIDI controller channel to listen\n" - " --clientname client name (window title and jack client name)\n" - "\nExample: " + - QString ( argv[0] ) + " -s --inifile myinifile.ini\n"; + " --clientname client name (window title and JACK client name)\n" + "\n" + "Example: " + QString ( argv[0] ) + " -s --inifile myinifile.ini\n" + "\n" + "For more information and localized help see:\n" + "\n" + "https://jamulus.io/wiki/Command-Line-Options\n"; + // clang-format on } bool GetFlagArgument ( char** argv, int& i, QString strShortOpt, QString strLongOpt ) diff --git a/src/multicolorled.cpp b/src/multicolorled.cpp index 2d21fb0270..aad3c4b090 100644 --- a/src/multicolorled.cpp +++ b/src/multicolorled.cpp @@ -33,8 +33,8 @@ CMultiColorLED::CMultiColorLED ( QWidget* parent ) : BitmCubeDisabled ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDDisabledSmall.png" ) ), BitmCubeGrey ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreySmall.png" ) ), BitmCubeGreen ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreenSmall.png" ) ), - BitmCubeYellow ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDYellowSmall.png" ) ), - BitmCubeRed ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDRedSmall.png" ) ), + BitmCubeYellow ( QString::fromUtf8 ( ":/png/LEDs/res/IndicatorYellowFancy.png" ) ), + BitmCubeRed ( QString::fromUtf8 ( ":/png/LEDs/res/IndicatorRedFancy.png" ) ), BitmIndicatorGreen ( QString::fromUtf8 ( ":/png/LEDs/res/IndicatorGreen.png" ) ), BitmIndicatorYellow ( QString::fromUtf8 ( ":/png/LEDs/res/IndicatorYellow.png" ) ), BitmIndicatorRed ( QString::fromUtf8 ( ":/png/LEDs/res/IndicatorRed.png" ) ) diff --git a/src/recorder/jamrecorder.cpp b/src/recorder/jamrecorder.cpp index 9ae17a7d8b..373c596d30 100644 --- a/src/recorder/jamrecorder.cpp +++ b/src/recorder/jamrecorder.cpp @@ -399,9 +399,9 @@ void CJamRecorder::Start() QString error; - // needs to be after OnEnd() as that also locks - ChIdMutex.lock(); { + // needs to be after OnEnd() as that also locks + QMutexLocker mutexLocker ( &ChIdMutex ); try { currentSession = new CJamSession ( recordBaseDir ); @@ -413,7 +413,6 @@ void CJamRecorder::Start() error = err.GetErrorText(); } } - ChIdMutex.unlock(); if ( !currentSession ) { @@ -429,21 +428,18 @@ void CJamRecorder::Start() */ void CJamRecorder::OnEnd() { - ChIdMutex.lock(); // iChId used in currentSession->End() + QMutexLocker mutexLocker ( &ChIdMutex ); + if ( isRecording ) { - if ( isRecording ) - { - isRecording = false; - currentSession->End(); + isRecording = false; + currentSession->End(); - ReaperProjectFromCurrentSession(); - AudacityLofFromCurrentSession(); + ReaperProjectFromCurrentSession(); + AudacityLofFromCurrentSession(); - delete currentSession; - currentSession = nullptr; - } + delete currentSession; + currentSession = nullptr; } - ChIdMutex.unlock(); } /** @@ -571,21 +567,18 @@ void CJamRecorder::SessionDirToReaper ( QString& strSessionDirName, int serverFr */ void CJamRecorder::OnDisconnected ( int iChID ) { - ChIdMutex.lock(); + QMutexLocker mutexLocker ( &ChIdMutex ); + if ( !isRecording ) { - if ( !isRecording ) - { - qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but not recording"; - } - if ( currentSession == nullptr ) - { - qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but no currentSession"; - return; - } - - currentSession->DisconnectClient ( iChID ); + qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but not recording"; } - ChIdMutex.unlock(); + if ( currentSession == nullptr ) + { + qWarning() << "CJamRecorder::OnDisconnected: channel" << iChID << "disconnected but no currentSession"; + return; + } + + currentSession->DisconnectClient ( iChID ); } /** @@ -617,9 +610,8 @@ void CJamRecorder::OnFrame ( const int iChID, } // needs to be after Start() as that also locks - ChIdMutex.lock(); { + QMutexLocker mutexLocker ( &ChIdMutex ); currentSession->Frame ( iChID, name, address, numAudioChannels, data, iServerFrameSizeSamples ); } - ChIdMutex.unlock(); } diff --git a/src/recorder/jamrecorder.h b/src/recorder/jamrecorder.h index a4dedb783e..02ef534d5d 100644 --- a/src/recorder/jamrecorder.h +++ b/src/recorder/jamrecorder.h @@ -157,7 +157,8 @@ class CJamRecorder : public QObject CJamRecorder ( const QString strRecordingBaseDir, const int iServerFrameSizeSamples ) : recordBaseDir ( strRecordingBaseDir ), iServerFrameSizeSamples ( iServerFrameSizeSamples ), - isRecording ( false ) + isRecording ( false ), + currentSession ( nullptr ) {} /** diff --git a/src/res/IndicatorRedFancy.png b/src/res/IndicatorRedFancy.png new file mode 100644 index 0000000000000000000000000000000000000000..56154bc1f281564d53bb3b49c68ae31d363ff39c GIT binary patch literal 678 zcmV;X0$KfuP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vIQ7ytmK7y*8D$&CO20y{}WK~y+TRg%AN zQc)DgzmMO2FaXbI0yZxYho+$E=whl?+c04IVq6S$?b3z0CQkhWy6DigC0!cx2n-|| z2C0LEI;h136H2O2MFaypMIT(xebA~W`6lO{dp_sfA4kAHrfHhY7)z5>TE@mvR0ToM zNSmsvHYYKhfw^2RMZnf@I27CMHU@)%6?ePc2nK_&+wBIytI1?C!{ZiMC=@uf(`vOa zU9aO(C=9!m zp1TbFc?mCE4g>-L!)CKZY;=S)IihlKfN*>cn7#l+qQGI5^mgo1EHoR3Qm%mKT8z`_ zRC~Q1VwDQ;@G-Feik@W#Sh!AF0OI7A4uSPYn5~py7zQ|la=Fa1*{pRi=DW$5UuEpc zK3#cYdnLv^w;6NHTRHiBo^ghEgv;gPmj-&&wWkBaU*k15_8Txik*F&f&*cmUt3IC( z{p2#>@Bq8(z}*|bUSTZm?>?YC5&h*m;JKV}kZF=6#ZH!%Fq2xN#6<#%z`YHt1NER7 z6*Z^uv2$#F2|bV|)M_=EoO-w06_t0#@UwHkeR?EwIOZJm9ouX8ZvTdpSQK8b*P!o< zSOd^#G*UDbJN4BY4{7C@&m2wDw=LVri@)SAtvOmLd?-;fiakv3&no(wtg2P!c4HOl2a9{>OV M07*qoM6N<$f{P0#j{pDw literal 0 HcmV?d00001 diff --git a/src/res/IndicatorYellowFancy.png b/src/res/IndicatorYellowFancy.png new file mode 100644 index 0000000000000000000000000000000000000000..25d5fb6897e1608352d79574fe754c50601afcb4 GIT binary patch literal 631 zcmV--0*L*IP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vIQ7ytmK7y*8D$&CO20t`t+K~y+Tb&^47 zQgIx|zfXO-sT7)TB8luY*4AJ|(6Orr35n{mb=@tnYY=p(&b!2D*XAi2itpehqeBq7 z4vjJ#4wg{DL?nDZC#kRR@9(k|^o1|{-tYhY{NMlm-%rCC<#IX0ahwdD=Ht?&i>jt+ zIeIglPPa~bn1Y2uVU57{Xf*P7IvorK1J(EWd(AE)xyHUU9Ra8IHR99 zICz2m{c{L~Lbl80ns@OC85aI{yiDjeL;pe|oolxczgUK36{G8V+OjMxFYhtnr3Wz0 zT^L40*)(6V*QY(Wv{Z&|+YknoO2x_N^ZZ26FX?wqBy!$iQdw%pc}r(i#xzYw7S-dW-_WwgGchZSfYo3y2+O*`_DA|5wzgu3M7*@lI?CQ7`U{VF2a**= ztJP{x`0pNQ+G{K>-echZIy`)i;qba#&{M5muNy3my4|in8r?-S`izn3CrVza)w+-4 ztb+}wN2&Q=w0a?HZ Ri+2D3002ovPDHLkV1jf8Ezke} literal 0 HcmV?d00001 diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index e340e4d6a0..5b25187f3f 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -647,8 +647,9 @@ 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. + Software. Local Audio Input Fader @@ -671,8 +672,9 @@ 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 + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der @@ -811,38 +813,53 @@ LED Statuslampe für den Netzwerkpuffer - - + + 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 back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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. + + + + Overall Delay is calculated from the current Ping Time and the delay 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. + + + + C&onnect &Verbinden - + software upgrade available Softwareupdate verfügbar - + &File &Datei - + &View &Ansicht - + &Connection Setup... &Verbinden... - + My &Profile... Mein &Profil... - + C&hat... C&hat... @@ -851,7 +868,7 @@ &Einstellungen... - + &Analyzer Console... @@ -860,32 +877,32 @@ Benu&tze zwei Zeilen für das Mischpult - + Clear &All Stored Solo and Mute Settings &Lösche alle gespeicherten Solo- und Mute-Einstellungen - + Connect Verbinden - + Settings Einstellungen - + Chat Chat - + Enable feedback detection Aktiviere Feedback-Erkennung - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -894,22 +911,22 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten' aktiviert. Bitte behebe zunächst die Ursache des Feedback-Problems, bevor Du die Stummschaltung wieder rückgängig machst. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. - + Ok Ok - + E&xit &Beenden - + &Edit B&earbeiten @@ -994,47 +1011,47 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Die CPU des Computers ist voll ausgelastet. - + &Load Mixer Channels Setup... &Laden der Konfiguration der Mixerkanäle... - + &Save Mixer Channels Setup... &Speichern der Konfiguration der Mixerkanäle... - + Audio/Network &Settings... Audio/Netzwerk-&Einstellungen... - + A&dvanced Settings... E&rweiterte Einstellungen... - + N&o User Sorting Keine Kanals&ortierung - + Sort Users by &Name Sortiere die Kanäle nach dem &Namen - + Sort Users by &Instrument Sortiere die Kanäle nach dem &Instrument - + Sort Users by &Group Sortiere die Kanäle nach der &Gruppe - + Sort Users by &City Sortiere die Kanäle nach der &Stadt @@ -1043,33 +1060,33 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos &Lösche alle gespeicherten Solo-Einstellungen - + Set All Faders to New Client &Level Setze alle Lautstärken auf den &Pegel für neuen Teilnehmer - + Auto-Adjust all &Faders Automatisches Einpegeln (aller &Fader) - + Directory Server Verzeichnisserver - - + + Select Channel Setup File Auswählen der Datei für die Konfiguration der Mixerkanäle - + user Musiker - + users Musiker @@ -1078,7 +1095,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. - + D&isconnect &Trennen @@ -1086,47 +1103,62 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos CClientDlgBase - + Delay Verzögerung - Buffers - Puffer + Puffer - + Input Eingang - + L - + R - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself Stu&mmschalten - + &Settings Ein&stellungen - + &Chat &Chat - + C&onnect &Verbinden @@ -1135,32 +1167,32 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Mitte - + Reverb Halleffekt - + Left Links - + Right Rechts - + MUTED (Other people won't hear you) Stumm (Die anderen hören dich nicht) - + Set up your audio, connect to a server and start jamming! Richte deine Soundkarte ein, verbinde Dich mit einem Server und beginne zu jammen! - + Update check Update check @@ -1213,245 +1245,244 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Automatik für die Netzwerkpuffergröße aktivieren - Jitter buffer status LED indicator - Netzwerkpuffer Status LED + 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 - + If 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 - + If 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 lower 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 - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Einige Audiotreiber verhindern das Umstellen der Puffer-Verzögerung aus einer Anwendung heraus. In diesem Falle wird die Einstellung der Puffer-Verzögerung in Jamulus deaktiviert und sollte daher im Treiber des Audiointerfaces selbst geändert werden. Unter Windows kann man diese Einstellung über den Knopf "ASIO-Geräte-Einstellungen" erreichen. Unter Linux sollte man das Jack-Configuration-Tool verwenden, um die Puffergrösse zu ändern. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Wenn die Puffer-Verzögerungs-Einstellungen deaktiviert sind, verbietet der Audio-Treiber die entsprechenden Änderungen aus der Anwendung heraus. Um die Treiber-Einstellungen unter Windows zu öffnen, betätige den Button "ASIO-Geräte-Einstellungen". Um die Puffergröße unter Linux zu ändern, benutze das "Jack Configuration Tool". - + Sound card driver settings Soundkarten Einstellungen - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Öffnet die Treiber-Einstellungen der Soundkarte. Einige Treiber erlauben die Änderung der Puffer-Einstellungen, andere wie z.B. ASIO4ALL ermöglichen es Dir, die Audio Ein- und Ausgänge Deiner angeschlossenen Audiogeräte auszuwählen. Weitere Informationen hierzu findest Du auf jamulus.io. - + Opens the driver settings. Note: Öffnet die Treibereinstellungen. Beachte: - + currently only supports devices supporting a sample rate of unterstützt aktuell nur Geräte, die eine Sample Rate von - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz erlauben. Es ist ist nicht möglich, einen Treiber / ein Gerät auszuwählen, welches dies nicht unterstützt. Für weitere Hilfe siehe jamulus.io. - + ASIO Device Settings push button ASIO-Geräte-Einstellungs-Knopf - + Language Sprache - + Select the language to be used for the user interface. - + Wähle die Sprache für die Benutzeroberfläche aus. - + Language combo box - + Sprache Combo-Box - + Input Boost Eingangs-Verstärkung - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Diese Einstellung erlaubt es Dir, Dein Eingangs-Signal um bis zu Faktor 10 (+20dB) zu verstärken.Wenn Dein Sound zu leise ist, versuche zunächst das Signal zu verbessern, indem Du entweder näher an das Mikrofon gehst, Dein Audioequipment lauter stellst oder die Pegel in den Eingangs-Einstellungen Deines Betriebssystems erhöhst. Nur wenn dies nicht gelingt, setze hier einen Verstärkungsfaktor. Falls der Sound zu laut ist und verzerrt oder übersteuert, wird diese Option nicht helfen. Bitte in diesem Falle nicht verwenden. Verringere stattdessen Deinen Eingnagspegel, indem Du entweder weiter weg vom Mikrofon gehst, Dein Audioequipment leiser stellst oder die Pegel in den Eingangs-Einstellungen Deines Betriebssystems verringerst. - + Input Boost combo box Eingangs-Verstärkungs Combo box - + Directory server address combo box Verzeichnisserveradresse Combo-Box - + Number of Mixer Panel Rows Anzahl der Mischpult-Reihen - + Adjust the number of rows used to arrange the mixer panel. Anzahl der Reihen des Mischpults einstellen. - + Number of Mixer Panel Rows spin box Anzahl Mischpult Reihen spin box - + Feedback Protection Feedback-Schutz - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Aktiviere den Feedback-Schutz, um ein akustisches Feedback zwischen Mikrofon und Lautsprechern zu erkennen. - + Feedback Protection check box Feedback-Erkennungs check box - + ASIO Device Settings ASIO-Geräte-Einstellungen - + Fancy Schick - + Compact Kompakt - - - + + + None Nichts - + Center Mitte - + R R @@ -1464,7 +1495,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Software. Diese Einstellung hat Einfluss auf viele andere Verbindungseigenschaften. - + Three buffer sizes are supported Drei Puffergrößen werden unterstützt @@ -1497,12 +1528,12 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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 a 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. @@ -1515,17 +1546,17 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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. - + 64 samples setting radio button 64 Samples Einstellknopf - + 128 samples setting radio button 128 Samples Einstellknopf - + 256 samples setting radio button 256 Samples Einstellknopf @@ -1558,7 +1589,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Zeige Kanalpegel Schalter - + Audio Channels Audiokanäle @@ -1575,12 +1606,12 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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 @@ -1589,12 +1620,12 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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 @@ -1603,12 +1634,12 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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 - + Custom Directory Server Address Benutzerdefinierte Verzeichnisserveradresse @@ -1633,9 +1664,8 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Verzeichnisserveradresse Eingabefeld - Current Connection Status Parameter - Verbindungsstatus Parameter + Verbindungsstatus Parameter The ping time is the time required for the audio stream to travel from the client to the server and back again. 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. @@ -1650,39 +1680,37 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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 + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der - software. - Software. + Software. ASIO Setup ASIO-Einstellung - - + + Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. Modus ist die Übertragungsrate etwas höher. Man muss sicher stellen, dass die Internetverbindung die höhere Rate übertragen kann. - + Mono-in/Stereo-out Mono-In/Stereo-Out - - - + + + Stereo @@ -1703,7 +1731,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos - + L L @@ -1743,22 +1771,22 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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). - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Die Soundkartenpuffergröße ist eine fundamentale Einstellung der Software. Diese Einstellung hat Einfluss auf viele andere Verbindungseigenschaften. - + 64 samples: The preferred setting. Provides the 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: Should work for most available sound cards. 128 Samples: Diese Puffergröße sollte mit den meisten Soundkarten funktionieren. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 Samples: Diese Einstellung sollte nur dann verwendet werden, wenn man einen langsamen Computer oder eine langsame Internetverbindung hat. @@ -1767,7 +1795,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Manche Soundkartentreiber unterstützen nicht das Verändern der Puffergröße innerhalb der 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 application will still work with this setting but with restricted performance. 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 funktioniert trotzdem aber es könnte eine größere Verzögerung resultieren. @@ -1776,47 +1804,47 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos 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. 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. - + Skin Oberfläche - + Select the skin to be used for the main window. Wählt die Oberfläche aus, die für das Hauptfenster verwendet werden soll. - + Skin combo box Oberfläche Combo-Box - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Hiermit kann man die Anzahl an Audiokanälen auswählen. Es gibt drei Modi: - + and und - + These modes use one and two audio channels respectively. Diese Modi verwenden jeweils einen oder zwei Audiokanäle. - + Mono in/Stereo-out - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Ein Monosignal wird 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 Im @@ -1825,53 +1853,51 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Modus ist die Übertragungsrate etwas höher. Man muss sicher stellen, dass die Internetverbindung die höhere Rate übertragen kann. - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to 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. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. 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. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from 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. - + Leave this blank unless you need to enter the address of a directory server other than the default. Die Verzeichnisserveradresse ist die IP-Adresse oder URL des Verzeichnisservers, der die Serverliste organisiert und bereitstellt. Diese Adresse wird nur benutzt, wenn die benutzerdefinierte Serverliste im Verbindungsdialog ausgewählt wird. - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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. + 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. - Overall Delay is calculated from the current Ping Time and the delay 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. + Die Gesamtverzögerung setzt sich zusammen aus der Ping-Zeit und die Verzögerung, die durch die Puffergrößen verursacht wird. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as 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). - + Low Niedrig - - + + Normal Normal - + High Hoch @@ -1940,78 +1966,78 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Standard (Nordamerika) - + preferred bevorzugt - + Musician Profile Musiker-Profil - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level 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 Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Was man hier sieht wird auch am Fader im Mixer angezeigt, wenn du mit einem Server verbunden bist. Dieses Schild wird auch bei allen anderen Musikern, die mit dem gleichen Server verbunden sind, 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 - + Beginner Anfänger - + Intermediate Mittlere Spielstärke - + Expert Experte - - + + Size: Größe: - + Buffer Delay Puffergröße - + Buffer Delay: Puffergröße: @@ -2302,7 +2328,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Ausgangskanalauswahl - + Enable Small Network Buffers Aktiviere kleine Netzwerkpuffer @@ -2382,69 +2408,63 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Audio-/Netzwerk-Einstellungen - + Jitter Buffer Netzwerkpuffer - + Auto - + Local Lokal - + Server Server - - + + Size Größe - + kbps - - - ms - - - - + Input Boost Eingangsverstärkung - + Feedback Protection Feedback-Schutz - + Enable Aktivieren - + Input Balance Eingangs-Balance - + Pan Pan - + Center Mitte @@ -2463,12 +2483,11 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Audioqualität - Measurements - Messungen + Messungen - + Advanced Setup Erweiterte Einstellungen @@ -2477,7 +2496,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Benutzerdefinierte Verzeichnisserver-Adresse - + New Client Level Pegel für neuen Teilnehmer @@ -2492,14 +2511,13 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Sprache - + % - Local Jitter Buffer - Lokaler Jitterbuffer + Lokaler Jitterbuffer Fancy Skin @@ -2510,7 +2528,7 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Zeige Signalpegel - + Custom Directory Server Address: Benutzerdefinierte Verzeichnisserveradresse: @@ -2519,26 +2537,22 @@ Wir haben Deinen Kanal stummgeschaltet und die Funktion 'Stummschalten&apos Verzeichnisserveradresse: - + Audio Stream Rate Netzwerkrate - - - + val Wert - Ping Time - Ping-Zeit + Ping-Zeit - Overall Delay - Gesamtverzögerung + Gesamtverzögerung diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index e37873a922..3520c5b5a9 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -659,8 +659,9 @@ 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 @@ -683,8 +684,9 @@ 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 + Si este indicador LED se vuelve rojo, no te divertirás demasiado utilizando el @@ -831,38 +833,53 @@ Indicador LED estado buffers - - + + 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 back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + El Tiempo 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 y debería ser de unos 20-30 ms. Si este retardo es de unos 50 ms, la distancia al servidor es demasiado grande o tu conexión a internet no es óptima. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + El Retardo Total se calcula con el Tiempo Ping actual y el retardo ocasionado por la configuración de buffers. + + + + C&onnect C&onectar - + software upgrade available Actualización de software disponible - + &File &Archivo - + &View &Ver - + &Connection Setup... &Configuración de Conexión... - + My &Profile... Mi &Perfil... - + C&hat... C&hat... @@ -871,7 +888,7 @@ C&onfiguración... - + &Analyzer Console... &Analyzer Console... @@ -880,27 +897,27 @@ Usar Dos Filas Para Ven&tana Mezclador - + Clear &All Stored Solo and Mute Settings &Eliminar Todas las Configuraciones de Solo y Mute - + Ok Ok - + E&xit &Salir - + &Edit &Editar - + Sort Users by &Group Ordenar Usuarios de Canal por &Grupo @@ -989,42 +1006,42 @@ El procesador del cliente o del servidor está al 100%. - + &Load Mixer Channels Setup... &Cargar Configuración Canales Mezclador... - + &Save Mixer Channels Setup... &Guardar Configuración Canales Mezclador... - + Audio/Network &Settings... Configuración de Audio/&Red... - + A&dvanced Settings... Configuración Avanza&da... - + N&o User Sorting N&o Ordenar Usuarios - + Sort Users by &Name Ordenar Usuarios por &Nombre - + Sort Users by &Instrument Ordenar Usuarios por &Instrumento - + Sort Users by &City Ordenar Usuarios por &Ciudad @@ -1033,58 +1050,58 @@ &Eliminar Configuraciones Guardadas de Solo - + Set All Faders to New Client &Level Todos los Faders al Nivel C&liente Nuevo - + Auto-Adjust all &Faders Auto-Ajustar todos los &Faders - + Directory Server - Servidor de Directorio + Servidor de Directorio - - + + Select Channel Setup File Seleccionar Archivo Configuración Canales - + user usuario - + users usuarios - + Connect Conectar - + Settings Configuración - + Chat Chat - + Enable feedback detection Activar detección de retroalimentación - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -1093,12 +1110,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resuelve el problema de retroalimentación primero y después desactiva 'Silenciarme Yo'. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Tu tarjeta de sonido no está funcionando correctamente. Por favor abre la ventana de configuración y comprueba la selección de dispositivo y la configuración del driver. - + D&isconnect &Desconectar @@ -1106,47 +1123,62 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue CClientDlgBase - + Delay Retardo - Buffers - Buffers + Buffers - + Input Entrada - + L L - + R R - + + Jitter + Jitter + + + + Ping + Ping + + + + + ms + ms + + + &Mute Myself Silenciar&me Yo - + &Settings Co&nfiguración - + &Chat &Chat - + C&onnect C&onectar @@ -1159,32 +1191,32 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Centro - + Reverb Reverb - + Left Izq - + Right Dcho - + MUTED (Other people won't hear you) SILENCIADO (Otras personas no te escucharán) - + Set up your audio, connect to a server and start jamming! Configura tu audio, conéctate a un servidor y ¡empieza a tocar! - + Update check Comprobación de actualización @@ -1237,246 +1269,245 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Interruptor auto jitter buffer - Jitter buffer status LED indicator - Indicador LED estado jitter buffer + 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 - + If 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 - + If 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 lower 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 - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Algunos drivers de tarjeta de sonido no permiten cambiar el retardo de buffer desde la aplicación. En este caso se deshabilita la configuración del retardo de buffer y se debe cambiar utilizando el driver de la tarjeta de sonido. En Windows, haz clic en el botón de Configuración del Dispositivo ASIO para abrir el panel de configuración. En Linux, utiliza la herramienta de configuración de JACK para cambiar el tamaño del buffer. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Si la configuración del retardo de buffer está deshabilitada, el driver de audio no permite cambiar este ajuste desde la aplicación. En Windows, haz clic en el botón de Configuración del Dispositivo ASIO para abrir el panel de configuración. En Linux, utiliza la herramienta de configuración de JACK para cambiar el tamaño del buffer. - + Sound card driver settings Configuración de la tarjeta de sonido - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Esto abre la configuración del driver de tu tarjeta de sonido. Algunos drivers te permiten cambiar la configuración del buffer; otros como ASIO4ALL te permiten escoger las entradas o salidas de tu(s) dispositivo(s). Se puede encontrar más información en jamulus.io. - + Opens the driver settings. Note: Abre la configuración del driver. Nota: - + currently only supports devices supporting a sample rate of actualmente solo soporta dispositivos con una tasa de muestreo de - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. No podrás seleccionar un driver/dispositivo que no lo haga. Para más ayuda, ver jamulus.io. - + ASIO Device Settings push button Botón de Configuración Dispositivo ASIO - + Language - Idioma + Idioma - + Select the language to be used for the user interface. - + Selecciona el idioma a utilizar para el interfaz de usuario. - + Language combo box - + Campo Idioma - + Input Boost Aumento de Entrada - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Este ajuste te permite aumentar tu señal de entrada en unfactor de hasta 10 (+20dB). Si tu audio es muy bajo, primero intenta aumentar el nivel acercándote al micrófono, ajustando tu equipo de sonido o aumentando la configuración de entrada de audio de tu sistema operativo. Solamente si lo anterior falla, establece un factor aquí. Si tu sonido es muy alto, suena distorsionado y clipea, esta opción no ayudará. No la utilices. La distorsión seguirá ahí. En su lugar, reduce tu nivel de entrada alejándote de tu micrófono, ajusta tu equipo de audio o reduce la configuración de entrada de audio de tu sistema operativo. - + Input Boost combo box Desplegable de Aumento de Entrada - + Directory server address combo box - Campo para dirección servidor de directorio + Campo para dirección servidor de directorio - + Number of Mixer Panel Rows Número de Filas Panel del Mezclador - + Adjust the number of rows used to arrange the mixer panel. Ajusta el número de filas utilizado para organizar el panel del mezclador. - + Number of Mixer Panel Rows spin box Casilla para Número de Filas Panel del Mezclador - + Feedback Protection Protección contra Retroalimentación - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Activa la protección contra retroalimentación para detectar retroalimentación entre el micrófono y los altavoces. - + Feedback Protection check box Casilla para Protección contra Retroalimentación - + ASIO Device Settings Configuración Dispositivo ASIO - + Fancy Oscuro - + Compact Compacto - - - + + + None Ninguno - + Center Centro - + R R @@ -1489,7 +1520,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue . 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 @@ -1522,12 +1553,12 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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 a 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. @@ -1540,17 +1571,17 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue . 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. - + 64 samples setting radio button Configuración 64 muestras - + 128 samples setting radio button Configuración 128 muestras - + 256 samples setting radio button Configuración 256 muestras @@ -1583,7 +1614,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Mostrar niveles canales - + Audio Channels Canales Audio @@ -1600,12 +1631,12 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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 @@ -1614,12 +1645,12 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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 @@ -1628,14 +1659,14 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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 - + Custom Directory Server Address - Dirección Personalizada Servidor de Directorio + Dirección Personalizada Servidor de Directorio The custom directory server address is the IP address or URL of the directory server at which the server list of the connection dialog is managed. This address is only used if the custom server list is selected in the connection dialog. @@ -1658,9 +1689,8 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Dirección servidor central - Current Connection Status Parameter - Parámetro Estado Conexión Actual + 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 back again. 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. @@ -1675,39 +1705,37 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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 + Si este indicador LED se vuelve rojo, no te divertirás demasiado utilizando el - software. - software. + software. ASIO Setup Configuración ASIO - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. aumentará la tasa de datos. Asegúrate de que tu tasa de subida no excede el valor de subida disponible con tu ancho de banda de Internet. - + Mono-in/Stereo-out Entrada mono/Salida estéreo - - - + + + Stereo Estéreo @@ -1728,7 +1756,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue - + L L @@ -1768,22 +1796,22 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue En caso de activar Auto, 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 Auto 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. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. El retardo de buffer es un parámetro fundamental de este software. Este parámetro tiene un impacto sobre muchas propiedades de la conexión. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 muestras: La configuración aconsejada. Ofrece la latencia más baja, aunque no funciona con todas las tarjetas de audio. - + 128 samples: Should work for most available sound cards. 128 muestras: Debería de funcionar con la mayoría de tarjetas de audio. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 muestras: Esta configuración solo debería usarse con un ordenador muy lento o con una conexión a internet muy lenta. @@ -1792,7 +1820,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Algunos drivers de tarjetas de audio no permiten cambiar el retardo de buffer desde dentro de la aplicación. En este caso la configuración del retardo de buffer se deshabilita y debe modificarse utilizando 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 application will still work with this setting but with restricted performance. 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. La aplicación arrancará pero con rendimiento limitado. @@ -1801,47 +1829,47 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue 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. 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. - + Skin Skin - + Select the skin to be used for the main window. Elige el skin a utilizar para la ventana principal. - + Skin combo box Campo skin - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Selecciona el número de canales de audio a utilizar para la comunicación entre cliente y servidor. Hay tres modos disponibles: - + and y - + These modes use one and two audio channels respectively. Estos modos utilizan uno y dos canales de audio respectivamente. - + Mono in/Stereo-out Entrada Mono/Salida Estéreo - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. La señal de audio enviada al servidor es mono pero la señal de vuelta es estéreo. Esto es útil si la tarjeta de audio tiene el instrumento en una entrada y el micrófono en la otra. En este caso se pueden mezclar las dos señales de entrada a un canal mono pero la mezcla del servidor se escucha en estéreo. - + Enabling Habilitar el modo @@ -1850,53 +1878,51 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue aumentará la tasa de datos. Asegúrate de que tu tasa de subida no excede el valor de subida disponible con tu ancho de banda de Internet. - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. En modo estéreo, no habrá ninguna selección de canal para el efecto de reverb en la ventana principal porque el efecto se aplica a ambos canales en este caso. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Cuanto mayor la calidad del audio, mayor la tasa de subida del audio. Asegúrate de que tu tasa de subida no excede el ancho de banda de tu conexión a Internet. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Este ajuste define el nivel del fader de una nueva conexión de cliente, en porcentaje. Si se conecta un nuevo cliente al servidor actual, el nivel inicial de su fader tomará este valor si no se ha especificado anteriormente un valor para ese cliente de una conexión anterior. - + Leave this blank unless you need to enter the address of a directory server other than the default. - Deja esto en blanco a menos que necesites escribir la dirección de un servidor distinto a los que hay por defecto. + Deja esto en blanco a menos que necesites escribir la dirección de un servidor de directorio distinto a los que hay por defecto. - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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 y debería ser de unos 20-30 ms. Si este retardo es de unos 50 ms, la distancia al servidor es demasiado grande o tu conexión a internet no es óptima. + 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 y debería ser de unos 20-30 ms. Si este retardo es de unos 50 ms, la distancia al servidor es demasiado grande o tu conexión a internet no es óptima. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - El Retardo Total se calcula con el Ping actual y el retardo ocasionado por la configuración de buffers. + El Retardo Total se calcula con el Ping actual y el retardo ocasionado por la configuración de buffers. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). La Tasa de Subida de Audio 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 velocidad de subida disponible (comprueba la tasa de subida de tu conexión a internet, por ej. con speedtest.net). - + Low Baja - - + + Normal Normal - + High Alta @@ -1965,78 +1991,78 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Por defecto (Norteamérica) - + preferred aconsejado - + Musician Profile Perfil Músico - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Escribe tu nombre o alias aquí para que otros 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 te ubicas. Tu ciudad 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 Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Lo que introduzcas aquí aparecerá en tu fader del mezclador cuando te conectes a un servidor Jamulus. Esta etiqueta también se mostrará en cada cliente conectado al mismo servidor que tú. - + 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 Casilla para editar ciudad - + Skill level combo box Casilla para nivel de habilidad - + Beginner Principiante - + Intermediate Intermedio - + Expert Experto - - + + Size: Tamaño: - + Buffer Delay Retardo Buffer - + Buffer Delay: Retardo Buffer: @@ -2331,7 +2357,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Mapeo Canales Salida - + Enable Small Network Buffers Activar Buffers Pequeños @@ -2411,69 +2437,67 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Configuración Audio/Red - + Jitter Buffer Jitter Buffer - + Auto Auto - + Local Local - + Server Servidor - - + + Size Valor - + kbps - + kbps - - ms - + ms - + Input Boost Aumento de Entrada - + Feedback Protection Protección contra Retroalimentación - + Enable Activar - + Input Balance Balance Entrada - + Pan Paneo - + Center Centro @@ -2492,12 +2516,11 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Calidad Audio - Measurements - Mediciones + Mediciones - + Advanced Setup Configuración Avanzada @@ -2506,7 +2529,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Dirección Personalizada Servidor Central: - + New Client Level Nivel Cliente Nuevo @@ -2521,14 +2544,13 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Idioma - + % % - Local Jitter Buffer - Jitter Buffer Local + Jitter Buffer Local Fancy Skin @@ -2539,35 +2561,31 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Mostrar Nivel Canales - + Custom Directory Server Address: - Dirección Personalizada Servidor de Directorio: + Dirección Personalizada Servidor de Directorio: Directory Server Address: Dirección Servidor Central: - + Audio Stream Rate Tasa Muestreo Audio - - - + val val - Ping Time - Tiempo Ping + Tiempo Ping - Overall Delay - Retardo Total + Retardo Total @@ -2779,12 +2797,12 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue &About Jamulus... - &Acerca de Jamulus... + &Acerca de Jamulus... About &Qt... - Acerca de &Qt... + Acerca de &Qt... &About... @@ -2793,7 +2811,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue About Qt - Acerca de Qt + Acerca de Qt @@ -3277,7 +3295,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue If the Make My Server Public check box is checked, this will show whether registration with the directory server is successful. If the registration failed, please choose another server list. - Si se activa Mi Servidor es Público, se mostrará si el registro con el servidor de directorio ha tenido éxito. Si el registro falla, por favor escoge otra lista de servidores. + Si se activa Mi Servidor es Público, se mostrará si el registro con el servidor de directorio ha tenido éxito. Si el registro falla, por favor escoge otra lista de servidores. Default directory server type combo box @@ -3291,22 +3309,22 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue If the Make My Server Public check box is checked, this server registers itself at the directory server so that all users of the application can see the server in the connect dialog server list and connect to it. The registration of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - Si se activa Mi Servidor es Público, este servidor se registra en el servidor de directorio para que todos los usuarios de la aplicación puedan ver el servidor en la lista de servidores de la ventana de conexión y 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. + Si se activa Mi Servidor es Público, este servidor se registra en el servidor de directorio para que todos los usuarios de la aplicación puedan ver el servidor en la lista de servidores de la ventana de conexión y 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. Custom Directory Server Address - Dirección Personalizada Servidor de Directorio + Dirección Personalizada Servidor de Directorio The custom directory server address is the IP address or URL of the directory server at which the server list of the connection dialog is managed. - La dirección personalizada del servidor de directorio es la dirección IP o URL del servidor de directorio en el cual se gestiona la lista de servidores de la ventana de conexión. + La dirección personalizada del servidor de directorio es la dirección IP o URL del servidor de directorio en el cual se gestiona la lista de servidores de la ventana de conexión. Directory server address line edit - Dirección servidor de directorio + Edición dirección servidor de directorio @@ -3316,7 +3334,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Selects the server list (i.e. directory server address) in which your server will be added. - Selecciona la lista de servidores (por ej. dirección servidor de directorio) al que se añadirá tu servidor. + Selecciona la lista de servidores (por ej. dirección servidor de directorio) al que se añadirá tu servidor. @@ -3663,7 +3681,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Directory Server full - Servidor de Directorio lleno + Servidor de Directorio lleno @@ -3712,7 +3730,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue List - Lista + Lista @@ -3761,7 +3779,7 @@ Hemos silenciado tu canal y activado 'Silenciarme Yo'. Por favor resue Custom Directory Server Address: - Dirección Personalizada Servidor de Directorio: + Dirección Personalizada Servidor de Directorio: diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 142cab7022..cada4cc3c2 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -679,38 +679,38 @@ Indicateur LED d'état de tampon - - + + C&onnect Se c&onnecter - + software upgrade available mise à jour du logiciel disponible - + &File &Fichier - + &View &Vue - + &Connection Setup... Paramètres de &connexion... - + My &Profile... Mon &profil... - + C&hat... Tc&hate... @@ -719,7 +719,7 @@ Paramètre&s... - + &Analyzer Console... Console d'a&nalyse... @@ -728,22 +728,22 @@ U&tiliser un panneau de mixage à deux rangées - + Clear &All Stored Solo and Mute Settings &Effacer tous les paramètres Solo et Muet enregistrés - + Ok Ok - + E&xit &Quitter - + &Edit &Editer @@ -788,103 +788,128 @@ Le processeur du client ou du serveur est à 100%. - + + 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 back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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 au flux audio pour aller du client au serveur et revenir. Ce délai est introduit par le réseau et doit être d'environ 20 à 30 ms. Si ce délai est supérieur à environ 50 ms, la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + Le délai global est calculé à partir du temps de ping actuel et du délai introduit par les paramètres actuels de la mémoire tampon. + + + + 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 + + + + software. + logiciel. + + + &Load Mixer Channels Setup... &Charger la configuration des canaux du mixeur... - + &Save Mixer Channels Setup... &Sauvegarder la configuration des canaux du mixeur... - + Audio/Network &Settings... Audio/Réseau Paramètre&s... - + A&dvanced Settings... Paramètres &avancés... - + N&o User Sorting Pas de &tri des canaux - + Sort Users by &Name Trier les utilisateurs par &nom - + Sort Users by &Instrument Trier les utilisateurs par &instrument - + Sort Users by &Group Trier les utilisateurs par &groupe - + Sort Users by &City Trier les utilisateurs par &ville - + Set All Faders to New Client &Level Régler tous &les chariots sur le niveau d'un nouveau client - + Auto-Adjust all &Faders Auto-ajuster tous les &chariots - + Directory Server Serveur annuaire - - + + Select Channel Setup File Sélectionnez le fichier de configuration des canaux - + user utilisateur - + users utilisateurs - + Connect Se connecter - + Settings Paramètres - + Chat Tchate - + Enable feedback detection Activer la détection de larsen - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -893,12 +918,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Nous avons coupé votre canal et activé "Me silencer". Veuillez d'abord résoudre le problème de larsen et rétablir le son après. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Votre carte son ne fonctionne pas correctement. Veuillez ouvrir la fenêtre paramètres et vérifier la sélection du périphérique et les paramètres du pilote. - + D&isconnect Dé&connecter @@ -906,47 +931,62 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo CClientDlgBase - + Delay Délai - Buffers - Tampons + Tampons - + Input Entrée - + L G - + R D - + + Jitter + Gigue + + + + Ping + Ping + + + + + ms + ms + + + &Mute Myself &Me silencer - + &Settings Paramètre&s - + &Chat T&chate - + C&onnect Se c&onnecter @@ -959,32 +999,32 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Centre - + Reverb Réverb - + Left Gauche - + Right Droite - + MUTED (Other people won't hear you) SILENCÉ (les autres personnes ne vous entendent pas) - + Set up your audio, connect to a server and start jamming! Configurez votre audio, connectez-vous à un serveur et commencez à bœuffer ! - + Update check Vérification de mise à jour @@ -1017,177 +1057,176 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Commutateur de tampon de gigue automatique - Jitter buffer status LED indicator - Indicateur LED de l'état du tampon de gigue + Indicateur LED de l'état du tampon de gigue - + 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. - + Sound card device selector combo box Choix déroulant de sélecteur de périphérique d'interface audio - + If 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. Si le pilote ASIO4ALL est utilisé, veuillez noter que ce pilote introduit généralement environ 10 à 30 ms de latence audio supplémentaire. Il est donc recommandé d'utiliser une carte son avec un pilote ASIO natif. - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Si vous utilisez le pilote ASIO kX, assurez-vous de connecter les entrées ASIO dans le panneau de configuration DSP kX. - + Sound Card Channel Mapping Cartographie des canaux de la carte son - + If 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 la carte son sélectionnée offre plus d'un canal d'entrée ou de sortie, les paramètres de mappage des canaux d'entrée et de sortie sont visibles. - + For each Pour chaque - + Left input channel selection combo box Choix déroulant de sélection de canal d'entrée gauche - + Right input channel selection combo box Choix déroulant de sélection de canal d'entrée droite - + Left output channel selection combo box Choix déroulant de sélection de canal de sortie gauche - + Right output channel selection combo box Choix déroulant de sélection de canal de sortie droite - + 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 lower 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. - + Enable small network buffers check box Case-à-cocher pour activer les petits tampons de réseau - + Sound Card Buffer Delay Délai de temporisation de l'interface audio - + Three buffer sizes are supported Trois tailles de tampon sont prises en charge - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Certains pilotes de carte son ne permettent pas de modifier le délai de la mémoire tampon depuis l'application. Dans ce cas, le réglage de délai de tampon est désactivé et doit être modifié à l'aide du pilote de la carte son. Sous windows, appuyez sur le bouton Paramètres du périphérique ASIO 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. - + 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 a 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. - + ASIO Device Settings push button Bouton-poussoir des paramètres du périphérique ASIO - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. (canal gauche et canal droit), il est possible de sélectionner un autre canal réel de la carte son. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Si les paramètres de taille de la mémoire tampon sont désactivés, le pilote audio ne permet pas de modifier ce paramètre depuis le logiciel. Sous Windows, appuyez sur le bouton Paramètres du périphérique ASIO 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. - + Sound card driver settings Paramètres du pilote de la carte son - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Cela ouvre les paramètres du pilote de votre carte son. Certains pilotes vous permettent de modifier les paramètres de la mémoire tampon, d'autres comme ASIO4ALL vous laissent choisir l'entrée ou les sorties de votre (vos) périphérique(s). Plus d'informations peuvent être trouvées sur jamulus.io. - + Opens the driver settings. Note: Ouvre les paramètres du pilote. Note : - + currently only supports devices supporting a sample rate of prend actuellement en charge uniquement les périphériques supportant un taux d'échantillonnage de - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Vous ne pourrez pas sélectionner un pilote/périphérique ne le supportant pas. Pour plus d'informations, consultez jamulus.io. - + 64 samples setting radio button Bouton radio de paramétrage à 64 échantillons - + 128 samples setting radio button Bouton radio de paramétrage à 128 échantillons - + 256 samples setting radio button Bouton radio de paramétrage à 256 échantillons @@ -1196,75 +1235,72 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Bouton-poussoir de paramétrage ASIO - + Audio Channels Canaux audio - + Audio channels combo box Choix déroulant de canaux audio - + Audio Quality Qualité audio - + Audio quality combo box Choix déroulant de qualité audio - + New Client Level Niveau de nouveau client - + New client level edit box Nouvelle boîte d'édition de niveau des nouveaux clients - + Custom Directory Server Address Adresse personnalisée du serveur annuaire - Current Connection Status Parameter - Paramètre de l'état de la connexion actuelle + Paramètre de l'état de la connexion actuelle - 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 + Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le - software. - logiciel. + logiciel. - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. mode augmentera le débit de données de votre flux. Assurez-vous que votre débit montant ne dépasse pas la vitesse de téléchargement disponible de votre connexion internet. - + Mono-in/Stereo-out Mono-entrée/stéréo-sortie - - - + + + Stereo Stéréo @@ -1285,7 +1321,7 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo - + L G @@ -1325,221 +1361,219 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Si le paramètre Auto est activé, les tampons réseau du client local et du serveur distant sont réglés sur une valeur prudente pour minimiser la probabilité d'interruption de l'audio. Pour régler le délai/latence audio, il est recommandé de désactiver le paramètre Auto et de réduire manuellement la taille du tampon de gigue en utilisant les chariots jusqu'à ce que le nombre d'interruptions soit acceptable. L'indicateur LED affichera les désynchronisations audio du tampon de gigue local avec un voyant rouge. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Le réglage du délai de la mémoire tampon est un paramètre fondamental de ce logiciel. Ce réglage a une influence sur de nombreuses propriétés de la connexion. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 échantillons : le paramétrage préféré. Fournit la latence la plus faible mais ne fonctionne pas avec toutes les cartes son. - + 128 samples: Should work for most available sound cards. 128 échantillons : devrait fonctionner pour la plupart des cartes son disponibles. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 échantillons : ne devrait être utilisé que sur des ordinateurs très lents ou avec une connexion internet lente. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. 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. L'application fonctionnera toujours avec ce paramètre, mais avec des performances limitées. - + Skin thème graphique - + Select the skin to be used for the main window. Sélectionnez le thème graphique à utiliser pour la fenêtre principale. - + Skin combo box Choix déroulant de thème graphique - + Language - Langue + Langue - + Select the language to be used for the user interface. - + Sélectionnez la langue à utiliser pour l'interface utilisateur. - + Language combo box - + Choix déroulant langue - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Sélectionne le nombre de canaux audio à utiliser pour la communication entre le client et le serveur. Trois modes sont disponibles : - + and et - + These modes use one and two audio channels respectively. Ces modes utilisent respectivement un et deux canaux audio. - + Mono in/Stereo-out Entrée mono/sortie stéréo - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Le signal audio envoyé au serveur est mono mais le signal de retour est stéréo. Ceci est utile si la carte son a l'instrument sur un canal d'entrée et le microphone sur l'autre. Dans ce cas, les deux signaux d'entrée peuvent être mélangés sur un canal mono mais le mixage du serveur est entendu en stéréo. - + Enabling Activer - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. En mode de flux 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é aux deux canaux dans ce cas. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Plus la qualité audio est élevée, plus le débit de données de votre flux audio est élevé. Assurez-vous que votre débit montant ne dépasse pas la bande passante disponible de votre connexion internet. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Ce paramètre définit le niveau du chariot d'un client nouvellement connecté en pourcentage. Si un nouveau client se connecte au serveur actuel, il obtiendra le niveau de chariot initial spécifié si aucun autre niveau de chariot provenant d'une connexion précédente de ce client n'a déjà été enregistré. - + Input Boost Amplification de l'entrée - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Ce paramètre vous permet d'augmenter le niveau de votre signal d'entrée par des facteurs allant jusqu'à 10 (+20dB).Si votre son est trop faible, essayez d'abord d'augmenter le niveau en vous rapprochant du microphone, en réglant votre équipement de sonorisation ou en augmentant les niveaux dans les paramètres d'entrée de votre système d'exploitation. Ce n'est qu'en cas d'échec que vous pouvez définir un facteur ici. Si votre son est trop fort, s'il est déformé et s'il y a de l'écrêtage, cette option ne vous aidera pas. Ne l'utilisez pas. La distorsion sera toujours présente. Diminuez plutôt votre niveau d'entrée en vous éloignant de votre microphone, en réglant votre équipement de sonorisation ou en diminuant les paramètres d'entrée de votre système d'exploitation. - + Input Boost combo box Choix déroulant d'amplification de l'entrée - + Leave this blank unless you need to enter the address of a directory server other than the default. Laissez ce champ vide, sauf si vous devez entrer l'adresse d'un serveur annuaire autre que celui par défaut. - + Directory server address combo box Boîte combo d'adresses du serveur annuaire - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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 au flux audio pour aller du client au serveur et revenir. Ce délai est introduit par le réseau et doit être d'environ 20 à 30 ms. Si ce délai est supérieur à environ 50 ms, la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. + Le temps de ping est le temps nécessaire au flux audio pour aller du client au serveur et revenir. Ce délai est introduit par le réseau et doit être d'environ 20 à 30 ms. Si ce délai est supérieur à environ 50 ms, la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - Le délai global est calculé à partir du temps de ping actuel et du délai introduit par les paramètres actuels de la mémoire tampon. + Le délai global est calculé à partir du temps de ping actuel et du délai introduit par les paramètres actuels de la mémoire tampon. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). Le débit montant audio dépend de la taille actuelle des paquets audio et du réglage de la compression. Assurez-vous que le débit montant n'est pas supérieur à votre vitesse de téléchargement Internet disponible (vérifiez cela avec un service tel que speedtest.net). - + Number of Mixer Panel Rows Nombre de rangées de panneaux de mixeurs - + Adjust the number of rows used to arrange the mixer panel. Ajustez le nombre de rangées utilisées dans le panneau du mixeur. - + Number of Mixer Panel Rows spin box Liste de choix du nombre de rangées de panneaux de mixeurs - + Feedback Protection Protection larsen - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Active la protection larsen pour détecter le larsen acoustique entre le microphone et les enceintes. - + Feedback Protection check box Case à cocher protection larsen - + ASIO Device Settings Paramètres du périphérique ASIO - + Low Basse - - + + Normal Normal - + High Haute - + Fancy Fantaisie - + Compact Compact - - - + + + None Aucune - + Center Centre - + R D @@ -1584,78 +1618,78 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Tout genre 1 - + preferred préféré - + Musician Profile Profil de musicien - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Écrivez votre nom ou un pseudonyme ici pour que les autres musiciens avec lesquels vous voulez jouer sachent qui vous êtes. Vous pouvez également ajouter une image de l'instrument dont vous jouez et un drapeau du pays dans lequel vous vous trouvez. Vous pouvez également ajouter votre ville et votre niveau de compétence pour jouer de votre instrument. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Ce que vous réglez ici apparaîtra au niveau de votre chariot sur la table de mixage lorsque vous serez connecté à un serveur Jamulus. Cette étiquette sera également affichée dans chaque client qui est connecté au même serveur que vous. - + Alias or name edit box Boîte d'édition de pseudo ou de nom - + Instrument picture button Bouton d'image d'instrument - + Country flag button Bouton de drapeau de pays - + City edit box Boîte d'édition de ville - + Skill level combo box Choix déroulant de niveau de compétence - + Beginner Débutant - + Intermediate Intermédiaire - + Expert Expert - - + + Size: Taille : - + Buffer Delay Délai de temporisation - + Buffer Delay: Délai de temporisation : @@ -1934,7 +1968,7 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Mappage des canaux de sortie - + Enable Small Network Buffers Activer les petits tampons de réseau @@ -2014,69 +2048,67 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Configuration audio/réseau - + Jitter Buffer Tampon de gigue - + Auto Auto - + Local Local - + Server Serveur - - + + Size Taille - + kbps - + kbps - - ms - + ms - + Input Boost Amplification de l'entrée - + Feedback Protection Protection larsen - + Enable Activer - + Input Balance Balance d'entrée - + Pan Panoramique - + Center Centre @@ -2095,12 +2127,11 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Qualité audio - Measurements - Mesures + Mesures - + Advanced Setup Configuration avancée @@ -2109,7 +2140,7 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Adresse personnalisée du serveur annuaire : - + New Client Level Niveau des nouveaux clients @@ -2124,41 +2155,36 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo Langue - + % % - + Custom Directory Server Address: - Adresse personnalisée du serveur annuaire : + Adresse personnalisée du serveur annuaire : - + 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 + Délai global - Local Jitter Buffer - Tampon de gigue local + Tampon de gigue local @@ -2342,12 +2368,12 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo &About Jamulus... - À &propos de Jamulus... + À &propos de Jamulus... About &Qt... - À propos de &Qt... + À propos de &Qt... &About... @@ -2356,7 +2382,7 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo About Qt - À propos de Qt + À propos de Qt @@ -3119,7 +3145,7 @@ Nous avons coupé votre canal et activé "Me silencer". Veuillez d&apo List - Liste + Liste diff --git a/src/res/translation/translation_it_IT.ts b/src/res/translation/translation_it_IT.ts index 4a1d445c3f..5423a7c7f1 100644 --- a/src/res/translation/translation_it_IT.ts +++ b/src/res/translation/translation_it_IT.ts @@ -651,8 +651,9 @@ Facendo clic su questo pulsante si modifica la dicitura del pulsante da Connetti a Disconnetti, ovvero implementa una funzionalità di attivazione / disattivazione per la connessione e disconnessione del + software. - programma. + programma. Local Audio Input Fader @@ -720,8 +721,9 @@ Il LED di stato del delay indica graficamente il valore assunto in quel momento. Se verde il delay è nei valori ottimali, se giallo indica che durante la sessione si possono verificare situazioni in cui può diventare difficile suonare, se rosso il delay è troppo alto per una sessione. + If this LED indicator turns red, you will not have much fun using the - Se il LED diventa rosso avrete difficoltà nel suonare con + Se il LED diventa rosso avrete difficoltà nel suonare con @@ -879,38 +881,53 @@ Led di stato del Buffer - - + + Current Connection Status Parameter + Parametri attuali di connessione + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + Il ping è il tempo necessario affinché il flusso audio passi dal client al server e viceversa. Questo ritardo è introdotto dalla rete e dovrebbe essere di circa 20-30 ms. Se questo ritardo è superiore a circa 50 ms, la distanza dal server è eccessiva o la connessione a Internet non è sufficiente. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + Il ritardo complessivo viene calcolato dal tempo di ping corrente e dal ritardo introdotto dalle impostazioni del buffer correnti. + + + + C&onnect C&onnetti - + software upgrade available Nuova versione disponibile - + &File &File - + &View &Vista - + &Connection Setup... Setup &Connessione... - + My &Profile... &Profilo Personale... - + C&hat... C&hat... @@ -919,17 +936,17 @@ &Settaggi... - + &Analyzer Console... &Analizzatore... - + N&o User Sorting N&on Riordinare i Canali - + Sort Users by &City Ordina i Canali per &Città di provenienza @@ -938,17 +955,17 @@ Abilita &Vista su due Righe - + Clear &All Stored Solo and Mute Settings &Riprisitna tutti gli stati salvati di SOLO e MUTE - + Auto-Adjust all &Faders Auto regolazione &Fader - + Ok Ok Ok @@ -958,52 +975,52 @@ &Ripristina i canali settati in "Solo" - + Set All Faders to New Client &Level Setta &Livelli del Mixer al valore impostato per i Nuovi Utenti - + E&xit &Uscita - + &Load Mixer Channels Setup... &Carica Setup Mixer... - + &Save Mixer Channels Setup... &Salva Setup Mixer... - + Audio/Network &Settings... &Impostazioni Audio/Rete... - + A&dvanced Settings... Impostazioni A&vanzate... - + &Edit &Modifica - + Sort Users by &Name Ordina canali per &Nome - + Sort Users by &Instrument Ordina canali per &Strumento - + Sort Users by &Group Ordina Canali per Nome &Utente @@ -1024,48 +1041,48 @@ R - + Directory Server Server di Directory - - + + Select Channel Setup File Selezione File di Setup dei Canali - + user utente - + users utenti - + Connect Connetti - + Settings Impostazioni - + Chat Chat - + Enable feedback detection Abilita riconoscimento feedback - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -1074,12 +1091,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe E' stato disattivato l'audio del tuo canale ed inserito il "Disattiva Inputt". Si prega di risolvere prima il problema dei larsen e dei ritorni e successivamente riattivare l'audio. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Se la tua interfaccia non funziona correttamente, apri la schermata dei settaggi e controlla se è stata selezionata l'interfaccia corretta ed il suo relativo driver. - + D&isconnect D&isconnetti @@ -1087,47 +1104,62 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat CClientDlgBase - + Delay Delay - Buffers - Buffer + Buffer - + Input Ingresso - + L L - + R R - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself &Disattiva Input - + &Settings &Settaggi - + &Chat &Chat - + C&onnect C&onnetti @@ -1140,32 +1172,32 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Centro - + Reverb Riverbero - + Left Left (Sinistra) - + Right Right (Destra) - + MUTED (Other people won't hear you) Muto (gli altri non possono sentirti) - + Set up your audio, connect to a server and start jamming! Configura la tua scheda audio, connettiti ad un server e suona! - + Update check Controlla Aggiornamenti @@ -1214,107 +1246,106 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Switch Jitter Buffer Automatico - Jitter buffer status LED indicator - LED di stato del Jitter Buffer + LED di stato del Jitter Buffer - + Sound Card Device Scheda Audio - + The ASIO driver (sound card) can be selected using I driver ASIO (scheda audio) possono essere selezionati usando - + 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. su sistemi operativi Windows. Su MacOS/Linux, non è possibile cambiare driver audio. Se il driver ASIO selezionato non è valido un errore viene visualizzato ripristinando il driver precedentemente attivo e funzionante. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. Se il driver viene cambiato mentre si è connessi ad un server, la connessione verrà fermata, il driver sarà sostituito e successivamente la connessione verrà ripristinata automaticamente. - + Sound card device selector combo box Box per la selezione della scheda audio - + If 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. Nel caso in cui vengano usati i driver ASIO4ALL bisogna sapere che questi di solito introducono 10-30 ms di ritardo aggiuntivo. Si consiglia di usare driver ASIO nativi per la scheda audio in uso. - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Se si usano i driver kX ASIO, accertarsi di connettere l'input ASIO nel pannello dei settaggi kX DSP. - + Sound Card Channel Mapping Mappa dei Canali della Scheda Audio - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. Se la scheda audio dispone di diversi Input o Output, verrà visualizzata la mappa dei canali di input e di output. - + For each Per ciascun - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. input/output (Canale Sinistro e Destro) può essere selezionata una scheda audio diversa. - + Left input channel selection combo box Box per la selezione dell'Ingresso Sinistro (Left) - + Right input channel selection combo box Box per la selezione dell'Ingresso Destro (Right) - + Left output channel selection combo box Box per la selezione dell'uscita Sinistra (Left) - + Right output channel selection combo box Box per la selezione dell'uscita Destra (Right) - + Enable Small Network Buffers Abilita Riduzione Buffer di Rete - + 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 Se abilitato, viene attivata la possibilità di usare piccoli pacchetti di rete. L'uso di pacchetti di rete di dimensione ridotta è attivo se la scheda audio supporta un buffer delay inferiore a - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. samples. Più piccoli sono i pacchetti di rete minore sarà la latenza, ma allo stesso tempo aumenta il carico di rete umentando la possibilità di dropout audio. - + Enable small network buffers check box Check Box per abilitare la riduzione dei pacchetti di rete - + Sound Card Buffer Delay Buffer Delay della scheda audio @@ -1327,7 +1358,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Questo settaggio ha influenza su molte proprietà di connessione. - + Three buffer sizes are supported Le dimensioni dei Buffer supportati sono @@ -1360,12 +1391,12 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat funzionerà ma con performance ridotte. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. Il Buffer Delay influenza lo stato della connessione, la velocità di upload e l'Overall Delay. Usare una dimensione troppo bassa del buffer comporta, maggiore probabilità che l'indicatore di stato diventi rosso (drop outs) consumo di banda in upload e una diminuzione dell'Overall Delay. - + The buffer setting is therefore a trade-off between audio quality and overall delay. L'impostazione del buffer è quindi un compromesso tra qualità audio e ritardo generale. @@ -1378,17 +1409,17 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Su Windows premere il bottone ASIo setup per aprire il pannello di settaggio del driver. Su Linux usare il tool di configurazione di Jack per modificare la dimensione del buffer. - + 64 samples setting radio button Pulsante per abilitare 64 Campioni - + 128 samples setting radio button Pulsante per abilitare 128 Campioni - + 256 samples setting radio button Pulsante per abilitare 256 Campioni @@ -1421,7 +1452,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Check Box per abilitare la visualizzazione dei livelli dei canali audio - + Audio Channels Canali Audio @@ -1438,12 +1469,12 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Nel caso in cui si una lo streaming stereo, non sarà possibile selezionare su quale canale far intervenire il riverbero inquanto sarà applicato ad entrambi i canali Left e Right. - + Audio channels combo box Combo Box Canali Audio - + Audio Quality Qualità Audio @@ -1452,12 +1483,12 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Selezionare la qualità audio desiderata. Si può scegliere tra Low (Bassa), normal (standard), high (Alta). Maggiore è la qualità settata più alto sarà il valore di streaming audio. Accertarsi di avere sufficiente banda in upload. - + Audio quality combo box Combo Box Qualità Audio - + New Client Level Livello Volume Nuovo Client @@ -1466,12 +1497,12 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Settare il livello per il nuovo client definisce il livello, in percentuale, di ingresso per un nuovo utente che si connette. Un nuovo client che si connette alla sessione assume un volume uguale a quello settato se non ci sono livelli memorizzati per questo client in precedenti connessioni con lo stesso. - + New client level edit box Box per modificare il livello di ingresso di un nuovo client - + Custom Directory Server Address Indirizzo personalizzato del Server di Directory @@ -1496,9 +1527,8 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Modifica indirizzo Server Centrale - Current Connection Status Parameter - Parametri attuali di connessione + Parametri attuali di connessione The ping time is the time required for the audio stream to travel from the client to the server and back again. 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. @@ -1513,39 +1543,37 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat La velocità di trasferimento dati in upload dipende dalla dimensione dei pacchetti audio e dai settaggi di compressione dell'audio. Assicurarsi di non usare valori di upstream non adeguati alla propria connessione (è possibile verificare tali valori mediante un test sulla propria connessione, usando per esempio il sito speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Se questo indicatore a LED diventa rosso non si godrà di un esperienza ottimale del programma + Se questo indicatore a LED diventa rosso non si godrà di un esperienza ottimale del programma - software. - . + . ASIO Setup ASIO Setup - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. modalità che aumenterà la velocità dei dati del tuo stream. Assicurati che la tua velocità di upload non superi la velocità di upload disponibile per la tua connessione Internet. - + Mono-in/Stereo-out Mono-in/Stereo-out - - - + + + Stereo Stereo @@ -1566,7 +1594,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat - + L L @@ -1606,22 +1634,22 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Se l'impostazione Auto è abilitata, i buffer di rete del client locale e del server remoto vengono impostati su un valore conservativo per ridurre al minimo la probabilità di interruzione dell'audio. Per modificare il ritardo / latenza audio, si consiglia di disabilitare l'impostazione Auto e di ridurre manualmente la dimensione del buffer utilizzando i fader fino a raggiungere una qualità audio accettabile. L'indicatore LED mostrerà i dropout audio del Jitter Buffer locale con una luce rossa. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Il Buffer Delay è un settaggio fondamentale per questo programma. Questo settaggio influenza molte propriètà di connessione. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 Campiono: Settaggio preferito. Permette di ottenere latenze bassissime ma non tutto le schede audio supportano questo valore. - + 128 samples: Should work for most available sound cards. 128 Campioni: Valore accettato dalla maggior parde delle schede audio. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 Campioni: Usato su computer vecchi o su connessioni lente. @@ -1630,7 +1658,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Alcune driver non permettono il settaggio del buffer delay quando il programma è avviato. In questo caso la scelta del buffer delay è disabilitata è puo essere modificata avviando il software del driver della scheda audio. Su windows cliccare su "ASIO Setup" per aprire i settings del driver ASIO. Su Linux usare la configurazione di Jack per modificare la dimensione del Buffer. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Si nessuna delle opzioni di Buffer è selezionata vuol dire che una dimensione non supportata è in uso da parte del driver. Il programma continuerà a funzionare con performance limitate. @@ -1639,312 +1667,310 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Se le impostazioni di ritardo del buffer sono disabilitate, il driver audio non può modificare questa impostazione dal programma. Su Windows, premi il pulsante ASIO Setup per aprire il pannello delle impostazioni del driver. Su Linux, utilizzare lo strumento di configurazione Jack per modificare la dimensione del buffer. - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Molte schede audio non consentono la modifica del buffer dall'applicazione.In questo caso la possibilità di cambiare il buffer delay è disabilitato di default e questo parametro va variato mediante il software del driver della scheda audio. Su windows basta preme il pulsante ASIO per aprire il pannello di controllo dei driver. Su linux usare il software di configurazione di Jack. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Se non è possibile variare il buffer delay, vuol dire che non è possibile farlo tramite il software ma tramite il driver. Su windows basta preme il pulsante ASIO per aprire il pannello di controllo dei driver. Su linux usare il software di configurazione di Jack. - + Sound card driver settings Settaggi scheda audio - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Aprirà il software di gestione della scheda audio. I driver danno la possibilità di modificare i valori del buffer delay e in alcuni casi, come con gli ASIO4ALL di scegliere gli input e gli output da usare. Altre informazioni sono disponibili sul sito jamulus.io. - + Opens the driver settings. Note: Apri il software di configurazione. Note: - + currently only supports devices supporting a sample rate of attualmente supporta solo dispositivi che supportano una frequenza di campionamento di - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Non sarai in grado di selezionare un driver / dispositivo che non supporta tale impostazione. Per ulteriori informazioni, vedere jamulus.io. - + ASIO Device Settings push button Pulsante per i settaggi del driver ASIO - + Skin Vista - + Select the skin to be used for the main window. Selezione la vista da applicare alla finestra principale. - + Skin combo box Box di selezione Vista - + Language Lingua - + Select the language to be used for the user interface. - + Language combo box - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Seleziona il numero di canali audio da utilizzare per la comunicazione tra client e server. Sono disponibili tre modalità: - + and e - + These modes use one and two audio channels respectively. Questa modalità usa rispettivamente uno o due canali audio. - + Mono in/Stereo-out Mono in/Stereo-out - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Il segnale audio inviato al server è mono ma il segnale di ritorno è stereo. Ciò è utile se la scheda audio ha lo strumento su un canale di ingresso e il microfono sull'altro. In tal caso, i due segnali di ingresso possono essere miscelati su un canale mono ma il mix del server viene ascoltato in stereo. - + Enabling Abilitando - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. Nella modalità stereo, nessuna selezione di canali audio per l'effetto riverbero sarà disponibile nella finestra principale poiché in questo caso l'effetto viene applicato ad entrambi i canali. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Maggiore è la qualità audio, maggiore è la quantità dei dati del flusso audio. Assicurati che la tua velocità di upload non superi la larghezza di banda disponibile della tua connessione Internet. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Questa impostazione definisce il livello di dissolvenza di un client appena connesso in percentuale. Se un nuovo client si connette al server corrente, otterrà il livello di fader iniziale specificato se nessun altro livello di fader da una precedente connessione di quel client era già memorizzato. - + Input Boost Gain Ingresso - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Questa impostazione consente di aumentare il livello del segnale in ingresso tramite fattori di moltiplicazione di guadagno fino a 10 (ovvero + 20dB) .Se il suono è troppo basso provare, prima ad aumentare il guadagno, di avvicinarsi al microfono, regolare i livelli della scheda audio o regolare i livelli nelle impostazioni di input del sistema. Se non si riesce ad ottenere un livello di ingresso soddisfacente, impostare un fattore di guadagno adeguato. Se il suono è gia troppo forte risulterà distorto ed in clipping, questa opzione in questo caso non ti sarà utile. In questi casi dovrai diminuire il livello di ingresso: allontanati dal microfono, regola la scheda audio o regola i livelli delle impostazioni di ingresso del sistema operativo. - + Input Boost combo box Casella del Gain d'Ingresso - + Leave this blank unless you need to enter the address of a directory server other than the default. Lasciare vuoto questo campo a meno che non sia necessario immettere l'indirizzo di un server di directory diverso da quello predefinito. - + Directory server address combo box Casella dell'indirizzo del server di directory - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - Il ping è il tempo necessario affinché il flusso audio passi dal client al server e viceversa. Questo ritardo è introdotto dalla rete e dovrebbe essere di circa 20-30 ms. Se questo ritardo è superiore a circa 50 ms, la distanza dal server è eccessiva o la connessione a Internet non è sufficiente. + Il ping è il tempo necessario affinché il flusso audio passi dal client al server e viceversa. Questo ritardo è introdotto dalla rete e dovrebbe essere di circa 20-30 ms. Se questo ritardo è superiore a circa 50 ms, la distanza dal server è eccessiva o la connessione a Internet non è sufficiente. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - Il ritardo complessivo viene calcolato dal tempo di ping corrente e dal ritardo introdotto dalle impostazioni del buffer correnti. + Il ritardo complessivo viene calcolato dal tempo di ping corrente e dal ritardo introdotto dalle impostazioni del buffer correnti. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). L'Upstream audio dipende dalle dimensioni del pacchetto audio e dalle impostazioni di compressione correnti. Assicurati che la velocità di upstream non sia superiore alla velocità della tua connessione (controlla questo con un servizio come speedtest.net). - + Number of Mixer Panel Rows Numero di Righe su cui disporre il Mixer - + Adjust the number of rows used to arrange the mixer panel. Regola il numero di righe su cui saranno disposti i controlli del mixer. - + Number of Mixer Panel Rows spin box Numero di Righe su cui disporre il Mixer - + Feedback Protection Protezione dai Larser - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Abilita la protezione dai larsen per rilevare il feedback acustico tra il microfono e gli altoparlanti. - + Feedback Protection check box Casella Protezione dai Larser - + ASIO Device Settings Configurasione driver ASIO - + Low Low - - + + Normal Normal - + High High - + Fancy Fantasia - + Compact Compatto - - - + + + None Nullo - + preferred consigliato - + Musician Profile Profilo del Musicista - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Scrivi qui il tuo nome o un alias in modo che gli altri musicisti con cui vuoi suonare sappiano chi sei. Puoi anche aggiungere una foto dello strumento che suoni e una bandiera del paese in cui ti trovi. Puoi anche aggiungere la tua città e il tuo livello di abilità nel suonare il tuo strumento. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Ciò che hai impostato apparirà sul tuo fader sulla scheda del mixer quando sei collegato a un server Jamulus. Questo tag verrà mostrato anche su ogni client collegato allo stesso server. - + Alias or name edit box Box di modifica Nome o Alias - + Instrument picture button Immagine dello strumento - + Country flag button Pulsante bandiera del paese - + City edit box Box di modifica Città - + Skill level combo box Livello di Abilità - + Beginner Principiante - + Intermediate Intermedio - + Expert Esperto - - + + Size: Livello: - + Buffer Delay Buffer Delay - + Buffer Delay: Buffer Delay: - + Center Centro - + R R @@ -2291,7 +2317,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Mappa Canali di Output - + Enable Small Network Buffers Abilita riduzione dimensione Buffer @@ -2371,69 +2397,63 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Impostazioni Audio/Rete - + Jitter Buffer Jitter Buffer - + Auto Auto - + Local Locale - + Server Server - - + + Size Livello - + kbps - - - ms - - - - + Input Boost Gain Ingresso - + Feedback Protection Protezione dai Larsen - + Enable Abilita - + Input Balance Bilanciamento Ingresso - + Pan Bilanciamento - + Center Centro @@ -2452,12 +2472,11 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Qualità Audio - Measurements - Misure + Misure - + Advanced Setup Impostazioni Avanzate @@ -2466,7 +2485,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Indirizzo server centrale personalizzato: - + New Client Level Livello Nuovo Client @@ -2481,14 +2500,13 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Lingua - + % % - Local Jitter Buffer - Jitter Locale + Jitter Locale Fancy Skin @@ -2499,7 +2517,7 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Visualizza Livelli Canali - + Custom Directory Server Address: Indirizzo Server di Directory alternativo: @@ -2508,26 +2526,22 @@ E' stato disattivato l'audio del tuo canale ed inserito il "Disat Indirizzo Server Centrale: - + Audio Stream Rate Velocità dello Streaming - - - + val val - Ping Time - Ping + Ping - Overall Delay - Overall Delay + Overall Delay diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts index 13d1f3e8e4..34bec3d45b 100644 --- a/src/res/translation/translation_nl_NL.ts +++ b/src/res/translation/translation_nl_NL.ts @@ -239,7 +239,7 @@ Pan - Balans + Bal. @@ -414,7 +414,7 @@ PAN - BAL + BAL. @@ -643,8 +643,9 @@ 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. + software. Local Audio Input Fader @@ -712,8 +713,9 @@ 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 + Als deze LED-indicator rood wordt, zult u niet veel plezier beleven aan het gebruik van de @@ -871,38 +873,53 @@ Status van de buffers LED-indicator - - + + 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 back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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 veroorzaakt door het netwerk en bedraagt ongeveer 20-30 ms. Als deze vertraging hoger is dan circa 50 ms, dan is uw afstand tot de server te groot of is uw internetverbinding niet toereikend. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + De totale vertraging wordt berekend op basis van de huidige ping-tijd en de vertraging door de huidige bufferinstellingen. + + + + C&onnect &Verbinden - + software upgrade available software-update beschikbaar - + &File &Bestand - + &View Be&kijken - + &Connection Setup... &Verbindingsinstellingen... - + My &Profile... Mijn &profiel... - + C&hat... &Chat... @@ -911,17 +928,17 @@ &Instellingen... - + &Analyzer Console... &Analyzer console... - + N&o User Sorting Kanalen niet s&orteren - + Sort Users by &City Sorteer muzikanten op &Stad @@ -930,17 +947,17 @@ Gebruik &Twee-rijen-mengpaneel - + Clear &All Stored Solo and Mute Settings &Wis alle opgeslagen solo- en demp-instellingen - + Auto-Adjust all &Faders Stel alle &faders automatisch in - + Ok Ok @@ -949,52 +966,52 @@ &Wis Alle Opgeslagen Solo-instellingen - + Set All Faders to New Client &Level &Zet alle faders op nieuw client-niveau - + E&xit &Afsluiten - + &Load Mixer Channels Setup... Mixer kanaalinstellingen &laden... - + &Save Mixer Channels Setup... Mixer kanaalinstellingen &opslaan... - + Audio/Network &Settings... Audio-/netwerk-&instellingen... - + A&dvanced Settings... Geavanceer&de instellingen... - + &Edit Be&werken - + Sort Users by &Name Sorteer muzikanten op &Naam - + Sort Users by &Instrument Sorteer muzikanten op &Instrument - + Sort Users by &Group Sorteer muzikanten op &Groep @@ -1011,48 +1028,48 @@ R - + Directory Server Adresboek server - - + + Select Channel Setup File Selecteer bestand met kanaalinstellingen - + user gebruiker - + users gebruikers - + Connect Verbinden - + Settings Instellingen - + Chat Chat - + Enable feedback detection Feedback detectie inschakelen - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -1061,12 +1078,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst het probleem met de audio feedback op en schakel daarna 'Demp mijzelf' uit. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Uw geluidskaart werkt niet goed. Open het Instellingsvenster en controleer apparaatselectie en bestuurprogramma-instellingen. - + D&isconnect &Afmelden @@ -1074,47 +1091,62 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h CClientDlgBase - + Delay Vertraging - Buffers - Buffers + Buffers - + Input Invoer - + L L - + R R - + + Jitter + + + + + Ping + + + + + + ms + ms + + + &Mute Myself Demp &mijzelf - + &Settings &Instellingen - + &Chat &Chat - + C&onnect &Verbinden @@ -1127,32 +1159,32 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Midden - + Reverb Galm - + Left Links - + Right Rechts - + MUTED (Other people won't hear you) GEDEMPT (Anderen horen u niet) - + Set up your audio, connect to a server and start jamming! Stel de audio in, maak verbinding met een server en begin met jammen! - + Update check Update check @@ -1205,180 +1237,179 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Automatische jitterbufferschakelaar - Jitter buffer status LED indicator - Jitterbuffer status LED-indicator + Jitterbuffer 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 apparaatselectie combobox - + If 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 Geluidskaart kanaaltoewijzing - + If 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 toewijzing zichtbaar. - + For each Voor elke - + 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 Linkeringangskanaal selectie combobox - + Right input channel selection combo box Rechteringangskanaal selectie combobox - + Left output channel selection combo box Linkeruitgangskanaal selectie combobox - + Right output channel selection combo box Rechteruitgangskanaal selectie combobox - + 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 erg kleine netwerkaudiopakketten geactiveerd. Deze worden alleen gebruikt als de buffervertraging van de geluidskaart kleiner is dan - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. samples. Hoe kleiner de netwerkbuffers, des te kleiner de audio-vertraging. 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 Geluidskaart buffervertraging - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Sommige stuurprogramma's van geluidskaarten staan niet toe dat de buffervertraging vanuit een toepassing kan worden gewijzigd. In dat geval is de buffervertragingsinstelling uitgeschakeld en moet deze worden gewijzigd via het stuurprogramma van de geluidskaart. In Windows drukt u op de knop ASIO Apparaatinstellingen om het instellingenpaneel van het stuurprogramma te openen. In Linux gebruikt u het configuratieprogramma van JACK om de buffergrootte te wijzigen. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Als de buffervertragingsinstellingen zijn uitgeschakeld, staat het stuurprogramma van de geluidskaart niet toe dat deze vanuit Jamulus te wijzigen zijn. In Windows drukt u op de knop ASIO Apparaatinstellingen om het instellingenpaneel van het stuurprogramma te openen. In Linux gebruikt u het configuratieprogramma van JACK om de buffergrootte te wijzigen. - + Sound card driver settings Instellingen geluidskaart-stuurprogramma - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Dit opent de stuurprogramma-instellingen van uw geluidskaart. Sommige stuurprogramma's laten u toe bufferinstellingen te veranderen, andere zoals ASIO4ALL laten u input of outputs kiezen. Meer informatie is te vinden op jamulus.io. - + Opens the driver settings. Note: Opent de stuurprogramma-instellingen. Let op: - + currently only supports devices supporting a sample rate of ondersteunt momenteel alleen apparaten met een sample rate van - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. U kunt geen stuurprogramma/apparaat selecteren die dit niet ondersteunt. Voor meer hulp zie jamulus.io. - + ASIO Device Settings push button ASIO Apparaatinstellingen drukknop - + Language - Taal + Taal - + Select the language to be used for the user interface. - + Selecteer de te gebruiken taal voor de gebruikersinterface. - + Language combo box - + Taal combobox - - - + + + None Geen - + Center Midden - + R R @@ -1391,7 +1422,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h software. Deze instelling heeft invloed op veel verbindingseigenschappen. - + Three buffer sizes are supported Drie buffergroottes worden ondersteund @@ -1424,12 +1455,12 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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 a 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. @@ -1442,17 +1473,17 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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. - + 64 samples setting radio button 64 samples instellen radioknop - + 128 samples setting radio button 128 samples instellen radioknop - + 256 samples setting radio button 256 samples instellen radioknop @@ -1485,7 +1516,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Vinkje bij de weergave van de kanaalniveaus - + Audio Channels Audiokanalen @@ -1502,12 +1533,12 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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 combobox - + Audio Quality Audiokwaliteit @@ -1516,12 +1547,12 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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 combobox - + New Client Level Nieuw clientniveau @@ -1530,12 +1561,12 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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 client-niveau bewerkingsvak - + Custom Directory Server Address Eigen adresboek serveradres @@ -1556,9 +1587,8 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Adresboek serveradres bewerkingsregel - Current Connection Status Parameter - Huidige verbindingsstatus-parameter + Huidige verbindingsstatus-parameter The ping time is the time required for the audio stream to travel from the client to the server and back again. 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. @@ -1573,39 +1603,37 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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 + Als deze LED-indicator rood wordt, zult u niet veel plezier beleven aan het gebruik van de - software. - software. + software. ASIO Setup ASIO-instelling - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. modus verhoogt de bandbreedte van de audiostream. Zorg ervoor dat deze niet hoger staat dan de beschikbare bandbreedte van uw internetverbinding. - + Mono-in/Stereo-out Mono-in/stereo-uit - - - + + + Stereo Stereo @@ -1626,7 +1654,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h - + L L @@ -1666,22 +1694,22 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h 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. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. De buffervertraging is een fundamentele instelling van dit programma. Deze instelling beïnvloed vele eigenschappen van de verbinding. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 samples: Voorkeursinstelling. Geeft de kleinste vertraging maar werkt niet met alle geluidskaarten. - + 128 samples: Should work for most available sound cards. 128 samples: Werkt voor de meeste geluidskaarten. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 samples: Alleen te gebruiken bij langzame computers of met een langzame internetverbinding. @@ -1690,7 +1718,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Sommige stuurprogramma's van geluidskaarten laten het niet toe de buffervertraging in het programma aan te passen. In dat geval dient het te worden aangepast bij het stuurprogramma zelf. Bij Windows, selecteer de ASIO Setup knop om dit in te stellen. Op Linux, gebruik de Jack configuration tool om de buffergrootte te veranderen. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Indien geen buffergrootte is aangegeven en instellingen zijn uitgeschakeld, dan gebruikt het stuurprogramma een niet-ondersteunde buffergrootte. Het programma zal niet optimaal presteren. @@ -1699,163 +1727,161 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Sommige stuurprogramma's van geluidskaarten laten het niet toe de buffervertraging in het programma aan te passen. In dat geval dient het te worden aangepast bij het stuurprogramma zelf. Bij Windows, selecteer de ASIO Setup knop om dit in te stellen. Op Linux, gebruik de Jack configuration tool om de buffergrootte te veranderen. - + Skin Skin - + Select the skin to be used for the main window. Selecteer de te gebruiken skin voor het hoofdvenster. - + Skin combo box Skin combobox - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Selecteer het aantal audiokanalen voor communicatie tussen client en server. Er zijn drie modi beschikbaar: - + and en - + These modes use one and two audio channels respectively. Deze modi gebruiken respectievelijk een en twee audiokanalen. - + Mono in/Stereo-out Mono in/stereo uit - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Het audiosignaal naar de server is mono maar wat terugkomt is stereo. Dit is handig als de geluidskaart het instrument op een invoerkanaal heeft en de microfoon op een ander. In dat geval kunnen de twee signalen gemixed worden naar een monokanaal terwijl de server mix in stereo blijft. - + Enabling Aanzetten - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to 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. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Hoe hoger de audiokwaliteit, des te hoger de benodigde bandbreedte. Zorg ervoor dat deze niet hoger staat dan de beschikbare bandbreedte van uw internetverbinding. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Deze instelling stelt het faderniveau in van een nieuwe verbonden client in procenten. Als een nieuwe client verbinding maakt krijgt hij het opgegeven initiële faderniveau als dit in de vorige verbinding niet was opgeslagen. - + Input Boost Ingangsversterking - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Met deze instelling kunt u het niveau van uw ingangssignaal tot en met een factor 10 verhogen (+ 20dB). Als uw geluid te zacht is, probeer dan eerst het niveau te verhogen door dichter bij de microfoon te komen, uw geluidsapparatuur aan te passen of de niveaus in uw besturingssysteem te verhogen. Stel hier alleen een factor in als dit niet lukt. Als uw geluid te luid is, vervormd klinkt en afknapt, zal deze optie niet helpen. Gebruik het daar niet voor, de vervorming zal er nog steeds zijn. Verlaag in plaats daarvan uw ingangssignaal door verder weg te gaan van uw microfoon, uw geluidsapparatuur aan te passen of door de niveaus in uw besturingssysteem te verlagen. - + Input Boost combo box Ingangsversterking combobox - + Leave this blank unless you need to enter the address of a directory server other than the default. Laat dit leeg tenzij u een adresboek serveradres wilt invoeren dat anders is dan de standaard. - + Directory server address combo box Adresboek serveradres combobox - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 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 veroorzaakt door het netwerk en bedraagt ongeveer 20-30 ms. Als deze vertraging hoger is dan circa 50 ms, dan is uw afstand tot de server te groot of is uw internetverbinding niet toereikend. + 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 veroorzaakt door het netwerk en bedraagt ongeveer 20-30 ms. Als deze vertraging hoger is dan circa 50 ms, dan is uw afstand tot de server te groot of is uw internetverbinding niet toereikend. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - De totale vertraging wordt berekend op basis van de huidige ping-tijd en de vertraging door de huidige bufferinstellingen. + De totale vertraging wordt berekend op basis van de huidige ping-tijd en de vertraging door de huidige bufferinstellingen. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). De bitsnelheid van de audio is afhankelijk van de huidige grootte van het audiopakket en de instelling van de audiocompressie. Zorg ervoor dat de bitsnelheid niet hoger is dan de beschikbare snelheid (controleer de upstreammogelijkheden van uw internetverbinding door bijvoorbeeld speedtest.net te gebruiken). - + Number of Mixer Panel Rows Aantal mengpaneel rijen - + Adjust the number of rows used to arrange the mixer panel. Stel het aantal rijen in dat gebruikt wordt in het mengpaneel. - + Number of Mixer Panel Rows spin box Aantal rijen in het mengpaneel spinbox - + Feedback Protection Feedback bescherming - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Schakel feedback bescherming in om de akoetische feedback tussen de microfoon en luidsprekers te detecteren. - + Feedback Protection check box Feedback bescherming selectievakje - + ASIO Device Settings ASIO Apparaatinstellingen - + Low Laag - - + + Normal Normaal - + High Hoog - + Fancy Fancy - + Compact Compact @@ -1920,78 +1946,78 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Standaard (Noord-Amerika) - + preferred voorkeur - + Musician Profile Muzikantenprofiel - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Stel hier uw naam of een alias in zodat de andere muzikanten met wie u wilt spelen weten wie u bent. Daarnaast kunt u een instrumentfoto van het instrument dat u bespeelt en een vlag van het land waar u woont, instellen. De stad waar u woont en uw vaardigheidsniveau kunnen ook worden toegevoegd. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Wat u hier instelt verschijnt bij uw fader op het mengpaneel indien verbonden met een Jamulus-server. Deze tag zal ook worden getoond aan andere muzikanten die met deze server verbonden zijn. - + Alias or name edit box Alias of naam bewerkingsvak - + Instrument picture button Afbeelding van het instrument - + Country flag button Landvlag knop - + City edit box Stad bewerkingsvak - + Skill level combo box Vaardigheidsniveau combobox - + Beginner Beginner - + Intermediate Gemiddeld - + Expert Gevorderd - - + + Size: Grootte: - + Buffer Delay Buffervertraging - + Buffer Delay: Buffervertraging: @@ -2282,7 +2308,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Uitvoerkanaaltoewijzing - + Enable Small Network Buffers Kleine netwerkbuffers inschakelen @@ -2362,69 +2388,67 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Audio-/netwerk-instellingen - + Jitter Buffer Jitterbuffer - + Auto Auto - + Local Lokaal - + Server Server - - + + Size Grootte - + kbps - + kbps - - ms - + ms - + Input Boost Ingangsversterking - + Feedback Protection Feedback bescherming - + Enable Inschakelen - + Input Balance Ingangsbalans - + Pan Balans - + Center Midden @@ -2443,12 +2467,11 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Audiokwaliteit - Measurements - Metingen + Metingen - + Advanced Setup Geavanceerde instellingen @@ -2457,7 +2480,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Eigen adresboek server adres: - + New Client Level Nieuw client-niveau @@ -2472,14 +2495,13 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Taal - + % % - Local Jitter Buffer - Lokale Jitterbuffer + Lokale Jitterbuffer Fancy Skin @@ -2490,7 +2512,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Weergave Kanaalniveaus - + Custom Directory Server Address: Eigen adresboek serveradres: @@ -2499,26 +2521,22 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h Adresboek serveradres: - + Audio Stream Rate Audiobitsnelheid - - - + val val - Ping Time - Ping-tijd + Ping-tijd - Overall Delay - Totale vertraging + Totale vertraging @@ -2726,7 +2744,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h &About Jamulus... - &Over Jamulus... + &Over Jamulus... @@ -3655,7 +3673,7 @@ We hebben uw kanaal gedempt en 'Demp mijzelf' geactiveerd. Los eerst h List - Lijst + Lijst diff --git a/src/res/translation/translation_pl_PL.ts b/src/res/translation/translation_pl_PL.ts index 5ab3fa949b..55b785304c 100644 --- a/src/res/translation/translation_pl_PL.ts +++ b/src/res/translation/translation_pl_PL.ts @@ -711,48 +711,73 @@ Dioda wskazująca stan buforów - - + + Current Connection Status Parameter + Wskaźnik aktualnego stanu połączenia + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + Czas Ping Time to czas potrzebny do przejścia strumienia audio z klienta do serwera i z powrotem. Opóźnienie to jest wprowadzane przez sieć i powinno wynosić około 20-30 ms. Jeśli opóźnienie to jest większe niż około 50 ms, odległość do serwera jest zbyt duża lub połączenie internetowe nie jest wystarczające. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + Całkowite opóźnienie jest obliczane na podstawie bieżącego czasu ping i opóźnienia wprowadzonego przez bieżące ustawienia bufora. + + + + If this LED indicator turns red, you will not have much fun using the + Jeśli ta dioda zmieni kolor na czerwony, może być utrudnione używanie + + + + software. + + + + + C&onnect &Połącz - + software upgrade available dostępna aktualizacja oprogramowania - + &File P&lik - + &Load Mixer Channels Setup... Wczytaj ustawienia kanałów &miksera... - + &Save Mixer Channels Setup... Zapi&sz ustawienia kanałów miksera... - + &View &Widok - + &Connection Setup... &Konfiguracja połączenia... - + My &Profile... Mój &profil... - + C&hat... &Czat... @@ -761,62 +786,62 @@ &Ustawienia... - + &Analyzer Console... Konsola &analizatora... - + N&o User Sorting &Bez sortowania kanałów - + Sort Users by &Name Sortuj kanały według &nazwy - + Sort Users by &Instrument Sortuj kanały według &instrumentu - + Sort Users by &Group Sortuj kanały według &grupy - + Sort Users by &City Sortuj kanały według &miasta - + Auto-Adjust all &Faders &Automatycznie dopasuj wszystkie suwaki - + Connect Połącz - + Settings Ustawienia - + Chat Czat - + Enable feedback detection Wykrywaj sprzężenia - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -825,7 +850,7 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę sprzęgania i wtedy wyłącz swoje wyciszenie. - + Ok Ok @@ -834,27 +859,27 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Wy&czyść wszystkie zachowane ustawienia użytkowników - + Set All Faders to New Client &Level Ustaw suwaki do określonego w ustawieniach &poziomu - + E&xit &Wyjdź - + Audio/Network &Settings... &Ustawienia dźwięku i sieci... - + A&dvanced Settings... Ustawienia &zaawansowane... - + &Edit &Edytuj @@ -863,7 +888,7 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Używaj &dwurzędowego panelu miksera - + Clear &All Stored Solo and Mute Settings Wy&czyść wszystkie ustawienia solo/wycissz @@ -876,33 +901,33 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę P - + Directory Server Serwer katalogowy - - + + Select Channel Setup File Wybierz plik ustawień kanału - + user użytkownik - + users użytkownicy - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Twoja karta dźwiękowa nie działa prawidłowo. Proszę otworzyć okno ustawień dźwięku i sprawdzić wybrane urządzenie i ustawienia sterownika. - + D&isconnect &Rozłącz @@ -910,47 +935,62 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę CClientDlgBase - + Delay Opóźnienie - Buffers - Bufory + Bufory - + Input Wejście - + L L - + R P - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself &Wycisz mnie - + &Settings &Ustawienia - + &Chat &Czat - + C&onnect &Połącz @@ -963,32 +1003,32 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Środek - + Reverb Pogłos - + Left Lewy - + Right Prawy - + MUTED (Other people won't hear you) WYCISZONY (Inni nie będą cię słyszeć) - + Set up your audio, connect to a server and start jamming! Ustaw dźwięk, połącz się z serwerem i zacznij jam sesion! - + Update check Sprawdzanie uaktualnień @@ -1021,180 +1061,179 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Przełącznik automatycznego rozmiaru bufora odchyleń - Jitter buffer status LED indicator - Dioda stanu bufora odchyleń + Dioda stanu bufora odchyleń - + Sound Card Device Urządzenie dźwiękowe - + The ASIO driver (sound card) can be selected using Sterownik ASIO (karta dźwiękowa) można wybrać za pomocą programu - + 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. w systemie operacyjnym Windows. W systemie MacOS/Linux nie ma możliwości wyboru karty dźwiękowej. Jeśli wybrany sterownik ASIO nie jest prawidłowy, wyświetlany jest komunikat o błędzie i wybierany jest poprzedni prawidłowy sterownik. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. Jeżeli podczas aktywnego połączenia zostanie wybrany sterownik, to połączenie zostanie przerwane, sterownik zostanie zmieniony i połączenie zostanie ponownie automatycznie uruchomione. - + Sound card device selector combo box Pole wyboru urządzenia karty dźwiękowej - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Jeśli używasz sterownika kX ASIO, upewnij się, że podłączyłeś wejścia ASIO w panelu ustawień kX DSP. - + Sound Card Channel Mapping Mapowanie kanałów kart dźwiękowych - + For each Dla każdego - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. kanał wejściowy/wyjściowy (kanał prawy i lewy) - mogą być wybrane różne kanały karty dźwiękowej. - + Left input channel selection combo box Pole wyboru lewego kanału wejściowego - + Right input channel selection combo box Pole wyboru prawego kanału wejściowego - + Left output channel selection combo box Pole wyboru lewego kanału wyjściowego - + Right output channel selection combo box Pole wyboru prawego kanału wyjściowego - + Enable Small Network Buffers Używaj małych buforów sieciowych - + 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 Jeśli jest włączona jest obsługa bardzo małych sieciowych pakietów audio. Bardzo małe pakiety sieciowe są rzeczywiście wykorzystywane tylko wtedy, gdy opóźnienie bufora karty dźwiękowej jest mniejsze niż - + Enable small network buffers check box Pole wyboru Włącz Małe Bufory Sieciowe - + Sound Card Buffer Delay Opóźnienie Bufora Karty Dźwiękowej - + Three buffer sizes are supported Obsługiwane są trzy wielkości buforów - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Niektóre sterowniki kart dźwiękowych nie pozwalają na zmianę opóźnienia bufora z poziomu aplikacji. W tym przypadku ustawienie opóźnienia bufora jest wyłączone i musi zostać zmienione za pomocą sterownika karty dźwiękowej. W systemie Windows, naciśnij przycisk Ustawienia ASIO, aby otworzyć panel ustawień ASIO. W systemie Linux, aby zmienić rozmiar bufora użyj programu do konfiguracji serwera JACK. - + The buffer setting is therefore a trade-off between audio quality and overall delay. Wartość bufora odchyleń jest więc kompromisem pomiędzy jakością dźwięku a całkowitym opóźnieniem. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Jeśli ustawienia opóźnienia bufora są wyłączone, sterownik audio nie może modyfikować tego ustawienia z poziomu programu. W systemie Windows naciśnij przycisk Ustawienia ASIO, aby otworzyć panel ustawień sterownika. W systemie Linux, użyj narzędzia konfiguracyjnego JACK-a do zmiany rozmiaru bufora. - + Sound card driver settings Ustawienia sterownika karty dźwiękowej - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Otwiera ustawienia sterownika karty dźwiękowej. Niektóre sterowniki pozwalają na zmianę ustawień bufora, a inne, jak ASIO4ALL dają możliwość wyboru urządzenia dźwiękowego dla wejścia i wyjścia. Więcej informacji na stronie jamulus.io. - + Opens the driver settings. Note: Otwiera ustawienia sterownika. Wskazówka: - + currently only supports devices supporting a sample rate of aktualnie wspierane są tylko urządzenia dźwiękowe obsługujące częstotliwość próbkowania - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Nie da się wybrać urządzenia/sterownika które tego nie obsługuje. Aby znaleźć więcej pomocy, zobacz stronę jamulus.io. - + 128 samples setting radio button przycisk wyboru 128-samplowego bufora - + 256 samples setting radio button przycisk wyboru 256-samplowego bufora - + Language Język - + Select the language to be used for the user interface. - + Language combo box - - - + + + None Żaden - + Center Środek - + R P @@ -1203,57 +1242,56 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Przycisk ustawień ASIO - + Fancy Fantazyjna - + Compact Kompaktowa - + Audio Channels Kanały Audio - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. tryb ten zwiększy szybkość przesyłania danych w strumieniu. Upewnij się, że prędkość przesyłania danych nie przekracza dostępnej prędkości przesyłania połączenia internetowego. - + Audio channels combo box Pole wyboru kanałów audio - + Audio Quality Jakość Audio - + Audio quality combo box Pole ustawień jakości audio - + New Client Level Poziom nowego klienta - + New client level edit box Pole edycji poziomu nowego klienta - Current Connection Status Parameter - Wskaźnik aktualnego stanu połączenia + Wskaźnik aktualnego stanu połączenia - + If 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. Jeśli używany jest sterownik ASIO4ALL, należy pamiętać, że zazwyczaj wprowadza on ok. 10-30 ms dodatkowego opóźnienia dźwięku. Dlatego zaleca się używanie karty dźwiękowej z natywnym sterownikiem ASIO. @@ -1274,7 +1312,7 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę - + L L @@ -1294,69 +1332,67 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Suwak lokalnego wejścia audio - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. Jeśli wybrane urządzenie karty dźwiękowej oferuje więcej niż jeden kanał wejściowy lub wyjściowy, widoczne są ustawienia Mapowanie Kanału Wejścia i Mapowanie Kanału Wejścia. - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. sample. Im mniejsze są bufory sieciowe, tym mniejsze jest opóźnienie dźwięku. Ale jednocześnie zwiększa się obciążenie sieci i prawdopodobieństwo przerw w transmisji dźwięku. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. Rzeczywiste opóźnienie bufora ma wpływ na status połączenia, bieżącą prędkość wysyłania i całkowite opóźnienie. Im mniejsza wielkość bufora, tym większe prawdopodobieństwo pojawienia się czerwonej kontrolki we wskaźniku statusu (drop-out) i tym większa szybkość wysyłania danych oraz tym mniejsze jest ogólne opóźnienie. - + 64 samples setting radio button przycisk wyboru 64-samplowego bufora - + ASIO Device Settings push button Przycisk ustawień ASIO - + Custom Directory Server Address Własny adres serwera - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). Prędkość wychodzącego strumienia audio zależy od ustawionej kompresji i rozmiaru ramki (mono/stereo). Upewnij się, że ta prędkość nie jest większa niż wyjściowa prędkość połączenia internetowego (można to sprawdzić np. przez speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Jeśli ta dioda zmieni kolor na czerwony, może być utrudnione używanie + Jeśli ta dioda zmieni kolor na czerwony, może być utrudnione używanie - software. - . + . ASIO Setup Ustawienia ASIO - - + + Mono Mono - + Mono-in/Stereo-out Mono-in/Stereo-out - - - + + + Stereo Stereo @@ -1381,22 +1417,22 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Jeśli opcja Auto jest włączone, bufory sieciowe klienta lokalnego i zdalnego serwera są ustawione na wartość zachowawczą, aby zminimalizować prawdopodobieństwo przerwania odtwarzania dźwięku. W celu dostrojenia opóźnienia dźwięku zaleca się wyłączenie ustawienia Auto i ręczne zmniejszenie rozmiaru bufora odchyleń za pomocą suwaków do momentu osiągnięcia zadawalającego poziomu zakłóceń. Dioda będzie sygnalizować czerwoną lampką przerwanie odtwarzania dźwięku w lokalnym buforze lokalnym. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Ustawienie opóźnienia bufora jest podstawowym ustawieniem tego programu. To ustawienie ma wpływ na wiele właściwości połączenia. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 sample: preferowane ustawienie. Oferuje najniższe opóźnienie ale nie jest obsługiwane przez wszystkie karty dźwiękowe. - + 128 samples: Should work for most available sound cards. 128 sampli: powinno działać na większości z dostępnych kart dźwiękowych. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 sampli: używać tylko na bardzo słabych komputerach lub przy wolnych połączeniach internetowych. @@ -1405,7 +1441,7 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Niektóre sterowniki kart dźwiękowych nie pozwalają na zmianę opóźnienia bufora z poziomu aplikacji. W tym przypadku ustawienie opóźnienia bufora jest wyłączone i musi zostać zmienione za pomocą sterownika karty dźwiękowej. W systemie Windows, naciśnij przycisk ASIO Setup, aby otworzyć panel ustawień sterownika. W systemie Linux, użyj programu do konfiguracji serwera JACK i zmiany rozmiaru bufora. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Jeżeli nie jest wybrany żaden rozmiar bufora i te ustawienia nie są dostępne, oznacza to, że sterownik używa niewspieranego rozmiaru bufora. Aplikacja będzie nadal działać z tym ustawieniem, ale jej wydajność będzie ograniczona. @@ -1414,148 +1450,146 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Jeśli ustawienia opóźnienia bufora są wyłączone, sterownik audio nie może modyfikować tego ustawienia z poziomu programu. W systemie Windows naciśnij przycisk ASIO Setup, aby otworzyć panel ustawień sterownika. W systemie Linux, użyj narzędzia konfiguracyjnego Jack do zmiany rozmiaru bufora. - + Skin Skórka - + Select the skin to be used for the main window. Wybierz skórkę dla głównego okna aplikacji. - + Skin combo box Lista wyboru skórki - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Wybiera liczbę kanałów audio, które mają być używane do komunikacji między klientem a serwerem. Dostępne są trzy tryby: - + and i - + These modes use one and two audio channels respectively. Tryby te wykorzystują odpowiednio jeden i dwa kanały audio. - + Mono in/Stereo-out wejście mono/wyjście stereo - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Sygnał audio wysyłany do serwera jest mono, ale sygnał zwrotny jest stereo. Jest to przydatne, jeśli karta dźwiękowa ma instrument na jednym kanale wejściowym i mikrofon na drugim. W tym przypadku dwa sygnały wejściowe mogą być miksowane do jednego kanału mono, ale miks serwera jest słyszalny w trybie stereo. - + Enabling Włączanie - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. W trybie strumieniowania stereo w oknie głównym nie będzie dostępny wybór kanału audio dla efektu pogłosu, ponieważ w tym przypadku efekt jest stosowany do obu kanałów. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Im wyższa jakość dźwięku, tym większa szybkość transmisji danych strumienia audio. Upewnij się, że prędkość przesyłania danych nie przekracza dostępnej przepustowości połączenia internetowego. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. To ustawienie definiuje poziom sygnału nowo podłączonego klienta w procentach. Jeśli nowy klient połączy się z aktualnym serwerem, otrzyma ten początkowy poziom sygnału, o ile żaden inny poziom z poprzedniego połączenia tego klienta nie był wcześniej zapisany. - + Input Boost Wzmocnienie Wejścia - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Ta opcja pozwala na stopniowe zwiększenie poziomu twojego sygnału wejściowego aż do 10 (+20dB). Kiedy twój dźwięk jest zbyt cichy, najpierw spróbuj zwiększyć głośność zbliżając się do mikrofonu, ustawiając lepiej sprzęt audio lub zwiększając poziomy w ustawieniach wejścia dźwięku w swoim systemie operacyjnym. Dopiero gdy wszystko powyższe zawiedzie, ustaw to wzmocnienie tutaj. Jednak gdy twój dźwięk jest zbyt głośny, zniekształcony lub urywany, ta opcja nie pomoże. Wtedy jej nie używaj. Zniekształcenia i tak pozostaną. Zamiast tego obniż poziom sygnału wejściowego odsuwając się od mikrofonu, zmieniając ustawienia twoich urządzeń dźwiękowych lub ściszając poziomy wejścia w swoim systemie. - + Input Boost combo box Kontrolka Wzmocnienia Wejścia - + Leave this blank unless you need to enter the address of a directory server other than the default. Należy pozostawić to puste pole, chyba że konieczne jest wprowadzenie adresu serwera innego niż domyślny. - + Directory server address combo box Lista wyboru serwera zbiorczego - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - Czas Ping Time to czas potrzebny do przejścia strumienia audio z klienta do serwera i z powrotem. Opóźnienie to jest wprowadzane przez sieć i powinno wynosić około 20-30 ms. Jeśli opóźnienie to jest większe niż około 50 ms, odległość do serwera jest zbyt duża lub połączenie internetowe nie jest wystarczające. + Czas Ping Time to czas potrzebny do przejścia strumienia audio z klienta do serwera i z powrotem. Opóźnienie to jest wprowadzane przez sieć i powinno wynosić około 20-30 ms. Jeśli opóźnienie to jest większe niż około 50 ms, odległość do serwera jest zbyt duża lub połączenie internetowe nie jest wystarczające. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - Całkowite opóźnienie jest obliczane na podstawie bieżącego czasu ping i opóźnienia wprowadzonego przez bieżące ustawienia bufora. + Całkowite opóźnienie jest obliczane na podstawie bieżącego czasu ping i opóźnienia wprowadzonego przez bieżące ustawienia bufora. - + Number of Mixer Panel Rows Liczba rzędów panelu miksera - + Adjust the number of rows used to arrange the mixer panel. Dostosuj liczbę rzędów w panelu miksera. - + Number of Mixer Panel Rows spin box Pole wyboru liczby rzędów panelu miksera - + Feedback Protection Ochrona przed sprzęganiem - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Wykrywaj sprzężenia akustyczne między miktofonem a głośnikami. - + Feedback Protection check box Pole wyboru wykrywania sprzężeń - + ASIO Device Settings Ustawienia urządzeń ASIO - + Low Niska - - + + Normal Standardowa - + High Wysoka @@ -1612,78 +1646,78 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Domyślny - + preferred preferowany - + Musician Profile Profil muzyka - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Wpisz swoje imię lub przezwisko, żeby inni muzycy, z którymi chesz grać wiedzieli kim jesteś. Możesz także dodać ikinę instrumentu na którym grasz oraz flagę kraju i miasto, z którego pochodzisz, a także poziom umiejętności. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Podane tutaj informacje pojawią się przy twoim suwaku na mikserze w czasie połączenia z serwerem Jamulus-a. Taka etykieta pokaże się także u każdego uczestnika podłączonego do tego samego serwera. - + Alias or name edit box Pole edycji nazwy lub pseudonimu - + Instrument picture button Przycisk wyboru instrumentu - + Country flag button Przycisk wyboru flagi - + City edit box Pole edycji miasta - + Skill level combo box Lista wyboru poziomu umiejętności - + Beginner Początkujący - + Intermediate Średniozaawansowany - + Expert Ekspert - - + + Size: Rozmiar: - + Buffer Delay Opóźnienie bufora - + Buffer Delay: Opóźnienie bufora: @@ -1974,7 +2008,7 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Mapowanie kanału wyjścia - + Enable Small Network Buffers Zezwalaj na małe bufory sieciowe @@ -2054,69 +2088,63 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Ustawienia dźwięku/sieci - + Jitter Buffer Bufor odchyleń - + Auto Automatyczny - + Local Lokalny - + Server Serwer - - + + Size Rozmiar - + kbps - - - ms - - - - + Input Boost Wzmocnienie wejścia - + Feedback Protection Ochrona przed sprzęganiem - + Enable Zastosuj - + Input Balance Balans wejściowy - + Pan Panorama - + Center Środek @@ -2135,12 +2163,11 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Jakość audio - Measurements - Miara + Miara - + Advanced Setup Ustawienia zaawansowane @@ -2149,7 +2176,7 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Własny Adres Serwera Zbiorczego: - + New Client Level Poziom dołączającego się uczestnika @@ -2164,41 +2191,36 @@ Twój kanał został wyciszony i włączono „Wycisz mnie”. Napraw przyczynę Język - + % % - + Custom Directory Server Address: Własny adres serwera centralnego: - + Audio Stream Rate Prędkość strumienia audio - - - + val wartość - Ping Time - Czas odpowiedzi + Czas odpowiedzi - Overall Delay - Opóźnienie całkowite + Opóźnienie całkowite - Local Jitter Buffer - Lokalny bufor odchyleń + Lokalny bufor odchyleń diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index d014a652b6..834cdbffc4 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -419,7 +419,7 @@ PAN - PAN + BAL @@ -510,7 +510,7 @@ Pan - Pan + Bal @@ -670,8 +670,9 @@ Clicar nesse botão altera a legenda do botão de Ligar para Desligar, ou seja, implementa uma funcionalidade de alternação para conectar e desconectar o cliente + software. - . + . Local Audio Input Fader @@ -694,8 +695,9 @@ Seleção do canal direito para reverberação + If this LED indicator turns red, you will not have much fun using the - Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o + Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o @@ -826,38 +828,53 @@ Indicador LED do estado dos buffers - - + + Current Connection Status Parameter + Parâmetros do Estado da Conexão + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + A latência da conexão é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua conexão à Internet não é suficiente. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + A latência geral é calculada a partir da latência da conexão atual e do atraso introduzido pelas configurações de buffer. + + + + C&onnect C&onectar - + software upgrade available atualização de software disponível - + &File &Arquivo - + &View &Ver - + &Connection Setup... &Conectar a Servidor... - + My &Profile... Meu &Perfil... - + C&hat... &Mensagens... @@ -866,7 +883,7 @@ &Definições... - + &Analyzer Console... Console de &Análise... @@ -875,22 +892,22 @@ Usar Duas Fileiras para &Painel do Mixer - + Clear &All Stored Solo and Mute Settings Limpar Todas as Configurações de &Solo e Mute - + Ok Ok - + E&xit S&air - + &Edit &Editar @@ -983,47 +1000,47 @@ O CPU do cliente ou servidor está em 100%. - + &Load Mixer Channels Setup... &Carregar Configuração de Canais do Mixer... - + &Save Mixer Channels Setup... &Salvar Configuração de Canais do Mixer... - + Audio/Network &Settings... Definiçõe&s de Áudio/Rede... - + A&dvanced Settings... &Definições Avançadas... - + N&o User Sorting S&em Ordenação de Canais - + Sort Users by &Name Ordenar os Canais por &Nome - + Sort Users by &Instrument Ordenar os Canais por &Instrumento - + Sort Users by &Group Ordenar os Canais por &Grupo - + Sort Users by &City Ordenar os Canais por &Cidade @@ -1032,58 +1049,58 @@ &Limpar Todos Ajustes de Solo Armazenados - + Set All Faders to New Client &Level Todos os Faders para Nível de Novo C&liente - + Auto-Adjust all &Faders Auto-Ajuste todos &Faders - + Directory Server Servidor de Diretório - - + + Select Channel Setup File Selecione Arquivo de Configuraçao de Canal - + user usuário - + users usuários - + Connect Conectar - + Settings Definições - + Chat Mensagens - + Enable feedback detection Ativar detecção de microfonia - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -1092,12 +1109,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de microfonia primeiro e depois reative seu som. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Sua placa de som não está funcionando corretamente. Por favor abra a janela de ajustes e verifique a seleção do dispositivo e as configurações de driver. - + D&isconnect Opted by Desligar instead of Desconectar to keep same keyboard shortcut Desl&igar @@ -1106,47 +1123,62 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de CClientDlgBase - + Delay Latência - Buffers - Buffers + Buffers - + Input Entrada - + L L - + R R - + + Jitter + Jitter + + + + Ping + Ping + + + + + ms + ms + + + &Mute Myself Silenciar-&me - + &Settings Definiçõe&s - + &Chat Me&nsagens - + C&onnect C&onectar @@ -1159,32 +1191,32 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Centro - + Reverb Reverb - + Left Esquerdo - + Right Direito - + MUTED (Other people won't hear you) SILENCIADO (As pessoas não te ouvirão) - + Set up your audio, connect to a server and start jamming! Configure seu áudio, conecte-se a um servidor e comece a tocar! - + Update check Verificação de atualização @@ -1233,180 +1265,179 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Interruptor do jitter buffer automático - Jitter buffer status LED indicator - Indicador LED de estado do jitter buffer + Indicador LED de estado do jitter buffer - + Sound Card Device Dispositivo de Som - + The ASIO driver (sound card) can be selected using O driver ASIO (placa de som) pode ser selecionado usando o - + 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. no Windows. No MacOS/Linux, não é possível seleccionar a placa de som. Se o driver ASIO selecionado não for válido, uma mensagem de erro será exibida e o driver válido anterior será selecionado. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. Se o driver for selecionado durante uma sessão ativa, a conexão será interrompida, o driver será alterado e a conexão reiniciada automaticamente. - + Sound card device selector combo box Seletor de dispositivo de som - + If 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. Caso o driver ASIO4ALL seja usado, note que esse driver geralmente introduz aprox. 10-30 ms de atraso de áudio adicional. Dado isto, é recomendável usar uma placa de som com um driver ASIO nativo. - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Se estiver utilizando o driver kX ASIO, certifique-se de conectar as entradas ASIO no painel de configurações do kX DSP. - + Sound Card Channel Mapping Mapeamento de Canais da Placa de Som - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. Caso o dispositivo selecionado da placa de som ofereça mais que um canal de entrada ou saída, as configurações de Mapeamento de canais de entrada e de saída estarão visíveis. - + For each Para cada canal de entrada/saída do - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. (canal esquerdo e direito), um canal real da placa de som pode ser selecionado. - + Left input channel selection combo box Seletor de canal de entrada esquerdo - + Right input channel selection combo box Seletor de canal de entrada direito - + Left output channel selection combo box Seletor de canal de saída esquerdo - + Right output channel selection combo box Seletor de canal de saída direito - + Enable Small Network Buffers Habilitar Buffers de Rede Pequenos - + 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 Se habilitado, o suporte para pacotes de áudio de rede muito pequenos é ativado. Pacotes de rede muito pequenos serão apenas realmente usados se o atraso do buffer da placa de som for menor que - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. amostras. Quanto menor o buffer da rede, menor a latência do áudio. Mas, ao mesmo tempo, a carga da rede e a probabilidade de interrupção do áudio também aumentam. - + Enable small network buffers check box Caixa de ativação de buffers de rede pequenos - + Sound Card Buffer Delay Atraso do Buffer da Placa de Som - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pela aplicação. Nesse caso, a configuração de atraso do buffer estará desativada e deve ser alterada no driver da placa de som. No Windows, pressione o botão Definições de Dispositivo ASIO para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Se as definições de atraso do buffer estiverem desativadas, está proibido pelo driver do áudio sua modificação a partir do programa. No Windows, pressione o botão Definições de Dispositivo ASIO para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o tamanho do buffer. - + Sound card driver settings Definições de driver da placa de som - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Abre definições de driver para sua placa de som. Alguns drivers permitem mudanças na configuração de buffer, outros como ASIO4ALL permitem escolher entradas e saídas do seu(s) dispositivo(s). Mais informações pode ser encontrada em jamulus.io. - + Opens the driver settings. Note: Abre definições do driver. Nota: - + currently only supports devices supporting a sample rate of atualmente suporta apenas dispositivos com suporte à taxa de amostra de - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Não será possível selecion um driver/dispositivo que não suporta. Para mais ajuda veja jamulus.io. - + ASIO Device Settings push button Botão de definições do dispositivo ASIO - + Language - Idioma + Idioma - + Select the language to be used for the user interface. - + Selecione o idiomara para ser utilizado na interface do usuário. - + Language combo box - + Seletor de idioma - - - + + + None Nenhum - + Center Centro - + R R @@ -1419,7 +1450,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de . Esta configuração tem influência em muitas propriedades da ligação. - + Three buffer sizes are supported Três tamanhos de buffer são suportados @@ -1452,12 +1483,12 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de ainda funcionará com essa configuração, mas com desempenho restrito. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. O atraso do buffer influencia o estado da conexão, a taxa de upload atual e a latência geral. Quanto menor o tamanho do buffer, maior a probabilidade de a luz vermelha no indicador de estado (interrupções), maior a taxa de upload e menor a latência geral. - + The buffer setting is therefore a trade-off between audio quality and overall delay. A configuração do buffer é, portanto, uma troca entre qualidade de áudio e latência geral. @@ -1470,17 +1501,17 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de . No Windows, pressione o botão <i>Configuração do Driver</i> para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração <i>Jack</i> para alterar o atraso do buffer. - + 64 samples setting radio button Botão de configuração de 64 amostras - + 128 samples setting radio button Botão de configuração de 128 amostras - + 256 samples setting radio button Botão de configuração de 256 amostras @@ -1513,7 +1544,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Caixa de ativação para exibir níveis de canais - + Audio Channels Canais de Áudio @@ -1530,12 +1561,12 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. - + Audio channels combo box Seletor de canais áudio - + Audio Quality Qualidade de Áudio @@ -1544,12 +1575,12 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Selecione a qualidade de áudio desejada. Pode ser selecionada uma qualidade de áudio baixa, normal ou alta. Quanto maior a qualidade do áudio, maior a taxa de dados do fluxo de áudio. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. - + Audio quality combo box Seletor de qualidade áudio - + New Client Level Nível de Novo Cliente @@ -1558,12 +1589,12 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de A configuração de nível de novo cliente define, em percentagem, o nível do fader de um novo cliente ligado. Por exemplo, se um cliente novo se ligar ao servidor atual, o seu canal terá o nível inicial do fader especificado, excepto quando um diferente nível do fader de uma ligação anterior desse mesmo cliente já tenha sido definido. - + New client level edit box Caixa de edição no nível de novo cliente - + Custom Directory Server Address Endereço de Servidor de Diretório Personalizado @@ -1588,9 +1619,8 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Caixa de edição do endereço de servidor central - Current Connection Status Parameter - Parâmetros do Estado da Conexão + Parâmetros do Estado da Conexão The ping time is the time required for the audio stream to travel from the client to the server and back again. 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. @@ -1605,44 +1635,42 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de A taxa de transmissão depende do tamanho do pacote de áudio e da configuração de compactação de áudio. Verifique se a taxa de transmissão não é maior que a taxa disponível (verifique a taxa de upload da sua ligação à Internet usando, por exemplo, o speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Se este indicador LED ficar vermelho, você não irá divertir-se muito ao usar o + Se este indicador LED ficar vermelho, você não irá divertir-se muito ao usar o - software. - . + . ASIO Setup Configuração ASIO - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. vai aumentar a quantidade de dados da transmissão. Verifique se a taxa de upload não ultrapassa a velocidade de upload disponível da sua conexão à Internet. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). A taxa de transmissão do áudio depende do tamanho do pacote de áudio e da configuração de compactação de áudio. Verifique se a taxa de transmissão não é maior que a taxa disponível (verifique a taxa de upload da sua conexão à Internet usando, por exemplo, o speedtest.net). - + Mono-in/Stereo-out Entrada Mono/Saída Estéreo - - - + + + Stereo Estéreo @@ -1663,7 +1691,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de - + L L @@ -1703,22 +1731,22 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Caso a configuração automática do jitter buffer estiver ativada, os buffers de rede do cliente local e do servidor remoto são configurados com um valor conservador para minimizar a probabilidade de perda de áudio. Para ajustar o atraso/latência do áudio, é recomendável desativar a funcionalidade de configuração automática e diminuir o tamanho do jitter buffer manualmente usando os controles deslizantes até que a quantidade de perdas de áudio lhe sejam pessoalmente aceitáveis. O indicador LED representará as interrupções de áudio do jitter buffer local através de uma luz vermelha. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. A configuração do atraso do buffer (buffer delay) é uma configuração fundamental da aplicação. Esta configuração tem influência em muitas propriedades da conexão. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 amostras: Configuração preferida. Fornece menor latência, mas não funciona com todas as placas de som. - + 128 samples: Should work for most available sound cards. 128 amostras: Deve funcionar na maioria das placas de som disponíveis. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 amostras: Deve apenas ser usada se tiver um computador muito lento ou uma ligação lenta à Internet. @@ -1727,7 +1755,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pela aplicação. Nesse caso, a configuração de atraso do buffer estará desativada e deve ser alterada no driver da placa de som. No Windows, pressione o botão Configuração do Driver para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Se nenhum atraso do buffer estiver selecionado e todas as configurações estiverem desativadas, um atraso do buffer não suportado será usado pelo driver. A aplicação ainda funcionará com essa configuração, mas com desempenho restrito. @@ -1736,160 +1764,158 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Se as configurações de atraso do buffer estiverem desativadas, é porque o driver de áudio proibe modificar essa configuração a partir da aplicação. No Windows, pressione o botão Configuração do Driver para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. - + Skin Aparência - + Select the skin to be used for the main window. - Selecione a aparência para utilizada na janela principal. + Selecione a aparência para ser utilizada na janela principal. - + Skin combo box Seletor de aparência - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Seleciona o número de canais de áudio a serem usados para a comunicação entre cliente e servidor. Existem três modos disponíveis: - + and e - + These modes use one and two audio channels respectively. Estes modos usam um e dois canais de áudio, respectivamente. - + Mono in/Stereo-out Entrada Mono/Saída Estéreo - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. O sinal de áudio enviado ao servidor é mono, mas o sinal de retorno é estéreo. Isso é útil quando a placa de som coloca o instrumento e o microfone em canais diferentes. Nesse caso, os dois sinais de entrada podem ser misturados num canal mono, mas a mistura do servidor pode ser ouvida em estéreo. - + Enabling Habilitando o modo - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Quanto maior a qualidade de áudio, maior a quantidade de dados da transmissão. Verifique se a taxa de upload não ultrapassa a velocidade de upload disponível da sua conexão à Internet. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Esta opção define o nível do fader de um cliente novo, em percentagem. Se um cliente novo conecta-se ao mesmo servidor, este irá ter o nível do fader específicado, exceto se já definiu o nível do fader desse cliente a partir de uma conexão anterior que tenha sido guardada. - + Input Boost Still thinking between "Impulso" or "Aumento" Impulso de Entrada - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Esta configuração permite que você aumente o nível do seu sinal de entrada em fatores de até 10 (+ 20dB). Se o seu som estiver muito baixo, primeiro tente aumentar o nível aproximando-se do microfone, ajustando seu equipamento de som ou aumentando os níveis de entrada nas configurações do sistema operacional. Somente se isso falhar, defina um fator aqui. Se o seu som estiver muito alto, distorcido e cortado, esta opção não ajudará. Não use isso. A distorção ainda estará lá. Em vez disso, diminua o nível de entrada ficando mais longe do microfone, ajustando o equipamento de som ou diminuindo as configurações de entrada do sistema operacional. - + Input Boost combo box Seletor do Impulso de Entrada - + Leave this blank unless you need to enter the address of a directory server other than the default. Deixe este campo em branco exceto se necessitar de introduzir um endereço alternativo de um servidor de diretório. - + Directory server address combo box Seletor do endereço do servidor de diretório - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - A latência da conexão é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua conexão à Internet não é suficiente. + A latência da conexão é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua conexão à Internet não é suficiente. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - A latência geral é calculada a partir da latência da conexão atual e do atraso introduzido pelas configurações de buffer. + A latência geral é calculada a partir da latência da conexão atual e do atraso introduzido pelas configurações de buffer. - + Number of Mixer Panel Rows Número de Linhas do Painel do Mixer - + Adjust the number of rows used to arrange the mixer panel. Ajusta o número de linhas usadas para organizar o painel do mixer. - + Number of Mixer Panel Rows spin box Spinner Número de Linhas do Painel do Mixer - + Feedback Protection Microfonia ou realimentação? TBD Proteção de Microfonia - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Permite a proteção de microfonia detectar realimentação acústica entre microfone e falantes. - + Feedback Protection check box Caixa de seleção Proteção de Microfonia - + ASIO Device Settings Definições de Dispositivo ASIO - + Low Baixa - - + + Normal Normal - + High Alta - + Fancy Sofisticada - + Compact Compacta @@ -1958,78 +1984,78 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Servidor Padrão (America do Norte) - + preferred preferido - + Musician Profile Perfil do músico - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Escreva o seu nome ou um apelido aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode também definir uma imagem do instrumento que toca e uma bandeira do país onde vive. A cidade onde 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 Jamulus server. This tag will also be shown at each client which is connected to the same server as you. O que definir aqui aparecerá abaixo do seu fader no mixer quando estiver conectado a um servidor Jamulus. Esta etiqueta também será exibida em cada cliente que estiver conectado ao mesmo servidor. - + Alias or name edit box Caixa de edição do nome ou apelido - + 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 Seletor do nível de habilidade - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - - + + Size: Tamanho: - + Buffer Delay Atraso do buffer - + Buffer Delay: Atraso do buffer: @@ -2320,7 +2346,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Mapeamento do Canal de Saída - + Enable Small Network Buffers Habilitar Buffers de Rede Pequenos @@ -2400,69 +2426,63 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Configuração de Áudio/Rede - + Jitter Buffer Jitter Buffer - + Auto Auto - + Local Local - + Server Servidor - - + + Size Tamanho - + kbps - + kbps - - - ms - - - - + Input Boost Impulso de Entrada - + Feedback Protection Proteção de Microfonia - + Enable Ativar - + Input Balance Equilíbrio de Entrada - + Pan - Pan + Bal - + Center Centro @@ -2481,12 +2501,11 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Qualidade de Áudio - Measurements - Medições + Medições - + Advanced Setup Configuração Avançada @@ -2495,7 +2514,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Endereço do Servidor de Diretório Personalizado: - + New Client Level Nível de Novo Cliente @@ -2510,14 +2529,13 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Idioma - + % % - Local Jitter Buffer - Jitter buffer local + Jitter buffer local Fancy Skin @@ -2528,7 +2546,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Mostrar Níveis de Canais - + Custom Directory Server Address: Endereço do Servidor de Diretório Personalizado: @@ -2537,26 +2555,22 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de Endereço do Servidor Central: - + Audio Stream Rate Taxa de Transmissão de Áudio - - - + val val - Ping Time - Latência da Ligação + Latência da Ligação - Overall Delay - Latência Geral + Latência Geral @@ -2760,12 +2774,12 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de &About Jamulus... - &Sobre o Jamulus... + &Sobre o Jamulus... About &Qt... - Sobre o &Qt... + Sobre o &Qt... &About... @@ -2774,7 +2788,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de About Qt - Sobre o Qt + Sobre o Qt @@ -3689,7 +3703,7 @@ Silenciamos seu canal e ativamos 'Silenciar-me'. Resolva o problema de List - Lista + Lista diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 979a79fbe1..d55781fd19 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -667,8 +667,9 @@ Clicar nesse botão altera a legenda do botão de Ligar para Desligar, ou seja, implementa uma funcionalidade de alternação para conectar e desconectar o cliente + software. - . + . Local Audio Input Fader @@ -691,8 +692,9 @@ Seleção do canal direito para reverberação + If this LED indicator turns red, you will not have much fun using the - Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o + Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o @@ -823,38 +825,38 @@ Indicador LED do estado dos buffers - - + + C&onnect &Ligar - + software upgrade available actualização de software disponível - + &File &Ficheiro - + &View &Ver - + &Connection Setup... &Ligar a Servidor... - + My &Profile... Meu &Perfil... - + C&hat... &Mensagens... @@ -863,7 +865,7 @@ &Definições... - + &Analyzer Console... Consola de &Análise... @@ -872,22 +874,22 @@ &Usar Painel de Mistura de Duas Linhas - + Clear &All Stored Solo and Mute Settings Limpar &Todas as Configurações de Solo e Mudo - + Ok Ok - + E&xit &Sair - + &Edit &Editar @@ -980,103 +982,118 @@ O CPU do cliente ou servidor está a 100%. - + + Current Connection Status Parameter + Parâmetros do Estado da Ligação + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer. + + + &Load Mixer Channels Setup... A&brir configuração da mistura... - + &Save Mixer Channels Setup... Salvar &configuração da mistura... - + Audio/Network &Settings... Definições de Audio/&Rede... - + A&dvanced Settings... &Definições Avançadas... - + N&o User Sorting Nã&o Ordenar Canais - + Sort Users by &Name Ordenar Canais por &Nome - + Sort Users by &Instrument Ordenar Canais por &Instrumento - + Sort Users by &Group Ordenar Canais por &Grupo - + Sort Users by &City Ordenar Canais por &Cidade - + Set All Faders to New Client &Level Definir Todos os Canais para Níve&l de Novo Cliente - + Auto-Adjust all &Faders Ajustar Auto. todos os &Faders - + Directory Server Servidor de Diretório - - + + Select Channel Setup File Selecione o ficheiro de configuração da mistura - + user utilizador - + users utilizadores - + Connect Ligar - + Settings Definições - + Chat Mensagens - + Enable feedback detection Activar detecção de feedback - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -1085,12 +1102,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe O seu canal foi silenciado e foi activada a função 'Silenciar-me'. Por favor resolva o problema de feedback antes de continuar. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. A sua placa de som não está a funcionar correctamente. Abra a janela das definições e verifique a selecção do dispositivo e as configurações do driver. - + D&isconnect Desl&igar @@ -1098,47 +1115,62 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P CClientDlgBase - + Delay Latência - Buffers - Buffers + Buffers - + Input Entrada - + L L - + R R - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself Silenciar-&me - + &Settings Definiçõe&s - + &Chat Me&nsagens - + C&onnect &Ligar @@ -1151,32 +1183,32 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Centro - + Reverb Reverb - + Left Esquerdo - + Right Direito - + MUTED (Other people won't hear you) MUDO (Outras pessoas não o vão ouvir) - + Set up your audio, connect to a server and start jamming! Configure o seu áudio, ligue-se a um servidor e comece a tocar! - + Update check Verificação de actualização @@ -1225,180 +1257,179 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Interruptor do jitter buffer automático - Jitter buffer status LED indicator - Indicador LED de estado do jitter buffer + Indicador LED de estado do jitter buffer - + Sound Card Device Dispositivo da Placa de Som - + The ASIO driver (sound card) can be selected using O driver ASIO (placa de som) pode ser selecionado usando o - + 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. no Windows. No MacOS/Linux, não é possível seleccionar a placa de som. Se o driver ASIO selecionado não for válido, uma mensagem de erro será exibida e o driver válido anterior será selecionado. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. Se o driver for selecionado durante uma ligação ativa, a ligação será interrompida, o driver será alterado e a ligação reiniciada automaticamente. - + Sound card device selector combo box Seletor de dispositivo da placa de som - + If 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. Caso o driver ASIO4ALL seja usado, note que esse driver geralmente introduz aprox. 10-30 ms de atraso de áudio adicional. Dado isto, é recomendável usar uma placa de som com um driver ASIO nativo. - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Se estiver a usar o driver kX ASIO, certifique-se de ligar as entradas ASIO no painel de configurações do kX DSP. - + Sound Card Channel Mapping Mapeamento de Canais da Placa de Som - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. Caso o dispositivo selecionado da placa de som ofereça mais que um canal de entrada ou saída, as configurações de Mapeamento de canais de entrada e de saída estarão visíveis. - + For each Para cada canal de entrada/saída do - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. (canal esquerdo e direito), um canal real da placa de som pode ser selecionado. - + Left input channel selection combo box Seletor de canal de entrada esquerdo - + Right input channel selection combo box Seletor de canal de entrada direito - + Left output channel selection combo box Seletor de canal de saída esquerdo - + Right output channel selection combo box Seletor de canal de saída direito - + Enable Small Network Buffers Activar Buffers de Rede Pequenos - + 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 Se ativado, o suporte para pacotes de áudio de rede muito pequenos é ativado. Pacotes de rede muito pequenos serão apenas realmente usados se o atraso do buffer da placa de som for menor que - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. amostras. Quanto menor o buffer da rede, menor a latência do áudio. Mas, ao mesmo tempo, a carga da rede e a probabilidade de interrupção do áudio também aumentam. - + Enable small network buffers check box Caixa de activação de buffers de rede pequenos - + Sound Card Buffer Delay Atraso do Buffer da Placa de Som - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Alguns drivers da placa de som não permitem que o atraso do buffer seja definido a partir da aplicação. Nesse case, a configuração de atraso do buffer é desabilitada e terá que ser alterada usando o driver da placa de som. No Windows, pressione o botão Definições do Dispositivo ASIO para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o tamanho do buffer. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Se as configurações de atraso do buffer estiverem desactivadas, o driver de áudio não permite essa configuração através da aplicação. No Windows, pressione o botão Definições do Dispositivo ASIO para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o tamanho do buffer. - + Sound card driver settings Definições do driver da placa de som - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Isto abre as configurações do driver da sua placa de som. Alguns drivers permitem que altere as configurações do buffer, outros como o ASIO4ALL permitem que escolha a entrada ou saída do(s) seu(s) dispositivo(s). Mais informações podem ser encontradas em jamulus.io. - + Opens the driver settings. Note: Abre as configurações do driver. Nota: - + currently only supports devices supporting a sample rate of de momento apenas suporta dispositivos que suportem uma taxa de amostragem de - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Não poderá seleccionar um driver/dispositivo que não suporte. Para obter ajuda, visite jamulus.io. - + ASIO Device Settings push button Botão das Definições do Dispositivo ASIO - + Language Linguagem - + Select the language to be used for the user interface. - + Language combo box - - - + + + None Nenhum - + Center Centro - + R R @@ -1411,7 +1442,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P . Esta configuração tem influência em muitas propriedades da ligação. - + Three buffer sizes are supported Três tamanhos de buffer são suportados @@ -1444,12 +1475,12 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P ainda funcionará com essa configuração, mas com desempenho restrito. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. O atraso do buffer influencia o estado da ligação, a taxa de upload atual e a latência geral. Quanto menor o atraso do buffer, maior a probabilidade de a luz vermelha no indicador de estado (interrupções), maior a taxa de upload e menor a latência geral. - + The buffer setting is therefore a trade-off between audio quality and overall delay. A configuração do buffer é, portanto, uma troca entre qualidade de áudio e latência geral. @@ -1462,17 +1493,17 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P . No Windows, pressione o botão <i>Configuração do Driver</i> para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração <i>Jack</i> para alterar o atraso do buffer. - + 64 samples setting radio button Botão de configuração de 64 amostras - + 128 samples setting radio button Botão de configuração de 128 amostras - + 256 samples setting radio button Botão de configuração de 256 amostras @@ -1505,7 +1536,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Caixa de activação para exibir níveis de canais - + Audio Channels Canais de Áudio @@ -1522,12 +1553,12 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. - + Audio channels combo box Seletor de canais áudio - + Audio Quality Qualidade de Áudio @@ -1536,12 +1567,12 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Selecione a qualidade de áudio desejada. Pode ser selecionada uma qualidade de áudio baixa, normal ou alta. Quanto maior a qualidade do áudio, maior a taxa de dados do fluxo de áudio. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. - + Audio quality combo box Seletor de qualidade áudio - + New Client Level Nível de Novo Cliente @@ -1550,12 +1581,12 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P A configuração de nível de novo cliente define, em percentagem, o nível do fader de um novo cliente ligado. Por exemplo, se um cliente novo se ligar ao servidor atual, o seu canal terá o nível inicial do fader especificado, excepto quando um diferente nível do fader de uma ligação anterior desse mesmo cliente já tenha sido definido. - + New client level edit box Caixa de edição no nível de novo cliente - + Custom Directory Server Address Endereço do Servidor de Diretório Personalizado @@ -1580,9 +1611,8 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Caixa de edição do endereço do servidor central - Current Connection Status Parameter - Parâmetros do Estado da Ligação + Parâmetros do Estado da Ligação The ping time is the time required for the audio stream to travel from the client to the server and back again. 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. @@ -1597,44 +1627,42 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P A taxa de transmissão depende do tamanho do pacote de áudio e da configuração de compactação de áudio. Verifique se a taxa de transmissão não é maior que a taxa disponível (verifique a taxa de upload da sua ligação à Internet usando, por exemplo, o speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Se este indicador LED ficar vermelho, não se irá divertir muito ao usar o + Se este indicador LED ficar vermelho, não se irá divertir muito ao usar o - software. - . + . ASIO Setup Configuração ASIO - - + + Mono Mono - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. vai aumentar a quantidade de dados da transmissão. Verifique se a taxa de upload não ultrapassa a velocidade de upload disponível da sua ligação à Internet. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). A taxa de transmissão do áudio depende do tamanho do pacote de áudio e da configuração da compactação de áudio. Verifique se a taxa de transmissão não é maior que a sua taxa de upload disponível (verifique isto com um serviço como o speedtest.net). - + Mono-in/Stereo-out Entrada Mono/Saída Estéreo - - - + + + Stereo Estéreo @@ -1655,7 +1683,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P - + L L @@ -1695,22 +1723,22 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Caso a configuração automática do jitter buffer estiver ativada, os buffers de rede do cliente local e do servidor remoto são configurados com um valor conservador para minimizar a probabilidade de perda de áudio. Para ajustar o atraso/latência do áudio, é recomendável desativar a funcionalidade de configuração automática e diminuir o tamanho do jitter buffer manualmente usando os controles deslizantes até que a quantidade de perdas de áudio lhe sejam pessoalmente aceitáveis. O indicador LED representará as interrupções de áudio do jitter buffer local através de uma luz vermelha. - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. A configuração do atraso do buffer (buffer delay) é uma configuração fundamental da aplicação. Esta configuração tem influência em muitas propriedades da ligação. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 amostras: Cnfiguração preferida. Fornece menor latência, mas não funciona com todas as placas de som. - + 128 samples: Should work for most available sound cards. 128 amostras: Deve funcionar na maioria das placas de som disponíveis. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 amostras: Deve apenas ser usada se tiver um computador muito lento ou uma ligação lenta à Internet. @@ -1719,7 +1747,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pela aplicação. Nesse caso, a configuração de atraso do buffer estará desativada e deve ser alterada no driver da placa de som. No Windows, pressione o botão Configuração do Driver para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Se nenhum atraso do buffer estiver selecionado e todas as configurações estiverem desativadas, um atraso do buffer não suportado será usado pelo driver. A aplicação ainda funcionará com essa configuração, mas com desempenho restrito. @@ -1728,158 +1756,156 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Se as configurações de atraso do buffer estiverem desativadas, é porque o driver de áudio proibe modificar essa configuração a partir da aplicação. No Windows, pressione o botão Configuração do Driver para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. - + Skin Tema - + Select the skin to be used for the main window. Selecione o tema a ser usado na janela principal. - + Skin combo box Caixa de selecção do tema - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Selecione o número de canais de áudio a serem usados para a comunicação entre cliente e servidor. Existem três modos disponíveis: - + and e - + These modes use one and two audio channels respectively. Estes modos usam um e dois canais de áudio, respectivamente. - + Mono in/Stereo-out Entrada Mono/Saída Estéreo - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. O sinal de áudio enviado ao servidor é mono, mas o sinal de retorno é estéreo. Isso é útil quando a placa de som coloca o instrumento e o microfone em canais diferentes. Nesse caso, os dois sinais de entrada podem ser misturados num canal mono, mas a mistura do servidor pode ser ouvida em estéreo. - + Enabling Activar o modo - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Quanto maior a qualidade de áudio, maior a quantidade de dados da transmissão. Verifique se a taxa de upload não ultrapassa a velocidade de upload disponível da sua ligação à Internet. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Esta opção define o nível do fader de um cliente novo, em percentagem. Se um cliente novo se liga ao mesmo servidor, este irá ter o nível do fader específicado, excepto se já definiu o nível do fader desse cliente previamente. - + Input Boost Ampliação de Sinal de Entrada - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Esta definição permite aumentar o nível de sinal de entrada até um factor de 10 (+20dB). Se o seu som está muito baixo, tente primeiro aumentar o nível posicionando-se mais perto do microfone, ajustando o seu equipamento de áudio ou aumentando o volume nas definições do seu sistema operativo. Apenas se tudo isto falhar deverá tentar esta opção. Se o seu som estiver demasiado alto, distorcido ou a clipar, esta opção não irá ajudar. A distorção irá permanecer. Em vez disso, diminua o volume do sinal de entrada afastando-se do microfone, ajustando o seu equipamento de som ou baixando o volume nas definições do seu sistema operativo. - + Input Boost combo box Caixa de selecção da Ampliação de Sinal de Entrada - + Leave this blank unless you need to enter the address of a directory server other than the default. Deixe este campo em branco excepto se necessitar de introduzir um endereço alternativo de um servidor de diretório. - + Directory server address combo box Caixa de Selecção do Servidor de Diretório - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente. + A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede e deve ser cerca de 20-30 ms. Se esta latência for maior que 50 ms, a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer. + A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer. - + Number of Mixer Panel Rows Número de Linhas do Painel de Mistura - + Adjust the number of rows used to arrange the mixer panel. Ajusta o número de linhas utilizadas para organizar o painel de mistura. - + Number of Mixer Panel Rows spin box Caixa de Selecção do Número de Linhas do Painel de Mistura - + Feedback Protection Protecção Contra Feedback - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Active a protecção contra feedback para detectar feedback acústico entre o microfone e as colunas. - + Feedback Protection check box Caixa de Activação da Protecção Contra Feedback - + ASIO Device Settings Definições do Dispositivo ASIO - + Low Baixa - - + + Normal Normal - + High Alta - + Fancy Sofisticado - + Compact Compacto @@ -1948,78 +1974,78 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Servidor Padrão (America do Norte) - + preferred preferido - + Musician Profile Perfil do músico - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Escreva 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 também definir uma imagem do instrumento que toca e uma bandeira do país onde vive. A cidade onde 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 Jamulus server. This tag will also be shown at each client which is connected to the same server as you. O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor Esta etiqueta também será exibida em cada cliente que estiver ligado ao mesmo servidor. - + 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 - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - - + + Size: Tamanho: - + Buffer Delay Atraso do buffer - + Buffer Delay: Atraso do buffer: @@ -2310,7 +2336,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Mapeamento do Canal de Saída - + Enable Small Network Buffers Activar Buffers de Rede Pequenos @@ -2390,69 +2416,63 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Configuração Audio/Rede - + Jitter Buffer Jitter Buffer - + Auto Auto - + Local Local - + Server Servidor - - + + Size Tamanho - + kbps - - - ms - - - - + Input Boost Ampliação de Sinal de Entrada - + Feedback Protection Protecção Contra Feedback - + Enable Activar - + Input Balance Panorâmica da Entrada - + Pan Pan - + Center Centro @@ -2471,12 +2491,11 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Qualidade de Áudio - Measurements - Medições + Medições - + Advanced Setup Configurações Avançadas @@ -2485,7 +2504,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Servidor Central Personalizado: - + New Client Level Nível de Novo Cliente @@ -2500,14 +2519,13 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Linguagem - + % % - Local Jitter Buffer - Jitter Buffer Local + Jitter Buffer Local Fancy Skin @@ -2518,7 +2536,7 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Mostrar Níveis de Canais - + Custom Directory Server Address: Endereço do Servidor de Diretório Personalizado: @@ -2527,26 +2545,22 @@ O seu canal foi silenciado e foi activada a função 'Silenciar-me'. P Endereço do Servidor Central: - + Audio Stream Rate Taxa de Transmissão de Áudio - - - + val val - Ping Time - Latência da Ligação + Latência da Ligação - Overall Delay - Latência Geral + Latência Geral diff --git a/src/res/translation/translation_sk_SK.ts b/src/res/translation/translation_sk_SK.ts index 60d7acbb4f..bb2638211f 100644 --- a/src/res/translation/translation_sk_SK.ts +++ b/src/res/translation/translation_sk_SK.ts @@ -707,38 +707,63 @@ LED indikátor stavu bufferov - - + + Current Connection Status Parameter + + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + + + + + If this LED indicator turns red, you will not have much fun using the + Ak sa dióda zmení na červenú, veľa zábavy si s touto aplikáciou + + + + software. + neužijete. + + + + C&onnect &Pripojiť - + software upgrade available dostupná aktualizácia softvéru - + &File &Súbor - + &View Pohľ&ad - + &Connection Setup... &Nastavenie pripojenia... - + My &Profile... Môj &profil... - + C&hat... &Chat... @@ -747,82 +772,82 @@ N&astavenia... - + &Analyzer Console... &Konzola analyzátora... - + N&o User Sorting Netriediť &používateľov - + Sort Users by &City Triediť používateľov podľa mes&ta - + Clear &All Stored Solo and Mute Settings &Vypnúť všetky nastavenia sólo a stíšení - + Set All Faders to New Client &Level Nastaviť všetky prelínače na ú&roveň nového klienta - + Auto-Adjust all &Faders &Automaticky prispôsobiť všetky prelínače - + Ok Ok - + E&xit U&končiť - + &Load Mixer Channels Setup... &Načítať nastavenia kanálov mixéra... - + &Save Mixer Channels Setup... &Uložiť nastavenia kanálov mixéra... - + Audio/Network &Settings... Nastavenia zvuku/&siete... - + A&dvanced Settings... &Pokročilé nastavenia... - + &Edit Úp&ravy - + Sort Users by &Name Triediť používateľov kanálov podľa &mena - + Sort Users by &Instrument Triediť používateľov kanálov podľa &nástroja - + Sort Users by &Group Triediť používateľov kanálov podľa &skupiny @@ -839,48 +864,48 @@ P - + Directory Server Adresárový server - - + + Select Channel Setup File Vyberte súbor s nastavením kanálov - + user používateľ - + users používatelia - + Connect Pripojiť sa - + Settings Nastavenia - + Chat Chat - + Enable feedback detection Zapnúť detekciu spätnej väzby - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -889,12 +914,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Prosím, vyriešte problém so spätnou väzbou a následne vypnite stíšenie. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Vaša zvuková karta nefunguje správne. Prosím, otvorte okno s nastaveniami a skontrolujte výber zariadenia a nastavenia ovládača. - + D&isconnect O&dpojiť @@ -902,47 +927,62 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro CClientDlgBase - + Delay Oneskorenie - Buffers - Buffery + Buffery - + Input Vstup - + L Ľ - + R P - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself &Stíšiť ma - + &Settings &Nastavenia - + &Chat &Chat - + C&onnect &Pripojiť @@ -955,32 +995,32 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Stred - + Reverb Ozvena (rev) - + Left Ľavý - + Right Pravý - + MUTED (Other people won't hear you) STÍŠENÉ (Nebude vás počuť) - + Set up your audio, connect to a server and start jamming! Nastavte zvuk, pripojte sa na server a začnite jamovať! - + Update check Kontrola aktualizácií @@ -1013,240 +1053,235 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro - - Jitter buffer status LED indicator - - - - + Sound Card Device Zariadenie zvukovej karty - + The ASIO driver (sound card) can be selected using Ovládač (zvukovej karty) ASIO môžete vybrať použitím - + 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. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Sound card device selector combo box - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + Sound Card Channel Mapping - + For each Pre každý - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. vstupný/výstupný kanál (ľavý a pravý kanál) môžete vybrať iný kanál zvukovej karty. - + Left input channel selection combo box - + Right input channel selection combo box - + Left output channel selection combo box - + Right output channel selection combo box - + Enable Small Network Buffers Povoliť malé sieťové buffre - + 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 - + Enable small network buffers check box - + Sound Card Buffer Delay Oneskorenia buffera zvukovej karty - + Three buffer sizes are supported Sú podporované 3 veľkosti buffera - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - + The buffer setting is therefore a trade-off between audio quality and overall delay. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - + Sound card driver settings - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. - + Opens the driver settings. Note: Otvorí nastavenia ovládača. Poznámka: - + currently only supports devices supporting a sample rate of - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. - + 128 samples setting radio button - + 256 samples setting radio button - + Language Jazyk - + Select the language to be used for the user interface. - + Language combo box - + Input Boost Zosilnenie vstupu - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. - + Input Boost combo box - + Directory server address combo box - + Number of Mixer Panel Rows - + Adjust the number of rows used to arrange the mixer panel. - + Number of Mixer Panel Rows spin box - + Feedback Protection Ochrana pred spätnou väzbou - + Enable feedback protection to detect acoustic feedback between microphone and speakers. - + Feedback Protection check box - + Fancy Efektný - + Compact Kompaktný - - - + + + None Nenastavené - + Center Stred - + R P @@ -1255,47 +1290,42 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Zobraziť úrovne kanálov - + Audio Channels Zvukové kanály - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. - + Audio channels combo box - + Audio Quality Kvalita zvuku - + Audio quality combo box - + New Client Level Úroveň nového klienta - + New client level edit box - - Current Connection Status Parameter - - - - + If 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. @@ -1316,7 +1346,7 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro - + L L @@ -1336,69 +1366,67 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Miestny prelínač zvukového vstupu (ľavý/pravý) - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. - + 64 samples setting radio button - + ASIO Device Settings push button - + Custom Directory Server Address Adresa vlastného adresárového servera - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Ak sa dióda zmení na červenú, veľa zábavy si s touto aplikáciou + Ak sa dióda zmení na červenú, veľa zábavy si s touto aplikáciou - software. - neužijete. + neužijete. ASIO Setup Nastavenie ASIO - - + + Mono - + Mono-in/Stereo-out Mono-dnu/Stereo-von - - - + + + Stereo Stereo @@ -1423,22 +1451,22 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Nastavenie oneskorenia buffera je základným nastavením tohto programu. Toto nastavenie ovplyvňuje mnoho vlastností spojenia. - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 vzoriek. Odporúčané nastavenie. Poskytuje najnižšiu latenciu, ale nefunguje pri všetkých zvukových kartách. - + 128 samples: Should work for most available sound cards. 128 vzoriek. Malo by fungovať pre väčšinu dostupných zvukových kariet. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 256 vzoriek: Toto nastavenie by ste mali použiť iba na veľmi pomalých počítačoch alebo pri pomalom internetovom pripojení. @@ -1447,103 +1475,93 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Niektoré ovládače zvukových kariet nepovoľujú meniť oneskorenie buffera z prostredia aplikácie. V takom prípade je nastavenie oneskorenia buffera neaktívne a musíte ho zmeniť použitím ovládača zvukovej karty. Vo Windows kliknite na tlačidlo Nastaviť ASIO a otvoríte ovládací panel ovládača. V LInuxe použite pre zmenu veľkosti buffera konfiguračný nástroj Jack. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. - + Skin Vzhľad - + Select the skin to be used for the main window. Vyberte vzhľad, ktorý sa aplikuje na hlavné okno programu. - + Skin combo box - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: - + and - + These modes use one and two audio channels respectively. - + Mono in/Stereo-out Mono dnu/Stereo von - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. - + Enabling Zapnutím - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. - + Leave this blank unless you need to enter the address of a directory server other than the default. - - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - - - - - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - - - - + ASIO Device Settings - + Low Nízka - - + + Normal Normálna - + High Vysoká @@ -1600,78 +1618,78 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Predvolený - + preferred preferované - + Musician Profile Profil hudobníka - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Sem napíšte vaše meno alebo prezývku, aby ostatní hudobníci vedeli, s kým majú tú česť. Rovnako môžete pridať obrázok hudobného nástroja, na ktorý hráte a vlajku krajiny, v ktorej sa nachádzate. Je možné pridať aj mesto a úroveň vašej hry na hudobný nástroj. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. To, čo sem napíšete sa zobrazí pri vašom prelínači na mixéri po tom, ako sa pripojíte k Jamulus serveru. Táto menovka sa rovnako zobrazí každému klientovi, ktorý sa pripojí k tomu istému serveru ako vy. - + Alias or name edit box - + Instrument picture button Tlačidlo s obrázkom hud. nástroja - + Country flag button Tlačidlo s vlajkou krajiny - + City edit box - + Skill level combo box - + Beginner Začiatočník - + Intermediate Pokročilý - + Expert Expert - - + + Size: Veľkosť: - + Buffer Delay Oneskorenie buffera - + Buffer Delay: Oneskorenie buffera: @@ -1962,7 +1980,7 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Mapovanie výstupného kanála - + Enable Small Network Buffers Povoliť malé sieťové buffre @@ -2042,69 +2060,63 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Nastavenie zvuku/siete - + Jitter Buffer Jitter Buffer - + Auto Automaticky - + Local Lokálny - + Server Server - - + + Size Veľkosť - + kbps - - - ms - - - - + Input Boost Zosilnenie vstupu - + Feedback Protection Ochrana pred spätnou väzbou - + Enable Zapnúť - + Input Balance Vyváženie vstupu - + Pan Posun - + Center Stred @@ -2123,12 +2135,11 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Kvalita zvuku - Measurements - Štatistiky + Štatistiky - + Advanced Setup Pokročilé nastavenia @@ -2137,7 +2148,7 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Adresa vlastného adresárového servera: - + New Client Level Úroveň nového klienta @@ -2152,45 +2163,40 @@ Stíšili sme váš kanál a aktivovali nastavenia 'Stíšiť ma'. Pro Jazyk - + % % - Local Jitter Buffer - Miestny jitter buffer + Miestny jitter buffer Display Channel Levels Zobraziť úrovne kanálov - + Custom Directory Server Address: Adresa vlastného centrálneho servera: - + Audio Stream Rate Rýchlosť streamovania zvuku - - - + val hodn - Ping Time - Čas odpovede + Čas odpovede - Overall Delay - Celkové oneskorenie + Celkové oneskorenie diff --git a/src/res/translation/translation_sv_SE.ts b/src/res/translation/translation_sv_SE.ts index a40160c5b7..dcc58add1c 100644 --- a/src/res/translation/translation_sv_SE.ts +++ b/src/res/translation/translation_sv_SE.ts @@ -724,38 +724,63 @@ LED-indikator för buffertstatus - - + + Current Connection Status Parameter + Parameter för aktuell anslutningsstatus + + + + The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. + Ping-tiden är den tid som krävs för ljudströmmen att resa från klienten till servern och tillbaka igen. Denna fördröjning införs av nätverket och bör vara cirka 20-30 ms. Om denna fördröjning är högre än cirka 50 ms är ditt avstånd till servern för stort eller din internetanslutning är inte tillräcklig. + + + + Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. + Övergripande fördröjning beräknas utifrån den aktuella Ping-tiden och den fördröjning som införts av de aktuella buffertinställningarna. + + + + If this LED indicator turns red, you will not have much fun using the + Om den här LED-indikatorn blir röd kommer du inte ha så kul med att använda + + + + software. + applikationen. + + + + C&onnect A&nslut - + software upgrade available mjukvaruuppdatering tillgänglig - + &File &Arkiv - + &View &Visa - + &Connection Setup... &Anslutningsinställningar... - + My &Profile... Min &profil... - + C&hat... &Chatt... @@ -764,17 +789,17 @@ &Inställningar... - + &Analyzer Console... Analys&konsol... - + N&o User Sorting Ingen kanals&ortering - + Sort Users by &City Sortera användarna efter S&tad @@ -783,38 +808,38 @@ Dela upp &mixerpanelen i två rader - + Clear &All Stored Solo and Mute Settings &Rensa alla lagrade solo och tystade inställningar - + Auto-Adjust all &Faders Möjligtvis annat ordval skulle vara bättre. Justera alla &mixers automatiskt - + Connect Anslut - + Settings Inställningar - + Chat Chatt - + Enable feedback detection Aktivera återkopplingsdetektering - + Audio feedback or loud signal detected. We muted your channel and activated 'Mute Myself'. Please solve the feedback issue first and unmute yourself afterwards. @@ -823,12 +848,12 @@ We muted your channel and activated 'Mute Myself'. Please solve the fe Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen lös problemet med ljudåterkopplingen först och slå sedan på dittt ljud igen. - + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. Ditt ljudkort fungerar inte korrekt. Öppna inställningar och kontrollera enhetsvalet och drivrutinsinställningarna. - + Ok Okej @@ -837,52 +862,52 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen &Rensa alla lagrade soloinställningar - + Set All Faders to New Client &Level &Ställ in alla mixers till ny klientnivå - + E&xit &Avsluta - + &Load Mixer Channels Setup... &Ladda in mixerkanalinställningarna... - + &Save Mixer Channels Setup... &Spara mixerkanalinställningarna... - + Audio/Network &Settings... Ljud och nätverks&inställningar... - + A&dvanced Settings... A&vancerade inställningar... - + &Edit &Redigera - + Sort Users by &Name Sortera användarna efter &Namn - + Sort Users by &Instrument Sortera användarna efter &Instrument - + Sort Users by &Group Sortera användarna efter &Grupp @@ -899,23 +924,23 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen H - + Directory Server Katalogserver - - + + Select Channel Setup File Välj kanalinställningsfil - + user användare - + users användare @@ -924,7 +949,7 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Ljudkortet fungerar inte som det ska. Kontrollera enhetsvalet och drivrutinsinställningarna. - + D&isconnect Koppla &ner @@ -932,47 +957,62 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen CClientDlgBase - + Delay Fördröjning - Buffers - Buffert + Buffert - + Input Ingång - + L V - + R H - + + Jitter + + + + + Ping + + + + + + ms + + + + &Mute Myself Tysta &mig själv - + &Settings &Inställningar - + &Chat &Chatt - + C&onnect &Koppla upp @@ -985,32 +1025,32 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Mitten - + Reverb Reverb - + Left Vänster - + Right Höger - + MUTED (Other people won't hear you) Du är tystad! (andra hör inte dig) - + Set up your audio, connect to a server and start jamming! Ställ in ditt ljud och anslut till en server. Sedan är det bara att börja jamma! - + Update check Uppdateringskontroll @@ -1038,7 +1078,7 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen - + L V @@ -1103,248 +1143,247 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Auto-jitterbuffert reglage - Jitter buffer status LED indicator - LED-indikator för jitterbufferstatus + LED-indikator för jitterbufferstatus - + Sound Card Device Ljudkortsenhet - + The ASIO driver (sound card) can be selected using ASIO-drivrutinen (ljudkort) kan väljas med - + 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. under Windows. Under MacOS/Linux är inget ljudkortsval möjligt. Om den valda ASIO-drivrutinen inte är giltig visas ett felmeddelande och den tidigare giltiga drivrutinen väljs. - + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. Om drivrutinen väljs under en aktiv anslutning stoppas anslutningen, drivrutinen ändras och anslutningen startas automatiskt igen. - + Sound card device selector combo box Ljudkortsenhetens kombinationsruta - + If 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. Om ASIO4ALL-drivrutinen används, observera att den här drivrutinen vanligtvis introducerar ca. 10-30 ms extra ljudfördröjning. Det rekommenderas därför att använda ett ljudkort med en inbyggd ASIO-drivrutin. - + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. Om du använder kX ASIO-drivrutinen, se till att ansluta ASIO-ingångarna på kX DSP-inställningspanelen. - + Sound Card Channel Mapping Ljudkortets kanalval - + If the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. Om den valda ljudkortsenheten erbjuder mer än en ingångs- eller utgångskanal är inställningarna för inmatningskanalens mappning och utmatningskanal synliga. - + For each För varje - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. ingångs-/utgångskanal (vänster- och högerkanal) kan en annan faktisk ljudkortkanal väljas. - + Left input channel selection combo box Vänster ingångskanalvalskombinationsruta - + Right input channel selection combo box Höger ingångskanalvalskombinationsruta - + Left output channel selection combo box Vänster utgångskanalvalskombinationsruta - + Right output channel selection combo box Höger utgångskanalvalskombinationsruta - + Enable Small Network Buffers Aktivera liten nätverksbuffert - + 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 Om det är aktiverat aktiveras stödet för mycket små nätverksljudpaket. Mycket små nätverkspaket används faktiskt bara om ljudkortsbuffertfördröjningen är mindre än - + samples. The smaller the network buffers, the lower the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. bitars buffert. Ju mindre nätbuffertarna är, desto lägre är ljudet. Men samtidigt ökar nätverksbelastningen och sannolikheten för ljudavbrott ökar också. - + Enable small network buffers check box Aktivera kryssrutan för små nätverksbuffertar - + Sound Card Buffer Delay Ljudkortets buffertfördröjning - + The buffer delay setting is a fundamental setting of this software. This setting has an influence on many connection properties. Inställningen för buffertfördröjning är en grundläggande inställning för denna applikation. Denna inställning påverkar många anslutningsegenskaper. - + Three buffer sizes are supported Tre buffertstorlekar stöds - + 64 samples: The preferred setting. Provides the lowest latency but does not work with all sound cards. 64 bitars buffert: Den rekommenderade inställningen. Den ger den lägsta latensen men fungerar inte med alla ljudkort. - + 128 samples: Should work for most available sound cards. 128 bitars buffert: Bör fungera för alla ljudkort. - + 256 samples: Should only be used on very slow computers or with a slow internet connection. 265 bitars buffert: Ska endast användas med långsamma datorer eller med långsam internetkoppling. - + Some sound card drivers do not allow the buffer delay to be changed from within the application. In this case the buffer delay setting is disabled and has to be changed using the sound card driver. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. Vissa ljudkortdrivrutiner tillåter inte att buffertfördröjningen ändras inifrån programmet. I detta fall är inställningen för buffertfördröjning inaktiverad och måste ändras med hjälp av ljudkortdrivrutinen. På Windows trycker du på knappen ASIO enhetsinställningar för att öppna panelen för drivrutinsinställningar. På Linux använder du Jack-konfigurationsverktyget för att ändra buffertstorleken. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the software. On Windows, press the ASIO Device Settings button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. ASIO enhetsinställningar Om buffertfördröjningsinställningarna är inaktiverade är det förbjudet för ljuddrivrutinen att ändra denna inställning inifrån programvaran. På Windows trycker du på knappen ASIO enhetsinställningar för att öppna panelen för drivrutinsinställningar. På Linux använder du Jack-konfigurationsverktyget för att ändra buffertstorleken. - + Sound card driver settings Ljudkortsinställningar - + This opens the driver settings of your sound card. Some drivers allow you to change buffer settings, others like ASIO4ALL let you choose input or outputs of your device(s). More information can be found on jamulus.io. Detta öppnar drivrutinsinställningarna för ditt ljudkort. Vissa drivrutiner låter dig ändra buffertinställningar, andra som ASIO4ALL låter dig välja in- eller utgångar från din enhet (er). Mer information finns på jamulus.io. - + Opens the driver settings. Note: Öppnardrivrutinsinställningarna. Notera: - + currently only supports devices supporting a sample rate of stöder för närvarande endast enheter som stöder en samplingsfrekvens på - + Hz. You will not be able to select a driver/device which doesn't. For more help see jamulus.io. Hz. Du kommer inte att kunna välja en drivrutin/enhet som inte gör det. För mer hjälp se jamulus.io. - + ASIO Device Settings push button ASIO enhetsinställningsknapp - + Language Språk - + Select the language to be used for the user interface. - + Language combo box - + Input Boost Ingångsförstärkning - + This setting allows you to increase your input signal level by factors up to 10 (+20dB).If your sound is too quiet, first try to increase the level by getting closer to the microphone, adjusting your sound equipment or increasing levels in your operating system's input settings. Only if this fails, set a factor here. If your sound is too loud, sounds distorted and is clipping, this option will not help. Do not use it. The distortion will still be there. Instead, decrease your input level by getting farther away from your microphone, adjusting your sound equipment or by decreasing your operating system's input settings. Denna inställning låter dig öka din insignalnivå med faktor upp till 10 (+ 20dB). Om ditt ljud är för tyst, försök först att höja nivån genom att komma närmare mikrofonen, justera din ljudutrustning eller öka nivåerna i din drift systemets ingångsinställningar. Endast om detta misslyckas, ställ in en faktor här. Om ditt ljud är för högt, låter förvrängt och klipper, hjälper det här alternativet inte. Använd då inte det då förvrängningen kommer fortfarande att finnas där. Sänk istället din ingångsnivå genom att komma längre bort från din mikrofon, justera din ljudutrustning eller genom att minska operativsystemets ingångsinställningar. - + Input Boost combo box Ingångsförstärknings knapp - + Number of Mixer Panel Rows Antal mixerpanelrader - + Adjust the number of rows used to arrange the mixer panel. Justera antalet rader som används för att ordna mixerpanelen. - + Number of Mixer Panel Rows spin box Antal mixerpanelrader i rutan - + Feedback Protection Rundgångsskydd - + Enable feedback protection to detect acoustic feedback between microphone and speakers. Aktivera rundgångsskydd för att upptäcka rundgång mellan mikrofon och högtalare. - + Feedback Protection check box Rundgångsskyddsruta - + ASIO Device Settings ASIO enhetsinställningar - + Center Mitten - + R H @@ -1353,17 +1392,17 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Vissa ljudkortdrivrutiner tillåter inte buffertfördröjningen att ändras från applikationen. I detta fall avbryts inställningen för buffertfördröjning och måste ändras med ljudkortsdrivrutinen. I Windows trycker du på ASIO-inställningsknappen för att öppna drivrutinsinställningspanelen. I Linux använder du Jack-konfigurationsverktyget för att ändra buffertstorleken. - + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The application will still work with this setting but with restricted performance. Om ingen buffertstorlek är vald och alla inställningar är inaktiverade, används en icke-stödd buffertstorlek av drivrutinen. Applikationen fungerar fortfarande med den här inställningen men med begränsad prestanda. - + 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 a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. Den faktiska buffertfördröjningen har påverkan på anslutningsstatusen, den aktuella uppladdningshastigheten och den totala förseningen. Ju lägre buffertstorlek, desto högre är sannolikheten för rött ljus i statusindikatorn (drop outs) och desto högre uppladdningshastighet och desto lägre blir den totala fördröjningen. - + The buffer setting is therefore a trade-off between audio quality and overall delay. Buffertinställningen är därför en avvägning mellan ljudkvalitet och total fördröjning. @@ -1372,17 +1411,17 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Om buffertfördröjningsinställningarna är inaktiverade är det ljuddrivrutinen som begränsar och det är inte möjligt att ändra denna inställning från applikationen. I Windows trycker du på ASIO-inställningsknappen för att öppna drivrutinsinställningspanelen. I Linux använder du Jack-konfigurationsverktyget för att ändra buffertstorleken. - + 64 samples setting radio button 64 bitars buffertknapp - + 128 samples setting radio button 128 bitars buffertknapp - + 256 samples setting radio button 256 bitars buffertknapp @@ -1391,22 +1430,22 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen ASIO-inställningsknapp - + Skin Skal - + Select the skin to be used for the main window. Välj skal som ska användas för huvudfönstret. - + Skin combo box Kombineringsknapp för skal - + Directory server address combo box Kombinationsruta för katalogserveradress @@ -1423,105 +1462,105 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Visa kryssrutan för visa kanalnivåer - + Audio Channels Ljudkanaler - + Selects the number of audio channels to be used for communication between client and server. There are three modes available: Väljer antalet ljudkanaler som ska användas för kommunikation mellan klient och server. Det finns tre lägen tillgängliga: - - + + Mono Mono - + and och - - - + + + Stereo Stereo - + These modes use one and two audio channels respectively. Dessa lägen använder respektive en och två ljudkanaler. - + Mono in/Stereo-out Mono in/Stereo-ut - + The audio signal sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other. In that case the two input signals can be mixed to one mono channel but the server mix is heard in stereo. Ljudsignalen som skickas till servern är mono men retursignalen är stereo. Detta är användbart om ljudkortet har instrumentet på en ingångskanal och mikrofonen på den andra. I så fall kan de två insignalerna blandas till en monokanal men servermixen hörs i stereo. - + Enabling Möjliggör - + mode will increase your stream's data rate. Make sure your upload rate does not exceed the available upload speed of your internet connection. kommer att öka dataströmmen. Se till att din uppladdningshastighet inte överstiger den tillgängliga uppladdningshastigheten för din internetanslutning. - + In stereo streaming mode, no audio channel selection for the reverb effect will be available on the main window since the effect is applied to both channels in this case. I stereo-strömningsläge kommer inget val av ljudkanal för reverb-effekten att finnas tillgängligt i huvudfönstret eftersom effekten tillämpas på båda kanalerna i detta fall. - + Audio channels combo box Kombineringsknapp för ljudkanalerna - + Audio Quality Ljudkvalitet - + The higher the audio quality, the higher your audio stream's data rate. Make sure your upload rate does not exceed the available bandwidth of your internet connection. Ju högre ljudkvalitet, desto högre datahastighet krävs. Se till att din uppladdningshastighet inte överstiger den tillgängliga bandbredden för din internetanslutning. - + Audio quality combo box Kombineringsknapp för ljudkvalitet - + New Client Level Ny klientnivå - + This setting defines the fader level of a newly connected client in percent. If a new client connects to the current server, they will get the specified initial fader level if no other fader level from a previous connection of that client was already stored. Denna inställning definierar fadernivån för en nyansluten klient i procent. Om en ny klient ansluter till den aktuella servern, kommer de att få den angivna initiala fader-nivån om ingen annan fader-nivå från en tidigare anslutning av den klienten redan lagrats. - + New client level edit box Redigeringsruta för en ny klient - + Custom Directory Server Address Anpassad katalogserveradress - + Leave this blank unless you need to enter the address of a directory server other than the default. Lämna detta tomt om du inte behöver ange adressen till en annan katalogserver än standard. @@ -1530,151 +1569,146 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Ändra centralserveradress - Current Connection Status Parameter - Parameter för aktuell anslutningsstatus + Parameter för aktuell anslutningsstatus - The Ping Time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network and should be about 20-30 ms. If this delay is higher than about 50 ms, your distance to the server is too large or your internet connection is not sufficient. - Ping-tiden är den tid som krävs för ljudströmmen att resa från klienten till servern och tillbaka igen. Denna fördröjning införs av nätverket och bör vara cirka 20-30 ms. Om denna fördröjning är högre än cirka 50 ms är ditt avstånd till servern för stort eller din internetanslutning är inte tillräcklig. + Ping-tiden är den tid som krävs för ljudströmmen att resa från klienten till servern och tillbaka igen. Denna fördröjning införs av nätverket och bör vara cirka 20-30 ms. Om denna fördröjning är högre än cirka 50 ms är ditt avstånd till servern för stort eller din internetanslutning är inte tillräcklig. - Overall Delay is calculated from the current Ping Time and the delay introduced by the current buffer settings. - Övergripande fördröjning beräknas utifrån den aktuella Ping-tiden och den fördröjning som införts av de aktuella buffertinställningarna. + Övergripande fördröjning beräknas utifrån den aktuella Ping-tiden och den fördröjning som införts av de aktuella buffertinställningarna. - + Audio Upstream Rate depends on the current audio packet size and compression setting. Make sure that the upstream rate is not higher than your available internet upload speed (check this with a service such as speedtest.net). Uppströmsfrekvensen för ljudet beror på den aktuella ljudpaketstorleken och komprimeringsinställningen. Se till att uppströmshastigheten inte är högre än din tillgängliga internetuppladdningshastighet (kolla detta med en tjänst som exempelvis speedtest.net). - If this LED indicator turns red, you will not have much fun using the - Om den här LED-indikatorn blir röd kommer du inte ha så kul med att använda + Om den här LED-indikatorn blir röd kommer du inte ha så kul med att använda - software. - applikationen. + applikationen. ASIO Setup Inställningar för ASIO - + Mono-in/Stereo-out Mono-in/Stereo-ut - + Low Låg - - + + Normal Normal - + High Hög - + Fancy Fancy - + Compact Kompakt - - - + + + None Ingen - + preferred föredraget - + Musician Profile Musikprofil - + Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. Skriv ditt namn eller ett alias här så att de andra musikerna du vill spela med vet vem du är. Du kan också lägga till en bild av instrumentet du spelar och en flagga för det land du befinner dig i. Din stad och din färdighetsnivå som spelar ditt instrument kan också läggas till. - + What you set here will appear at your fader on the mixer board when you are connected to a Jamulus server. This tag will also be shown at each client which is connected to the same server as you. Det du ställer in här visas på din fader på mixerkortet när du är ansluten till en Jamulus-server. Den här taggen kommer också att visas vid varje klient som är ansluten till samma server som du. - + Alias or name edit box Redigeringsruta för alias eller namn - + Instrument picture button Knapp för instrumentbild - + Country flag button Knapp för landsflagga - + City edit box Redigeringsruta för stad - + Skill level combo box Kombinationsruta för färdighetsnivå - + Beginner Nybörjare - + Intermediate Mellannivå - + Expert Expert - - + + Size: Storlek: - + Buffer Delay Buffertfördröjning - + Buffer Delay: Buffertfördröjning: @@ -2017,7 +2051,7 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Kanalval för utgång - + Enable Small Network Buffers Aktivera små nätverksbuffertar @@ -2097,69 +2131,63 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Ljud och nätverksinställningar - + Jitter Buffer Jitterbuffert - + Auto Automatiskt - + Local Lokalt - + Server Server - - + + Size Nivå - + kbps - - - ms - - - - + Input Boost Ingångsförstärkning - + Feedback Protection Rundgångsskydd - + Enable Aktivera - + Input Balance Ingångsbalans - + Pan Panorera - + Center Mitten @@ -2178,12 +2206,11 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Ljudkvalitet - Measurements - Mätningar + Mätningar - + Advanced Setup Avancerade inställningar @@ -2192,7 +2219,7 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Anpassad katalogserveradress: - + New Client Level Ny klientnivå @@ -2207,45 +2234,40 @@ Vi stängde av din kanal och aktiverade 'Tysta mig själv'. Vänligen Språk - + % % - Local Jitter Buffer - Lokal jitterbuffert + Lokal jitterbuffert Display Channel Levels Visa kanalnivåer - + Custom Directory Server Address: Egen katalogserveradress: - + Audio Stream Rate Ljudströmshastighet - - - + val val - Ping Time - Pingtid + Pingtid - Overall Delay - Total fördröjning + Total fördröjning diff --git a/src/resources.qrc b/src/resources.qrc index bbc1d6f5ad..e6acbcba85 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -45,6 +45,8 @@ res/HLEDBlackSmall.png res/HLEDRedSmall.png res/HLEDYellowSmall.png + res/IndicatorRedFancy.png + res/IndicatorYellowFancy.png res/faderbackground.png diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 2d71da7ab1..3388579ba6 100644 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -593,8 +593,13 @@ void CServerDlg::OnClearRecordingDirClicked() void CServerDlg::OnSysTrayActivated ( QSystemTrayIcon::ActivationReason ActReason ) { - // on double click on the icon, show window in fore ground +#ifdef _WIN32 + // on single or double click on the icon, show window in foreground for windows only + if ( ActReason == QSystemTrayIcon::Trigger || ActReason == QSystemTrayIcon::DoubleClick ) +#else + // on double click on the icon, show window in foreground for all if ( ActReason == QSystemTrayIcon::DoubleClick ) +#endif { ShowWindowInForeground(); } diff --git a/src/serverdlg.h b/src/serverdlg.h index af88a9cc5c..00606c126f 100644 --- a/src/serverdlg.h +++ b/src/serverdlg.h @@ -73,6 +73,7 @@ class CServerDlg : public CBaseDlg, private Ui_CServerDlgBase { showNormal(); raise(); + activateWindow(); } void ModifyAutoStartEntry ( const bool bDoAutoStart ); void UpdateRecorderStatus ( QString sessionDir ); diff --git a/src/settings.cpp b/src/settings.cpp index 41da81b5f0..fb22ceed1d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -798,6 +798,15 @@ if ( GetFlagIniSet ( IniXMLDocument, "server", "defcentservaddr", bValue ) ) pServer->SetEnableRecording ( !bValue ); } } + + // delay panning + if ( !CommandLineOptions.contains ( "--delaypan" ) ) + { + if ( GetFlagIniSet ( IniXMLDocument, "server", "delaypan", bValue ) ) + { + pServer->SetEnableDelayPanning ( bValue ); + } + } } void CServerSettings::WriteSettingsToXML ( QDomDocument& IniXMLDocument ) @@ -837,4 +846,7 @@ void CServerSettings::WriteSettingsToXML ( QDomDocument& IniXMLDocument ) // norecord flag SetFlagIniSet ( IniXMLDocument, "server", "norecord", pServer->GetDisableRecording() ); + + // delay panning + SetFlagIniSet ( IniXMLDocument, "server", "delaypan", pServer->IsDelayPanningEnabled() ); } diff --git a/windows/deploy_windows.ps1 b/windows/deploy_windows.ps1 index efcadd0478..fd2d46f552 100644 --- a/windows/deploy_windows.ps1 +++ b/windows/deploy_windows.ps1 @@ -1,6 +1,6 @@ param( # Replace default path with system Qt installation folder if necessary - [string] $QtInstallPath = "C:\Qt\5.12.3", + [string] $QtInstallPath = "C:\Qt\5.15.2", [string] $QtCompile32 = "msvc2019", [string] $QtCompile64 = "msvc2019_64", [string] $AsioSDKName = "ASIOSDK2.3.2", @@ -190,9 +190,9 @@ Function Initialize-Build-Environment if (-Not (Test-Path -Path $Env:QtQmakePath)) { - Throw "The Qt binaries for Microsoft Visual C++ 2017 (msvc2017) could not be located. " + ` - "Please install Qt with support for MSVC 2017 before running this script," + ` - "then call this script with the Qt install location, for example C:\Qt\5.12.3" + Throw "The Qt binaries for Microsoft Visual C++ 2017 or above could not be located at $QtMsvcSpecPath. " + ` + "Please install Qt with support for MSVC 2017 or above before running this script," + ` + "then call this script with the Qt install location, for example C:\Qt\5.15.2" } # Import environment variables set by vcvarsXX.bat into current scope diff --git a/windows/nsProcess/ConvFunc.h b/windows/nsProcess/ConvFunc.h index 513cd16f0e..739737b084 100644 --- a/windows/nsProcess/ConvFunc.h +++ b/windows/nsProcess/ConvFunc.h @@ -15,27 +15,27 @@ *****************************************************************/ #ifndef _CONVFUNC_ -# define _CONVFUNC_ - -int xatoi ( char* str ); -int xatoiW ( wchar_t* wstr ); -char* xitoa ( int number, char* str, int width ); -wchar_t* xitoaW ( int number, wchar_t* wstr, int width ); -unsigned int xatoui ( char* str ); -unsigned int xatouiW ( wchar_t* wstr ); -char* xuitoa ( unsigned int number, char* str, int width ); -wchar_t* xuitoaW ( unsigned int number, wchar_t* wstr, int width ); -__int64 xatoi64 ( char* str ); -__int64 xatoi64W ( wchar_t* wstr ); -char* xi64toa ( __int64 number, char* str, int width ); -wchar_t* xi64toaW ( __int64 number, wchar_t* wstr, int width ); -int hex2dec ( char* hex ); -int hex2decW ( wchar_t* whex ); -void dec2hex ( unsigned int dec, char* hex, BOOL lowercase, unsigned int width ); -void dec2hexW ( unsigned int dec, wchar_t* whex, BOOL lowercase, unsigned int width ); - -void str2hex ( unsigned char* str, char* hex, BOOL lowercase, unsigned int bytes ); -void hex2str ( char* hex, char* str ); +#define _CONVFUNC_ + +int xatoi(char *str); +int xatoiW(wchar_t *wstr); +char* xitoa(int number, char *str, int width); +wchar_t* xitoaW(int number, wchar_t *wstr, int width); +unsigned int xatoui(char *str); +unsigned int xatouiW(wchar_t *wstr); +char* xuitoa(unsigned int number, char *str, int width); +wchar_t* xuitoaW(unsigned int number, wchar_t *wstr, int width); +__int64 xatoi64(char *str); +__int64 xatoi64W(wchar_t *wstr); +char* xi64toa(__int64 number, char *str, int width); +wchar_t* xi64toaW(__int64 number, wchar_t *wstr, int width); +int hex2dec(char *hex); +int hex2decW(wchar_t *whex); +void dec2hex(unsigned int dec, char *hex, BOOL lowercase, unsigned int width); +void dec2hexW(unsigned int dec, wchar_t *whex, BOOL lowercase, unsigned int width); + +void str2hex(unsigned char *str, char *hex, BOOL lowercase, unsigned int bytes); +void hex2str(char *hex, char *str); #endif @@ -54,27 +54,27 @@ void hex2str ( char* hex, char* str ); * xatoi(" -0045:value") == -45; ********************************************************************/ #if defined xatoi || defined ALLCONVFUNC -# define xatoi_INCLUDED -# undef xatoi -int xatoi ( char* str ) +#define xatoi_INCLUDED +#undef xatoi +int xatoi(char *str) { - int nNumber = 0; - BOOL bMinus = FALSE; - - while ( *str == ' ' ) - ++str; - if ( *str == '+' ) - ++str; - else if ( *str == '-' ) - { - bMinus = TRUE; - ++str; - } - for ( ; *str != '\0' && *str >= '0' && *str <= '9'; ++str ) - nNumber = ( nNumber * 10 ) + ( *str - '0' ); - if ( bMinus == TRUE ) - nNumber = 0 - nNumber; - return nNumber; + int nNumber=0; + BOOL bMinus=FALSE; + + while (*str == ' ') + ++str; + if (*str == '+') + ++str; + else if (*str == '-') + { + bMinus=TRUE; + ++str; + } + for (; *str != '\0' && *str >= '0' && *str <= '9'; ++str) + nNumber=(nNumber * 10) + (*str - '0'); + if (bMinus == TRUE) + nNumber=0 - nNumber; + return nNumber; } #endif @@ -93,27 +93,27 @@ int xatoi ( char* str ) * xatoiW(L" -0045:value") == -45; ********************************************************************/ #if defined xatoiW || defined ALLCONVFUNC -# define xatoiW_INCLUDED -# undef xatoiW -int xatoiW ( wchar_t* wstr ) +#define xatoiW_INCLUDED +#undef xatoiW +int xatoiW(wchar_t *wstr) { - int nNumber = 0; - BOOL bMinus = FALSE; - - while ( *wstr == ' ' ) - ++wstr; - if ( *wstr == '+' ) - ++wstr; - else if ( *wstr == '-' ) - { - bMinus = TRUE; - ++wstr; - } - for ( ; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr ) - nNumber = ( nNumber * 10 ) + ( *wstr - '0' ); - if ( bMinus == TRUE ) - nNumber = 0 - nNumber; - return nNumber; + int nNumber=0; + BOOL bMinus=FALSE; + + while (*wstr == ' ') + ++wstr; + if (*wstr == '+') + ++wstr; + else if (*wstr == '-') + { + bMinus=TRUE; + ++wstr; + } + for (; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr) + nNumber=(nNumber * 10) + (*wstr - '0'); + if (bMinus == TRUE) + nNumber=0 - nNumber; + return nNumber; } #endif @@ -135,43 +135,42 @@ int xatoiW ( wchar_t* wstr ) * xitoa(45, szResult, 4); //szResult == "0045" ********************************************************************/ #if defined xitoa || defined ALLCONVFUNC -# define xitoa_INCLUDED -# undef xitoa -char* xitoa ( int number, char* str, int width ) +#define xitoa_INCLUDED +#undef xitoa +char* xitoa(int number, char *str, int width) { - char tmp[128]; - int a = 0; - int b = 0; - *tmp = 0; - - if ( number == 0 ) - { - str[0] = '0'; - --width; - b = 1; - } - else if ( number < 0 ) - { - str[0] = '-'; - number = 0 - number; - --width; - b = 1; - } - for ( tmp[a] = '\0'; number != 0; ++a ) - { - tmp[a] = ( number % 10 ) + '0'; - number = number / 10; - } - if ( a < width ) - do - { - tmp[a] = '0'; - } while ( ++a < width ); - for ( --a; a >= 0; --a, ++b ) - str[b] = tmp[a]; - - str[b] = '\0'; - return str; + char tmp[128]; + int a=0; + int b=0; + *tmp = 0; + + if (number == 0) + { + str[0]='0'; + --width; + b=1; + } + else if (number < 0) + { + str[0]='-'; + number=0 - number; + --width; + b=1; + } + for (tmp[a]='\0'; number != 0; ++a) + { + tmp[a]=(number % 10) + '0'; + number=number / 10; + } + if (a < width) + do + { + tmp[a]='0'; + } while (++a= 0; --a, ++b) str[b]=tmp[a]; + + str[b]='\0'; + return str; } #endif @@ -193,39 +192,37 @@ char* xitoa ( int number, char* str, int width ) * xitoaW(45, wszResult, 4); //wszResult == L"0045" ********************************************************************/ #if defined xitoaW || defined ALLCONVFUNC -# define xitoaW_INCLUDED -# undef xitoaW -wchar_t* xitoaW ( int number, wchar_t* wstr, int width ) +#define xitoaW_INCLUDED +#undef xitoaW +wchar_t* xitoaW(int number, wchar_t *wstr, int width) { - wchar_t wtmp[128] = L""; - int a = 0; - int b = 0; - - if ( number == 0 ) - { - wstr[0] = '0'; - --width; - b = 1; - } - else if ( number < 0 ) - { - wstr[0] = '-'; - number = 0 - number; - --width; - b = 1; - } - for ( wtmp[a] = '\0'; number != 0; ++a ) - { - wtmp[a] = ( number % 10 ) + '0'; - number = number / 10; - } - for ( ; width > a; ++a ) - wtmp[a] = '0'; - for ( --a; a >= 0; --a, ++b ) - wstr[b] = wtmp[a]; - - wstr[b] = '\0'; - return wstr; + wchar_t wtmp[128]=L""; + int a=0; + int b=0; + + if (number == 0) + { + wstr[0]='0'; + --width; + b=1; + } + else if (number < 0) + { + wstr[0]='-'; + number=0 - number; + --width; + b=1; + } + for (wtmp[a]='\0'; number != 0; ++a) + { + wtmp[a]=(number % 10) + '0'; + number=number / 10; + } + for (; width > a; ++a) wtmp[a]='0'; + for (--a; a >= 0; --a, ++b) wstr[b]=wtmp[a]; + + wstr[b]='\0'; + return wstr; } #endif @@ -244,21 +241,21 @@ wchar_t* xitoaW ( int number, wchar_t* wstr, int width ) * xatoui(" -0045:value") == 0; ********************************************************************/ #if defined xatoui || defined ALLCONVFUNC -# define xatoui_INCLUDED -# undef xatoui -unsigned int xatoui ( char* str ) +#define xatoui_INCLUDED +#undef xatoui +unsigned int xatoui(char *str) { - unsigned int nNumber = 0; - - while ( *str == ' ' ) - ++str; - if ( *str == '+' ) - ++str; - else if ( *str == '-' ) - return 0; - for ( ; *str != '\0' && *str >= '0' && *str <= '9'; ++str ) - nNumber = ( nNumber * 10 ) + ( *str - '0' ); - return nNumber; + unsigned int nNumber=0; + + while (*str == ' ') + ++str; + if (*str == '+') + ++str; + else if (*str == '-') + return 0; + for (; *str != '\0' && *str >= '0' && *str <= '9'; ++str) + nNumber=(nNumber * 10) + (*str - '0'); + return nNumber; } #endif @@ -277,21 +274,21 @@ unsigned int xatoui ( char* str ) * xatouiW(L" -0045:value") == 0; ********************************************************************/ #if defined xatouiW || defined ALLCONVFUNC -# define xatouiW_INCLUDED -# undef xatouiW -unsigned int xatouiW ( wchar_t* wstr ) +#define xatouiW_INCLUDED +#undef xatouiW +unsigned int xatouiW(wchar_t *wstr) { - unsigned int nNumber = 0; - - while ( *wstr == ' ' ) - ++wstr; - if ( *wstr == '+' ) - ++wstr; - else if ( *wstr == '-' ) - return 0; - for ( ; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr ) - nNumber = ( nNumber * 10 ) + ( *wstr - '0' ); - return nNumber; + unsigned int nNumber=0; + + while (*wstr == ' ') + ++wstr; + if (*wstr == '+') + ++wstr; + else if (*wstr == '-') + return 0; + for (; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr) + nNumber=(nNumber * 10) + (*wstr - '0'); + return nNumber; } #endif @@ -312,32 +309,30 @@ unsigned int xatouiW ( wchar_t* wstr ) * xuitoa(45, szResult, 4); //szResult == "0045" ********************************************************************/ #if defined xuitoa || defined ALLCONVFUNC -# define xuitoa_INCLUDED -# undef xuitoa -char* xuitoa ( unsigned int number, char* str, int width ) +#define xuitoa_INCLUDED +#undef xuitoa +char* xuitoa(unsigned int number, char *str, int width) { - char tmp[128] = ""; - int a = 0; - int b = 0; - - if ( number == 0 ) - { - str[0] = '0'; - --width; - b = 1; - } - for ( tmp[a] = '\0'; number != 0; ++a ) - { - tmp[a] = ( number % 10 ) + '0'; - number = number / 10; - } - for ( ; width > a; ++a ) - tmp[a] = '0'; - for ( --a; a >= 0; --a, ++b ) - str[b] = tmp[a]; - - str[b] = '\0'; - return str; + char tmp[128]=""; + int a=0; + int b=0; + + if (number == 0) + { + str[0]='0'; + --width; + b=1; + } + for (tmp[a]='\0'; number != 0; ++a) + { + tmp[a]=(number % 10) + '0'; + number=number / 10; + } + for (; width > a; ++a) tmp[a]='0'; + for (--a; a >= 0; --a, ++b) str[b]=tmp[a]; + + str[b]='\0'; + return str; } #endif @@ -358,32 +353,30 @@ char* xuitoa ( unsigned int number, char* str, int width ) * xuitoaW(45, wszResult, 4); //wszResult == L"0045" ********************************************************************/ #if defined xuitoaW || defined ALLCONVFUNC -# define xuitoaW_INCLUDED -# undef xuitoaW -wchar_t* xuitoaW ( unsigned int number, wchar_t* wstr, int width ) +#define xuitoaW_INCLUDED +#undef xuitoaW +wchar_t* xuitoaW(unsigned int number, wchar_t *wstr, int width) { - wchar_t wtmp[128] = L""; - int a = 0; - int b = 0; - - if ( number == 0 ) - { - wstr[0] = '0'; - --width; - b = 1; - } - for ( wtmp[a] = '\0'; number != 0; ++a ) - { - wtmp[a] = ( number % 10 ) + '0'; - number = number / 10; - } - for ( ; width > a; ++a ) - wtmp[a] = '0'; - for ( --a; a >= 0; --a, ++b ) - wstr[b] = wtmp[a]; - - wstr[b] = '\0'; - return wstr; + wchar_t wtmp[128]=L""; + int a=0; + int b=0; + + if (number == 0) + { + wstr[0]='0'; + --width; + b=1; + } + for (wtmp[a]='\0'; number != 0; ++a) + { + wtmp[a]=(number % 10) + '0'; + number=number / 10; + } + for (; width > a; ++a) wtmp[a]='0'; + for (--a; a >= 0; --a, ++b) wstr[b]=wtmp[a]; + + wstr[b]='\0'; + return wstr; } #endif @@ -402,27 +395,27 @@ wchar_t* xuitoaW ( unsigned int number, wchar_t* wstr, int width ) * xatoi64(" -0045:value") == -45; ********************************************************************/ #if defined xatoi64 || defined ALLCONVFUNC -# define xatoi64_INCLUDED -# undef xatoi64 -__int64 xatoi64 ( char* str ) +#define xatoi64_INCLUDED +#undef xatoi64 +__int64 xatoi64(char *str) { - __int64 nNumber = 0; - BOOL bMinus = FALSE; - - while ( *str == ' ' ) - ++str; - if ( *str == '+' ) - ++str; - else if ( *str == '-' ) - { - bMinus = TRUE; - ++str; - } - for ( ; *str != '\0' && *str >= '0' && *str <= '9'; ++str ) - nNumber = ( nNumber * 10 ) + ( *str - '0' ); - if ( bMinus == TRUE ) - nNumber = 0 - nNumber; - return nNumber; + __int64 nNumber=0; + BOOL bMinus=FALSE; + + while (*str == ' ') + ++str; + if (*str == '+') + ++str; + else if (*str == '-') + { + bMinus=TRUE; + ++str; + } + for (; *str != '\0' && *str >= '0' && *str <= '9'; ++str) + nNumber=(nNumber * 10) + (*str - '0'); + if (bMinus == TRUE) + nNumber=0 - nNumber; + return nNumber; } #endif @@ -441,27 +434,27 @@ __int64 xatoi64 ( char* str ) * xatoi64W(L" -0045:value") == -45; ********************************************************************/ #if defined xatoi64W || defined ALLCONVFUNC -# define xatoi64W_INCLUDED -# undef xatoi64W -__int64 xatoi64W ( wchar_t* wstr ) +#define xatoi64W_INCLUDED +#undef xatoi64W +__int64 xatoi64W(wchar_t *wstr) { - __int64 nNumber = 0; - BOOL bMinus = FALSE; - - while ( *wstr == ' ' ) - ++wstr; - if ( *wstr == '+' ) - ++wstr; - else if ( *wstr == '-' ) - { - bMinus = TRUE; - ++wstr; - } - for ( ; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr ) - nNumber = ( nNumber * 10 ) + ( *wstr - '0' ); - if ( bMinus == TRUE ) - nNumber = 0 - nNumber; - return nNumber; + __int64 nNumber=0; + BOOL bMinus=FALSE; + + while (*wstr == ' ') + ++wstr; + if (*wstr == '+') + ++wstr; + else if (*wstr == '-') + { + bMinus=TRUE; + ++wstr; + } + for (; *wstr != '\0' && *wstr >= '0' && *wstr <= '9'; ++wstr) + nNumber=(nNumber * 10) + (*wstr - '0'); + if (bMinus == TRUE) + nNumber=0 - nNumber; + return nNumber; } #endif @@ -483,39 +476,37 @@ __int64 xatoi64W ( wchar_t* wstr ) * xi64toa(45, szResult, 4); //szResult == "0045" ********************************************************************/ #if defined xi64toa || defined ALLCONVFUNC -# define xi64toa_INCLUDED -# undef xi64toa -char* xi64toa ( __int64 number, char* str, int width ) +#define xi64toa_INCLUDED +#undef xi64toa +char* xi64toa(__int64 number, char *str, int width) { - char tmp[128] = ""; - int a = 0; - int b = 0; - - if ( number == 0 ) - { - str[0] = '0'; - --width; - b = 1; - } - else if ( number < 0 ) - { - str[0] = '-'; - number = 0 - number; - --width; - b = 1; - } - for ( tmp[a] = '\0'; number != 0; ++a ) - { - tmp[a] = (char) ( ( number % 10 ) + '0' ); - number = number / 10; - } - for ( ; width > a; ++a ) - tmp[a] = '0'; - for ( --a; a >= 0; --a, ++b ) - str[b] = tmp[a]; - - str[b] = '\0'; - return str; + char tmp[128]=""; + int a=0; + int b=0; + + if (number == 0) + { + str[0]='0'; + --width; + b=1; + } + else if (number < 0) + { + str[0]='-'; + number=0 - number; + --width; + b=1; + } + for (tmp[a]='\0'; number != 0; ++a) + { + tmp[a]=(char)((number % 10) + '0'); + number=number / 10; + } + for (; width > a; ++a) tmp[a]='0'; + for (--a; a >= 0; --a, ++b) str[b]=tmp[a]; + + str[b]='\0'; + return str; } #endif @@ -537,39 +528,37 @@ char* xi64toa ( __int64 number, char* str, int width ) * xi64toaW(45, wszResult, 4); //wszResult == L"0045" ********************************************************************/ #if defined xi64toaW || defined ALLCONVFUNC -# define xi64toaW_INCLUDED -# undef xi64toaW -wchar_t* xi64toaW ( __int64 number, wchar_t* wstr, int width ) +#define xi64toaW_INCLUDED +#undef xi64toaW +wchar_t* xi64toaW(__int64 number, wchar_t *wstr, int width) { - wchar_t wtmp[128] = L""; - int a = 0; - int b = 0; - - if ( number == 0 ) - { - wstr[0] = '0'; - --width; - b = 1; - } - else if ( number < 0 ) - { - wstr[0] = '-'; - number = 0 - number; - --width; - b = 1; - } - for ( wtmp[a] = '\0'; number != 0; ++a ) - { - wtmp[a] = (char) ( ( number % 10 ) + '0' ); - number = number / 10; - } - for ( ; width > a; ++a ) - wtmp[a] = '0'; - for ( --a; a >= 0; --a, ++b ) - wstr[b] = wtmp[a]; - - wstr[b] = '\0'; - return wstr; + wchar_t wtmp[128]=L""; + int a=0; + int b=0; + + if (number == 0) + { + wstr[0]='0'; + --width; + b=1; + } + else if (number < 0) + { + wstr[0]='-'; + number=0 - number; + --width; + b=1; + } + for (wtmp[a]='\0'; number != 0; ++a) + { + wtmp[a]=(char)((number % 10) + '0'); + number=number / 10; + } + for (; width > a; ++a) wtmp[a]='0'; + for (--a; a >= 0; --a, ++b) wstr[b]=wtmp[a]; + + wstr[b]='\0'; + return wstr; } #endif @@ -588,30 +577,24 @@ wchar_t* xi64toaW ( __int64 number, wchar_t* wstr, int width ) * hex2dec("A1F") == 2591; ********************************************************************/ #if defined hex2dec || defined ALLCONVFUNC -# define hex2dec_INCLUDED -# undef hex2dec -int hex2dec ( char* hex ) +#define hex2dec_INCLUDED +#undef hex2dec +int hex2dec(char *hex) { - int a; - int b = 0; - - while ( 1 ) - { - a = *hex++; - if ( a >= '0' && a <= '9' ) - a -= '0'; - else if ( a >= 'a' && a <= 'f' ) - a -= 'a' - 10; - else if ( a >= 'A' && a <= 'F' ) - a -= 'A' - 10; - else - return -1; - - if ( *hex ) - b = ( b + a ) * 16; - else - return ( b + a ); - } + int a; + int b=0; + + while (1) + { + a=*hex++; + if (a >= '0' && a <= '9') a-='0'; + else if (a >= 'a' && a <= 'f') a-='a'-10; + else if (a >= 'A' && a <= 'F') a-='A'-10; + else return -1; + + if (*hex) b=(b + a) * 16; + else return (b + a); + } } #endif @@ -630,30 +613,24 @@ int hex2dec ( char* hex ) * hex2decW(L"A1F") == 2591; ********************************************************************/ #if defined hex2decW || defined ALLCONVFUNC -# define hex2decW_INCLUDED -# undef hex2decW -int hex2decW ( wchar_t* whex ) +#define hex2decW_INCLUDED +#undef hex2decW +int hex2decW(wchar_t *whex) { - int a; - int b = 0; - - while ( 1 ) - { - a = *whex++; - if ( a >= '0' && a <= '9' ) - a -= '0'; - else if ( a >= 'a' && a <= 'f' ) - a -= 'a' - 10; - else if ( a >= 'A' && a <= 'F' ) - a -= 'A' - 10; - else - return -1; - - if ( *whex ) - b = ( b + a ) * 16; - else - return ( b + a ); - } + int a; + int b=0; + + while (1) + { + a=*whex++; + if (a >= '0' && a <= '9') a-='0'; + else if (a >= 'a' && a <= 'f') a-='a'-10; + else if (a >= 'A' && a <= 'F') a-='A'-10; + else return -1; + + if (*whex) b=(b + a) * 16; + else return (b + a); + } } #endif @@ -674,35 +651,29 @@ int hex2decW ( wchar_t* whex ) * dec2hex(10, szResult, TRUE, 2); //szResult == "0a" ********************************************************************/ #if defined dec2hex || defined ALLCONVFUNC -# define dec2hex_INCLUDED -# undef dec2hex -void dec2hex ( unsigned int dec, char* hex, BOOL lowercase, unsigned int width ) +#define dec2hex_INCLUDED +#undef dec2hex +void dec2hex(unsigned int dec, char *hex, BOOL lowercase, unsigned int width) { - unsigned int a = dec; - unsigned int b = 0; - unsigned int c = 0; - char d = '1'; - if ( a == 0 ) - d = '0'; - - while ( a ) - { - b = a % 16; - a = a / 16; - if ( b < 10 ) - hex[c++] = b + '0'; - else if ( lowercase == TRUE ) - hex[c++] = b + 'a' - 10; - else - hex[c++] = b + 'A' - 10; - } - while ( width > c ) - hex[c++] = '0'; - hex[c] = '\0'; - - if ( d == '1' ) - for ( b = 0, --c; b < c; d = hex[b], hex[b++] = hex[c], hex[c--] = d ) - ; + unsigned int a=dec; + unsigned int b=0; + unsigned int c=0; + char d='1'; + if (a == 0) d='0'; + + while (a) + { + b=a % 16; + a=a / 16; + if (b < 10) hex[c++]=b + '0'; + else if (lowercase == TRUE) hex[c++]=b + 'a' - 10; + else hex[c++]=b + 'A' - 10; + } + while (width > c) hex[c++]='0'; + hex[c]='\0'; + + if (d == '1') + for (b=0, --c; b < c; d=hex[b], hex[b++]=hex[c], hex[c--]=d); } #endif @@ -723,35 +694,29 @@ void dec2hex ( unsigned int dec, char* hex, BOOL lowercase, unsigned int width ) * dec2hexW(10, wszResult, TRUE, 2); //wszResult == L"0a" ********************************************************************/ #if defined dec2hexW || defined ALLCONVFUNC -# define dec2hexW_INCLUDED -# undef dec2hexW -void dec2hexW ( unsigned int dec, wchar_t* whex, BOOL lowercase, unsigned int width ) +#define dec2hexW_INCLUDED +#undef dec2hexW +void dec2hexW(unsigned int dec, wchar_t *whex, BOOL lowercase, unsigned int width) { - unsigned int a = dec; - unsigned int b = 0; - unsigned int c = 0; - wchar_t d = '1'; - if ( a == 0 ) - d = '0'; - - while ( a ) - { - b = a % 16; - a = a / 16; - if ( b < 10 ) - whex[c++] = b + '0'; - else if ( lowercase == TRUE ) - whex[c++] = b + 'a' - 10; - else - whex[c++] = b + 'A' - 10; - } - while ( width > c ) - whex[c++] = '0'; - whex[c] = '\0'; - - if ( d == '1' ) - for ( b = 0, --c; b < c; d = whex[b], whex[b++] = whex[c], whex[c--] = d ) - ; + unsigned int a=dec; + unsigned int b=0; + unsigned int c=0; + wchar_t d='1'; + if (a == 0) d='0'; + + while (a) + { + b=a % 16; + a=a / 16; + if (b < 10) whex[c++]=b + '0'; + else if (lowercase == TRUE) whex[c++]=b + 'a' - 10; + else whex[c++]=b + 'A' - 10; + } + while (width > c) whex[c++]='0'; + whex[c]='\0'; + + if (d == '1') + for (b=0, --c; b < c; d=whex[b], whex[b++]=whex[c], whex[c--]=d); } #endif @@ -774,19 +739,19 @@ void dec2hexW ( unsigned int dec, wchar_t* whex, BOOL lowercase, unsigned int wi * str2hex((unsigned char *)"Some Text", szResult, TRUE, lstrlen("Some Text")); //szResult == "536f6d652054657874" ********************************************************************/ #if defined str2hex || defined ALLCONVFUNCS -# define str2hex_INCLUDED -# undef str2hex -void str2hex ( unsigned char* str, char* hex, BOOL lowercase, unsigned int bytes ) +#define str2hex_INCLUDED +#undef str2hex +void str2hex(unsigned char *str, char *hex, BOOL lowercase, unsigned int bytes) { - char a[16]; - unsigned int b = 0; - - for ( hex[0] = '\0'; b < bytes; ++b ) - { - // wsprintf(a, "%02x", (unsigned int)str[b]); - dec2hex ( (unsigned int) str[b], a, lowercase, 2 ); - lstrcat ( hex, a ); - } + char a[16]; + unsigned int b=0; + + for (hex[0]='\0'; b < bytes; ++b) + { + //wsprintf(a, "%02x", (unsigned int)str[b]); + dec2hex((unsigned int)str[b], a, lowercase, 2); + lstrcat(hex, a); + } } #endif @@ -803,33 +768,31 @@ void str2hex ( unsigned char* str, char* hex, BOOL lowercase, unsigned int bytes * hex2str("536f6d652054657874", szResult); //szResult == "Some Text" ********************************************************************/ #if defined hex2str || defined ALLCONVFUNCS -# define hex2str_INCLUDED -# undef hex2str -void hex2str ( char* hex, char* str ) +#define hex2str_INCLUDED +#undef hex2str +void hex2str(char *hex, char *str) { - char a[4]; - int b; + char a[4]; + int b; - while ( *hex ) + while (*hex) + { + a[0]=*hex; + a[1]=*++hex; + a[2]='\0'; + + if (*hex++) { - a[0] = *hex; - a[1] = *++hex; - a[2] = '\0'; - - if ( *hex++ ) - { - if ( ( b = hex2dec ( a ) ) > 0 ) - *str++ = b; - else - break; - } - else - break; - } - *str = '\0'; + if ((b=hex2dec(a)) > 0) *str++=b; + else break; + } + else break; + } + *str='\0'; } #endif + /******************************************************************** * * * Example * diff --git a/windows/nsProcess/api.h b/windows/nsProcess/api.h index 200881dd18..ed014b2df2 100644 --- a/windows/nsProcess/api.h +++ b/windows/nsProcess/api.h @@ -1,15 +1,15 @@ /* * apih - * + * * This file is a part of NSIS. - * + * * Copyright (C) 1999-2008 Nullsoft and Contributors - * + * * Licensed under the zlib/libpng license (the "License"); * you may not use this file except in compliance with the License. - * + * * Licence details can be found in the file COPYING. - * + * * This software is provided 'as-is', without any express or implied * warranty. */ @@ -21,62 +21,61 @@ // The format is 0xXXXXYYYY where X is the major version and Y is the minor version (MAKELONG(y,x)) // When doing version checks, always remember to use >=, ex: if (pX->exec_flags->plugin_api_version >= NSISPIAPIVER_1_0) {} -#define NSISPIAPIVER_1_0 0x00010000 +#define NSISPIAPIVER_1_0 0x00010000 #define NSISPIAPIVER_CURR NSISPIAPIVER_1_0 // NSIS Plug-In Callback Messages -enum NSPIM +enum NSPIM { - NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup - NSPIM_GUIUNLOAD, // Called after .onGUIEnd + NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup + NSPIM_GUIUNLOAD, // Called after .onGUIEnd }; // Prototype for callbacks registered with extra_parameters->RegisterPluginCallback() // Return NULL for unknown messages // Should always be __cdecl for future expansion possibilities -typedef UINT_PTR ( *NSISPLUGINCALLBACK ) ( enum NSPIM ); +typedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM); // extra_parameters data structures containing other interesting stuff // but the stack, variables and HWND passed on to plug-ins. typedef struct { - int autoclose; - int all_user_var; - int exec_error; - int abort; - int exec_reboot; // NSIS_SUPPORT_REBOOT - int reboot_called; // NSIS_SUPPORT_REBOOT - int XXX_cur_insttype; // depreacted - int plugin_api_version; // see NSISPIAPIVER_CURR - // used to be XXX_insttype_changed - int silent; // NSIS_CONFIG_SILENT_SUPPORT - int instdir_error; - int rtl; - int errlvl; - int alter_reg_view; - int status_update; + int autoclose; + int all_user_var; + int exec_error; + int abort; + int exec_reboot; // NSIS_SUPPORT_REBOOT + int reboot_called; // NSIS_SUPPORT_REBOOT + int XXX_cur_insttype; // depreacted + int plugin_api_version; // see NSISPIAPIVER_CURR + // used to be XXX_insttype_changed + int silent; // NSIS_CONFIG_SILENT_SUPPORT + int instdir_error; + int rtl; + int errlvl; + int alter_reg_view; + int status_update; } exec_flags_t; #ifndef NSISCALL -# define NSISCALL __stdcall +# define NSISCALL __stdcall #endif -typedef struct -{ - exec_flags_t* exec_flags; - int ( NSISCALL* ExecuteCodeSegment ) ( int, HWND ); - void ( NSISCALL* validate_filename ) ( TCHAR* ); - BOOL ( NSISCALL* RegisterPluginCallback ) ( HMODULE, NSISPLUGINCALLBACK ); +typedef struct { + exec_flags_t *exec_flags; + int (NSISCALL *ExecuteCodeSegment)(int, HWND); + void (NSISCALL *validate_filename)(TCHAR *); + BOOL (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); } extra_parameters; // Definitions for page showing plug-ins // See Ui.c to understand better how they're used // sent to the outer window to tell it to go to the next inner window -#define WM_NOTIFY_OUTER_NEXT ( WM_USER + 0x8 ) +#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8) // custom pages should send this message to let NSIS know they're ready -#define WM_NOTIFY_CUSTOM_READY ( WM_USER + 0xd ) +#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd) // sent as wParam with WM_NOTIFY_OUTER_NEXT when user cancels - heed its warning #define NOTIFY_BYE_BYE 'x' diff --git a/windows/nsProcess/nsis_tchar.h b/windows/nsProcess/nsis_tchar.h index 9ba80d5f6d..92025ccc5e 100644 --- a/windows/nsProcess/nsis_tchar.h +++ b/windows/nsProcess/nsis_tchar.h @@ -1,10 +1,10 @@ /* * nsis_tchar.h - * + * * This file is a part of NSIS. - * + * * Copyright (C) 1999-2007 Nullsoft and Contributors - * + * * This software is provided 'as-is', without any express or implied * warranty. * @@ -17,198 +17,198 @@ #ifdef _UNICODE -# ifndef _T -# define __T( x ) L##x -# define _T( x ) __T ( x ) -# define _TEXT( x ) __T ( x ) -# endif +#ifndef _T +#define __T(x) L ## x +#define _T(x) __T(x) +#define _TEXT(x) __T(x) +#endif typedef wchar_t TCHAR; typedef wchar_t _TUCHAR; // program -# define _tmain wmain -# define _tWinMain wWinMain -# define _tenviron _wenviron -# define __targv __wargv +#define _tmain wmain +#define _tWinMain wWinMain +#define _tenviron _wenviron +#define __targv __wargv // printfs -# define _ftprintf fwprintf -# define _sntprintf _snwprintf -# define _stprintf _swprintf -# define _tprintf wprintf -# define _vftprintf vfwprintf -# define _vsntprintf _vsnwprintf -# define _vstprintf _vswprintf +#define _ftprintf fwprintf +#define _sntprintf _snwprintf +#define _stprintf _swprintf +#define _tprintf wprintf +#define _vftprintf vfwprintf +#define _vsntprintf _vsnwprintf +#define _vstprintf _vswprintf // scanfs -# define _tscanf wscanf -# define _stscanf swscanf +#define _tscanf wscanf +#define _stscanf swscanf // string manipulations -# define _tcscat wcscat -# define _tcschr wcschr -# define _tcsclen wcslen -# define _tcscpy wcscpy -# define _tcsdup _wcsdup -# define _tcslen wcslen -# define _tcsnccpy wcsncpy -# define _tcsncpy wcsncpy -# define _tcsrchr wcsrchr -# define _tcsstr wcsstr -# define _tcstok wcstok +#define _tcscat wcscat +#define _tcschr wcschr +#define _tcsclen wcslen +#define _tcscpy wcscpy +#define _tcsdup _wcsdup +#define _tcslen wcslen +#define _tcsnccpy wcsncpy +#define _tcsncpy wcsncpy +#define _tcsrchr wcsrchr +#define _tcsstr wcsstr +#define _tcstok wcstok // string comparisons -# define _tcscmp wcscmp -# define _tcsicmp _wcsicmp -# define _tcsncicmp _wcsnicmp -# define _tcsncmp wcsncmp -# define _tcsnicmp _wcsnicmp +#define _tcscmp wcscmp +#define _tcsicmp _wcsicmp +#define _tcsncicmp _wcsnicmp +#define _tcsncmp wcsncmp +#define _tcsnicmp _wcsnicmp // upper / lower -# define _tcslwr _wcslwr -# define _tcsupr _wcsupr -# define _totlower towlower -# define _totupper towupper +#define _tcslwr _wcslwr +#define _tcsupr _wcsupr +#define _totlower towlower +#define _totupper towupper // conversions to numbers -# define _tcstoi64 _wcstoi64 -# define _tcstol wcstol -# define _tcstoul wcstoul -# define _tstof _wtof -# define _tstoi _wtoi -# define _tstoi64 _wtoi64 -# define _ttoi _wtoi -# define _ttoi64 _wtoi64 -# define _ttol _wtol +#define _tcstoi64 _wcstoi64 +#define _tcstol wcstol +#define _tcstoul wcstoul +#define _tstof _wtof +#define _tstoi _wtoi +#define _tstoi64 _wtoi64 +#define _ttoi _wtoi +#define _ttoi64 _wtoi64 +#define _ttol _wtol // conversion from numbers to strings -# define _itot _itow -# define _ltot _ltow -# define _i64tot _i64tow -# define _ui64tot _ui64tow +#define _itot _itow +#define _ltot _ltow +#define _i64tot _i64tow +#define _ui64tot _ui64tow // file manipulations -# define _tfopen _wfopen -# define _topen _wopen -# define _tremove _wremove -# define _tunlink _wunlink +#define _tfopen _wfopen +#define _topen _wopen +#define _tremove _wremove +#define _tunlink _wunlink // reading and writing to i/o -# define _fgettc fgetwc -# define _fgetts fgetws -# define _fputts fputws -# define _gettchar getwchar +#define _fgettc fgetwc +#define _fgetts fgetws +#define _fputts fputws +#define _gettchar getwchar // directory -# define _tchdir _wchdir +#define _tchdir _wchdir // environment -# define _tgetenv _wgetenv -# define _tsystem _wsystem +#define _tgetenv _wgetenv +#define _tsystem _wsystem // time -# define _tcsftime wcsftime +#define _tcsftime wcsftime #else // ANSI -# ifndef _T -# define _T( x ) x -# define _TEXT( x ) x -# endif -typedef char TCHAR; -typedef unsigned char _TUCHAR; +#ifndef _T +#define _T(x) x +#define _TEXT(x) x +#endif +typedef char TCHAR; +typedef unsigned char _TUCHAR; // program -# define _tmain main -# define _tWinMain WinMain -# define _tenviron environ -# define __targv __argv +#define _tmain main +#define _tWinMain WinMain +#define _tenviron environ +#define __targv __argv // printfs -# define _ftprintf fprintf -# define _sntprintf _snprintf -# define _stprintf sprintf -# define _tprintf printf -# define _vftprintf vfprintf -# define _vsntprintf _vsnprintf -# define _vstprintf vsprintf +#define _ftprintf fprintf +#define _sntprintf _snprintf +#define _stprintf sprintf +#define _tprintf printf +#define _vftprintf vfprintf +#define _vsntprintf _vsnprintf +#define _vstprintf vsprintf // scanfs -# define _tscanf scanf -# define _stscanf sscanf +#define _tscanf scanf +#define _stscanf sscanf // string manipulations -# define _tcscat strcat -# define _tcschr strchr -# define _tcsclen strlen -# define _tcscnlen strnlen -# define _tcscpy strcpy -# define _tcsdup _strdup -# define _tcslen strlen -# define _tcsnccpy strncpy -# define _tcsrchr strrchr -# define _tcsstr strstr -# define _tcstok strtok +#define _tcscat strcat +#define _tcschr strchr +#define _tcsclen strlen +#define _tcscnlen strnlen +#define _tcscpy strcpy +#define _tcsdup _strdup +#define _tcslen strlen +#define _tcsnccpy strncpy +#define _tcsrchr strrchr +#define _tcsstr strstr +#define _tcstok strtok // string comparisons -# define _tcscmp strcmp -# define _tcsicmp _stricmp -# define _tcsncmp strncmp -# define _tcsncicmp _strnicmp -# define _tcsnicmp _strnicmp +#define _tcscmp strcmp +#define _tcsicmp _stricmp +#define _tcsncmp strncmp +#define _tcsncicmp _strnicmp +#define _tcsnicmp _strnicmp // upper / lower -# define _tcslwr _strlwr -# define _tcsupr _strupr +#define _tcslwr _strlwr +#define _tcsupr _strupr -# define _totupper toupper -# define _totlower tolower +#define _totupper toupper +#define _totlower tolower // conversions to numbers -# define _tcstol strtol -# define _tcstoul strtoul -# define _tstof atof -# define _tstoi atoi -# define _tstoi64 _atoi64 -# define _tstoi64 _atoi64 -# define _ttoi atoi -# define _ttoi64 _atoi64 -# define _ttol atol +#define _tcstol strtol +#define _tcstoul strtoul +#define _tstof atof +#define _tstoi atoi +#define _tstoi64 _atoi64 +#define _tstoi64 _atoi64 +#define _ttoi atoi +#define _ttoi64 _atoi64 +#define _ttol atol // conversion from numbers to strings -# define _i64tot _i64toa -# define _itot _itoa -# define _ltot _ltoa -# define _ui64tot _ui64toa +#define _i64tot _i64toa +#define _itot _itoa +#define _ltot _ltoa +#define _ui64tot _ui64toa // file manipulations -# define _tfopen fopen -# define _topen _open -# define _tremove remove -# define _tunlink _unlink +#define _tfopen fopen +#define _topen _open +#define _tremove remove +#define _tunlink _unlink // reading and writing to i/o -# define _fgettc fgetc -# define _fgetts fgets -# define _fputts fputs -# define _gettchar getchar +#define _fgettc fgetc +#define _fgetts fgets +#define _fputts fputs +#define _gettchar getchar // directory -# define _tchdir _chdir +#define _tchdir _chdir // environment -# define _tgetenv getenv -# define _tsystem system +#define _tgetenv getenv +#define _tsystem system // time -# define _tcsftime strftime +#define _tcsftime strftime #endif // is functions (the same in Unicode / ANSI) -#define _istgraph isgraph -#define _istascii __isascii +#define _istgraph isgraph +#define _istascii __isascii -#define __TFILE__ _T ( __FILE__ ) -#define __TDATE__ _T ( __DATE__ ) -#define __TTIME__ _T ( __TIME__ ) +#define __TFILE__ _T(__FILE__) +#define __TDATE__ _T(__DATE__) +#define __TTIME__ _T(__TIME__) diff --git a/windows/nsProcess/pluginapi.h b/windows/nsProcess/pluginapi.h index fed8c16f07..b9bfee91c9 100644 --- a/windows/nsProcess/pluginapi.h +++ b/windows/nsProcess/pluginapi.h @@ -2,99 +2,95 @@ #define ___NSIS_PLUGIN__H___ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif #include "api.h" #include "nsis_tchar.h" #ifndef NSISCALL -# define NSISCALL __stdcall +# define NSISCALL __stdcall #endif -#define EXDLL_INIT() \ - { \ - g_stringsize = string_size; \ - g_stacktop = stacktop; \ - g_variables = variables; \ - } - - typedef struct _stack_t - { - struct _stack_t* next; - TCHAR text[1]; // this should be the length of string_size - } stack_t; - - enum - { - INST_0, // $0 - INST_1, // $1 - INST_2, // $2 - INST_3, // $3 - INST_4, // $4 - INST_5, // $5 - INST_6, // $6 - INST_7, // $7 - INST_8, // $8 - INST_9, // $9 - INST_R0, // $R0 - INST_R1, // $R1 - INST_R2, // $R2 - INST_R3, // $R3 - INST_R4, // $R4 - INST_R5, // $R5 - INST_R6, // $R6 - INST_R7, // $R7 - INST_R8, // $R8 - INST_R9, // $R9 - INST_CMDLINE, // $CMDLINE - INST_INSTDIR, // $INSTDIR - INST_OUTDIR, // $OUTDIR - INST_EXEDIR, // $EXEDIR - INST_LANG, // $LANGUAGE - __INST_LAST - }; - - extern unsigned int g_stringsize; - extern stack_t** g_stacktop; - extern TCHAR* g_variables; - - int NSISCALL popstring ( TCHAR* str ); // 0 on success, 1 on empty stack - int NSISCALL popstringn ( TCHAR* str, int maxlen ); // with length limit, pass 0 for g_stringsize - int NSISCALL popint(); // pops an integer - int NSISCALL popint_or(); // with support for or'ing (2|4|8) - int NSISCALL myatoi ( const TCHAR* s ); // converts a string to an integer - unsigned NSISCALL myatou ( const TCHAR* s ); // converts a string to an unsigned integer, decimal only - int NSISCALL myatoi_or ( const TCHAR* s ); // with support for or'ing (2|4|8) - void NSISCALL pushstring ( const TCHAR* str ); - void NSISCALL pushint ( int value ); - TCHAR* NSISCALL getuservariable ( const int varnum ); - void NSISCALL setuservariable ( const int varnum, const TCHAR* var ); +#define EXDLL_INIT() { \ + g_stringsize=string_size; \ + g_stacktop=stacktop; \ + g_variables=variables; } + +typedef struct _stack_t { + struct _stack_t *next; + TCHAR text[1]; // this should be the length of string_size +} stack_t; + +enum +{ +INST_0, // $0 +INST_1, // $1 +INST_2, // $2 +INST_3, // $3 +INST_4, // $4 +INST_5, // $5 +INST_6, // $6 +INST_7, // $7 +INST_8, // $8 +INST_9, // $9 +INST_R0, // $R0 +INST_R1, // $R1 +INST_R2, // $R2 +INST_R3, // $R3 +INST_R4, // $R4 +INST_R5, // $R5 +INST_R6, // $R6 +INST_R7, // $R7 +INST_R8, // $R8 +INST_R9, // $R9 +INST_CMDLINE, // $CMDLINE +INST_INSTDIR, // $INSTDIR +INST_OUTDIR, // $OUTDIR +INST_EXEDIR, // $EXEDIR +INST_LANG, // $LANGUAGE +__INST_LAST +}; + +extern unsigned int g_stringsize; +extern stack_t **g_stacktop; +extern TCHAR *g_variables; + +int NSISCALL popstring(TCHAR *str); // 0 on success, 1 on empty stack +int NSISCALL popstringn(TCHAR *str, int maxlen); // with length limit, pass 0 for g_stringsize +int NSISCALL popint(); // pops an integer +int NSISCALL popint_or(); // with support for or'ing (2|4|8) +int NSISCALL myatoi(const TCHAR *s); // converts a string to an integer +unsigned NSISCALL myatou(const TCHAR *s); // converts a string to an unsigned integer, decimal only +int NSISCALL myatoi_or(const TCHAR *s); // with support for or'ing (2|4|8) +void NSISCALL pushstring(const TCHAR *str); +void NSISCALL pushint(int value); +TCHAR * NSISCALL getuservariable(const int varnum); +void NSISCALL setuservariable(const int varnum, const TCHAR *var); #ifdef _UNICODE -# define PopStringW( x ) popstring ( x ) -# define PushStringW( x ) pushstring ( x ) -# define SetUserVariableW( x, y ) setuservariable ( x, y ) +#define PopStringW(x) popstring(x) +#define PushStringW(x) pushstring(x) +#define SetUserVariableW(x,y) setuservariable(x,y) - int NSISCALL PopStringA ( char* ansiStr ); - void NSISCALL PushStringA ( const char* ansiStr ); - void NSISCALL GetUserVariableW ( const int varnum, wchar_t* wideStr ); - void NSISCALL GetUserVariableA ( const int varnum, char* ansiStr ); - void NSISCALL SetUserVariableA ( const int varnum, const char* ansiStr ); +int NSISCALL PopStringA(char* ansiStr); +void NSISCALL PushStringA(const char* ansiStr); +void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr); +void NSISCALL GetUserVariableA(const int varnum, char* ansiStr); +void NSISCALL SetUserVariableA(const int varnum, const char* ansiStr); #else // ANSI defs -# define PopStringA( x ) popstring ( x ) -# define PushStringA( x ) pushstring ( x ) -# define SetUserVariableA( x, y ) setuservariable ( x, y ) +#define PopStringA(x) popstring(x) +#define PushStringA(x) pushstring(x) +#define SetUserVariableA(x,y) setuservariable(x,y) -int NSISCALL PopStringW ( wchar_t* wideStr ); -void NSISCALL PushStringW ( wchar_t* wideStr ); -void NSISCALL GetUserVariableW ( const int varnum, wchar_t* wideStr ); -void NSISCALL GetUserVariableA ( const int varnum, char* ansiStr ); -void NSISCALL SetUserVariableW ( const int varnum, const wchar_t* wideStr ); +int NSISCALL PopStringW(wchar_t* wideStr); +void NSISCALL PushStringW(wchar_t* wideStr); +void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr); +void NSISCALL GetUserVariableA(const int varnum, char* ansiStr); +void NSISCALL SetUserVariableW(const int varnum, const wchar_t* wideStr); #endif @@ -102,4 +98,4 @@ void NSISCALL SetUserVariableW ( const int varnum, const wchar_t* wideStr ); } #endif -#endif //!___NSIS_PLUGIN__H___ +#endif//!___NSIS_PLUGIN__H___ From b1a5b511b81e479bfeb99a397e31df8c79e6d063 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sat, 12 Jun 2021 18:58:17 +0200 Subject: [PATCH 87/98] update as requested --- src/clientdlg.cpp | 6 ------ src/socket.cpp | 18 +++--------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 86b57fbba8..c08fd5a191 100644 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1134,12 +1134,6 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() tr ( "Your sound card is not working correctly. " "Please open the settings dialog and check the device selection and the driver settings." ) ); } - /*else - { - #if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) - QMessageBox::warning ( this, APP_NAME, pClient->Sound.getAvailableDevices() ); //DEBUG NGOCDH - #endif - }*/ } void CClientDlg::OnTimerDetectFeedback() { bDetectFeedback = false; } diff --git a/src/socket.cpp b/src/socket.cpp index 7f63ce2ca2..c294a10ae9 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -53,7 +53,7 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const #ifdef Q_OS_IOS //ignore the broken pipe signal to avoid crash (iOS) int valueone = 1; - setsockopt(UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof(valueone)); + setsockopt ( UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof ( valueone ) ); #endif // allocate memory for network receive and send buffer in samples @@ -202,23 +202,11 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr UdpSocketOutAddr.sin_port = htons ( HostAddr.iPort ); UdpSocketOutAddr.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); - if ( - sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ) - < 0 ) + if ( sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, ( sockaddr* ) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ) < 0 ) { // qDebug("Socket send exception - mostly happens in iOS when returning from idle"); Init( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit - sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ); + sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, (sockaddr*) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ); } } } From 73c677f0f32dc41af9e60db45cc6e7f64ae76d6f Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sat, 12 Jun 2021 19:13:32 +0200 Subject: [PATCH 88/98] remove qm changes and add ngocdh as contributor in about --- src/util.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util.cpp b/src/util.cpp index 3ca37589d0..3502a64920 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -486,6 +486,7 @@ CAboutDlg::CAboutDlg ( QWidget* parent ) : CBaseDlg ( parent ) "

Jeroen van Veldhuizen (jeroenvv)

" "

Reinhard (reinhardwh)

" "

Stefan Menzel (menzels)

" + "

Dau Huy Ngoc (ngocdh)

" "
" + tr ( "For details on the contributions check out the " ) + "" + tr ( "Github Contributors list" ) + From afe07aafa17673868d0504665563a2a9129ad35c Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sat, 12 Jun 2021 23:25:05 +0200 Subject: [PATCH 89/98] style --- src/clientdlg.cpp | 6 ------ src/socket.cpp | 18 +++--------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 86b57fbba8..c08fd5a191 100644 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1134,12 +1134,6 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() tr ( "Your sound card is not working correctly. " "Please open the settings dialog and check the device selection and the driver settings." ) ); } - /*else - { - #if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) - QMessageBox::warning ( this, APP_NAME, pClient->Sound.getAvailableDevices() ); //DEBUG NGOCDH - #endif - }*/ } void CClientDlg::OnTimerDetectFeedback() { bDetectFeedback = false; } diff --git a/src/socket.cpp b/src/socket.cpp index 7f63ce2ca2..f4fd55b014 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -53,7 +53,7 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const #ifdef Q_OS_IOS //ignore the broken pipe signal to avoid crash (iOS) int valueone = 1; - setsockopt(UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof(valueone)); + setsockopt ( UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof ( valueone ) ); #endif // allocate memory for network receive and send buffer in samples @@ -202,23 +202,11 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr UdpSocketOutAddr.sin_port = htons ( HostAddr.iPort ); UdpSocketOutAddr.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); - if ( - sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ) - < 0 ) + if ( sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, ( sockaddr* ) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ) < 0 ) { // qDebug("Socket send exception - mostly happens in iOS when returning from idle"); Init( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit - sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ); + sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, ( sockaddr* ) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ); } } } From c8986344f64f18f690309fb6ada0769b7e639d8b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 01:09:46 +0200 Subject: [PATCH 90/98] removed unwanted directory --- .../Jamulus.app.dSYM/Contents/Info.plist | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 Release-iphoneos/Jamulus.app.dSYM/Contents/Info.plist diff --git a/Release-iphoneos/Jamulus.app.dSYM/Contents/Info.plist b/Release-iphoneos/Jamulus.app.dSYM/Contents/Info.plist deleted file mode 100644 index 73ea022b06..0000000000 --- a/Release-iphoneos/Jamulus.app.dSYM/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleIdentifier - com.apple.xcode.dsym.com.jamulussoftware.jamulus.Jamulusdh - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - dSYM - CFBundleSignature - ???? - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - From 88fb1f9ac370380141a08971bfc37e9c6eec12d2 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 01:10:16 +0200 Subject: [PATCH 91/98] remove unwanted file --- jamulus_qml_plugin_import.cpp | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 jamulus_qml_plugin_import.cpp diff --git a/jamulus_qml_plugin_import.cpp b/jamulus_qml_plugin_import.cpp deleted file mode 100644 index 8eb832c7d4..0000000000 --- a/jamulus_qml_plugin_import.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// This file is autogenerated by qmake. It imports static plugin classes for -// static plugins used by QML imports. -#include -Q_IMPORT_PLUGIN(QtQuick2Plugin) -Q_IMPORT_PLUGIN(QtQuickControls2Plugin) -Q_IMPORT_PLUGIN(QtQmlPlugin) -Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin) -Q_IMPORT_PLUGIN(QtQuickControls1Plugin) -Q_IMPORT_PLUGIN(QtQuickTemplates2Plugin) -Q_IMPORT_PLUGIN(QtQmlModelsPlugin) -Q_IMPORT_PLUGIN(QtQmlWorkerScriptPlugin) -Q_IMPORT_PLUGIN(QtQuick2WindowPlugin) -Q_IMPORT_PLUGIN(QtQuickControls2FusionStylePlugin) -Q_IMPORT_PLUGIN(QtQuickControls2UniversalStylePlugin) -Q_IMPORT_PLUGIN(QtQuickControls2MaterialStylePlugin) -Q_IMPORT_PLUGIN(QtQuickControls2ImagineStylePlugin) -Q_IMPORT_PLUGIN(QtGraphicalEffectsPlugin) -Q_IMPORT_PLUGIN(QtGraphicalEffectsPrivatePlugin) From b00823016b2cce6a6839cd5cbd03db6eb11ad063 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 02:00:44 +0200 Subject: [PATCH 92/98] clang --- ios/sound.h | 12 ++++++------ src/chatdlg.cpp | 5 ++--- src/client.cpp | 30 +++++++++++++++--------------- src/client.h | 10 +++++----- src/clientdlg.cpp | 12 +++++------- src/clientdlg.h | 16 ++++++++-------- src/clientsettingsdlg.cpp | 29 +++++++++++++++-------------- src/main.cpp | 10 +++++----- src/settings.h | 2 +- src/socket.cpp | 31 +++++++++++++++++++++---------- src/socket.h | 4 ++-- 11 files changed, 85 insertions(+), 76 deletions(-) diff --git a/ios/sound.h b/ios/sound.h index d7682cdb5c..10b4c5ea46 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -43,21 +43,21 @@ class CSound : public CSoundBase virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); - virtual void processBufferList( AudioBufferList*, CSound* ); - virtual void SetInputDeviceId( int deviceid ); + virtual void processBufferList ( AudioBufferList*, CSound* ); + virtual void SetInputDeviceId ( int deviceid ); - AudioUnit audioUnit; + AudioUnit audioUnit; // these variables/functions should be protected but cannot since we want // to access them from the callback function CVector vecsTmpAudioSndCrdStereo; int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; - bool isInitialized; + bool isInitialized; protected: - MIDIPortRef midiInPortRef; + MIDIPortRef midiInPortRef; - QMutex Mutex; + QMutex Mutex; }; diff --git a/src/chatdlg.cpp b/src/chatdlg.cpp index 2318d34c21..bb8bc98c61 100644 --- a/src/chatdlg.cpp +++ b/src/chatdlg.cpp @@ -65,9 +65,8 @@ CChatDlg::CChatDlg ( QWidget* parent ) : CBaseDlg ( parent, Qt::Window ) // use connect ( action, SIGNAL ( triggered() ), this, SLOT ( close() ) ); #endif -#if defined ( ANDROID ) || defined ( Q_OS_ANDROID ) - pEditMenu->addAction ( tr ( "&Close" ), this, - SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_C ) ); +#if defined( ANDROID ) || defined( Q_OS_ANDROID ) + pEditMenu->addAction ( tr ( "&Close" ), this, SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_C ) ); #endif // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); diff --git a/src/client.cpp b/src/client.cpp index 6ce1e6b6ee..4e53e2015e 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -768,30 +768,30 @@ void CClient::Init() const int iFraSizeDefault = SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_DEFAULT; const int iFraSizeSafe = SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_SAFE; -# if defined ( Q_OS_IOS ) - bFraSiFactPrefSupported = true; //to reduce sound init time, because we know it's supported in iOS +#if defined( Q_OS_IOS ) + bFraSiFactPrefSupported = true; // to reduce sound init time, because we know it's supported in iOS bFraSiFactDefSupported = true; bFraSiFactSafeSupported = true; -# else +#else bFraSiFactPrefSupported = ( Sound.Init ( iFraSizePreffered ) == iFraSizePreffered ); bFraSiFactDefSupported = ( Sound.Init ( iFraSizeDefault ) == iFraSizeDefault ); bFraSiFactSafeSupported = ( Sound.Init ( iFraSizeSafe ) == iFraSizeSafe ); -# endif - +#endif + // translate block size index in actual block size const int iPrefMonoFrameSize = iSndCrdPrefFrameSizeFactor * SYSTEM_FRAME_SIZE_SAMPLES; // get actual sound card buffer size using preferred size -//TODO - iOS needs 1 init only, now: 9 inits at launch <- slow -// Initially, I tried to fix this as follows (inside #ifdef ios tag): -// if ( Sound.isInitialized ) -// iMonoBlockSizeSam = iPrefMonoFrameSize; -// else -// iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); -//Problem is legitimate setting changes (buffer size for example). -//so the condition should be something like "if ( Sound.isInitialized and APP_IS_INIALIZING)" + // TODO - iOS needs 1 init only, now: 9 inits at launch <- slow + // Initially, I tried to fix this as follows (inside #ifdef ios tag): + // if ( Sound.isInitialized ) + // iMonoBlockSizeSam = iPrefMonoFrameSize; + // else + // iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); + // Problem is legitimate setting changes (buffer size for example). + // so the condition should be something like "if ( Sound.isInitialized and APP_IS_INIALIZING)" iMonoBlockSizeSam = Sound.Init ( iPrefMonoFrameSize ); - + // Calculate the current sound card frame size factor. In case // the current mono block size is not a multiple of the system // frame size, we have to use a sound card conversion buffer. @@ -1254,7 +1254,7 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs ) void CClient::SetInputDeviceId ( const int deviceid ) { -#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined( Q_OS_IOS ) or defined( Q_OS_ANDROID ) or defined( ANDROID ) // iOS ok, Android experimental Sound.SetInputDeviceId ( deviceid ); #endif diff --git a/src/client.h b/src/client.h index 7126a1c305..dc5d816920 100644 --- a/src/client.h +++ b/src/client.h @@ -239,9 +239,9 @@ class CClient : public QObject void SetRemoteChanPan ( const int iId, const float fPan ) { Channel.SetRemoteChanPan ( iId, fPan ); } void SetInputBoost ( const int iNewBoost ) { iInputBoost = iNewBoost; } - + void SetBuiltInMicId ( const int iNewMicId ) { iBuiltInMicId = iNewMicId; } - int GetBuiltInMicId () { return iBuiltInMicId; } + int GetBuiltInMicId() { return iBuiltInMicId; } void SetRemoteInfo() { Channel.SetRemoteInfo ( ChannelInfo ); } @@ -267,8 +267,8 @@ class CClient : public QObject Channel.GetBufErrorRates ( vecErrRates, dLimit, dMaxUpLimit ); } - void SetInputDeviceId ( const int deviceid ); //for mobile devices - 0 for external devices - + void SetInputDeviceId ( const int deviceid ); // for mobile devices - 0 for external devices + // settings CChannelCoreInfo ChannelInfo; QString strClientName; @@ -319,7 +319,7 @@ class CClient : public QObject CVector vecCeltData; CHighPrioSocket Socket; - CSound Sound; + CSound Sound; CStereoSignalLevelMeter SignalLevelMeter; CVector vecbyNetwData; diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index c08fd5a191..619e17763a 100644 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -375,19 +375,17 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu->addMenu ( pEditMenu ); pMenu->addMenu ( new CHelpMenu ( true, this ) ); -#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined( Q_OS_IOS ) or defined( Q_OS_ANDROID ) or defined( ANDROID ) // Mobile input -------------------------------------------------------------- QMenu* pMobileMenu = new QMenu ( tr ( "&Mobile input" ), this ); - pMobileMenu->addAction ( tr ( "Builtin Mic" ), this, - SLOT ( setBuiltinMic() ) ); + pMobileMenu->addAction ( tr ( "Builtin Mic" ), this, SLOT ( setBuiltinMic() ) ); + + pMobileMenu->addAction ( tr ( "Auto" ), this, SLOT ( unsetBuiltinMic() ) ); - pMobileMenu->addAction ( tr ( "Auto" ), this, - SLOT ( unsetBuiltinMic() ) ); - pMenu->addMenu ( pMobileMenu ); #endif - + // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); diff --git a/src/clientdlg.h b/src/clientdlg.h index 3736bc3e0f..f544000e30 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -230,24 +230,24 @@ public slots: void OnNumClientsChanged ( int iNewNumClients ); void accept() { close(); } // introduced by pljones - + void setBuiltinMic() { - #if defined ( Q_OS_IOS ) +#if defined ( Q_OS_IOS ) pClient->SetInputDeviceId ( 1 ); - #endif - #if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#endif +#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) pClient->SetInputDeviceId ( pClient->GetBuiltInMicId() ); - #endif +#endif } void unsetBuiltinMic() { - #if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) pClient->SetInputDeviceId ( 0 ); - #endif +#endif } - + signals: void SendTabChange ( int iTabIdx ); }; diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index f5b59017b2..befba60559 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -42,15 +42,15 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet layout()->setMenuBar ( pMenu ); #endif -#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined( Q_OS_ANDROID ) or defined( ANDROID ) // Android too - QMenuBar* pMenu = new QMenuBar ( this ); - QMenu* pCloseMenu = new QMenu ( tr ( "Close" ), this ); + QMenuBar* pMenu = new QMenuBar ( this ); + QMenu* pCloseMenu = new QMenu ( tr ( "Close" ), this ); pCloseMenu->addAction ( tr ( "Close" ), this, SLOT ( close() ) ); pMenu->addMenu ( pCloseMenu ); // Now tell the layout about the menu - layout()->setMenuBar ( pMenu ); + layout()->setMenuBar ( pMenu ); #endif // Add help text to controls ----------------------------------------------- // local audio input fader @@ -335,17 +335,19 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet cbxInputBoost->setWhatsThis ( strInputBoost ); cbxInputBoost->setAccessibleName ( tr ( "Input Boost combo box" ) ); -#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) //Built-Mic for Android - experimental feature - requires User inputting correct deviceId +#if defined( Q_OS_ANDROID ) or defined( ANDROID ) // Built-Mic for Android - experimental feature - requires User inputting correct deviceId // Built-in Mic - QString strBuiltInMic = "" + tr ( "Built-in Mic Device Id" ) + ": " + - tr ( "Choose Input device Id. Use LiveEffect for references." ); + QString strBuiltInMic = "" + tr ( "Built-in Mic Device Id" ) + ": " + tr ( "Choose Input device Id. Use LiveEffect for references." ); lblBuiltInMicId->setWhatsThis ( strBuiltInMic ); edtBuiltInMicId->setWhatsThis ( strBuiltInMic ); edtBuiltInMicId->setAccessibleName ( tr ( "Built-in Mic Device Id edit box" ) ); #else - if ( horizontalLayout_14 ) horizontalLayout_14->deleteLater(); - if ( lblBuiltInMicId ) lblBuiltInMicId->deleteLater(); - if ( edtBuiltInMicId ) edtBuiltInMicId->deleteLater(); + if ( horizontalLayout_14 ) + horizontalLayout_14->deleteLater(); + if ( lblBuiltInMicId ) + lblBuiltInMicId->deleteLater(); + if ( edtBuiltInMicId ) + edtBuiltInMicId->deleteLater(); #endif // custom directory server address @@ -396,7 +398,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet lblUpstreamValue->setText ( "---" ); lblUpstreamUnit->setText ( "" ); edtNewClientLevel->setValidator ( new QIntValidator ( 0, 100, this ) ); // % range from 0-100 - edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); //input device - from 0 to 1000 + edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); // input device - from 0 to 1000 // init slider controls --- // network buffer sliders @@ -608,8 +610,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet QObject::connect ( edtNewClientLevel, &QLineEdit::editingFinished, this, &CClientSettingsDlg::OnNewClientLevelEditingFinished ); // line edits - QObject::connect ( edtBuiltInMicId, &QLineEdit::editingFinished, - this, &CClientSettingsDlg::OnBuiltInMicIdChanged ); + QObject::connect ( edtBuiltInMicId, &QLineEdit::editingFinished, this, &CClientSettingsDlg::OnBuiltInMicIdChanged ); // combo boxes QObject::connect ( cbxSoundcard, @@ -1150,5 +1151,5 @@ void CClientSettingsDlg::OnAudioPanValueChanged ( int value ) void CClientSettingsDlg::OnBuiltInMicIdChanged() { pSettings->iBuiltInMicId = edtBuiltInMicId->text().toInt(); - pClient->SetBuiltInMicId ( pSettings->iBuiltInMicId ); //change value in variable only, not yet effective + pClient->SetBuiltInMicId ( pSettings->iBuiltInMicId ); // change value in variable only, not yet effective } diff --git a/src/main.cpp b/src/main.cpp index 8c939fa859..2c4d704592 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -537,15 +537,15 @@ int main ( int argc, char** argv ) #ifdef HEADLESS QCoreApplication* pApp = new QCoreApplication ( argc, argv ); #else -# if defined ( Q_OS_IOS ) - bIsClient = true;//Ngocdh - client only now - TODO - maybe a switch in interface to change to Server? - bUseGUI = true; +#if defined( Q_OS_IOS ) + bIsClient = true; // Ngocdh - client only now - TODO - maybe a switch in interface to change to Server? + bUseGUI = true; // bUseMultithreading = true; QApplication* pApp = new QApplication ( argc, argv ); -# else +#else QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); -# endif +#endif #endif #ifdef ANDROID diff --git a/src/settings.h b/src/settings.h index ce477a31e9..57e28b76fc 100644 --- a/src/settings.h +++ b/src/settings.h @@ -153,7 +153,7 @@ class CClientSettings : public CSettings int iNewClientFaderLevel; int iInputBoost; int iSettingsTab; - int iBuiltInMicId; //0 for external + int iBuiltInMicId; // 0 for external bool bConnectDlgShowAllMusicians; EChSortType eChannelSortType; int iNumMixerPanelRows; diff --git a/src/socket.cpp b/src/socket.cpp index f4fd55b014..a26f7506ad 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -29,10 +29,10 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QString& strServerBindIP ) { // first store parameters, in case reinit is required (mostly for iOS) - iPortNumber_ = iPortNumber; - iQosNumber_ = iQosNumber; + iPortNumber_ = iPortNumber; + iQosNumber_ = iQosNumber; strServerBindIP_ = strServerBindIP; - + #ifdef _WIN32 // for the Windows socket usage we have to start it up first @@ -51,11 +51,11 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const setsockopt ( UdpSocket, IPPROTO_IP, IP_TOS, &tos, sizeof ( tos ) ); #ifdef Q_OS_IOS - //ignore the broken pipe signal to avoid crash (iOS) + // ignore the broken pipe signal to avoid crash (iOS) int valueone = 1; setsockopt ( UdpSocket, SOL_SOCKET, SO_NOSIGPIPE, &valueone, sizeof ( valueone ) ); #endif - + // allocate memory for network receive and send buffer in samples vecbyRecBuf.Init ( MAX_SIZE_BYTES_NETW_BUF ); @@ -126,7 +126,8 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const // Connections ------------------------------------------------------------- // it is important to do the following connections in this class since we // have a thread transition - if ( bIsInitRan ) return; + if ( bIsInitRan ) + return; // we have different connections for client and server if ( bIsClient ) @@ -154,7 +155,7 @@ void CSocket::Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QObject::connect ( this, &CSocket::ServerFull, pServer, &CServer::OnServerFull ); } - + bIsInitRan = true; // QObject::connect once only } @@ -202,11 +203,21 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr UdpSocketOutAddr.sin_port = htons ( HostAddr.iPort ); UdpSocketOutAddr.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); - if ( sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, ( sockaddr* ) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ) < 0 ) + if ( sendto ( UdpSocket, + (const char*) &( (CVector) vecbySendBuf )[0], + iVecSizeOut, + 0, + (sockaddr*) &UdpSocketOutAddr, + sizeof ( sockaddr_in ) ) < 0 ) { // qDebug("Socket send exception - mostly happens in iOS when returning from idle"); - Init( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit - sendto ( UdpSocket, ( const char* ) &( ( CVector ) vecbySendBuf )[0], iVecSizeOut, 0, ( sockaddr* ) &UdpSocketOutAddr, sizeof ( sockaddr_in ) ); + Init ( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit + sendto ( UdpSocket, + (const char*) &( (CVector) vecbySendBuf )[0], + iVecSizeOut, + 0, + (sockaddr*) &UdpSocketOutAddr, + sizeof ( sockaddr_in ) ); } } } diff --git a/src/socket.h b/src/socket.h index d4d9714492..2a248835bd 100644 --- a/src/socket.h +++ b/src/socket.h @@ -77,11 +77,11 @@ class CSocket : public QObject void Close(); protected: - void Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QString& strServerBindIP ); + void Init ( const quint16 iPortNumber, const quint16 iQosNumber, const QString& strServerBindIP ); quint16 iPortNumber_; quint16 iQosNumber_; QString strServerBindIP_; - bool bIsInitRan; + bool bIsInitRan; #ifdef _WIN32 SOCKET UdpSocket; From c137b72062468bb404fa8e2ff55497126dec96d8 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 10:43:56 +0200 Subject: [PATCH 93/98] style --- ios/sound.h | 2 +- src/clientdlg.h | 6 +++--- src/clientsettingsdlg.cpp | 4 ++-- src/main.cpp | 6 +++--- src/socket.cpp | 10 +++++----- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ios/sound.h b/ios/sound.h index 10b4c5ea46..64c24e3e5e 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -54,7 +54,7 @@ class CSound : public CSoundBase int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; bool isInitialized; - + protected: MIDIPortRef midiInPortRef; diff --git a/src/clientdlg.h b/src/clientdlg.h index f544000e30..d10774673d 100644 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -233,17 +233,17 @@ public slots: void setBuiltinMic() { -#if defined ( Q_OS_IOS ) +#if defined( Q_OS_IOS ) pClient->SetInputDeviceId ( 1 ); #endif -#if defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined( Q_OS_ANDROID ) or defined( ANDROID ) pClient->SetInputDeviceId ( pClient->GetBuiltInMicId() ); #endif } void unsetBuiltinMic() { -#if defined ( Q_OS_IOS ) or defined ( Q_OS_ANDROID ) or defined ( ANDROID ) +#if defined( Q_OS_IOS ) or defined( Q_OS_ANDROID ) or defined( ANDROID ) pClient->SetInputDeviceId ( 0 ); #endif } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index befba60559..20ac92d7a9 100644 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -398,7 +398,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet lblUpstreamValue->setText ( "---" ); lblUpstreamUnit->setText ( "" ); edtNewClientLevel->setValidator ( new QIntValidator ( 0, 100, this ) ); // % range from 0-100 - edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); // input device - from 0 to 1000 + edtBuiltInMicId->setValidator ( new QIntValidator ( 0, 1000, this ) ); // input device - from 0 to 1000 // init slider controls --- // network buffer sliders @@ -611,7 +611,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, CClientSettings* pNSet // line edits QObject::connect ( edtBuiltInMicId, &QLineEdit::editingFinished, this, &CClientSettingsDlg::OnBuiltInMicIdChanged ); - + // combo boxes QObject::connect ( cbxSoundcard, static_cast ( &QComboBox::activated ), diff --git a/src/main.cpp b/src/main.cpp index 2c4d704592..41f7fdfecd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -537,15 +537,15 @@ int main ( int argc, char** argv ) #ifdef HEADLESS QCoreApplication* pApp = new QCoreApplication ( argc, argv ); #else -#if defined( Q_OS_IOS ) +# if defined( Q_OS_IOS ) bIsClient = true; // Ngocdh - client only now - TODO - maybe a switch in interface to change to Server? bUseGUI = true; // bUseMultithreading = true; QApplication* pApp = new QApplication ( argc, argv ); -#else +# else QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); -#endif +# endif #endif #ifdef ANDROID diff --git a/src/socket.cpp b/src/socket.cpp index a26f7506ad..d8d41645f2 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -204,11 +204,11 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr UdpSocketOutAddr.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); if ( sendto ( UdpSocket, - (const char*) &( (CVector) vecbySendBuf )[0], - iVecSizeOut, - 0, - (sockaddr*) &UdpSocketOutAddr, - sizeof ( sockaddr_in ) ) < 0 ) + (const char*) &( (CVector) vecbySendBuf )[0], + iVecSizeOut, + 0, + (sockaddr*) &UdpSocketOutAddr, + sizeof ( sockaddr_in ) ) < 0 ) { // qDebug("Socket send exception - mostly happens in iOS when returning from idle"); Init ( iPortNumber_, iQosNumber_, strServerBindIP_ ); // reinit From 4987fbd94d85ec5d4d50e9dbb62c45a34747e538 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 10:47:41 +0200 Subject: [PATCH 94/98] style --- android/sound.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index bfecc6d8db..0aa7601174 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -346,10 +346,10 @@ void CSound::Stats::log() const << ",in_callback_calls: " << in_callback_calls << ",out_callback_calls: " << out_callback_calls << ",ring_overrun: " << ring_overrun; } -void CSound::SetInputDeviceId ( int deviceid ) //0 for external device (auto to be exact) +void CSound::SetInputDeviceId ( int deviceid ) // 0 for external device (auto to be exact) { closeStream ( mRecordingStream ); - + oboe::AudioStreamBuilder inBuilder; // Setup input stream @@ -357,20 +357,19 @@ void CSound::SetInputDeviceId ( int deviceid ) //0 for external device (auto to // Only set callback for the input direction // the output will be handled writing directly on the stream - inBuilder.setCallback(this); + inBuilder.setCallback ( this ); setupCommonStreamParams ( &inBuilder ); - if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi( oboe::AudioApi::AAudio ); - - inBuilder.setDeviceId(deviceid); + if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi ( oboe::AudioApi::AAudio ); + + inBuilder.setDeviceId ( deviceid ); oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); if ( result != oboe::Result::OK ) { - inBuilder.setDeviceId( oboe::kUnspecified ); + inBuilder.setDeviceId ( oboe::kUnspecified ); result = inBuilder.openManagedStream ( mRecordingStream ); } - mRecordingStream->setBufferSizeInFrames ( iOboeBufferSizeStereo ); warnIfNotLowLatency ( mRecordingStream, "RecordStream" ); From 0b1ec5a8762865cef0f8828dc0ea9609a955366b Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 10:48:56 +0200 Subject: [PATCH 95/98] style --- ios/sound.h | 1 - 1 file changed, 1 deletion(-) diff --git a/ios/sound.h b/ios/sound.h index 64c24e3e5e..d847b27e41 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -55,7 +55,6 @@ class CSound : public CSoundBase int iCoreAudioBufferSizeStereo; bool isInitialized; - protected: MIDIPortRef midiInPortRef; From 86f82ac8846eaff30dbda6f4e51bf25f3c292abf Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 10:51:23 +0200 Subject: [PATCH 96/98] style --- android/sound.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/sound.cpp b/android/sound.cpp index 0aa7601174..f92103c44f 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -360,7 +360,8 @@ void CSound::SetInputDeviceId ( int deviceid ) // 0 for external device (auto to inBuilder.setCallback ( this ); setupCommonStreamParams ( &inBuilder ); - if ( inBuilder.isAAudioSupported() ) inBuilder.setAudioApi ( oboe::AudioApi::AAudio ); + if ( inBuilder.isAAudioSupported() ) + inBuilder.setAudioApi ( oboe::AudioApi::AAudio ); inBuilder.setDeviceId ( deviceid ); oboe::Result result = inBuilder.openManagedStream ( mRecordingStream ); From 22931c5bed930106c6f94ae52a37e7551cc78e47 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 11:26:26 +0200 Subject: [PATCH 97/98] style --- ios/sound.h | 1 - 1 file changed, 1 deletion(-) diff --git a/ios/sound.h b/ios/sound.h index 64c24e3e5e..d847b27e41 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -55,7 +55,6 @@ class CSound : public CSoundBase int iCoreAudioBufferSizeStereo; bool isInitialized; - protected: MIDIPortRef midiInPortRef; From 4de56d2a26e9fe8118f4eaae02c292ee20089e58 Mon Sep 17 00:00:00 2001 From: ngocdh Date: Sun, 13 Jun 2021 19:12:23 +0200 Subject: [PATCH 98/98] clang-format -style=file -i * --- ios/ios_app_delegate.mm | 6 +- ios/sound.h | 2 +- ios/sound.mm | 289 ++++++++++++++++++++-------------------- 3 files changed, 144 insertions(+), 153 deletions(-) diff --git a/ios/ios_app_delegate.mm b/ios/ios_app_delegate.mm index 54b78a2651..dc84bab14c 100644 --- a/ios/ios_app_delegate.mm +++ b/ios/ios_app_delegate.mm @@ -7,10 +7,8 @@ @interface QIOSApplicationDelegate () @implementation QIOSApplicationDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - +- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions +{ return YES; } @end diff --git a/ios/sound.h b/ios/sound.h index d847b27e41..aeeec03f79 100644 --- a/ios/sound.h +++ b/ios/sound.h @@ -1,5 +1,5 @@ /******************************************************************************\ - * Copyright (c) 2004-2020 + * Copyright (c) 2004-2021 * * Author(s): * ann0see and ngocdh based on code from Volker Fischer diff --git a/ios/sound.mm b/ios/sound.mm index ec582e77af..e827f29256 100644 --- a/ios/sound.mm +++ b/ios/sound.mm @@ -1,5 +1,5 @@ /******************************************************************************\ - * Copyright (c) 2004-2020 + * Copyright (c) 2004-2021 * * Author(s): * ann0see and ngocdh based on code from Volker Fischer @@ -24,115 +24,113 @@ #include "sound.h" #include - #define kOutputBus 0 -#define kInputBus 1 - +#define kInputBus 1 -void checkStatus(int status){ - if (status) { - printf("Status not 0! %d\n", status); +void checkStatus ( int status ) +{ + if ( status ) + { + printf ( "Status not 0! %d\n", status ); } } -void checkStatus(int status, char * s){ - if (status) { - printf("Status not 0! %d - %s \n", status, s); +void checkStatus ( int status, char* s ) +{ + if ( status ) + { + printf ( "Status not 0! %d - %s \n", status, s ); } } /** - This callback is called when sound card needs output data to play. And because Jamulus use the same buffer to store input and output data (input is sent to server, then output is fetched from server), we actually use the output callback to read inputdata first, process it, and then copy the output fetched from server to ioData, which will then be played. + This callback is called when sound card needs output data to play. And because Jamulus use the same buffer to store input and output data (input is + sent to server, then output is fetched from server), we actually use the output callback to read inputdata first, process it, and then copy the + output fetched from server to ioData, which will then be played. */ -static OSStatus recordingCallback(void *inRefCon, - AudioUnitRenderActionFlags *ioActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList *ioData) { - - CSound * pSound = static_cast ( inRefCon ); - +static OSStatus recordingCallback ( void* inRefCon, + AudioUnitRenderActionFlags* ioActionFlags, + const AudioTimeStamp* inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList* ioData ) +{ + + CSound* pSound = static_cast ( inRefCon ); + AudioBuffer buffer; - + buffer.mNumberChannels = 2; - buffer.mDataByteSize = pSound->iCoreAudioBufferSizeMono * sizeof(Float32) * buffer.mNumberChannels; - buffer.mData = malloc( buffer.mDataByteSize ); - + buffer.mDataByteSize = pSound->iCoreAudioBufferSizeMono * sizeof ( Float32 ) * buffer.mNumberChannels; + buffer.mData = malloc ( buffer.mDataByteSize ); + // Put buffer in a AudioBufferList AudioBufferList bufferList; bufferList.mNumberBuffers = 1; - bufferList.mBuffers[0] = buffer; - - + bufferList.mBuffers[0] = buffer; + // Then: // Obtain recorded samples - + OSStatus status; - + // Calling Unit Render to store input data to bufferList - status = AudioUnitRender(pSound->audioUnit, - ioActionFlags, - inTimeStamp, - 1, - inNumberFrames, - &bufferList); - //checkStatus(status, (char *)" Just called AudioUnitRender "); - + status = AudioUnitRender ( pSound->audioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, &bufferList ); + // checkStatus(status, (char *)" Just called AudioUnitRender "); + // Now, we have the samples we just read sitting in buffers in bufferList // Process the new data - pSound->processBufferList(&bufferList,pSound); //THIS IS WHERE vecsStereo is filled with data from bufferList - + pSound->processBufferList ( &bufferList, pSound ); // THIS IS WHERE vecsStereo is filled with data from bufferList + // release the malloc'ed data in the buffer we created earlier - free(bufferList.mBuffers[0].mData); - + free ( bufferList.mBuffers[0].mData ); + Float32* pData = (Float32*) ( ioData->mBuffers[0].mData ); // copy output data for ( int i = 0; i < pSound->iCoreAudioBufferSizeMono; i++ ) { - pData[2 * i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; //left - pData[2 * i + 1] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; //right + pData[2 * i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; // left + pData[2 * i + 1] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; // right } - + return noErr; } - -void CSound::processBufferList(AudioBufferList* inInputData, CSound* pSound) //got stereo input data +void CSound::processBufferList ( AudioBufferList* inInputData, CSound* pSound ) // got stereo input data { QMutexLocker locker ( &pSound->MutexAudioProcessCallback ); - Float32* pData = static_cast ( inInputData->mBuffers[0].mData ); + Float32* pData = static_cast ( inInputData->mBuffers[0].mData ); // copy input data for ( int i = 0; i < pSound->iCoreAudioBufferSizeMono; i++ ) { // copy left and right channels separately - pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pData[2 * i] * _MAXSHORT ); //left - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pData[2 * i + 1] * _MAXSHORT ); //right + pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pData[2 * i] * _MAXSHORT ); // left + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pData[2 * i + 1] * _MAXSHORT ); // right } - pSound->ProcessCallback(pSound->vecsTmpAudioSndCrdStereo); + pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); } - /* Implementation *************************************************************/ -CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), +CSound::CSound ( void ( *fpNewProcessCallback ) ( CVector& psData, void* arg ), void* arg, const QString& strMIDISetup, - const bool , + const bool, const QString& ) : CSoundBase ( "CoreAudio iOS", fpNewProcessCallback, arg, strMIDISetup ), midiInPortRef ( static_cast ( NULL ) ) { try { - NSError *audioSessionError = nil; - + NSError* audioSessionError = nil; + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError]; - [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { - if (granted) { - // ok - } + [[AVAudioSession sharedInstance] requestRecordPermission:^( BOOL granted ) { + if ( granted ) + { + // ok + } }]; [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:&audioSessionError]; } @@ -147,118 +145,111 @@ static OSStatus recordingCallback(void *inRefCon, { try { - //printf("Init sound ..."); <= to check the number of Sound inits at launch + // printf("Init sound ..."); <= to check the number of Sound inits at launch // init base class - //CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing + // CSoundBase::Init ( iCoreAudioBufferSizeMono ); this does nothing this->iCoreAudioBufferSizeMono = iCoreAudioBufferSizeMono; // set internal buffer size value and calculate stereo buffer size iCoreAudioBufferSizeStereo = 2 * iCoreAudioBufferSizeMono; - //create memory for intermediate audio buffer + // create memory for intermediate audio buffer vecsTmpAudioSndCrdStereo.Init ( iCoreAudioBufferSizeStereo ); - - AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; - + + AVAudioSession* sessionInstance = [AVAudioSession sharedInstance]; + // we are going to play and record so we pick that category - NSError *error = nil; - [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionAllowBluetoothA2DP | AVAudioSessionCategoryOptionAllowAirPlay error:&error]; - + NSError* error = nil; + [sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord + withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker | + AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionAllowBluetoothA2DP | + AVAudioSessionCategoryOptionAllowAirPlay + error:&error]; + // NGOCDH - using values from jamulus settings 64 = 2.67ms/2 - NSTimeInterval bufferDuration = iCoreAudioBufferSizeMono / 48000.0; //yeah it's math + NSTimeInterval bufferDuration = iCoreAudioBufferSizeMono / 48000.0; // yeah it's math [sessionInstance setPreferredIOBufferDuration:bufferDuration error:&error]; - + // set the session's sample rate 48000 - the only supported by Jamulus ? [sessionInstance setPreferredSampleRate:48000 error:&error]; [[AVAudioSession sharedInstance] setActive:YES error:&error]; - + OSStatus status; - + // Describe audio component AudioComponentDescription desc; - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_RemoteIO; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_RemoteIO; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; desc.componentManufacturer = kAudioUnitManufacturer_Apple; - + // Get component - AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc); - + AudioComponent inputComponent = AudioComponentFindNext ( NULL, &desc ); + // Get audio units - status = AudioComponentInstanceNew(inputComponent, &audioUnit); - checkStatus(status); - + status = AudioComponentInstanceNew ( inputComponent, &audioUnit ); + checkStatus ( status ); + // Enable IO for recording UInt32 flag = 1; - status = AudioUnitSetProperty(audioUnit, - kAudioOutputUnitProperty_EnableIO, - kAudioUnitScope_Input, - kInputBus, - &flag, - sizeof(flag)); - checkStatus(status); - + status = AudioUnitSetProperty ( audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof ( flag ) ); + checkStatus ( status ); + // Enable IO for playback - status = AudioUnitSetProperty(audioUnit, - kAudioOutputUnitProperty_EnableIO, - kAudioUnitScope_Output, - kOutputBus, - &flag, - sizeof(flag)); - checkStatus(status); - + status = AudioUnitSetProperty ( audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, kOutputBus, &flag, sizeof ( flag ) ); + checkStatus ( status ); + // Describe format AudioStreamBasicDescription audioFormat; - audioFormat.mSampleRate = 48000.00; - audioFormat.mFormatID = kAudioFormatLinearPCM; - audioFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; - audioFormat.mFramesPerPacket = 1; - audioFormat.mChannelsPerFrame = 2; //steoreo, so 2 interleaved channels - audioFormat.mBitsPerChannel = 32;//sizeof float32 - audioFormat.mBytesPerPacket = 8;// (sizeof float32) * 2 channels - audioFormat.mBytesPerFrame = 8;//(sizeof float32) * 2 channels - + audioFormat.mSampleRate = 48000.00; + audioFormat.mFormatID = kAudioFormatLinearPCM; + audioFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; + audioFormat.mFramesPerPacket = 1; + audioFormat.mChannelsPerFrame = 2; // steoreo, so 2 interleaved channels + audioFormat.mBitsPerChannel = 32; // sizeof float32 + audioFormat.mBytesPerPacket = 8; // (sizeof float32) * 2 channels + audioFormat.mBytesPerFrame = 8; //(sizeof float32) * 2 channels + // Apply format - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - kInputBus, - &audioFormat, - sizeof(audioFormat)); - checkStatus(status); - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, - kOutputBus, - &audioFormat, - sizeof(audioFormat)); - checkStatus(status); - - + status = AudioUnitSetProperty ( audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, + kInputBus, + &audioFormat, + sizeof ( audioFormat ) ); + checkStatus ( status ); + status = AudioUnitSetProperty ( audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + kOutputBus, + &audioFormat, + sizeof ( audioFormat ) ); + checkStatus ( status ); + // Set callback AURenderCallbackStruct callbackStruct; - callbackStruct.inputProc = recordingCallback;//this is actually the playback callback + callbackStruct.inputProc = recordingCallback; // this is actually the playback callback callbackStruct.inputProcRefCon = this; - status = AudioUnitSetProperty(audioUnit, - kAudioUnitProperty_SetRenderCallback, - kAudioUnitScope_Global, - kOutputBus, - &callbackStruct, - sizeof(callbackStruct)); - checkStatus(status); - + status = AudioUnitSetProperty ( audioUnit, + kAudioUnitProperty_SetRenderCallback, + kAudioUnitScope_Global, + kOutputBus, + &callbackStruct, + sizeof ( callbackStruct ) ); + checkStatus ( status ); + // Initialise - status = AudioUnitInitialize(audioUnit); - checkStatus(status); - + status = AudioUnitInitialize ( audioUnit ); + checkStatus ( status ); + isInitialized = true; } catch ( const CGenErr& generr ) { qDebug ( "Sound Init exception ...." ); // This try-catch seems to fix Connect button crash } - + return iCoreAudioBufferSizeMono; } @@ -268,8 +259,8 @@ static OSStatus recordingCallback(void *inRefCon, CSoundBase::Start(); try { - OSStatus err = AudioOutputUnitStart(audioUnit); - checkStatus(err); + OSStatus err = AudioOutputUnitStart ( audioUnit ); + checkStatus ( err ); } catch ( const CGenErr& generr ) { @@ -279,9 +270,10 @@ static OSStatus recordingCallback(void *inRefCon, void CSound::Stop() { - try{ - OSStatus err = AudioOutputUnitStop(audioUnit); - checkStatus(err); + try + { + OSStatus err = AudioOutputUnitStop ( audioUnit ); + checkStatus ( err ); } catch ( const CGenErr& generr ) { @@ -291,17 +283,18 @@ static OSStatus recordingCallback(void *inRefCon, CSoundBase::Stop(); } -void CSound::SetInputDeviceId( int deviceid ) +void CSound::SetInputDeviceId ( int deviceid ) { try { - NSError *error = nil; - bool builtinmic = true; - - if (deviceid==0) builtinmic = false; //try external device + NSError* error = nil; + bool builtinmic = true; + + if ( deviceid == 0 ) + builtinmic = false; // try external device - AVAudioSession *sessionInstance = [AVAudioSession sharedInstance]; - //assumming iOS only has max 2 inputs: 0 for builtin mic and 1 for external device + AVAudioSession* sessionInstance = [AVAudioSession sharedInstance]; + // assumming iOS only has max 2 inputs: 0 for builtin mic and 1 for external device if ( builtinmic ) { [sessionInstance setPreferredInput:sessionInstance.availableInputs[0] error:&error];