기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요
Android Audio Framework부분에서
MIDI도 역시 PCM데이터로 변환을 해줘야 하는데요.
MDI파일은 StageFrightPlayer재생엔진을 거치지 않는데요.
이유가 무엇인지 알고 싶습니다.
---------------------------------------------------------------------------------
또 한가지 질문은 AudioTrack은 최대 32개까지 생성할 수 있는데요.
예를들어 어플 한개(음악)이 실행되면 Track이 1개 생성되고,
어플한개(게임소리)가 추가되면 Track 1개가 추가되어 총 2개의 트랙만 사용하는 것인가요?
공유 메모리 설정할 때, 32Track을 감안해서 1024*2024로 메모리를 할당하는데, 이중 2Track만 사용하게 되는건지
여쭙고 싶습니다.
감사합니다. 안녕히 계세요.
-------------------------------------------------------------------------------------
Audio Flinger단에서 downmixing이 이뤄지는 함수가 구체적으로 어디인지 알고 계신분 있으신가요?
책을 참고하면, AudioMixing이 이뤄지기 전에 downmixing이 이뤄진다고 나와있는데요.
소스코드를 봐도 어느부분에서 downmixing이 이뤄지는지 찾기가 어렵네요.
답변 부탁드립니다.
음악과 게임음. 두개만 소리나오고 있다면 재생중인 트랙은 2개가 맞습니다.
그리고 메모리 1MB는 어플마다 1MB입니다.
즉 음악어플 1MB, 게임 1MB... 즉, 프로세스 마다 1MB 입니다.
그리고 참고하실것은 지금 음악만 나온다고 트랙 32개까지 저장가능한 트랙 벡터에 트랙 한개만 들어가 있을까요?
아닙니다. 트랙벡터에는 playing상태인 트랙뿐만 아니라 pause된 트랙 stop된 트랙 idle상태인 트랙 등등등..
모두다 트랙 벡터의 공간을 차지할 수 있습니다.
어떤 포켓볼게임의 경우 게임중 홈키눌러서 빠져나왔을때, 더이상 소리는 나지 않지만
트랙 10개가 트랙벡터안에 고스란히 있더군요. 즉 32개에서 10개빼면 22개의 여유분만 있는것이지요.
그상태에서 게임 여러개를 실행시켜보세요. 나중에는 트랙여유가 없어서 소리가 나지않는 증상이 나타납니다.
대부분의 게임의 경우 트랙 1~4개정도만 차지합니다.
그 stop된 트랙들은 대부분 SoundPool에서 생성된 트랙들입니다. 참고하세요.
1. MIDI player가 동작합니다. libmediaplayerservice의 파일을 참고하시기 바랍니다.
2. 소스를 좀 더 봐야하지만(메모리 관련은), 2 track만 사용할겁니다.
아니면 resource 장난 아니게 먹겠죠...
3. AudioMixer와 AudioResampler를 보시면 되는데, 저도 본지가 넘 오래되어서 가물하네요....하지만
AudioResampler에서 처리가 됩니다.
AudioResampler.cpp를 보시면
AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount,
int32_t sampleRate, int quality) {
...에서 관련 함수의 초기화를 처리합니다.
처리하는 방법이 독특한데, 그다지 성능이 좋지는 않을겁니다....