본문 바로가기
개발언어/NAudio

[NAudio] 재생 속도 조절

by 창용이랑 2021. 7. 8.
728x90

가장 메이저한 음향 편집 기능, 재생 속도 조절이다.

실제로 강의에서도 말했기에 굉장히 쉬운 기능일 거라고 생각했는데 생각보다 어려운 기능이었나 보다. NAudio에는 추가되어있지 않았고, 공식적으로 올린 예제가 있긴 했는데 다른 오픈소스(SoundTouch) 를 이용해서 구현한 것이었다.

 

 

코드의 버전 문제로, .NetFramework 4.5.1 에서만 구동된다.

해당 버전부터 제공되는 함수를 코드상에서 사용하기 때문. vs2017에서도 돌아가니 불만 말고 쓰자.

 

원본 출처는 아래이다.

 

https://markheath.net/post/varispeed-naudio-soundtouch

Varispeed Playback with NAudio using SoundTouch

Mark Heath's Development Blog

markheath.net

 

이것의 장점은, 괜히 저 라이브러리를 어설프게 건드릴 필요가 전혀 없고 그냥 signal chain에 포함시켜주기만 하면 만사 OK라는 점이다.

내가 해야할 것은 저 라이브러리의 소스코드들을 추가하고, DLL을 배치하고, signal chain에 끼워넣기만 하면 된다.

 

필요한 파일들은 혹시나 모르니까 올려두겠다.

....저작권 문제가 되나? 하지 말자. 내 깃허브를 뒤져보면 나온다. soundwing test를 보자.

 

내 메인 코드에서 이 부분과 관련있는 일부만 빼왔다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        private VarispeedSampleProvider varispeedSampleProvider;
        private IWavePlayer playbackDevice;
        private WaveStream fileStream;


        private void OpenFile(string fileName)
        {
            try
            {
                var inputStream = new AudioFileReader(fileName);
                fileStream = inputStream;
                //재생 속도 조절 기능을 signal chain에 추가
                varispeedSampleProvider = new VarispeedSampleProvider(inputStream, 100new SoundTouchProfile(truefalse));
                playbackDevice.Init(varispeedSampleProvider);


                //waveform, spectrogram 그리기
                soundVisulize.render(inputStream);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Problem opening file");
                CloseFile();
            }
        }


        //2배속 재생
        private void Button_Click_fast(object sender, RoutedEventArgs e)
        {
            varispeedSampleProvider.PlaybackRate = 2;
        }
        //1배속 재생
        private void Button_Click_normal(object sender, RoutedEventArgs e)
        {
            varispeedSampleProvider.PlaybackRate = 1;
        }
        //0.5배속 재생
        private void Button_Click_slow(object sender, RoutedEventArgs e)
        {
            varispeedSampleProvider.PlaybackRate = 0.5f;
        }
Colored by Color Scripter
cs

 

저 playbackDevice가 오디오 재생 클래스다.

playbackDevice.Play(); 같은 방식으로 재생 등을 하고 있으니까.

테스트 코드니만큼 단순하게 버튼 셋을 만들어놨다.

 

그런 와중에, 조절하고자 할 때 그냥 저렇게 단순하게 몇배속으로 할 건지 값을 때려넣어 주기만 하면 된다! 이 얼마나 쉬운지...하.

 

출처 : https://m.blog.naver.com/luku756/221954618728

'개발언어 > NAudio' 카테고리의 다른 글

[Digital Audio] 1. Audio Sampling  (0) 2021.07.08
[NAudio] 반복재생하기  (0) 2021.07.08
[NAudio] Spectrogram 그리기  (0) 2021.07.08
[NAudio] 6. Recording Audio  (0) 2021.07.08
[NAudio] 5. Working With Codecs  (0) 2021.07.08