我只能通过一个频道播放声音。 目前我已经从单声道wav文件读取数据,通过libsndfile,并将其写为立体声wav文件,用零交替数据(因此一个通道必须是纯静音)。然后我试图通过QAudioOutput播放它。一个频道响亮,但两个频道仍然有声音。通过媒体播放器播放文件会产生同样的效果。我做错了吗?
SNDFILE *sf;
SF_INFO info;
int num_channels;
int num, num_items;
int f,sr,c;
/* Open the WAV file. */
info.format = 0;
sf = sf_open("file.wav",SFM_READ,&info);
f = info.frames;
sr = info.samplerate;
c = info.channels;
num_items = f*c;
QVector<int> buf;
buf.resize(num_items);
num = sf_read_int(sf,buf.data(),num_items);
QVector<int> out;
for(uint j = 0; j < buf.size(); j++)
{
out.push_back(buf[j]);
out.push_back(0);
}
sf_close(sf);
SF_INFO out_info = info;
out_info.channels = 2;
sf = sf_open("file2.wav",SFM_WRITE,&out_info);
sf_write_int(sf,out.data(),num_items*2);
sf_close(sf);
QFile sourceFile;
QAudioOutput* audio;
sourceFile.setFileName("file2.wav");
sourceFile.open(QIODevice::ReadOnly);
QAudioFormat format;
// Set up the format, eg.
format.setSampleRate(out_info.samplerate);
format.setChannelCount(out_info.channels);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
audio = new QAudioOutput(format, 0);
audio->start(&sourceFile);
答案 0 :(得分:0)
问题在于音频驱动程序。 Creative CMSS 3D导致声音泄漏。因此,这样的wav文件似乎更容易在一个频道中播放声音。
UPD:将该方法更改为BASS库,允许设置输出通道标志。如果有任何3D模拟驱动程序设置,它仍然无法工作。