我如何使一个QAudioOutput对象从缓冲区播放
How do I make a QAudioOutput object play from a buffer?
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);
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- SFML纹理像播放器
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- 使用超强 SDK 从缓冲区播放音频
- 播放加载到一半的声音缓冲区,同时在C++中快速加载其余部分
- 大缓冲区大小播放,小大小不播放
- 如何使用Gstreamer播放原始字符*缓冲区
- Qt缓冲区不足播放RAW音频
- Qt - 如何设置音频播放从缓冲区的开头开始
- 在C++中,在窗口中播放示例缓冲区最常见的方式是什么
- 我如何使一个QAudioOutput对象从缓冲区播放