좋아요. 오디오 분석 응용 프로그램을 발표 할 예정 이니 코어 오디오를 사용하여 모노 터치 문제를 발견했습니다. 모노 터치는 실제로 코어 오디오/리모트 IO를위한 바인딩을 가지고 있으며 잘 작성된 Miguel이 작성한 샘플이 있습니다. 그건 큰 시간의 99 %를 작동합니다. 문제는 coreaudio의 렌더링 콜백 중에 "세계 정지"가비지 컬렉터가 발생한다고 생각하는 곳에서 발생합니다. 이 시점에서 우리는 관리되는 코드에 있으므로 렌더링 콜백은 gc가 끝날 때까지 돌아 가지 않을 것이라고 생각할 수 있습니다. 결과적으로 160 프레임 중 약 1 프레임이 삭제됩니다 (약 2 ~ 4 초마다).Coreaudio가 모노 터치로 콜백을 렌더링합니다.
그래서 시간 낭비인지 아는 지혜가없는 세 가지 옵션이 있습니다.
코드 오디오 C의 콜백 (다른 모든 코어 오디오 인터페이스 코드) 렌더링 작성합니다. 그런 다음 필자는 관리 코드가 분석 할 수있는 속도로 샘플을 빠르게 가져올 수있었습니다. 이렇게하면 20ms 동안 일시 중지 된 경우에도 프레임이 떨어지는 것을 방지 할 수 있습니다. 내 주요 질문은 모노럴 터치로 할 수 있는가? 완전히 관리되지 않는 경우 핵심 오디오 콜백 함수가 gc에 의해 중단됩니까? 그런 다음 필요에 따라 데이터를 읽는 비 관리 순환 큐를 가질 수 있습니다.그냥 곡은 어떤 방법으로 GC는 덜 효율적이지만 세계의 적은 시간으로 일시 정지합니다. 항상 5ms 미만이면 아마 안전 할 것입니다. 나는 xamarin 스튜디오에서 이것을하는 방법을 모른다. 그것은 링커 옵션이나 그저 무리일까요?
다른 API를 사용하십시오. 입력 대기열 API를 시도했지만 대기 시간이 끔찍했습니다. 중간 정도입니까?
나는의 CoreAudio 끝내 모든 것을 알고 있지만, 내 필요를 위해 개발하는 약 100 배 빠르게이 분야에서이 응용 프로그램의 안드로이드 포트를 인정하고있다.
나는 자 마린에 버그를 제출하고 그들이 그것을인지, 더 나는이 정확히 말하자면 당 버그라고 생각하지 않습니다 --- – Jason
은 물론 나는 그것을 할 수있는 말을 볼 것이다 "설계대로 작동": 렌더링 콜백은 일정한 시간 보증을 요구하며 gc는이를 처리 할 수 있습니다. 글리치가없이 모노크롬에서 저 레이턴시 오디오 레코딩을 원하는 많은 사람들이 있어야한다는 것을 고려할 때 여전히 나에게 전달하는 것이 좋을 것입니다. – user2680276
Obj-C에서 수행 할 수 있다면 MT로 할 수 있어야하며 Xamarin도 동의 할 것입니다. GC가 간섭하는 경우 GC를 조정해야하거나 코드에서 다른 방법을 사용할 수 있습니다. 어쨌든, 나는 Xamarin 사람들이 당신의 코드를보고 충돌이있는 곳을보고 싶어한다고 생각합니다. – Jason