오래된 스토리지의 음원 파일을 새로운 스토리지로의 데이터 이전 요청을 받았다.
그리고 각 코덱별로 분류를 해달라고 한다.
어떤 파일들이 들어있나.. 확인해보니 이게 뭐야..
pcm, mp3, g723.1(ms), g729(sipro), gsm 온갖 짬뽕이네!
이걸 어떻게 분류하지??
오디오 파일은 Header 정보에 Codec에 대한 고유 코드 (Signature Code)를 가지고 있다.
우리는 Signature Code 정보를 활용하여 각 음원 형태 별로 대응 방안을 다르게 구성할 수 있다.
그 방법을 자세하게 알아보자.
1. 시그니처 코드란?
시그니처 코드(Signature Code)는 특정 오디오 또는 비디오 코덱이 파일 내에서 사용되었는지를 식별하는 고유한 값이다. WAV, MP3, AAC와 같은 다양한 오디오 포맷은 각각 특정한 시그니처 값을 포함하고 있으며, 이를 통해 코덱을 판별할 수 있다.
2. C#을 이용한 코덱 시그니처 코드 확인
아래는 WAV 파일에서 특정 오디오 코덱을 확인하는 함수이다.
private bool CheckCodecG729(string tempWavDecFile)
{
try
{
using (FileStream fs = new FileStream(tempWavDecFile, FileMode.Open, FileAccess.Read))
{
// 파일 헤더의 크기: 256로 고정 (수정 가능)
const int headerSize = 256;
byte[] buffer = new byte[headerSize];
// 파일에서 헤더 부분만 Read
int bytesRead = fs.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
// 헤더에서 시그니처 코드 확인
if (CheckSignatureInBuffer(buffer, bytesRead))
{
return true; // G.729 코덱 확인된 경우
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("[Error][Message]:MethodBase.GetCurrentMethod().Name + " - " + ex.Message");
}
return false; // G.729 코덱이 아님
}
/// <summary>
/// 버퍼에서 G729 시그니처 코드를 확인하는 메서드
/// </summary>
private bool CheckSignatureInBuffer(byte[] buffer, int length)
{
for (int i = 0; i < length - 1; i++) // 최소 2바이트씩 검사
{
ushort value = BitConverter.ToUInt16(buffer, i);
//Sipro Lab G.729_307
if (value == 307)
{
return true; // G.729 시그니처 코드 발견한 경우
}
}
return false; // 시그니처 코드가 없는 경우
}
위의 코드와 같이 특정 시그니처 코드에 대한 검사를 통해 해당 음원이 어떤 코덱으로 이루어졌는 지 확인이 가능하다.
예시의 경우에는 g729 (sipro) 를 대상으로 진행했지만, 탐색을 원하는 Signature Code로 변경하여 원하는 코덱의 음원을 분류할 수 있다.
3. 주요 오디오 코덱의 시그니처 코드
아래 표는 주요 오디오 코덱과 해당하는 시그니처 코드 값(16진수 및 10진수) 목록이다.
| Value (Hex) | Value (Dec) | Audio Encoding |
| 0x0001 | 1 | Microsoft PCM |
| 0x0002 | 2 | Microsoft ADPCM |
| 0x0006 | 6 | ITU G.711 a-law |
| 0x0007 | 7 | ITU G.711 μ-law |
| 0x0011 | 17 | IMA ADPCM |
| 0x0022 | 34 | Microsoft GSM 6.10 |
| 0x0030 | 48 | Microsoft G723.1 |
| 0x0031 | 49 | IBM AVC Adaptive Differential |
| 0x0050 | 80 | MPEG Layer-3 (MP3) |
| 0x0055 | 85 | MPEG AAC |
| 0x0072 | 114 | G.726 |
| 0x0083 | 131 | GSM 610 |
| 0x0123 | 291 | G.723 |
| 0x0133 | 307 | Sipro Lab G.729 |
| 0xA109 | 41225 | Speex |
4. 어디에 활용하는가?
- 자동화 시스템에서 오디오 파일의 코덱 확인: 특정 코덱이 필요한 경우, 시그니처 코드를 기반으로 파일을 분류할 수 있다.
- 멀티미디어 변환 프로그램(ffmpeg)과의 연동: 변환 전에 코덱 정보를 확인하여 적절한 변환 옵션을 부여할 수 있다.
정리하면, C#을 이용한 시그니처 코드 분석을 통해 오디오 파일의 코덱을 판별할 수 있고, FFmpeg 등의 툴과 함께 활용하면 효과적인 멀티미디어 처리가 가능하다.
위에서 소개한 시그니처 코드 표를 참고하여 다양한 오디오 포맷을 식별하는 데 활용해보자.
'Knowledge > CS 지식' 카테고리의 다른 글
| 오디오 포맷 : WAV (1) | 2025.01.29 |
|---|