public static bool sfxAutodetect() { // Get all the available devices. string devices = omni.Util.sfxGetAvailableDevices(); // Collect and sort the devices by preferentiality. int count = omni.Util.getRecordCount(devices); ArrayObject deviceTrySequence = new ObjectCreator("ArrayObject").Create().AsString(); for (int i = 0; i < count; i++) { string info = omni.Util.getRecord(devices, i); string provider = omni.Util.getField(info, 0); deviceTrySequence.push_back(provider, info); } deviceTrySequence.sortfk("sfxCompareProvider"); // Try the devices in order. count = deviceTrySequence.count(); for (int i = 0; i < count; i++) { string provider = deviceTrySequence.getKey(i); string info = deviceTrySequence.getValue(i); omni.sGlobal["$pref::SFX::provider"] = provider; omni.sGlobal["$pref::SFX::device"] = omni.Util.getField(info, 1); omni.sGlobal["$pref::SFX::useHardware"] = omni.Util.getField(info, 2); // By default we've decided to avoid hardware devices as // they are buggy and prone to problems. omni.bGlobal["$pref::SFX::useHardware"] = false; if (!sfxInit()) continue; omni.bGlobal["$pref::SFX::autoDetect"] = false; deviceTrySequence.delete(); return true; } // Found no suitable device. omni.console.error("sfxAutodetect - Could not initialize a valid SFX device."); omni.sGlobal["$pref::SFX::provider"] = ""; omni.sGlobal["$pref::SFX::device"] = ""; omni.sGlobal["$pref::SFX::useHardware"] = ""; deviceTrySequence.delete(); return false; }