DSP를 특정 채널에만 적용하기

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

Moderator: 류광

Locked
stargazer
Posts: 4
Joined: 2009-05-18 01:36

DSP를 특정 채널에만 적용하기

Post by stargazer »

안녕하세요- 눈팅만하다가 처음으로 글쓰네요.
여기저기 검색해보고 매뉴얼을 봐도 원하는 답이 안나와서
과감하게 질문 올려봅니다.

구현하려 하는 내용은 Reverb를 원하는 채널에 적용하는 것인데요
fmod 3.75를 사용하고 있는데 DSP를 사용해서 Reverb unit을 만들어
적용해주려고 하고 있습니다.
좀 더 자세히 말씀드리면
BGM 채널에는 어떤 경우에도 reverb가 먹지 않고
2d, 3d사운드에는 특수한 경우에 reverb가 적용되게 하고 싶습니다.

일단 여기에서 궁금한 점이 DSP chain이라는 것이 사운드 샘플(한개의 채널)마다
따로 존재하는 것인가요? 아니면 전체 시스템에 한개만 존재하는 것인가요?

sample로 제공되는 dsp프로젝트를 참고해서 작성해보았는데요
reverb unit을 생성하고 적용해주는 부분

Code: Select all

Unit = FSOUND_DSP_Create(&DSP_ReverbCallback, priority , &User);
FSOUND_DSP_SetActive(Unit, TRUE);
이부분을 실행했을 때 DSP chain에 특정 유닛이 추가되는 것이라고 생각하고 있습니다.

이렇게 하고서 실행을 해보니 BGM(stream)과 2d사운드, 3d사운드 모두에
reverb가 적용되어서 출력되더군요.

샘플에서는 reverb보다 높은 priority에 dryUnit이라는걸 만들어서
reverb를 적용하고 싶지 않은 샘플에 대해서는 그 유닛에서부터 출력하도록 하고 있네요

1. 그보다는 근원적으로 BGM과 나머지 채널들을 분리할 방법이 없나 해서 질문 올립니다.
BGM은 어떤 경우에도 reverb를 먹지 않으니까요..

2. BGM / reverb먹은 3dsound(실내에서의 발자국소리) / reverb 안먹은 3dsound(환경사운드)
세 가지를 동시에 출력하려면 어떤 방법을 쓰면 될까요?
한개의 DSP chain을 공유하는 방법으로는
reverb를 먹은녀석 + 안먹은녀석 을 동시에 출력하는 방법이 잘 떠오르질 않네요...

그럼 경건하게 답변기다리겠습니다 :D
stargazer
Posts: 4
Joined: 2009-05-18 01:36

자답...

Post by stargazer »

아 민망해라...

매뉴얼의 FSOUND_FX부분을 읽다 보니 답이 나와있네요

아는대로 요약하면
FSOUND_FX 로 생성한 채널들은 DSP 엔진을 거치지 않고 HW simulating하는 것이고
DSP 엔진은 fmod에서 SW simulating하는 것인데

DSP chain이라는 것을 거쳐서 사운드카드로 나가는 사운드 전체에 적용되는 것 같아요.
반면 FSOUND_FX를 사용하면 채널별로 각각 필요한 이펙트를 적용해줄 수 있네요.

그런데 쓰다보니 의문점이 또생기네요;;
매뉴얼과 샘플들을 보니 DSP를 사용하려면 샘플을 로드할 때 HW관련 옵션을 주면 안되고
FX를 사용하려면 HW관련 옵션들을 줘야 한다고 되어있는데

저는 stream으로 돌리는 BGM과 3d sample(FSOUND_HW3D옵션)로 돌리는 이펙트사운드 등을
출력할 때 모두 DSP를 적용해서 하고 있고 듣기에 이펙트가 잘 먹어서 나오는 듯 싶은데
HW옵션을 준 3d sample의 경우 DSP가 적용이 안되는 것이 맞는게 아닌가...
하는 생각도 드네요...(HW옵션이 있어도 무시하고 DSP가 적용되는 것인지..)

그리고 3D sound효과를 내려면 FSOUND_HW3D 옵션을 줘야만 되는 걸로 알고 있는데
3D sound에 DSP는 아예 적용이 안되는 것이 맞는거라는 생각도 들고요..

제가 뭔가 잘못 이해하고 있는건지..

갈수록 헷갈리네요.
좀더 찬찬히 생각해봐야 할 것 같습니다 :D

혹시 같은 고민 하고계시거나 해결하신 분 계시면 조언좀 해주시면 감사하겠습니다-
너무 뻔한 문제라 혼자 고민하는건가..해서요^^;;
Locked