게임용 오디오

DirectX 게임에 음악과 사운드를 개발하고 통합하는 방법과 오디오 신호를 처리하여 동적 및 위치 사운드를 생성하는 방법을 알아봅니다.

오디오 프로그래밍의 경우 DirectX의 XAudio2 라이브러리 또는 Windows 런타임 오디오 그래프 API 중 하나를 사용하는 것이 좋습니다. 여기서는 XAudio2를 사용합니다. XAudio2는 게임용 신호 처리 및 혼합 기반을 제공하는 하위 수준의 오디오 라이브러리이며 다양한 형식을 지원합니다.

Microsoft Media Foundation을 사용하여 간단한 소리와 음악 재생을 구현할 수도 있습니다. Microsoft Media Foundation은 미디어 파일 및 스트림, 즉 오디오 및 비디오 모두의 재생을 위해 설계되었지만 게임에서도 사용할 수 있으며, 영화 장면 또는 게임의 비대화형 구성 요소에 특히 유용합니다.

개념 한눈에 보기

다음은 이 섹션에서 사용하는 일부 오디오 프로그래밍 개념입니다.

  • 신호는 그래픽의 픽셀과 유사한 사운드 프로그래밍의 기본 단위입니다. 이를 처리하는 DSP(디지털 신호 프로세서)는 게임 오디오의 픽셀 셰이더와 같습니다. 신호를 변환하거나 결합하거나 필터링할 수 있습니다. DSP로 프로그래밍하면 게임의 사운드 효과와 음악을 필요한 만큼 복잡하지 않게 또는 복잡하게 변경할 수 있습니다.
  • 음성은 둘 이상의 신호의 서브믹스 복합체입니다. XAudio2 음성 개체에는 원본, 서브믹스, 마스터 음성의 3가지 유형이 있습니다. 원본 음성은 클라이언트에서 제공하는 오디오 데이터에서 작동합니다. 원본 및 서브믹스 음성은 하나 이상의 서브믹스 또는 마스터링 음성으로 출력을 보냅니다. 서브믹스 및 마스터링 음성은 모든 음성의 오디오를 공급하고 결과에 따라 작동합니다. 음성 마스터는 오디오 디바이스에 오디오 데이터를 씁니다.
  • 혼합은 장면에서 재생되는 소리 효과 및 배경 오디오 등의 여러 불연속 음성을 단일 스트림으로 결합하는 프로세스입니다. 서브믹싱은 엔진 소음의 구성 요소 소리 등의 여러 불연속 신호를 결합하고 음성을 만드는 프로세스입니다.
  • 오디오 형식. 음악 및 음향 효과는 게임에 대한 다양한 디지털 형식으로 저장할 수 있습니다. WAV와 같은 미압축 형식과 MP3 및 OGG와 같은 압축 형식이 있습니다. 샘플이 압축될수록 일반적으로 비트 전송률로 지정되며, 비트 속도가 낮을수록 압축 손실이 많아지며 충실도가 더 떨어집니다. 충실도는 압축 체계 및 비트 속도에 따라 다를 수 있으므로 게임에 가장 적합한 항목을 찾기 위해 실험하세요.
  • 샘플 속도 및 품질. 소리는 다른 속도로 샘플링할 수 있으며, 더 낮은 속도로 샘플링된 소리는 충실도가 훨씬 낮습니다. CD 품질에 대한 샘플 속도는 44.1Khz(44100Hz)입니다. 소리에 대한 높은 충실도가 필요하지 않은 경우, 더 낮은 샘플 속도를 선택할 수 있습니다. 높은 속도는 전문 오디오 애플리케이션에 적합할 수 있지만, 게임에서 전문적인 충실도 사운드를 요구하지 않는 한 불필요할 수 있습니다.
  • 사운드 내보내기(또는 원본). XAudio2에서 사운드 내보내기는 단순한 배경 소음 또는 게임 내 주크박스가 연주하는 으르렁거리는 바위 트랙 등 소리를 내보내는 위치입니다. 월드 좌표로 내보내기를 지정합니다.
  • 사운드 수신기. 사운드 수신기는 종종 수신기에서 수신된 소리를 처리하는 고급 게임의 플레이어 또는 AI 엔터티일 수 있습니다. 오디오 스트림에 소리를 내어 플레이어에게 재생하거나 수신기로 표시된 AI 가드를 각성하는 것과 같은 특정 게임 내 작업을 수행하는 데 사용할 수 있습니다.

디자인 고려 사항

오디오는 게임 디자인 및 개발에서 매우 중요한 부분입니다. 수많은 게이머는 기억에 남는 사운드 트랙, 또는 훌륭한 음성 작업, 사운드 믹싱, 또는 전반적인 항성 오디오 생산으로 인해 전설적인 지위를 얻은 평범한 게임을 기억할 수 있습니다. 음악 소리는 게임의 성격을 정의하고, 게임을 정의하며, 다른 유사한 게임과 차별화하는 기본 동기를 설정합니다. 게임의 오디오 프로필 디자인과 개발 작업은 노력할 만한 가치가 있습니다.

