gpt4 book ai didi

c++ - 单声道播放单声道 wav 文件

转载 作者:行者123 更新时间:2023-12-03 01:56:16 25 4
gpt4 key购买 nike

我只通过一个 channel 播放声音有问题。
目前我已经通过 libsndfile 从单声道 wav 文件中读取数据,并将其写入为立体声 wav 文件交替数据与零(所以一个 channel 必须是纯静音)。然后我尝试通过 QAudioOutput 播放它。一个 channel 变大了,但两个 channel 仍然有声音。通过媒体播放器播放文件会产生相同的效果。难道我做错了什么?

    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);

最佳答案

问题出在音频驱动程序中。 Creative CMSS 3D 导致声音泄漏。所以这样的 wav 文件似乎是在一个 channel 中播放声音的更简单的方法。

UPD:将该方法更改为 BASS 库,允许设置输出 channel 标志。如果有任何 3d 模拟驱动程序设置,它仍然无法工作。

关于c++ - 单声道播放单声道 wav 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com