문제

나는 C로 작성된 오디오 응용 프로그램을 작업하고 있습니다. Windows에서 실시간 오디오 재생을 제공해야합니다. 사용할 오디오 API를 결정해야합니다. 나는 사용할 계획이다 기본 웨이브 아웃 API, 그러나 나는 여기서 커뮤니티가 무엇을 추천하는지 확인하고 싶었습니다.

라이브러리를 설치할 필요가없는 최근의 Windows 버전에서만 작동하는 코드를 원합니다. 그리고 나는 최소한의 대기 시간을 원합니다.

나는 "효과"가 필요하지 않거나 원하지 않으며, 응용 프로그램이 생성하는 웨이브 샘플을 충실하게 재생하면됩니다.

내 이해는 Windows의 대부분의 전문 오디오 응용 프로그램이 ASIO를 사용하는데, 이는 우수한 대기 시간을 제공하지만 ASIO를 원하지 않지만 코드가 작동하기를 원하고 대부분의 사람들이 컴퓨터에 사전 설치되지 않았기 때문에 ASIO를 원하지 않습니다. . (나중에 나는 돌아가서 ASIO를 옵션으로 추가 할 수도 있지만, 가장 일반적인 해결책을 먼저 할 것입니다.)

내 목적을 위해 웨이브 아웃보다 더 나은 것이 있습니까, 아니면 최선의 선택입니까?

도움이 되었습니까?

해결책

그것은 당신이하려는 일에 달려 있습니다. 기본 웨이브 아웃 오디오 API는 오디오 스트리밍에 더 좋습니다. 여러 버퍼를 대기하고 자동으로 연속으로 재생할 수 있습니다. 그러나 오디오가 재생되고 변경되거나 무언가를 추가하고 싶다면 비교적 어렵습니다.

DirectX 오디오는 이벤트 기반 오디오에 더 좋습니다. 혼합을 할 필요없이 몇 가지 일을 동시에 연주 할 수 있습니다. 사용자가 총에서 방아쇠를 당길 때 소리를 재생하는 것처럼 작은 오디오 조각을 쉽게 추가하거나 제거 할 수 있습니다. 그러나 스트리밍 (예 : 1 버퍼를 차례로 재생하는)은 더 어렵습니다.

Waveout은 .mp3 파일과 같이 일정 한 오디오 재생을 용이하게하도록 설계되었습니다. DirectX는 게임의 피드백과 같이 간헐적 인 오디오 용으로 설계되었습니다.

Asio는 프로그래밍의 어려움 측면에서 최악의 Waveout 및 DirectX와 같습니다. 그리고 그렇게 안정적이지 않습니다. 응용 프로그램은 일반적으로 오디오 장치를 공유 할 수 없습니다. 그러나 해당 오디오 하드웨어에 대한 가장 낮은 대기 시간 액세스를 제공합니다.

ASIO는 또한 여러 장치에서 재생을 동기화하는 방법을 제공합니다.

가능할 필요가 없다면 변화 재생 직전에 재생 될 예정이며 여러 장치를 동기화 할 필요가 없으면 ASIO가 필요하지 않습니다.

다른 팁

이 질문을 할 때 Waveout과 Wavein API를 사용하여 스트리밍 코드를 썼습니다. 그 이후로 유용한 라이브러리를 발견했습니다.

포도우오http://www.portaudio.com/

Portaudio는 상업용 친화적 인 라이센스가있는 무료 소프트웨어입니다. Portaudio에 전화하기 위해 코드를 작성하면 Waveout 장치와 Windows의 ASIO 장치에서도 작업 할 수 있어야합니다. 그런 다음 Linux에 대해 다시 컴파일 될 수 있으며 ALSA 장치와 협력해야합니다. 그런 다음 MAC에 대해 재 컴파일 될 수 있으며 Coreaudio 장치와 협력해야합니다. Mac 부품을 테스트하지는 않았지만 프로젝트는 Windows 및 Linux에서 잘 작동합니다.

John Knoeller가 언급 한 옵션 외에도 WASAPI 이는 Waveout보다 훨씬 낮은 대기 시간을 허용하지만 불행히도 Windows Vista에서만 사용할 수 있습니다.

직접 스트리밍 응용 프로그램을 직접 작성한 후에는 분명히 지친과 사용 편의성을 위해 권장합니다. 또한 레거시 에디션의 재생을 위해 고품질 형식을 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top