위치 3D 오디오는 3D 그래픽에서 제공하는 수준 이상의 몰입도를 추가할 수 있습니다. 월드를 시뮬레이션하거나 시네마틱 스타일을 요구하는 복잡한 게임을 개발하는 경우, 3D 위치 오디오 기술을 사용하여 플레이어를 실제로 끌어들이는 것이 좋습니다.

DirectX 오디오 개발 로드맵

XAudio2 개념 리소스

XAudio2는 DirectX용 오디오 믹싱 라이브러리이며 주로 게임용 고성능 오디오 엔진을 개발하기 위한 것입니다. 최신 게임에 음향 효과와 배경 음악을 추가하려는 게임 개발자를 위해 XAudio2는 대기 시간이 짧고, 동적 버퍼, 동기 샘플 정확 재생, 암시적 소스 속도 변환을 지원하는 오디오 그래프 및 혼합 엔진을 제공합니다.

항목 설명

XAudio2 소개

이 토픽에서는 XAudio2에서 지원하는 오디오 프로그래밍 기능 목록을 제공합니다.

XAudio2로 시작하기

이 토픽에서는 주요 XAudio2 개념, XAudio2 버전, RIFF 오디오 형식에 대한 정보를 제공합니다.

일반적인 오디오 프로그래밍 개념

이 토픽에서는 오디오 개발자가 익숙해야 하는 일반적인 오디오 개념에 대한 개요를 제공합니다.

XAudio2 음성

이 토픽에는 서브믹스, 작동, 마스터 오디오 데이터에 사용되는 XAudio2 음성에 대한 개요가 포함되어 있습니다.

XAudio2 콜백

이 토픽에서는 오디오 재생에서 중단을 방지하는 데 사용되는 XAudio 2 콜백에 대해 설명합니다.

XAudio2 오디오 그래프

이 토픽에서는 클라이언트의 오디오 스트림 집합을 입력으로 사용하고, 처리하며, 최종 결과를 오디오 디바이스에 전달하는 XAudio2 오디오 처리 그래프에 대해 설명합니다.

XAudio2 오디오 효과

이 토픽에서는 들어오는 오디오 데이터를 가져와서 데이터를 전달하기 전에 데이터에 대한 일부 작업(예: 반향 효과)을 수행하는 XAudio2 오디오 효과에 대해 설명합니다.

XAudio2를 사용한 오디오 데이터 스트리밍

이 토픽에서는 XAudio2를 사용한 오디오 스트리밍에 대해 설명합니다.

X3DAudio

이 토픽에서는 XAudio2와 함께 사용되는 API인 X3DAudio로 3D의 지점에서 사운드의 깊이감을 생성하는 것에 대해 설명합니다.

XAudio2 프로그래밍 참조

이 섹션에는 XAudio2 API에 대한 전체 참조가 포함되어 있습니다.

XAudio2 '방법' 리소스

항목 설명

방법: XAudio2 초기화

XAudio2 엔진의 인스턴스와 마스터 음성을 생성하고 오디오 재생을 위해 XAudio2를 초기화하는 방법을 알아봅니다.

방법: XAudio2에 오디오 데이터 파일 로드

XAudio2에서 오디오 데이터를 재생하는 데 필요한 구조를 채우는 방법을 알아봅니다.

방법: XAudio2를 사용한 소리 재생

XAudio2에서 이전에 로드한 오디오 데이터를 재생하는 방법을 알아봅니다.

방법: 서브믹스 음성 사용

동일한 서브믹스 음성으로 출력을 보내도록 음성 그룹을 설정하는 방법을 알아봅니다.

방법: 원본 음성 콜백 사용

XAudio2 원본 음성 콜백을 사용하는 방법을 알아봅니다.

방법: 엔진 콜백 사용

XAudio2 엔진 콜백을 사용하는 방법을 알아봅니다.

방법: 기본 오디오 처리 그래프 빌드

단일 마스터링 음성 및 단일 소스 음성으로 구성된 오디오 처리 그래프를 생성하는 방법을 알아봅니다.

방법: 오디오 그래프에서 동적으로 음성 추가 또는 제거

방법: 기본 오디오 처리 그래프 빌드의 단계에 따라 생성된 그래프에서 서브믹스 음성을 추가하거나 제거하는 방법을 알아봅니다.

방법: 효과 체인 만들기

음성에 효과 체인을 적용하여 해당 음성에 대한 오디오 데이터의 사용자 지정 처리를 허용하는 방법을 알아봅니다.

방법: XAPO 만들기

IXAPO를 구현하여 XAPO(XAudio2 오디오 처리 개체)를 만드는 방법을 알아봅니다.

방법: XAPO에 런타임 매개 변수 지원 추가

