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

[C#] byte데이터를 Naudio에서 실시간 출력

by 창용이랑 2023. 4. 4.
728x90

안녕하세요! C#에서 소켓통신으로 받은 byte 데이터를 NAudio 라이브러리를 사용하여 실시간으로 스피커로 출력하는 코드를 만드는 방법에 대해 알려드리겠습니다.

먼저, 소켓통신으로 받은 byte 데이터를 큐에 담습니다. 그리고 큐에서 데이터를 읽어들여 NAudio 라이브러리를 사용하여 스피커로 출력하면 됩니다.

아래는 소켓통신으로 받은 byte 데이터를 NAudio 라이브러리를 사용하여 실시간으로 스피커로 출력하는 코드입니다.

 

using NAudio.Wave;
using System.Net.Sockets;

private WaveOutEvent waveOut;
private BufferedWaveProvider bufferedWaveProvider;

//별도 스레드에서 실행
public void StartPlaying()
{
    waveOut = new WaveOutEvent();
    waveOut.DeviceNumber = 0;

    bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(44100, 1));
    bufferedWaveProvider.BufferDuration = TimeSpan.FromSeconds(10);

    waveOut.Init(bufferedWaveProvider);
    waveOut.Play();
}

public void AddData(Socket socket)
{
    byte[] buffer = new byte[1024];
    int readBytes = socket.Receive(buffer);
    
    //데이터 추가
    bufferedWaveProvider.AddSamples(buffer, 0, readBytes);
}

위 코드에서는 WaveOutEvent 클래스를 사용하여 스피커로 오디오 데이터를 출력합니다. 

 

출력할 데이터는 BufferedWaveProvider 클래스를 사용하여 큐에 담습니다. 

그리고 큐에서 데이터를 읽어들여 스피커로 출력합니다.

위 코드에서는 큐의 크기가 10초로 설정되어 있습니다. 이 부분은 필요에 따라 수정하실 수 있습니다.

참고하시기 바랍니다!