Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QAudioOutput Class Reference
[QtMultimedia module]

该QAudioOutput类提供用于发送音频数据到音频输出设备的接口。More...

继承QObject

Methods

Qt Signals


Detailed Description

该QAudioOutput类提供用于发送音频数据到音频输出设备的接口。

可以构造与系统的音频输出default audio output device。它也可能与特定的创建QAudioOutputQAudioDeviceInfo。当您创建音频输出,你也应该送的QAudioFormat要用于再现(见QAudioFormat类描述详情) 。

要播放的文件:

开始播放音频流是简单地调用的问题start( )与QIODevice。 QAudioOutput然后将它拿来从IO设备所需要的数据。所以回放音频文件就是这么简单:

     QFile inputFile;           // class member.
     QAudioOutput *audioOutput; // class member.
     ...
     void startPlaying()
     {
         inputFile.setFileName("/tmp/test.raw");
         inputFile.open(QIODevice.ReadOnly);

         QAudioFormat format;
         // Set up the format, eg.
         format.setFrequency(8000);
         format.setChannels(1);
         format.setSampleSize(8);
         format.setCodec("audio/pcm");
         format.setByteOrder(QAudioFormat.LittleEndian);
         format.setSampleType(QAudioFormat.UnSignedInt);

         QAudioDeviceInfo info(QAudioDeviceInfo.defaultOutputDevice());
         if (!info.isFormatSupported(format)) {
             qWarning()<<"raw audio format not supported by backend, cannot play audio.";
             return;
         }

         audioOutput = new QAudioOutput(format, this);
         connect(audioOutput,SIGNAL(stateChanged(QAudio.State)),SLOT(finishedPlaying(QAudio.State)));
         audioOutput->start(&inputFile);
     }

该文件将开始播放假设音响系统和输出设备支持它。如果您运行的运气了,检查是怎么回事的error()函数。

之后,该文件已经播放完毕,我们需要停止设备:

     void finishedPlaying(QAudio.State state)
     {
         if (state == QAudio.IdleState) {
             audioOutput->stop();
             inputFile.close();
             delete audioOutput;
         }
     }

在任何给定时间, QAudioOutput将在四种状态之一:活动,暂停,停止或閒置。这些状态是由所述QAudio.State枚举。状态的改变是通过报导stateChanged()信号。你可以使用这个信号,例如,更新应用程序的图形用户界面,在这里平凡的例子被改变的状态play/pause按钮。你直接请求的状态与变化suspend( )stop( )reset( )resume()和start( ) 。

当流播放过程中,你可以设置一个通知的时间间隔,单位为毫秒与setNotifyInterval( ) 。这个时间间隔指定的两个排放之间的时间notify()信号。这是相对于数据流中的位置,即,如果QAudioOutput是在SuspendedState或IdleState ,本notify()信号不被发射。一个典型的用例是将一个更新slider允许寻求流中。如果你想的时候,因为开始播放,无论哪种状态下音频输出一直在,elapsedUSecs( )的功能是给你的。

