WEB开发网
开发学院手机开发Symbian 开发 Symbian中音频API的运用 阅读

Symbian中音频API的运用

 2010-07-22 01:41:00 来源:WEB开发网   
核心提示:CMdaAudioOutputStream::NewL(MyObserver);...// iOutputStream->SetAudioPropertiesL(aSampleRate, aChannels); /* 控制采样率和声道数,不是必须的,Symbian中音频API的运用(4), */...TMdaAu
CMdaAudioOutputStream::NewL(MyObserver);

...

// iOutputStream->SetAudioPropertiesL(aSampleRate, aChannels); /* 控制采样率和声道数。不是必须的。 */

...

TMdaAudioDataSettings iStreamSettings;

... // 通过对TMdaAudioDataSettings设置来指定一些音频信息。不是必须的。

iOutputStream->Open(&iStreamSettings); /* 打开TMdaAudioDataSettings设置信息。此方法是异步的,打开完成之后会调用 MMdaAudioOutputStreamCallback::MaoscOpenComplete(TInt aError)通知方法。 */

// 打开完成

void CMyObserver::MaoscOpenComplete(TInt aError)

{

if (aError == KErrNone)

{

/* PCMStreamBuffer中存放的全是PCM音频数据。注意,若缓冲区myPCMStreamBuf尺寸太小,可能会造成音频听起来断断续续,这是因为音频设备消耗缓冲的速度快于了新缓冲被复制的速度了 */

TRAPD(err, iOutputStream->WriteL(myPCMStreamBuf)); /* 将PCM数据写入到底层设备的缓冲区中,低层设备会在接受完PCM数据后自动开始播放。此方法为异步方法,当传入的PCM数据全部写入到底层设备的缓冲区中后,会调用MMdaAudioOutputStreamCallback::MaoscBufferCopied(TInt aError, const TDesC8 &aBuffer);通知方法。只有在PCM数据全部写入到底层设备的缓冲区中之后对myPCMStreamBuf的修改是安全的。 */

}

else

{

iOutputStream->Stop();

}

}

// 传入的所有PCM数据已经写入到底层设备的缓冲区中

void CMyObserver::MaoscBufferCopied(TInt aError, const TDesC8 &aBuffer)

{

if(aError != KErrNone)

{

iOutputStream->Stop();

}

else if (aError == KErrNone && iCount < 5)

{

iCount++; // 计数器,播放5次,初始化是0

iOutputStream->SetVolume(iOutputStream->MaxVolume() / 3);

TRAPD(err, iOutputStream->WriteL(myPCMStreamBuf)); /* 再次写入,又会导致回调本通知方法。当第5次被写入的pcm数据被播放完成后,会调用

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Symbian 音频 API

编辑录入:coldstar [复制链接] [打 印]
赞助商链接