带有WaveOutAPI的意外波形

带有WaveOutAPI的意外波形,waveout,Waveout,我对waveOut接口有问题。我想写一个简单的类结构,其中我有一个类AudioStream,它使音频输出变得非常简单。我有一个构造函数,它接受以下参数: AudioStream32(int-sampleRate、int-sampleSize、bool立体声、int-bufferSize) (sampleSize是样本的大小,以字节为单位,其余的希望是不言自明的) 我的想法是初始化音频流一次,然后调用setSample(float sample)来设置音频流。该类处于开始阶段,因此当前只实现了双缓

我对waveOut接口有问题。我想写一个简单的类结构,其中我有一个类AudioStream,它使音频输出变得非常简单。我有一个构造函数,它接受以下参数: AudioStream32(int-sampleRate、int-sampleSize、bool立体声、int-bufferSize) (sampleSize是样本的大小,以字节为单位,其余的希望是不言自明的)

我的想法是初始化音频流一次,然后调用setSample(float sample)来设置音频流。该类处于开始阶段,因此当前只实现了双缓冲和单声道

在setSample方法中,我将浮点采样转换为0到2^(8*sampleSize)范围内的无符号整数,然后将该无符号整数转换为无符号字符。我也可以直接使用unsigned int,但这样我就不能重用用于其他示例的代码。代码:

void AudioStream32::setSample(float sample)
{
unsigned int discreteSample = 1 + mid + ((float)mid * sample);

for (unsigned int i = 0; i < sampleSize; i++)
{
    data[pointr++] = (char)(discreteSample & 255);
    discreteSample = discreteSample >> 8;
    // (same as dividing by 256)
}

//... Non-relevant code that makes sure the buffer is sent to the audio device
void AudioStream32::设置样本(浮点样本)
{
无符号整数离散采样=1+mid+((浮点)mid*sample);
for(无符号整数i=0;i>8;
//(与除以256相同)
}
//…确保将缓冲区发送到音频设备的非相关代码

mid是已赋值的无符号整数(1这看起来像是一个正弦波,它的值是倒转的。换句话说,如果你将正值从1调整到.5到0到-.5,将负值从-1调整到-.5到0到.5,你将得到一个正弦波。

你是对的!显然waveOut需要一个有符号的短字符。奇怪,因为它与无符号字符一起工作。。。