使用Qt Multimedia API 进行录音和播音
文章信息
Contents |
介绍
MULTIMEDIA 模块提供了一系列 多媒体低层播放函数,通过对其API的使用,我们可以很轻松的完成录音和播音的功能
下面我们将简单介绍一下Multimedia API.
The QtMultimedia audio APIs
QAudioFormat
用于描述音频格式。我们可以通过 setFrequency(),setChannels()等函数来分别设置声音的频率和通道。
QAudioDeviceInfo
提供一个界面用于查找声音驱动的功能,它可以查找一些音频设备,其中包含了已经被系统识别的USB 的音频设备,例如扬声器,麦克风,耳机等。我们通过对其API
availableDevices()调用可以用于查找当前系统可用的音频设备。
QAudioInput
用于从指定的音频输入设备获得指定格式的声音数据。
QAudioOutput
用于发送音频数据到指定的音频输出设备。
下面我们将一个例子说明如何实现声音录播功能。
代码示例
首先我们需要做一些初始化的工作。其中包括设置声音格式, 定义用于保存音频数据BUFFER的大小 ,创建 QAudioInput 和 QAudioOutput对象。具体代码如下:
m_format.setFrequency(8000);
m_format.setChannels(1); m_format.setSampleSize(16);
m_format.setSampleType(QAudioFormat::SignedInt);
m_format.setByteOrder(QAudioFormat::LittleEndian);
m_format.setCodec("audio/pcm");
m_audioInputDevice =QAudioDeviceInfo::defaultInputDevice(),
m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice()),
QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
if (!info.isFormatSupported(m_format)) {
m_format = info.nearestFormat(m_format);
}
m_bufferLength = audioLength(m_format, BufferDurationUs);
m_buffer.resize(m_bufferLength);
m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this);
m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
其次我们需要开启 m_audioInput ,并连接信号,用于接收并保存录入的音频数据。具体代码如下:
m_audioInputIODevice=m_audioInput->start();
m_audioInputIODevice=m_audioInput->start();
connect(m_audioInputIODevice, SIGNAL(), this, SLOT(audioDataReady()));
接下来我们需要实现 SLOT audioDataReady(),用于获取录入的音频数据并保存在BUFFER中
const qint64 bytesReady=m_audioInput->bytesReady();
const qint64 bytesSpace = m_buffer.size() - m_dataLength;
const qint64 bytesToRead = qMin(bytesReady, bytesSpace);
const qint64 bytesRead = m_audioInputIODevice->read( m_buffer.data() + m_dataLength, bytesToRead);
if (bytesRead) {
m_dataLength += bytesRead;
}
上述几步就完成了录音的功能,接下来我们只需将保存在BUFFER中的数据播放即可,具体代码如下:
m_audioOutputIODevice.close();
m_audioOutputIODevice.setBuffer(&m_buffer);
m_audioOutputIODevice.open(QIODevice::ReadOnly);
m_audioOutput->start(&m_audioOutputIODevice);
这样我们就完成音频录播功能,当你要在Symbian设备上使用这种功能时,要记得在工程文件.pro文件中加上应用程序的能力,这里我们必须要用到UserEnvironment
symbian
{
# Platform security capability required to record audio on Symbian
TARGET.CAPABILITY = UserEnvironment
}


(no comments yet)