NetCoreAudio Loop 기능 제작
🚨 오디오 플레이어를 제작하고 사요중 중요한 문제가 발생
- 오디오가 재생이 끝났을때 다시 반복하는 기능이 없는 것
- 반복기능이 없다면 추가적으로 실행을 시켜주어야하고 이는 코드의 가독성을 낮추고 복잡성을 높히는 문제로 발전하게 될 것이라고 판단되어 Loop 기능을 만들기로 함
Event Handler
- NetCoreAudio에는
PlaybackFinished
라는 Event Flag가 존재 - 이는 오디오파일의 플레이가 종료 되었을 때 true로 변하며, 플레이중에는 false 상태로 존재
- 해당 Flag 의 상태가 변하면 다시 플레이하는 메서드를 호출하여 반복 재생 기능을 하도록 구현
_audioPlayer.PlaybackFinished += OnPlayCompleted;
- 추가적인 bool 값으로 loop 변수를 선언하여 반복 재생 여부를 내부적으로 결정
- 플레이시에 꼭 필요한 FilePath의 경우 내부적으로
_currentFilePath
라는 변수에 할당
코드 전문
using NetCoreAudio.Interfaces;
namespace HexaCoreVillage.Utility
{
public class AudioPlayer
{
public enum PlayOption
{
Play, Pause, Resume, Stop,
Change, LoopStart, LoopStop
}
private static readonly IPlayer _audioPlayer = new NetCoreAudio.Player();
private static bool _loop = false;
private static string? _currentFilePath;
/// <summary>
/// 오디오 플레이어 메서드
/// </summary>
/// <param name="filePath">Audio File Path</param>
/// <param name="playOption">Play : 재생, Pause : 일시정지, Resume : 재실행, Stop : 중지, Change : 파일 바꾸기, LoopStart : 반복 실행, LoopStop : 반복실행취소</param>
public static void AudioController(string? filePath, PlayOption playOption)
{
_currentFilePath = filePath;
switch (playOption)
{
case PlayOption.Play:
PlayAudio();
return;
case PlayOption.Pause:
_audioPlayer.Pause();
return;
case PlayOption.Resume:
_audioPlayer.Resume();
return;
case PlayOption.Stop:
StopAudio();
return;
case PlayOption.Change:
ChangeAudio(filePath);
return;
case PlayOption.LoopStart:
_loop = true;
PlayAudio();
return;
case PlayOption.LoopStop:
_loop = false;
StopAudio();
return;
}
}
private static void PlayAudio()
{
_audioPlayer.PlaybackFinished+= OnPlayFinished;
_audioPlayer.Play(_currentFilePath);
}
private static void StopAudio()
{
_loop = false;
_audioPlayer.Stop();
_audioPlayer.PlaybackFinished -= OnPlayFinished;
}
private static void ChangeAudio(string? filePath)
{
_audioPlayer.Stop();
_audioPlayer.Play(filePath);
}
private static void OnPlayFinished(object sender, EventArgs eventArgs)
{
if (_loop)
{
PlayAudio();
}
}
}
}
Process Stop
👨🏻🚒 프로세스가 종료 될 때 시스템에서 재생중인 오디오가 멈추지 않고 계속 재생되는 문제
마치며
기능은 없으면 만들면 되고, 그 중에서 이벤트를 활용하는 방법에 대한 아이디어를 더 생각하면 서비스 친화적인 좋은 개발을 할 수 있을 것 같습니다.