如果出现错误,你可以取error typeerror()函数。请参阅QAudio.Error枚举为所报告可能出现的错误的描述。当遇到错误时,状态更改为QAudio.StoppedState。您可以通过连接到检查错误stateChanged( )信号:

     void stateChanged(QAudio.State newState)
     {
         switch (newState) {
             case QAudio.StoppedState:
                 if (audioOutput->error() != QAudio.NoError) {
                     // Perform error handling
                 } else {
                     // Normal stop
                 }
                 break;

Method Documentation

QAudioOutput.__init__ (self, QAudioFormat format = QAudioFormat(), QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个新的音频输出,并将它附加到parent。默认的音频输出装置是用来与输出format参数。

QAudioOutput.__init__ (self, QAudioDeviceInfo audioDevice, QAudioFormat format = QAudioFormat(), QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个新的音频输出,并将它附加到parent。通过引用的设备audioDevice用于与输出format参数。

int QAudioOutput.bufferSize (self)

返回以字节为单位的音频缓冲器的大小。

如果之前调用start( ) ,返回平台的默认值。如果之前调用start(),但setBufferSize( )之前被调用,返回值被设置setBufferSize( ) 。如果所谓的后start()时,返回所使用的实际的缓冲区大小。这可能不是通过预先设定的setBufferSize( ) 。

See also setBufferSize( ) 。

int QAudioOutput.bytesFree (self)

返回以字节为单位的可用空间在音频缓冲器。

注:返回值是唯一有效的,而在QAudio.ActiveState or QAudio.IdleState状态,否则返回零。

int QAudioOutput.elapsedUSecs (self)

返回微秒,因为start( )被调用,包括时间,空閒和待机状态。

QAudio.Error QAudioOutput.error (self)

返回的错误状态。

QAudioFormat QAudioOutput.format (self)

返回QAudioFormat被使用。

int QAudioOutput.notifyInterval (self)

返回以毫秒为单位的通知时间间隔。

See also setNotifyInterval( ) 。

int QAudioOutput.periodSize (self)

返回以字节为单位的周期大小。

注:这是在字节写推荐大小。

int QAudioOutput.processedUSecs (self)

返回由类处理后的音频数据的量,因为start( )被调用以微秒为单位。

注意:播放的音频数据的量可以通过减去音频数据仍然在系统中的音频缓冲器的微秒来决定。

 long bytesInBuffer = bufferSize() - bytesFree();
 long usInBuffer = (long)(1000000) * bytesInBuffer / ( channels() * sampleSize() / 8 ) / frequency();
 long usPlayed = processedUSecs() - usInBuffer;

QAudioOutput.reset (self)

滴在缓冲区所有的音频数据,缓冲区复位到零。

QAudioOutput.resume (self)

恢复后处理音频数据suspend( ) 。

Sets error()来QAudio.NoError。套state()来QAudio.ActiveState如果您以前调用start (QIODevice*)。套state()来QAudio.IdleState如果您以前叫start( ) 。发射stateChanged()信号。

注:信号总是会执行的简历( )函数的过程中发出的。

QAudioOutput.setBufferSize (self, int bytes)

设置音频缓冲区的大小为value以字节为单位。

注:此功能可以在任何时候之前调用start( ) ,调用此之后将被忽略start( ) 。它不应该被假定缓冲区的大小设置为实际使用的缓冲区大小,调用bufferSize()后随时start()将返回所用的实际的缓冲区大小。

See also bufferSize( ) 。

QAudioOutput.setNotifyInterval (self, int milliSeconds)

设置的时间间隔notify()信号被发射。这是基于ms处理不实际的实时音频数据。定时器的最小分辨率为特定平台和值应进行检查notifyInterval( )确认正在使用的实际值。

See also notifyInterval( ) 。

QAudioOutput.start (self, QIODevice device)

使用device作为QIODevice来传输数据。传递QIODevice允许数据被无任何额外的代码传输。所有需要的是打开QIODevice

如果能够成功地输出音频数据的系统音频设备的state( )被设置为QAudio.ActiveStateerror( )被设置为QAudio.NoErrorstateChanged()信号被发射。

如果在这个过程中发生问题的error( )被设置为QAudio.OpenErrorstate( )被设置为QAudio.StoppedStatestateChanged()信号被发射。

在任一情况下,本stateChanged( )信号可以执行start()函数或开始后异步( )返回给调用者过程中,可以同步发出。

See also QIODevice

QIODevice QAudioOutput.start (self)

返回一个指针QIODevice被使用来处理数据传输。这QIODevice可用于直接写()的音频数据。

如果能够访问该系统音频设备的state( )被设置为QAudio.IdleStateerror( )被设置为QAudio.NoErrorstateChanged()信号被发射。

如果在这个过程中发生问题的error( )被设置为QAudio.OpenErrorstate( )被设置为QAudio.StoppedStatestateChanged()信号被发射。

在任一情况下,本stateChanged( )信号可以执行的过程中,可以同步发出start( )函数或异步后start( )返回给调用者。

See also QIODevice

QAudio.State QAudioOutput.state (self)

返回音频处理的状态。

QAudioOutput.stop (self)

停止音频输出,从系统资源分离。

Sets error()来QAudio.NoErrorstate()来QAudio.StoppedState并放出stateChanged()信号。

QAudioOutput.suspend (self)

停止处理的音频数据,保存缓冲音频数据。

Sets error()来QAudio.NoErrorstate()来QAudio.SuspendedState并放出stateChanged()信号。


Qt Signal Documentation

void notify ()

这是该信号的默认超载。

当音频数据x毫秒已被处理的时间间隔由setNotifyInterval ( x)的设置这个信号被发射。

void stateChanged (QAudio::State)

这是该信号的默认超载。

这个信号被发射时,该设备state已经改变。这是音频输出的当前状态。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5