Symbian中音频API的运用
2010-07-22 01:41:00 来源:WEB开发网...
// 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数据被播放完成后,会调用
更多精彩
赞助商链接