Result InitComponent::saveConfig() { AudioDeviceManager::AudioDeviceSetup audioDeviceSetup; deviceManager.getAudioDeviceSetup(audioDeviceSetup); ScopedPointer<XmlElement> audioDeviceState ( deviceManager.createStateXml() ); /* create audioDeviceState when no changes were applied to the device settings */ if (audioDeviceState == NULL) { audioDeviceState = createXmlSettings(deviceManager); } /* Check if audioDeviceState is complete */ String attrString; attrString = "audioDeviceRate"; if ( !audioDeviceState->hasAttribute( attrString ) ) audioDeviceState->setAttribute(attrString, audioDeviceSetup.sampleRate ); attrString = "audioDeviceBufferSize"; if ( !audioDeviceState->hasAttribute(attrString ) ) audioDeviceState->setAttribute( attrString, audioDeviceSetup.bufferSize ); attrString = "audioDeviceInChans"; if ( !audioDeviceState->hasAttribute( attrString ) ) audioDeviceState->setAttribute( attrString, audioDeviceSetup.inputChannels.toString(2, 1) ); attrString = "audioDeviceOutChans"; if ( !audioDeviceState->hasAttribute( attrString ) ) audioDeviceState->setAttribute( attrString, audioDeviceSetup.outputChannels.toString(2, 1) ); /* add more attributes to audioDeviceState */ XmlElement* mchaSettings = new XmlElement( "MCHASETTINGS" ); // this will be deleted automatically by the parent mchaSettings->setAttribute( "loggingLevel", mchaSettingsComponent->getLogLevel() ); mchaSettings->setAttribute( "memoryMode", mchaSettingsComponent->getMemoryMode() ); audioDeviceState->addChildElement(mchaSettings); File settingsFile( settingsFileName ); if (settingsFile == File::nonexistent) { return Result::fail( L"Settings file is absent" );; } DBG( L"mchaInit:\n Settings file created:\t" + settingsFile.getFileName() ); if ( !audioDeviceState->writeToFile ( settingsFile, String::empty ) ) { return Result::fail( L"Unable to save settings" ); } deviceManager.closeAudioDevice(); return Result::ok(); }