Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Audiomanager 코드 작업 #4

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft

Conversation

soohyun0131-lee
Copy link
Owner

  • BGM Pipeline과 Sound Effect pipeline을 나누어서 작업 (thread로 audio part 분리해야함)
  • 추후 Audio component를 도입해서 해당 singleton으로 생성된 파이프라인에 push할 수 있도록 해야 함

Make git to ignore compile_commands.json, for coc-clangd
to make build successfully (only for audio now)
- write feature file for BDD Testing
- create gtest_fixtyre.h/cpp, gtest_main, test_creator.py for
  auto-creating gtest codes
- It will create unit test file per feature.
@soohyun0131-lee soohyun0131-lee added the enhancement New feature or request label Mar 28, 2021
@soohyun0131-lee soohyun0131-lee self-assigned this Mar 28, 2021
Copy link
Collaborator

@noiless noiless left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멋져요~~ 그리고 안쓸 코드는 커밋을 안하시는게 상호간에 좋을거같습니다...

playlist.push_back(obj);

obj->Play();
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 수현이가 사용하는 라이브러리에 대해 잘 알지 못해서 이게 맞는지 정확하지 않은데 new AudioObj(fileroute, isloop) 내부에서 호출되는 createPipeline() 함수가 오디오 파일을 로드하고 오브젝트를 만들어서 담아두는게 맞을까요?
그렇다면 AudioObj *obj = new AudioObj(fileroute, isloop);로 오디오 오브젝트를 만드는 부분과 obj->Play()로 오디오를 재생시키는 부분이 이 add() 함수에 같이 있으면 안되고 play()등의 함수로 분리되어야 할거같아요. 로딩시간을 줄이기 위해 오디오를 미리 로딩만 해놓고 바로 재생하고 싶지 않은 경우가 있을 수도 있으니까요

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 네 이 부분은 나중에 pipeline 추가작업할때 확인할게요

void Play();
void Pause();
void Ready();
void Unload();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동시에 여러 사운드가 재생될 수 있다는걸 감안해서 인터페이스가 수정/추가되었음 좋겠어요 void Play(int32 soundId) 요런식으로...
위에도 썼듯이 특정 오디오를 플레이 없이 로드만 할 수 있는 기능도 있었으면 좋겠구요 (Ready()는 이거랑 다른 기능이죠..?)

Copy link
Owner Author

@soohyun0131-lee soohyun0131-lee Apr 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 동시에 여러 사운드가 재생될 수 있는 건 bgmpipeline에서는 해당사항이 없다고 생각했고(그래서 SetBGM 함수로 ALTER만 되도록 작업함 - bgm이 여러 개 나오는 시나리오가 있을 수 있나요?) effectpipeline에서는 소리 여러개 재생을 위한 처리를 AddEffect 함수로 처리했어요)
  2. Load라는 기능의 경우, Pipeline을 연결해두는 그 자체가 load에용 pipeline이 연결되어있으면 소리가 나오는 건 ns 안에 처리됩니다
    • 파이프라인을 바로 재생할 수 잇는 준비상태로 만들고 싶으신 거면 Ready()까지 해두면 되는데 effectpipeline의 경우 sound effect가 연결만 되면 바로 재생될 수 있게 하는거라 (이것도 nanosec안에 처리가능) 딱히 필요가 없을것같..아요! 게임에서 어느정도의 시간단위까지를 중요하게 생각하는지 모르겠어서 이건 언니 추가 리뷰 부탁드립니다


GstElement *mixer = gst_bin_get_by_name(GST_BIN(pipe), "audiomixer");
gst_element_link_many(src, dec, mixer, nullptr);
gst_object_unref(mixer);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 라이브러리에 대해 잘 몰라서ㅋㅋㅋㅋㅋㅋㅋㅋㅋ그러는데 mixer을 이렇게 계속 쓸거면 하나 만들어서 멤버변수로 갖다써도 되지 않나요...? gst_element_factory_make에서 믹서를 한번 만들면 Gst 라이브러리가 mixer을 계속 갖고있고 요기서 갖다쓰는건가요...? 넘어려워요

Copy link
Owner Author

@soohyun0131-lee soohyun0131-lee Apr 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

계속 쓰는 건 아니고 pipeline에 연결되어 있는 걸 꺼내다 쓰는건데 언니말대로 요건 private 멤버변수로 빼두는 게 더 나을 것 같아요! 수정하겠습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants