/// <summary> /// Check and fix any problem with hardware. /// </summary> private void CheckDriver() { //Get number of driver available int DriverNumber = 0; CheckError(m_System.getNumDrivers(ref DriverNumber)); //Driver checking #region Solve hardware problems //If there's 0 driver, no sound if (DriverNumber <= 0) CheckError(m_System.setOutput(OUTPUTTYPE.NOSOUND)); else { //Get driver capability int MinFreq = 0, MaxFreq = 0; CAPS Capability = CAPS.NONE; SPEAKERMODE Speakermode = SPEAKERMODE.STEREO; CheckError(m_System.getDriverCaps(0, ref Capability, ref MinFreq, ref MaxFreq, ref Speakermode)); //Set spearker mode according to the driver CheckError(m_System.setSpeakerMode(Speakermode)); //Set buffer if not using hardware accceleration if ((Capability & CAPS.HARDWARE_EMULATED) == CAPS.HARDWARE_EMULATED) CheckError(m_System.setDSPBufferSize(Global.EMULATED_BUFFERSIZE, Global.EMULATED_BUFFERCOUNT)); //Get user driver data GUID Guid = new GUID(); StringBuilder DriverName = new StringBuilder(Global.MAX_DRIVERNAME); CheckError(m_System.getDriverInfo(0, DriverName, Global.MAX_DRIVERNAME, ref Guid)); //If driver is sigmatel if (DriverName.Equals(new StringBuilder((Global.SIGMATEL_DRIVERNAME)))) { //Fix crackling CheckError(m_System.setSoftwareFormat( Global.SIGMATEL_SAMPLERATE, SOUND_FORMAT.PCMFLOAT, 0, 0, DSP_RESAMPLER.LINEAR)); } } #endregion }
private static extern RESULT FMOD_System_GetRecordDriverInfo(IntPtr system, int id, StringBuilder name, int namelen, ref GUID guid);
private static extern RESULT FMOD_System_GetRecordDriverInfoW(IntPtr system, int id, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder name, int namelen, ref GUID guid);
public RESULT getRecordDriverInfo(int id, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder name, int namelen, ref GUID guid) { //use multibyte version return FMOD_System_GetRecordDriverInfoW(systemraw, id, name, namelen, ref guid); }