Symbian解码AMR的方法

Symbian解码AMR的方法

  1、直接使用CMdaAudioOutputStream类
CMdaAudioOutputStream *iOutputStream;

在函数MaoscOpenComplete(TInt aError)中设置解码器为AMR
iOutputStream->SetDataTypeL(KMMFFourCCCodeAMR)

需要包含的头文件
#include <mda/common/audio.h>
#include <MdaAudioOutputStream.h>

需要链接的库
mediaclientaudiostream.lib

然后就可以直接使用iOutputStream->WriteL写入AMR码流。
但这种方法无法实现流式播放,可能是因为每次调用WriteL都会重新初始化解码器,回放出来的声音有问题。


2、使用CMMFCodec类解码,然后再使用CMdaAudioOutputStream类回放

CMMFDescriptorBuffer *iPcm16Buffer = CMMFDescriptorBuffer::NewL( OutputSize );

CMMFDescriptorBuffer *iAmrBuffer = CMMFDescriptorBuffer::NewL( InputSize );
CMMFCodec *iOCodec = CMMFCodec::NewL( TUid::Uid(  0x101FAF67 ) );

TDesC8* ConvertAmr2PcmL( const TDesC8& aAmrData )
{

 // amr input data
 iAmrBuffer->Data().Copy( aAmrData );

 // decode
 TCodecProcessResult result = iOCodec->ProcessL( *iAmrBuffer,
*iPcm16Buffer );

 if ( ( result.iStatus == TCodecProcessResult::EProcessComplete ) &&
 ( result.iSrcBytesProcessed == KAmrFrameSize ) &&
 ( result.iDstBytesAdded == KPcmBufferSize ) )
 {
 // return buffer
  return &( iPcm16Buffer->Data() );
 }
 else
  return NULL;
}

需要包含的头文件
#include <mmf/server/mmfcodec.h>

需要链接的库
mmfserverbaseclasses.lib

使用CMdaAudioOutputStream的时候要注意,必须等MaoscBufferCopied被调用以后才能再
次调用WriteL,因为Symbian中没有缓冲队列的。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lius1984/archive/2008/12/11/3496462.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值