IXAPOParameters 인터페이스를 구현하여 XAPO에 런타임 매개 변수 지원을 추가하는 방법을 알아봅니다.

방법: XAudio2에 XAPO 사용

XAudio2 효과 체인에서 XAPO로 구현된 효과를 사용하는 방법을 알아봅니다.

방법: XAudio2에 XAPOFX 사용

XAudio2 효과 체인의 XAPOFX에 포함된 효과 중 하나를 사용하는 방법을 알아봅니다.

방법: 디스크에서 소리 스트리밍

별도의 스레드를 생성해 오디오 버퍼를 읽고 콜백을 사용하여 해당 스레드를 제어하고 XAudio2에서 오디오 데이터를 스트리밍하는 방법을 알아봅니다.

방법: X3DAudio와 XAudio2 통합

X3DAudio를 사용하여 XAudio2 음성의 볼륨 및 피치 값과 XAudio2 기본 제공 반향 효과에 대한 매개 변수 제공 방법을 알아봅니다.

방법: 오디오 메서드를 작업 집합으로 그룹화

XAudio2 작업 집합을 사용하여 메서드 호출 그룹을 동시 적용하는 방법을 알아봅니다.

XAudio2에서 오디오 결함 디버깅

XAudio2에 대한 디버그 로깅 수준 설정 방법을 알아봅니다.

Media Foundation 리소스

MF(Media Foundation)는 오디오 및 비디오 재생을 스트리밍하기 위한 미디어 플랫폼입니다. Media Foundation API를 사용하여 다양한 알고리즘으로 인코딩 및 압축된 오디오 및 비디오를 스트리밍할 수 있습니다. 실시간 게임 플레이 시나리오용으로 설계되지 않았습니다. 대신 오디오 및 비디오 구성 요소의 선형 캡처 및 프레젠테이션을 위한 강력한 도구와 광범위한 코덱 지원을 제공합니다.

항목 설명

미디어 파운데이션 정보

이 섹션에는 Media Foundation API 및 지원 도구에 대한 일반 정보가 포함되어 있습니다.

미디어 파운데이션: 필수 개념

이 토픽에서는 Media Foundation 애플리케이션을 작성하기 전에 이해해야 하는 몇 가지 개념을 소개합니다.

미디어 파운데이션 아키텍처

이 섹션에서는 일반적인 Microsoft Media Foundation 디자인과 사용하는 미디어 기본 형식 및 처리 파이프라인에 대해 설명합니다.

오디오/비디오 캡처

이 토픽에서는 Microsoft Media Foundation을 사용하여 오디오 및 비디오 캡처를 수행하는 방법을 설명합니다.

오디오/비디오 재생

이 토픽에서는 앱에서 오디오/비디오 재생을 구현하는 방법을 설명합니다.

미디어 파운데이션에서 지원되는 미디어 형식

이 토픽에서는 Microsoft Media Foundation에서 기본적으로 지원하는 미디어 형식을 나열합니다. (타사에서는 사용자 지정 플러그 인을 작성하여 추가 형식을 지원할 수 있습니다.)

인코딩 및 파일 작성

이 토픽에서는 Microsoft Media Foundation을 사용하여 오디오 및 비디오 인코딩을 수행하고 미디어 파일을 작성하는 방법을 설명합니다.

Windows Media 코덱

이 토픽에서는 Windows 미디어 오디오 및 비디오 코덱의 기능을 사용하여 압축된 데이터 스트림을 생성하고 사용하는 방법을 설명합니다.

미디어 파운데이션 프로그래밍 참조

이 섹션에는 Media Foundation API에 대한 참조 정보가 포함되어 있습니다.

미디어 파운데이션 SDK 샘플

이 섹션에서는 Media Foundation 사용법을 보여 주는 샘플 앱을 나열합니다.

Windows 런타임 XAML 미디어 형식

DirectX-XAML 상호 운영성을 사용하는 경우 비교적 간단한 게임 시나리오를 위해 C++가 포함된 DirectX를 사용하여 Windows 런타임 XAML 미디어 API를 UWP 앱에 통합할 수 있습니다.

항목 설명

Windows.UI.Xaml.Controls.MediaElement

오디오, 비디오 또는 둘 다를 포함하는 개체를 나타내는 XAML 요소.

오디오 비디오 및 카메라

UWP(유니버설 Windows 플랫폼) 앱에 기본 오디오 및 비디오를 통합하는 방법을 알아봅니다.

MediaElement

UWP 앱에서 로컬로 저장된 미디어 파일을 재생하는 방법을 알아봅니다.

MediaElement

UWP 앱에서 대기 시간이 짧은 미디어 파일을 스트리밍하는 방법을 알아봅니다.

미디어 캐스팅

원격 재생 계약을 사용하여 UWP 앱에서 다른 디바이스로 미디어를 스트리밍하는 방법을 알아봅니다.

참조