【问题标题】:Is there any way in QT to get raw audio data from mic?QT 有什么方法可以从麦克风获取原始音频数据?
【发布时间】:2015-03-13 21:43:48
【问题描述】:

我正在尝试在 QT 中实现音高变换器。所以我需要从麦克风获取原始数据,以某种方式对其进行转换并回放。但我不知道如何获取原始数据,将其发送到缓冲区,然后在转换后播放。目前我正在做类似的事情,但这在没有缓冲区的情况下工作,我无法更改将要播放的数据。

QAudioFormat format;
format.setSampleRate(96000);
format.setChannelCount(1);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

audio = new QAudioInput(format, this);
connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));

QIODevice* device = audio->start();
connect(device,SIGNAL(readyRead()),this,SLOT(process()));


QAudioOutput* output = new QAudioOutput(format, this);
output->start(device);

有什么办法可以做我想做的事吗?

【问题讨论】:

  • 您是否要实时执行此操作?否则,为什么不直接写入文件,处理文件,然后将其发送到 QAudioOutput?如果您尝试“即时”转换,您可能需要链接 QBuffer 和 QQueue,但会涉及很多转换。因为 QBuffer 和 QQueue 是面向字节的。抓住底层数据指针,并按照我想的那样对句柄进行指针运算。

标签: qt audio real-time


【解决方案1】:

有一个QAudio 类值得研究。

想到的其他选项是QIODeviceQDataStream

This post may get you headed in the right direction.

【讨论】:

    【解决方案2】:

    我认为您要查找的类是 QAudioInputQAudioOutput,它们都是 Qt 多媒体模块的一部分。

    QAudioInput 提供从麦克风获取字节流的功能,您可以根据需要使用它。应用所需的任何转换后,您可以使用 QAudioOutput 将其推送到扬声器。两者都提供了一些与缓冲区大小、采样频率等相关的不同设置,您可以使用这些设置来满足您的特定需求。

    这里有一些你可能会觉得有用的链接:

    Qt Audio Overview

    QAudioInput documentation

    QAudioOutput documentation

    【讨论】:

    • 我忘记添加我正在使用的代码。我实际上在使用 QAudioInput,但我不知道如何获取原始数据、对其进行处理然后将其发送到 QAudioOutput。
    • 这个答案并没有真正启发我任何我还没有找到的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多