2010-01-24 4 views
1

압축되지 않은 wav/aiff 오디오 재생과 함께 파형 스크롤과 관련된 플랫폼 간 프로그램을 작성하고 있습니다. 낮은 지연 시간과 정확성은 매우 중요합니다. 외부 클럭과 동기화 할 때 오디오 재생을위한 최고의 크로스 플랫폼 오디오 라이브러리는 무엇입니까? 그 말은 재생 코드를 작성하여 알림을받는 순간 "청각 프레임"을 포함하는 초당 여러 번 청취자에게 이벤트를 전송할 수 있기를 바랍니다. 그게 전부입니다. 녹음, 믹싱, 3D 오디오 없음, 없음. 가능한 최상의 청력 프레임 알림을 사용하여 재생하십시오.오디오 재생을 동기화하기위한 최상의 크로스 플랫폼 오디오 라이브러리

현재 RTAudio와 PortAudio는 ALSA를 사용하고 있기 때문에 대부분 이전 버전입니다. 대상 플랫폼은 Mac OSX 10.5/6, Ubuntu 10.11, Windows XP/7입니다. C/C++ 모두 괜찮습니다.

도움 주셔서 감사합니다.

답변

3

최고의 크로스 플랫폼 라이브러리는 잭입니다. 제대로 구성된 Linux의 잭은 드롭 아웃없이 낮은 대기 시간 처리 측면에서 Windows asio를 쉽게 능가 할 수 있습니다. 그러나 일반 사용자가 jack을 사용하는 것을 기대할 수는 없습니다 (앱이 시작되기 전에 악마가 사용자에 의해 시작되어야하며 설정하는 것이 약간 까다로울 수 있습니다). 프로 오디오 용으로 특별히 제작하는 경우 잭을 찾아 볼 것을 적극 권장합니다.

편집 :

Portaudio이 같은 고성능 아니라, 사용자 (특별한 구성이 잭과는 달리, 자신의 말에 접촉되지 않게한다) 훨씬 더 간단합니다. 내가 사용했던 대부분의 오픈 소스 크로스 플랫폼 오디오 프로그램은 portaudio (openal보다 훨씬 moreso)를 사용하지만 잭과는 달리 개인적으로 사용하지 않았습니다. 그것은 콜백 기반이며, 꽤 간단하게 보입니다.

+1

아이디어를 제공해 주셔서 감사합니다. 재배포 가능 버전의 잭에 정적으로 링크 할 수있는 방법이 있습니까? 그렇지 않으면 나는 그것이 나를 위해 효과가 있다고 생각하지 않는다. 우리는 쉬운 배치에 대해 매우 우려하고 있습니다. 나는 그들에 대한 독서를 계속할 것이다. –

+1

최종 사용자 편의를 위해 portaudio가 최선의 방법 일 수 있습니다.이를 반영하기 위해 내 대답을 편집했습니다. –

+1

다시 읽었을 때 이미 portaudio를 사용하고있는 것을 보았습니다. 파형을 표시하는 데 성능 문제가있는 경우 콜백에서 rt 안전하지 않은 기능을 제거하고 주 스레드로 옮기는 것이 좋습니다. non-rt 함수는 주로 printf 나 파일이나 소켓에 대한 다른 io, 세마포어 또는 malloc을 기다리는 모든 것입니다. –

1

아마도 OpenAL이 옵션입니다.

+1

안녕하세요. Simon, 의견에 감사드립니다. OpenAL을 살펴 봤지만 크리에이티브 카드에서만 지원되며 다소 불확실한 미래가 있음을 우려하고 있습니다. 동의하지 않습니까? 아니면 시스템의 네이티브 오디오 API를 래핑하는 크로스 플랫폼 라이브러리를 통해 OpenAL에 이점이 추가 되었습니까? 다시 한번 감사드립니다. –

+2

OpenAL은 iPhone부터 Linux, Windows에서 Mac OS X까지 많은 카드 및 플랫폼에서 지원됩니다. 원래 Creative에서 시작되었지만 OpenGL 및 기타 Open * 표준과 동일한 오디오로 간주 될 수 있습니다. 실제로 OpenAL은 iPhone의 기본 오디오 API입니다. – Cromulent

관련 문제