FMOD - Sample 의 플레이시간을 알려면 ?

2권에서 새로 도입된 오디오 프로그래밍 섹션에 대한 게시판입니다.

운영자: 류광

Locked
비회원

FMOD - Sample 의 플레이시간을 알려면 ?

전체글 글쓴이: 비회원 » 2009-06-23 18:02

날씨가 많이 덥네요 .. 헉헉~


DSound 를 이용한 자체 라이브러만 쓰다가,

이번에 쉽고 안정적?으로 가고자 FMOD 에 입문하게 되었습니다.


FMOD 에서

Music 이나 Stream 에는 시간으로 구하는 함수가 제공되는것 같은데,

Sample(FSOUND_SAMPLE) 에는 시간으로 구하는 함수가 존재 하지 않네요.

제가 못찾았는지... FMOD 에서 따로 제공하는 방법이 있는지 궁금합니다.

사용자 아바타
초맨
전체글: 36
가입일: 2005-03-17 12:56

전체글 글쓴이: 초맨 » 2009-06-24 18:09

> 질문자입니다.

사용버전은 ' #define FMOD_VERSION 3.75f ' 입니다.

FSOUND_SAMPLE* pSample = FSOUND_Sample_Load( FSOUND_UNMANAGED, filename, input_mode, 0, 0 );

로 생성한 pSample 에 대한 총플레이시간을 얻을 수 있는 방법이 있나요 ?
[외길을 가는 사람의 뒷모습은 아름답다.]

사용자 아바타
초맨
전체글: 36
가입일: 2005-03-17 12:56

[자답] FMOD - FSOUND_SAMPLE 에서 정보 얻기.

전체글 글쓴이: 초맨 » 2009-06-29 14:56

FMOD 관련 작업을 하다가 FSOUND_SAMPLE 의 플레이시간을 구하는 함수가 따로 없기에
예전 자체 사운드라이브러리 제작때 직접 계산하여 구하는 방식으로
다음과 같이 파일정보를 얻는것을 정리해 보았습니다.

FSOUND_SAMPLE* pSample = FSOUND_Sample_Load( ... );

// 모드 얻기
unsigned int mode = FSOUND_Sample_GetMode( pSample );

// 비트 카운트
unsigned int bits = ( mode & FSOUND_16BITS) ? 16 : 8;

// 채널
unsigned int channels = (mode & FSOUND_STEREO) ? 2 : 1;

// 샘플 레이트
int aFreq = 0;
FSOUND_Sample_GetDefaults( pSample, &aFreq, NULL, NULL, NULL );
unsigned int sample_rate = aFreq;

// 데이타 크기
unsigned int data_size = FSOUND_Sample_GetLength( pSample ) * ( channels * bits / 8.0f );

// 청크 크기
unsigned int chunk_size = 4 + 8 + 16 + 8 + data_size;

// 초당 바이트
unsigned int byte_per_sec = sample_rate * ( channels * bits / 8.0f );

// 플레이 시간 (1)
float play_time = (float)data_size / (float)byte_per_sec;

// 플레이 시간 (2)
float play_time = (float)FSOUND_Sample_GetLength( pSample ) / (float)sample_rate ;
[외길을 가는 사람의 뒷모습은 아름답다.]

Locked