AsioOutで正弦波の例を実行しようとしましたが、歪んだ方形波のように聞こえます。AsioOutがPCMフォーマットのみをサポートする可能性はありますか?asio.wavファイルの再生は問題なく機能します...
もしそうなら、どうすれば私のバッファをIeeeフロートで満たしてPCMに変換できますか?または、ASIOでIeeeをパリーバックするための最良の方法は何ですか?不必要なサンプル変換は避けたいです。
これまでの私のコードでは、バッファサイズに適合する正弦波を生成しようとしました。連続値があることを確認するために、サンプルレート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;
}
}