0
0

Hi everyone,

Sorry for repeating my problem I’ve asked for a month ago.

I’ve still many problems with initialising a callback. It should be fired when MP3-playing ends. I thought FMOD_CHANNEL_CALLBACKTYPE_END could be the right way.

I got the callback fired at the beginning of the MP3-Playing; but I need it fired at the end of it.

Could anyone show me a simple example how this works? Here is the code which plays a MP3 correctly. I would be very happy, if someone implements the right callback.

Kind regards

Markus

[b:2mzbdy99]CallbackTestDlg.cpp:[/b:2mzbdy99]
[code:2mzbdy99]
// callbacktestDlg.cpp : Implementierungsdatei
//

include "stdafx.h"

include "callbacktest.h"

include "callbacktestDlg.h"

ifdef _DEBUG

define new DEBUG_NEW

endif

// CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialogfelddaten
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

// Implementierung
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// CcallbacktestDlg-Dialogfeld

CcallbacktestDlg::CcallbacktestDlg(CWnd* pParent /=NULL/)
: CDialog(CcallbacktestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CcallbacktestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CcallbacktestDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CcallbacktestDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// CcallbacktestDlg-Meldungshandler

BOOL CcallbacktestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Hinzufügen des Menübefehls "Info..." zum Systemmenü.

// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
        pSysMenu->AppendMenu(MF_SEPARATOR);
        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
}

// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE);         // Großes Symbol verwenden
SetIcon(m_hIcon, FALSE);        // Kleines Symbol verwenden

// TODO: Hier zusätzliche Initialisierung einfügen
FMOD::System_Create(&fmodSYSTEM);
fmodSYSTEM->init(1, FMOD_INIT_NORMAL, NULL);

return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten

}

void CcallbacktestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie
// den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das
// Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt.

void CcallbacktestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // Gerätekontext zum Zeichnen

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // Symbol in Clientrechteck zentrieren
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // Symbol zeichnen
    dc.DrawIcon(x, y, m_hIcon);
}
else
{
    CDialog::OnPaint();
}

}

// Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer
// das minimierte Fenster mit der Maus zieht.
HCURSOR CcallbacktestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}

void CcallbacktestDlg::OnBnClickedButton1()
{
fmodSYSTEM->createStream("test.mp3", FMOD_SOFTWARE, 0, &fmodSOUND);
fmodSYSTEM->playSound(FMOD_CHANNEL_FREE, fmodSOUND, 0, &fmodCHANNEL);
}
[/code:2mzbdy99]

[b:2mzbdy99]CallbackTestDlg.h[/b:2mzbdy99]
[code:2mzbdy99]
// callbacktestDlg.h : Headerdatei
//

pragma once

include "fmod.hpp"

include "fmod.h"

// CcallbacktestDlg-Dialogfeld
class CcallbacktestDlg : public CDialog
{
// Konstruktion
public:
CcallbacktestDlg(CWnd* pParent = NULL); // Standardkonstruktor

// Dialogfelddaten
enum { IDD = IDD_CALLBACKTEST_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

// Implementierung
protected:
HICON m_hIcon;

// Generierte Funktionen für die Meldungstabellen
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

public:
afx_msg void OnBnClickedButton1();
FMOD::System *fmodSYSTEM;
FMOD::Sound *fmodSOUND;
FMOD::Channel *fmodCHANNEL;
};
[/code:2mzbdy99]

  • You must to post comments
Showing 0 results
Your Answer

Please first to submit.