가장 메이저한 음향 편집 기능, 재생 속도 조절이다.
실제로 강의에서도 말했기에 굉장히 쉬운 기능일 거라고 생각했는데 생각보다 어려운 기능이었나 보다. 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, 100, new SoundTouchProfile(true, false)); 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(); 같은 방식으로 재생 등을 하고 있으니까.
테스트 코드니만큼 단순하게 버튼 셋을 만들어놨다.
그런 와중에, 조절하고자 할 때 그냥 저렇게 단순하게 몇배속으로 할 건지 값을 때려넣어 주기만 하면 된다! 이 얼마나 쉬운지...하.
'개발언어 > 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 |