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» для работы аудио. Затем, как вы намерены прекратить свое приложение? Возможно, вы захотите подключить соответствующий звуковой сигнал к слоту 'quA()' qApp'. – hyde