Воспроизведение звука в Symbian S60 - PullRequest
0 голосов
/ 13 февраля 2011

Я очень новичок в Symbian, у меня проблемы с получением звука для воспроизведения. Я посмотрел на многочисленные примеры, и я не могу найти свою ошибку. Кто-нибудь еще имел опыт с этим? Любое направление будет полезно. Я вызываю Play на таймере из другого класса.

Заголовок:

class TonePlayer : public CBase, public MMdaAudioPlayerCallback
{
public:
    static TonePlayer* NewL();
    static TonePlayer* NewLC();
    ~TonePlayer();

    void Play();
    void Stop();

protected:
    TonePlayer();

    void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration);
    void MapcPlayComplete(TInt aError);

private:
    CMdaAudioPlayerUtility* m_pAudioPlayer;

    void ConstructL();
};

касты:

TonePlayer* TonePlayer::NewL()
{
    TonePlayer* self = NewLC();
    CleanupStack::Pop(self);  
    return self;
}

TonePlayer* TonePlayer::NewLC()
{
    TonePlayer* self = new (ELeave) TonePlayer();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

TonePlayer::TonePlayer()
{
}

TonePlayer::~TonePlayer()
{
    delete m_pAudioPlayer;
    m_pAudioPlayer = NULL;
}

void TonePlayer::ConstructL()
{
    m_pAudioPlayer = CMdaAudioPlayerUtility::NewL(*this);
}

void TonePlayer::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
{
    MProEngEngine* pProfileEngine = ProEngFactory::NewEngineLC();
    MProEngProfile* pProfile = pProfileEngine->ActiveProfileL();
    MProEngTones& oTones = pProfile->ProfileTones();

    m_pAudioPlayer->OpenFileL(oTones.MessageAlertTone());
    m_pAudioPlayer->SetVolume(m_pAudioPlayer->MaxVolume());

    Play();

    delete pProfileEngine;
}

void TonePlayer::MapcPlayComplete(TInt aError)
{
}

void TonePlayer::Play()
{   
    m_pAudioPlayer->Play();
}

void TonePlayer::Stop()
{
    m_pAudioPlayer->Stop();
}

1 Ответ

1 голос
/ 14 февраля 2011

Ребята из Nokia Forum помогли мне, вот окончательный результат

TonePlayer* TonePlayer::NewL()
{
    TonePlayer* self = NewLC();
    CleanupStack::Pop(self); 
    return self;
}

TonePlayer* TonePlayer::NewLC()
{
    TonePlayer* self = new (ELeave) TonePlayer();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

TonePlayer::TonePlayer()
{
}

TonePlayer::~TonePlayer()
{
    delete m_pAudioPlayer;
    m_pAudioPlayer = NULL;
}

void TonePlayer::ConstructL()
{
    MProEngEngine* pProfileEngine = ProEngFactory::NewEngineLC();
    MProEngProfile* pProfile = pProfileEngine->ActiveProfileLC();
    MProEngTones& oTones = pProfile->ProfileTones();

    m_pAudioPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(oTones.MessageAlertTone(), *this);

    CleanupStack::PopAndDestroy(2);
}

void TonePlayer::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
{
    if( aError == KErrNone  )
    {
        m_pAudioPlayer->SetVolume(m_pAudioPlayer->MaxVolume());
    }
}

void TonePlayer::MapcPlayComplete(TInt aError)
{
}

void TonePlayer::Play()
{   

    m_pAudioPlayer->Play();
}

void TonePlayer::Stop()
{
    m_pAudioPlayer->Stop();
}

ссылка на пост форума http://discussion.forum.nokia.com/forum/showthread.php?219262-Playing-the-current-massage-tone&p=819083#post819083

...