예를 들어 데이터를 디스크에 임시로 저장하지 않고 WebRequest 에서 재생 된 System.IO.Stream 에서 직접 오디오 (예 : MP3)를 C #에서 재생하는 방법이 있습니까?
NAudio 솔루션
NAudio 1.3 의 도움으로 다음이 가능합니다.
- URL에서 MemoryStream으로 MP3 파일로드
- MP3 데이터가 완전히로드 된 후 웨이브 데이터로 변환
- NAudio 의 WaveOut 클래스를 사용하여 웨이브 데이터 재생
절반 만로드 된 MP3 파일도 재생할 수 있으면 좋았 겠지만 NAudio 라이브러리 설계 로 인해 불가능한 것 같습니다 .
그리고 이것이 작업을 수행 할 기능입니다.
public static void PlayMp3FromUrl(string url)
{
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);
}
}
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);
}
}
}
}
}