我如何使一个QAudioOutput对象从缓冲区播放

How do I make a QAudioOutput object play from a buffer?

本文关键字:缓冲区 播放 对象 QAudioOutput 何使一      更新时间:2023-10-16
int main(int argc, char *argv[])
{
    QCoreApplication b(argc, argv);
    QBuffer *buffer;
    QAudioOutput *a;
    QAudioFormat format;
    format.setSampleRate(8000);
    format.setChannelCount(1);
    format.setSampleSize(8);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::UnSignedInt);
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    if (info.isFormatSupported(format))
    {
        cout << "Format supported" << endl;
    }
    else
    {
        cout << "Format not supported" << endl;
    }
    char *data = (char*)malloc(32768 * sizeof(char));
    //generating a sound
    for (int i = 0; i<256; ++i)
    {
        for (int j = 0; j<128; ++j)
        {
            data[i * 128 + j] = (char)j;
        }
    }
    cout << "Created samples" << endl;
    //copying into the buffer
    buffer = new QBuffer;
    buffer->open(QIODevice::ReadWrite);
    buffer->seek(0);
    buffer->write(data, 32768);
    cout << "Filled buffer" << endl;
    //playing
    QThread thr;
    a = new QAudioOutput(format);
    //a->moveToThread(&thr);
    //thr.start();
    //QMetaObject::invokeMethod(a, "start", Q_ARG(QIODevice*, buffer));
    a->start(buffer);
    system("pause");
    return b.exec();
}

我正试图使我的控制台应用程序输出声音,我不知道为什么我的QAudioOutput对象不这样做。我把代码放在上面。你能告诉我我做错了什么吗?注:如果我将矢量写入文件并将其作为原始声音播放,我可以听到低频嗡嗡声。

首先,你绝对不应该像@Hayt提到的那样在主循环之前放置system("pause")

第二,你应该在写完数据后从头开始查找。

buffer->write(data, 32768);
buffer->seek(0);