1
나는 AsioOut에서 실행되는 sine wave example을 얻으려고했지만 왜곡 된 구형파처럼 들립니다. AsioOut은 PCM 형식 만 지원할 수 있습니까? asio .wav 파일 재생이 제대로 작동합니다 ...NAudio Asio 및 IeeeFloat 형식
그렇다면 어떻게 버퍼를 Ieee 부동으로 채우고 PCM으로 변환 할 수 있습니까? 또는 ASIO에서 Ieee를 palyback하는 가장 좋은 방법은 무엇입니까? 불필요한 샘플 변환을 피하려고합니다.
내 코드까지 지금까지 연속 값이 있는지 확인하기 위해 버퍼 크기에 맞는 사인파를 생성하려고했지만 샘플 속도 44100으로 초기화했습니다. 1 채널. 그런 다음 클래스의 인스턴스를 내 AsioOut의 Init()에 전달합니다.
public class SineWaveProvider32 : IWaveProvider
{
private WaveFormat waveFormat;
public WaveFormat WaveFormat
{
get
{
return this.waveFormat;
}
}
public SineWaveProvider32() : this(44100, 1)
{
}
public SineWaveProvider32(int sampleRate, int channels)
{
this.SetWaveFormat(sampleRate, channels);
}
public void SetWaveFormat(int sampleRate, int channels)
{
this.waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels);
}
public unsafe int Read(byte[] buffer, int offset, int count)
{
var samples = count/4;
fixed(byte* buff = buffer)
{
for (int n = 0; n < samples; n++)
{
var num = (float)(Math.Sin((2 * Math.PI * n)/ samples));
((float*)buff)[n] = num;
}
}
return count;
}
}