본문 바로가기
개발언어/C#

[C#] 스트림에서 오디오재생 stream play

by 창용이랑 2021. 10. 18.
728x90

NAudio를 사용한 솔루션

NAudio 1.3의 도움으로 다음을 수행할 수 있다.

  1. URL에서 MemoryStream으로 MP3 파일 로드
  2. MP3 데이터를 완전히 로드한 후 파형 데이터로 변환
  3. NAudio의 WaveOut 클래스를 사용하여 파형 데이터 재생

반 장전된 MP3 파일까지 재생할 수 있었으면 좋았을 텐데, NAudio 라이브러리 설계 때문에 불가능해 보인다.

그리고 이것이 그 일을 할 수 있는 기능이다.

 

public static void PlayMp3FromUrl(string url)
{
	//url에서 stream으로 받아와서 buffer에 저장
	
	using (Stream ms = new MemoryStream())
	{
		using (Stream stream = WebRequest.Create(url)
			.GetResponse().GetResponseStream())
		{
			byte[] buffer = new byte[32768];
			int read;
			while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
			{
				ms.Write(buffer, 0, read);
			}
		}

		//stream데이터를 처음부터 끝날때까지 play
		
		ms.Position = 0;
		using (WaveStream blockAlignedStream =
			new BlockAlignReductionStream(
				WaveFormatConversionStream.CreatePcmStream(
					new Mp3FileReader(ms))))
		{
			using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
			{
				waveOut.Init(blockAlignedStream);
				waveOut.Play();                        
				while (waveOut.PlaybackState == PlaybackState.Playing )                        
				{
					System.Threading.Thread.Sleep(100);
				}
			}
		}
	}
}

 

출처 : https://stackoverflow.com/questions/184683/play-audio-from-a-stream-using-c-sharp

 

Play audio from a stream using C#

Is there a way in C# to play audio (for example, MP3) direcly from a System.IO.Stream that for instance was returend from a WebRequest without saving the data temporarily to the disk? Solution with

stackoverflow.com