본문 바로가기

생활 정보/기타 꿀팁

Unity3d C# AudioClip 입력 되는 만큼 자르기 (오디오클립 자르기)

728x90
반응형

개발 하다보면 마이크를 이용해서 음성을 입력하고, 오디오파일을 입력된 부분만큼 자르고 싶은 경우가 있다.

예를 들어, 

 

recordedClip = Microphone.Start(null, false, 30, 16000);

 

이렇게 마이크로 30초동안 녹음을 하게 설정을 하고,

실제로 녹음은 5초정도만 되었다면, 뒤에 25초는 빈 공백으로 남게된다.

그렇게 되면, 필요없는 길이를 자르고 싶어지는데

아래 함수를 이용하면 실제 녹음된 길이 이외의 부분을 자를 수 있다.

 

private AudioClip TrimSilence (AudioClip clip, float endTime)
    {
        float[] samples = new float[clip.samples * clip.channels];
        clip.GetData(samples, 0);

        int endIndex = (int)(endTime * clip.frequency) * clip.channels;

        int i;
        for (i = endIndex - 1; i >= 0; i--)
        {
            if (Mathf.Abs(samples[i]) > 0.1f)
            {
                break;
            }
        }

        float[] trimmedSamples = new float[i + 1];
        Array.Copy(samples, trimmedSamples, i + 1);

        AudioClip trimmedClip = AudioClip.Create("trimmed", trimmedSamples.Length / clip.channels, clip.channels, clip.frequency, false);
        trimmedClip.SetData(trimmedSamples, 0);

        return trimmedClip;
    }

 

 

728x90
반응형