I wrote a script that plays random audio files from an array. But I can't figure out how to fade out the current playing audio at the end of the file and fade in the new audio file. below is the code. The Audio file I am using is mp3 files for now and I have a plan to switch to wave files. and any suggestion to that too
 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Random = UnityEngine.Random;
public class BackGroundAudio : MonoBehaviour
{
    public AudioSource audioSource;
    public AudioClip[] audioClipsArray;
    public String FileName;
    // Start is called before the first frame update
    void awake()
    {
       audioSource = GetComponent<AudioSource>(); 
       
    }
    void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        if (!audioSource.isPlaying)
         {
             PlayRandom();
         }
    }
    void PlayRandom()
    {
        audioSource.clip=audioClipsArray[Random.Range(0,audioClipsArray.Length)];
        audioSource.clip =trimSilence(audioSource.clip);
        audioSource.PlayOneShot(audioSource.clip);
    }
    AudioClip trimSilence(AudioClip inputAudio, float threshold = 0.05f)
    {
        // Copy samples from input audio to an array. AudioClip uses interleaved format so the length in samples is multiplied by channel count
        float[] samplesOriginal = new float[inputAudio.samples * inputAudio.channels];
        inputAudio.GetData(samplesOriginal, 0);
        // Find first and last sample (from any channel) that exceed the threshold
        int audioStart = Array.FindIndex(samplesOriginal, sample => sample > threshold),
            audioEnd = Array.FindLastIndex(samplesOriginal, sample => sample > threshold);
        // Copy trimmed audio data into another array
        float[] samplesTrimmed = new float[audioEnd - audioStart];
        Array.Copy(samplesOriginal, audioStart, samplesTrimmed, 0, samplesTrimmed.Length);
        // Create new AudioClip for trimmed audio data
        AudioClip trimmedAudio = AudioClip.Create(inputAudio.name, samplesTrimmed.Length / inputAudio.channels, inputAudio.channels, inputAudio.frequency, false);
        trimmedAudio.SetData(samplesTrimmed, 0);
        return trimmedAudio;
    }
}