오디오 인코딩은 오디오 데이터를 저장하고 전송하는 방식을 의미합니다. 아래 문서는 이러한 인코딩이 어떻게 작동하는지 설명합니다. 애플리케이션에 가장 적합한 인코딩 선택에 대한 가이드라인은 권장사항을 참조하세요.
디지털 오디오 인코딩은 복잡한 주제이며, 일반적으로 Speech API에서 오디오를 처리하기 위해 세부정보를 알 필요는 없습니다. 여기서 제공되는 개념은 일반적인 개요입니다. 이 배경 정보 중 일부는 API 작동 방식과 애플리케이션에서 오디오를 공식화하고 처리하는 방법을 이해하는 데 유용할 수 있습니다.
오디오 형식과 인코딩
오디오 형식과 오디오 인코딩은 서로 같지 않습니다. .wav
와 같은 대중적인 파일 형식은 오디오 파일의 헤더 형식을 정의하지만 그 자체가 오디오 인코딩은 아닙니다. .wav
오디오 파일은 항상 그런 것은 아니지만 리니어 PCM 인코딩을 사용하는 경우가 많습니다. 헤더를 검사할 때까지 .wav
파일에 특정 인코딩이 있다고 전제하지 마세요.
디코딩 구성
전달된 오디오를 디코딩하는 데 필요한 매개변수는 decoding_config
oneof에 지정됩니다.
오디오가 AutoDetectDecodingConfig
에서 지원되는 형식 중 하나인 경우 auto_decoding_config
필드를 Speech-to-Text가 올바른 매개변수를 결정할 수 있도록 설정하는 것이 좋습니다.
그렇지 않으면 explicit_decoding_config
필드를 설정하여 디코딩 매개변수를 명시적으로 지정해야 합니다. 이러한 매개변수는 일반적으로 오디오를 녹음하는 데 사용되는 설정을 통해 찾을 수 있습니다.
인코딩이 필요한 이유
오디오는 서로 다른 주파수와 진폭의 파장이 삽입된 파형으로 구성됩니다. 디지털 미디어 내에서 이러한 파형을 표현하려면 적어도 복제하려는 가장 높은 주파수의 사운드를 나타낼 수 있는 속도로 파형을 샘플링해야 하며, 사운드 샘플 전체에 걸쳐 파형의 적절한 진폭(소리세기와 부드러움)을 나타내는 충분한 비트 깊이를 저장해야 합니다.
주파수를 다시 생성하는 사운드 처리 장치의 기능을 주파수 응답이라고 하여, 적절한 소리세기와 부드러움을 생성하는 기능을 다이내믹 레인지라고 합니다. 이들 용어를 함께 종종 사운드 기기의 피델리티(Fidelity)라고 합니다. 인코딩은 이러한 두 가지 기본 원칙을 사용하여 사운드를 재구성하고 이러한 데이터를 효율적으로 저장하고 전송할 수 있는 가장 간단한 방식입니다.
샘플링 레이트
사운드는 아날로그 파형으로 존재합니다. 디지털 오디오 세그먼트는 파장의 고유 주파수를 모방하기에 충분한 빠른 속도로 아날로그 파장의 진폭을 샘플링하여 아날로그 파장의 근사치를 구합니다. 디지털 오디오 세그먼트의 샘플링 레이트는 오디오 소스 자료(초당)에서 가져올 샘플 수를 지정합니다. 샘플링 레이트가 높으면 디지털 오디오가 고주파를 충실하게 표현하는 성능이 향상됩니다.
Nyquist-Shannon 이론에 따라 일반적으로 디지털 방식으로 캡처할 사운드 파장의 가장 높은 주파수의 두 배 이상을 샘플링해야 합니다. 예를 들어 사람의 청력 범위(20~20000Hz) 내에서 오디오를 표현하려면 디지털 오디오 형식은 초당 40000번 이상을 샘플링해야 합니다(CD 오디오가 44100Hz의 샘플링 레이트를 사용하는 이유 중 일부).
비트 깊이
비트 깊이는 주어진 오디오 샘플의 다이내믹 레인지에 영향을 미칩니다. 비트 깊이가 높을수록 더욱 정확한 진폭을 나타낼 수 있습니다. 동일한 오디오 샘플 내에 크고 부드러운 사운드가 많이 있는 경우 해당 사운드를 올바르게 표현하려면 비트 깊이가 더 필요합니다.
또한 비트 깊이가 높을수록 오디오 샘플 내의 신호대 잡음비가 낮아집니다. CD 음악 오디오는 16비트의 비트 깊이를 사용하여 제공됩니다. DVD 오디오는 24비트의 비트 깊이를 사용하는 반면, 대부분의 전화 통신 장비는 8비트의 비트 깊이를 사용합니다. (특정 압축 기술은 더 작은 비트 깊이를 보정할 수 있지만 손실이 많습니다.)
비압축 오디오
대부분의 디지털 오디오 처리에서는 샘플링 레이트와 비트 깊이 등 두 가지 기술을 사용하여 오디오 데이터를 간단하게 저장합니다. 가장 널리 사용되는 디지털 오디오 기술(CD 사용으로 대중화됨) 중 하나는 펄스 부호 변조(PCM)입니다. 오디오가 설정된 간격으로 샘플링되며 샘플의 비트 깊이를 사용하여 해당 지점에서 샘플링된 파장의 진폭이 디지털 값으로 저장됩니다.
리니어 PCM(샘플 전체에서 진폭 응답이 균일한 선형성을 나타냄)은 CD 내에서, 그리고 Speech-to-Text API의 LINEAR16
인코딩에서 사용되는 표준입니다. 두 인코딩 모두 오디오 데이터에 해당되는 비 압축 스트림을 직접 생성하며, 두 표준 모두 16비트 깊이를 포함합니다. 리니어 PCM은 CD에서 음악 재구성에 적합한 44100Hz의 샘플링 레이트를 사용합니다. 그러나 음성 재구성에는 16000Hz의 샘플링 레이트가 더 적합합니다.
리니어 PCM은 위의 표준이 의미하는 대로 정확하게 디지털 데이터를 저장한다는 점에서 비 압축 오디오의 예시가 될 수 있습니다. 리니어 PCM을 사용하여 인코딩된 바이트의 한 채널 스트림을 읽는 경우, 예를 들어 16비트(2바이트)마다 수를 확인하여 파형의 다른 진폭 값을 얻을 수 있습니다. 거의 모든 장치가 이러한 디지털 데이터를 기본적으로 조작할 수 있습니다. 텍스트 편집기를 사용하여 리니어 PCM 오디오 파일을 자를 수도 있습니다. 하지만 비 압축 오디오는 디지털 오디오를 전송하거나 저장하는 가장 효율적인 방법이 아닙니다. 이러한 이유로 대부분의 오디오는 디지털 압축 기술을 사용합니다.
압축 오디오
다른 모든 데이터와 마찬가지로 오디오 데이터는 간편한 저장 및 전송을 위해 종종 압축됩니다. 오디오 인코딩 내에서의 압축은 무손실 또는 손실 중 하나일 수 있습니다. 무손실 압축은 압축을 해제하고 디지털 데이터를 원래 형식으로 복원할 수 있습니다. 손실 압축은 압축 및 압축 해제 과정에서 필연적으로 일부 정보를 삭제하며 압축 기술의 데이터 삭제 허용 범위를 나타내기 위해 매개변수화됩니다.
무손실 압축
무손실 압축은 저장된 데이터의 복잡한 재배열을 사용하여 디지털 오디오 데이터를 압축하지만 원본 디지털 샘플의 품질을 저하시키지 않습니다. 무손실 압축을 사용하면 데이터를 원래 디지털 형식으로 압축을 해제할 때 정보가 손실되지 않습니다.
그렇다면 무손실 압축 기술에 최적화 매개변수가 있는 이유가 무엇일까요? 이러한 매개변수는 압축 해제에 걸리는 시간을 알 수 있도록 종종 파일 크기를 교환합니다. 예를 들어, FLAC
은 0(가장 빠름)에서 8(가장 작은 파일 크기)까지의 압축 수준 매개변수를 사용합니다. 높은 수준의 FLAC 압축은 낮은 수준의 압축과 비교 시 정보를 잃지 않습니다. 대신 압축 알고리즘은 원본 디지털 오디오 구성 또는 해체 시 더 많은 전산 에너지를 소비합니다.
Speech-to-Text API는 FLAC
및 LINEAR16
등 두 가지 무손실 인코딩을 지원합니다.
기술적으로 LINEAR16
은 처음부터 압축이 필요하지 않으므로 '무손실 압축'이 아닙니다. 파일 크기 또는 데이터 전송이 중요한 경우, 오디오 인코딩으로 FLAC
을 선택합니다.
손실 압축
반면 손실 압축은 압축 데이터를 구성하는 동안 특정 유형의 정보를 제거하거나 축소하여 오디오 데이터를 압축합니다. Speech-to-Text API는 여러 가지 손실 형식을 지원합니다. 하지만 데이터 손실은 인식 정확도에 영향을 줄 수 있으므로 오디오를 제어할 수 있다면 손실 압축을 피해야 합니다.
대중적으로 사용되는 MP3 코덱은 손실 인코딩 기술의 예입니다. 모든 MP3 압축 기술은 정상 사람의 가청 범위 밖에 있는 오디오를 제거하고 MP3 코덱의 유효 비트 전송률 또는 오디오 데이터를 저장할 초당 비트 양을 조정하여 압축량을 조정합니다.
예를 들어, 16비트 리니어 PCM을 사용하는 스테레오 CD의 유효 비트 전송률은 다음과 같습니다.
44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps
예를 들어, MP3 압축은 320kbps, 128kbps 또는 96kbps와 같은 비트 전송률을 사용하여 이러한 디지털 데이터를 제거하므로 음질이 저하됩니다. 또한 MP3는 가변 비트 전송률을 지원하기 때문에 오디오를 더욱 압축할 수 있습니다. 두 기술 모두 정보를 잃고 품질에 영향을 줄 수 있습니다. 예를 들어, 대부분의 사람들은 96kbps 또는 128kbps로 인코딩된 MP3 음악의 차이를 알 수 있습니다.
다른 형태의 압축은 다른 제약 조건을 매개변수화합니다.
MULAW는 샘플 진폭이 선형적이 아닌 대수적으로 변조되는 8비트 PCM 인코딩입니다. 따라서 uLaw는 압축된 오디오의 유효 다이내믹 레인지를 줄입니다. 다른 오디오 유형과 달리 uLaw는 음성 인코딩 최적화를 위해 특별히 도입되었지만 16비트 LINEAR16
(비 압축 PCM)이 여전히 8비트 uLaw 압축 오디오보다 훨씬 우수합니다.
AMR과 AMR_WB는 소스 오디오 샘플에 가변 비트 전송률을 도입함으로써 인코딩된 오디오 샘플을 변조합니다.
Speech-to-Text API는 여러 가지 손실 형식을 지원하지만 소스 오디오를 제어할 수 있다면 손실 형식을 사용하지 마세요. 손실 압축으로 그러한 데이터가 삭제된다고 해서 사람의 귀에 들리는 오디오가 크게 영향을 받지는 않지만, 음성 인식 엔진에 있어 그러한 데이터 손실은 정확도를 현저하게 저하시킬 수 있습니다.