짧은 버전 : 나는 synth 앱을 개발 중이며 낮은 대기 시간의 Opensl을 사용하고 있습니다. 나는 Opensl 콜백 funktion에서 모든 오디오 계산을 수행하고있었습니다. (필자는하지 말았어야했지만 어쨌든 했었습니다.) 이제 계산 결과는 내 넥서스 4에서 약 75 %의 CPU 시간을 필요로하므로 다음 단계는 모든 계산을 여러 스레드에서 수행하는 것입니다.안드로이드에서 쓰레드 지연 시간이 짧은 오디오
내가 겪은 문제점은 콜백 스레드가 분명히 높은 우선 순위에서 실행 되었기 때문에 오디오가 더듬기 시작했다는 것입니다. 새 스레드는 그렇지 않습니다. 더/더 큰 버퍼를 사용하면 문제는 사라지지만 실시간도 마찬가지입니다. 새 스레드에서 더 높은 우선 순위를 설정하면 작동하지 않는 것 같습니다. 그래서 저 지연 오디오 스레드를 수행하는 것이 가능합니까? 아니면 콜백에서 모든 작업을해야합니까?
나는 256 샘플의 버퍼를 가지고 있으며 약 5ms이고 thread-scheduler-thingie가 내 calc 스레드를 실행하기 위해서는 오래 있어야한다.
콜백에서 모든 오디오 계산을하지 말아야하는 이유는 무엇입니까? 저는 Opensl에 익숙하지 않지만, 대부분의 오디오 라이브러리에서 여러분이하고 싶은 것을 정확히 알고 있습니다. 당신이 피해야하는 임의의 시간 (I/O와 같은)을 차단하는 것입니다. –
@Bjorn Roche : 대기 시간이 짧다면 콜백에서 합성 작업을 수행해야합니다. 비동기 적으로 수행하면 더 많은 버퍼링이 필요하며 시스템 대기 시간이 두 배가됩니다. – marko
모든 자습서를 읽은 나는 콜백에서 아주 작은 작업을 수행해야한다고 말했다. 그리고 실제로 안드로이드 ("Google"이있는 흰색 텍스트가 나오는 지점까지)가 충돌하고 콜백에 너무 많은 처리를 할 때마다 재현 할 수있었습니다. 그리고 openSL에서 콜백은 버퍼가 다 떨어지기 전에 더 많은 데이터를 원한다고 말합니다. 따라서 작업을 수행하기 위해 다른 스레드를 깨울 충분한 시간이 있어야합니다. 내 말은, 쿼드 코어 폰에서, 적어도 하나의 코어가 공회전 상태에 있어야하고, 어떤 크 런 코어 (munber) 크런치를 준비해야한다는 것입니다. – Floaf