2014-05-22 3 views
1

Android 용 대기 시간이 짧은 오디오 앱에 OpenSL을 사용하고 있습니다. 지금까지 내가 달성 한 가장 낮은 대기 시간은 삼성 갤럭시 S5 (터치 사운드, 탭 사운드 및 앱 사운드의 녹음으로 측정)에서 200ms입니다. 내부 앱 로직을 개선하여 160ms로 줄일 수 있다고 생각합니다. 지금은 터치를받는 앱과 그 오디오에 대한 콜백을받는 사이에 최대 40ms의 지연이 있습니다. 나는 이것이 오디오가 없을 때 빈 버퍼를 끊임없이 대기시키고 있기 때문이라고 생각한다. 이 나쁜 습관인가? 어떤 이유로 든 오디오가있을 때만 대기열 접근 방식을 시도하지만 오디오 인공물을 얻습니다.Android : OpenSL 최하위 대기 시간

어쨌든 내 안드로이드 장치에서 터치에서 오디오 출력까지 openSL을 사용하여 달성 가능한 최저 대기 시간은 얼마입니까? (디바이스마다 다르다는 것을 알고 있지만, 저 지연이 가장 좋은 디바이스가 무엇인지, 가장 낮은 대기 시간의 가치는 무엇인지, 최근 디바이스의 평균 가능한 최소값은 무엇인지 궁금해하고 있습니다.)

Android: sound API (deterministic, low latency)

년 전에 약에서 위의 링크는 180ms 범위 주위에 있음을 주장한다. 아직도 OpenSL에서 가장 낮은 수준입니까? 추천 답변에 따르면 안드로이드 용 Music Synthesizer는 30ms 미만의 "총 출력 대기 시간"을 얻습니다. 하지만 삼성 갤럭시 S5에서 돌릴 때 200ms의 대기 시간이 들립니다. "총 출력 대기 시간"이란 무엇입니까? 내가 놓친 게 있니?

대기 시간을 어떻게 더 줄일 수 있습니까?

도움 주셔서 감사합니다.

편집 : NEON 또는 SSE 명령어를 제외한 Low-latency audio playback on Android을 제외한 모든 처리를 수행하고 있지만 처리 시간이 15 % 미만이므로 문제가 될 수 없습니다. 스테레오 사운드에 대해 2 * PROPERTY_OUTPUT_FRAMES_PER_BUFFER 반바지로 버퍼 대기 중입니다. 너무 높습니까?

+0

이 질문은 명백하게 옳고 그름이 확실한 정답이 아니라 제한된 장치 세트를 사용한 개인적인 경험을 바탕으로 일화 답을 이끌어 낼 것입니다. 따라서 이것은 토론 포럼이 아니기 때문에 실제로 StackOverflow에 적합하지 않습니다. 어쨌든, 당신이 소리를 조금 높게 인용하는 숫자. 동일한 측정 방법을 사용하여 1 년 반 전에 레이턴시 테스트를 실행했을 때 XPeria Z에서 100ms 미만의 시간을 얻었습니다. – Michael

+0

openSL을 사용 하시겠습니까? 활성화해야하는 빠른 모드가 있습니까? 대기열에있는 버퍼에서 shortbufferedqueueplayer (PROPERTY_OUTPUT_FRAMES_PER_BUFFER * 2) 단락을 사용하고 플레이어와 오디오 데이터에 대해 PROPERTY_OUTPUT_SAMPLE_RATE를 사용하고 있습니다. 저는 스테레오 사운드를 사용하고 있습니다. 그 이유는 * 2의 반바지 때문입니다. 내가 수행 할 수없는 유일한 생각은 NEON 또는 SSE 명령어를 사용하는 것이지만 처리 시간은 재생 시간의 15 % 미만이며 지연은 여전히 ​​높습니다. –

답변

3

내가 테스트 한 장치 인 것처럼 보이지만 Galaxy S5에는 android.hardware.audio.low-latency가 없습니다. 즉, openSL은 빠른 경로를 사용할 수 없으므로 대기 시간이 길어집니다. 장치가 꽤 새롭기 때문에 이것은 정말 놀랍습니다. 그래서이 새로운 기능을 지원해야합니다. 하지만 내 응용 프로그램에서 낮은 대기 시간을 필요로 모든 것을하고 있지만, 그것은 내가 테스트중인 장치에 높은 대기 시간을 갖습니다.

android ndk openSL docs : "이러한 개선 사항은"android.hardware.audio.low_latency "기능을 요구하는 장치 구현을 위해 OpenSL ES를 통해 제공됩니다. 장치가이 기능을 요구하지만 API 레벨 9를 지원하는 경우 (Android 플랫폼 버전 2.3) 이상이면 OpenSL ES API를 사용할 수 있지만 출력 대기 시간은 더 길 수 있습니다. 애플리케이션이 버퍼 수가 2 이상을 요구하고 버퍼 크기가 더 낮은 경우에만 출력 대기 시간 경로가 사용됩니다 및 샘플 속도가 장치의 기본 출력 구성과 호환됩니다. "

귀하의 앱에 문제가 있는지 궁금한 분들께. 테스트중인 장치가이 기능을 지원하는지 확인하십시오. 또한 (ndk) /docs/opensles/index.html의 성능 섹션과 질문의 링크를 확인하십시오.

+0

그게 실망 스럽네요, 좋은 정보로 구매 S5를 고려하십시오. – HaveAGuess

+0

그것은 낮은 대기 시간 OpenSL을 지원하지 않지만 내가 알지 못하는 이러한 장치에서 다른 방법을 얻을 수 있습니다. –

0

audio-echo 샘플이 있습니다. 도움이되는지 확인하기 위해 체크 아웃 할 수 있습니다. 빠른 오디오 용 플레이어를 만들 때 특정 신호 처리 인터페이스는 지원되지 않습니다. 지원되지 않는 인터페이스를 요청하면 장치 기본 샘플링 속도로 요청하는 경우에도 빠른 오디오가 꺼집니다.샘플은 안드로이드 L 및 M에서 작동합니다. [다른 사람들에게 테스트되지 않았습니다]