제목 그대로 인데요..
fmodex를 사용해서 사운드를 출력하려 합니다.
fmod의 경우 callback함수를 등록하는함수가 따로 있는거 같은데요..
fmodex의 경우 하나의 함수로 그리고 내부적으론 type으로 분류를 한거 같은데요..
사실 맞는지 잘은 모르겠습니다.-_-;;;
fmodex를 사용하여
파일재생이 끝났다는것을 callback으로 받으려면 어떻게 해야 하나요?
요 문제가 하루죙일 괴롭히네요..
조언부탁드리겠습니다.
fmodex를 사용하려 합니다. 함수의 콜백등록은 어떻게 해야 하나
Moderator: 류광
Re: fmodex를 사용하려 합니다. 함수의 콜백등록은 어떻게 해야
Channel::setCallback 함수를 사용하시면 될 것 같네요
type 은 FMOD_CHANNEL_CALLBACKTYPE_END 로 주면 되겠죠? ^^
type 은 FMOD_CHANNEL_CALLBACKTYPE_END 로 주면 되겠죠? ^^
비회원 wrote:제목 그대로 인데요..
fmodex를 사용해서 사운드를 출력하려 합니다.
fmod의 경우 callback함수를 등록하는함수가 따로 있는거 같은데요..
fmodex의 경우 하나의 함수로 그리고 내부적으론 type으로 분류를 한거 같은데요..
사실 맞는지 잘은 모르겠습니다.-_-;;;
fmodex를 사용하여
파일재생이 끝났다는것을 callback으로 받으려면 어떻게 해야 하나요?
요 문제가 하루죙일 괴롭히네요..
조언부탁드리겠습니다.
Re: fmodex를 사용하려 합니다. 함수의 콜백등록은 어떻게 해야
우선 조언감사합니다.비회원 wrote:Channel::setCallback 함수를 사용하시면 될 것 같네요
type 은 FMOD_CHANNEL_CALLBACKTYPE_END 로 주면 되겠죠? ^^
비회원 wrote:제목 그대로 인데요..
fmodex를 사용해서 사운드를 출력하려 합니다.
fmod의 경우 callback함수를 등록하는함수가 따로 있는거 같은데요..
fmodex의 경우 하나의 함수로 그리고 내부적으론 type으로 분류를 한거 같은데요..
사실 맞는지 잘은 모르겠습니다.-_-;;;
fmodex를 사용하여
파일재생이 끝났다는것을 callback으로 받으려면 어떻게 해야 하나요?
요 문제가 하루죙일 괴롭히네요..
조언부탁드리겠습니다.
Code: Select all
/*===============================================================================================
File Callbacks Example
Copyright (c), Firelight Technologies Pty, Ltd 2004-2005.
This example is a modified version of the playstream example.
It shows the correct way declare and handle fmod file callbacks with System::setFileSystem.
===============================================================================================*/
#include "../../api/inc/fmod.hpp"
#include "../../api/inc/fmod_errors.h"
#include <windows>
#include <stdio>
#include <conio>
void ERRCHECK(FMOD_RESULT result)
{
if (result != FMOD_OK)
{
printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));
exit(-1);
}
}
/*
TIPS:
1. use F_CALLBACK. Do NOT force cast your own function to fmod's callback type.
2. return FMOD_ERR_FILE_NOTFOUND in open as required.
3. return number of bytes read in read callback. Do not get the size and count
around the wrong way in fread for example, this would return 1 instead of the number of bytes read.
QUESTIONS:
1. Why does fmod seek to the end and read? Because it is looking for ID3V1 tags.
Use FMOD_IGNORETAGS in System::createSound / System::createStream if you don't like this behaviour.
*/
FMOD_RESULT F_CALLBACK mycallback(FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, int command, unsigned int commanddata1, unsigned int commanddata2)
{
FMOD::Channel *cppchannel = (FMOD::Channel *)channel;
printf("mycallback");
return FMOD_OK;
}
int main(int argc, char *argv[])
{
FMOD::System *system;
FMOD::Sound *sound;
FMOD::Channel *channel = 0;
FMOD_RESULT result;
int key;
unsigned int version;
/*
Create a System object and initialize.
*/
result = FMOD::System_Create(&system);
ERRCHECK(result);
result = system->getVersion(&version);
ERRCHECK(result);
if (version <FMOD_VERSION>init(1, FMOD_INIT_NORMAL, 0);
ERRCHECK(result);
result = system->createStream("../media/wave.mp3", FMOD_HARDWARE | FMOD_LOOP_NORMAL | FMOD_2D, 0, &sound);
ERRCHECK(result);
printf("========================================================================\n");
printf("File Callbacks Example. Copyright (c) Firelight Technologies 2004-2005.\n");
printf("========================================================================\n");
printf("\n");
printf("Press space to pause, Esc to quit\n");
printf("\n");
/*
Play the sound.
*/
result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
ERRCHECK(result);
result = channel->setCallback(FMOD_CHANNEL_CALLBACKTYPE_END, mycallback, 0);
ERRCHECK(result);
/*
Main loop.
*/
do
{
if (kbhit())
{
key = getch();
switch (key)
{
case ' ' :
{
bool paused;
channel->getPaused(&paused);
channel->setPaused(!paused);
break;
}
}
}
system->update();
if (channel)
{
unsigned int ms;
unsigned int lenms;
bool playing;
bool paused;
channel->isPlaying(&playing);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
{
ERRCHECK(result);
}
result = channel->getPaused(&paused);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
{
ERRCHECK(result);
}
result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
{
ERRCHECK(result);
}
result = sound->getLength(&lenms, FMOD_TIMEUNIT_MS);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE))
{
ERRCHECK(result);
}
printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped");
}
Sleep(10);
} while (key != 27);
printf("\n");
/*
Shut down
*/
result = sound->release();
ERRCHECK(result);
result = system->close();
ERRCHECK(result);
result = system->release();
ERRCHECK(result);
return 0;
}
파일의 재생이 끝나게 되면 콜백을 받으려 했는데..
mycallback부분으로 넘어 오질 않네요...제가 멀잘못한건지..
여러가지 방법으로 해봤는데도 잘 안네요..이거골치가..
fmod를 사용해보신 분들의 조언부탁드리겠습니다.