×
Namespaces

Variants
Actions

使用Qt Multimedia API 进行录音和播音

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
兼容于
平台:
Symbian

文章
liuting 在 09 Nov 2011 创建
最后由 hamishwillee 在 13 Jun 2012 编辑

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
}

代码下载

File:Audiorecord.zip

相关链接

This page was last modified on 13 June 2012, at 13:59.
426 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×