0
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
對象不這樣做。我放置了上面的代碼。你能告訴我我做錯了什麼嗎? P.S.如果我將該矢量寫入文件並以原始聲音播放,我可以聽到低頻嗡嗡聲。如何從緩衝區中播放QAudioOutput對象?
我不確定你是否需要這個主循環。但是你不應該在exec之前「暫停」。 exec將啓動Qt內部主線程。所以這可能是因爲這個原因。 – Hayt
這沒有奏效。不管怎麼說,還是要謝謝你。 –
有可能(閱讀文檔,他們可能會這樣說)你需要'QGuiApplication'或'QApplication'來使音頻工作。那麼,你打算如何退出你的申請?您可能希望將相關的音頻信號連接到'qApp'的'quit()'插槽。 – hyde