오디오 트리머

브라우저에서 오디오 파일의 특정 구간을 잘라내세요 — 파형 위에서 시작/종료 구간을 드래그하고, 선택 영역을 미리 듣고, WAV로 다운로드합니다. 아무것도 업로드되지 않습니다.

조회수 214회

브라우저 기반 오디오 자르기의 작동 원리

이 도구는 파일을 어디로도 전송하지 않습니다 — Web Audio APIdecodeAudioData()를 사용해 압축된 오디오(MP3, AAC, OGG 등 브라우저의 코덱이 지원하는 모든 형식)를 원시 AudioBuffer로 풀어냅니다: 채널당 -1에서 1 사이의 부동소수점 샘플 값 배열입니다. 이 디코딩 단계는 미디어 플레이어가 실제로 소리를 재생하기 전에 내부적으로 수행하는 것과 동일한 단계입니다 — 차이점은 디코딩된 샘플이 스피커로 바로 전달되지 않고 JavaScript에서 계속 접근 가능하다는 점이며, 이것이 편집을 가능하게 합니다. 알아두면 좋은 세부 사항 하나: decodeAudioData()는 원본 파일의 샘플레이트가 아니라, 기기의 오디오 하드웨어에 따라 보통 44.1kHz 또는 48kHz인 AudioContext 자체의 샘플레이트로 디코딩하며, 둘이 다르면 자동으로 리샘플링합니다. 이는 이 도구가 다르게 처리하는 부분이 아니라 모든 브라우저의 오디오 파이프라인에 내장된 표준적이고 투명한 동작이며, 파일이 8kHz 음성이든 96kHz 스튜디오 오디오든 동일하게 적용됩니다.

오디오가 디코딩되고 나면 자르기는 배열 슬라이싱 이상도 이하도 아닙니다: 선택한 시작 및 종료 시간(초 단위)에 샘플레이트를 곱해 샘플 인덱스를 구한 다음, 그 두 인덱스 사이의 샘플만 새롭고 더 짧은 버퍼로 복사합니다. 오디오 콘텐츠의 재인코딩도, 품질 손실도, 재압축 아티팩트도 없습니다 — 선택 범위 안의 파형은 디코딩된 형태 그대로 바이트 단위로 복사됩니다.

파형 미리보기는 디코딩된 샘플 배열을 한 번 순회하며 가로 픽셀 수만큼의 버킷으로 나누고, 각 버킷에서 발견된 최소값과 최대값을 세로 막대로 표시하여 그려집니다 — 모든 오디오 편집기가 사용하는 것과 동일한 피크 엔벨로프 기법입니다. 개별 샘플(초당 종종 44,100개)을 모두 그리는 것은 낭비일 뿐 아니라 일반적인 화면 해상도에서는 최소/최대 엔벨로프와 시각적으로 구별되지 않기 때문입니다.

출력이 MP3가 아닌 WAV인 이유

잘라낸 결과는 WAV로 내보내집니다 — 샘플레이트, 비트 심도, 채널 수를 설명하는 표준 44바이트 RIFF 헤더와 함께 원시 샘플 데이터를 그대로 다시 기록하는 무손실 PCM 컨테이너입니다. 이는 의도적이고 정직한 절충입니다: MP3와 같은 압축 형식으로 인코딩하려면 완전한 심리음향 인코더(파일을 애초에 만드는 데 사용된 것과 같은 종류의 복잡한 알고리즘)가 필요한데, 브라우저는 이를 기본적으로 제공하지 않으며 큰 추가 라이브러리를 불러와야 합니다. 그 대신 WAV는 세대 손실이 전혀 없음을 보장합니다 — 손실이 있는 MP3를 반복해서 다시 저장하는 것과 달리, 열 번을 연속으로 잘라내도 오디오가 절대 저하되지 않습니다. 이후 더 작은 파일이 필요하다면, 결과 WAV를 어떤 표준 오디오 도구로든 다시 압축할 수 있습니다.

  • 내보낸 WAV는 원본 파일의 원래 샘플레이트나 비트 심도와 관계없이 AudioContext의 샘플레이트(보통 44.1kHz 또는 48kHz)와 16비트 심도를 사용합니다 — 이는 자르기 자체의 한계가 아니라 decodeAudioData()의 동작 방식에서 비롯됩니다.
  • 매우 긴 파일(대략 30~60분 이상)은 상당한 브라우저 메모리를 사용할 수 있습니다. 디코딩된 전체 버퍼가 자르기 전까지 부동소수점 샘플로 RAM에 유지되기 때문입니다.
  • 파형은 첫 번째 오디오 채널에서만 그려집니다; 스테레오 콘텐츠는 모든 채널에서 동일하게 잘리며, 미리보기만 한 줄로 단순화됩니다.

자주 묻는 질문

잘라낸 파일이 왜 MP3가 아니라 WAV로 다운로드되나요?

MP3 인코딩에는 브라우저가 기본적으로 제공하지 않는 완전한 심리음향 압축 알고리즘이 필요합니다. WAV는 이미 디코딩된 샘플을 손실 없이 그대로 다시 기록하므로, 품질 손실이 전혀 없고 추가 라이브러리도 필요 없습니다 — 이후 더 작은 파일이 필요하면 WAV를 별도로 압축하세요.

자르기 과정에서 오디오 품질이 손실되나요?

자르기 자체는 손실을 일으키지 않습니다 — 디코딩된 샘플의 연속된 구간을 재인코딩이나 압축 없이 새 버퍼로 복사할 뿐입니다. 한 가지 주의할 점은 decodeAudioData()가 브라우저의 오디오 하드웨어 샘플레이트(보통 44.1kHz 또는 48kHz)로 디코딩하며, 원본 파일이 다른 샘플레이트를 사용했다면 자동으로 리샘플링한다는 것입니다 — 이는 자르기에 특유한 것이 아니라 표준적인 브라우저 동작이며, 일반적인 청취에서는 사실상 감지되지 않습니다.

제 오디오 파일이 서버에 업로드되나요?

아니요. 디코딩, 파형 렌더링, 재생 미리보기, 최종 자르기 모두 Web Audio API를 통해 브라우저에서 로컬로 이루어집니다 — 파일은 기기를 절대 벗어나지 않습니다.

어떤 오디오 형식을 업로드할 수 있나요?

브라우저에 내장된 디코더가 지원하는 모든 형식입니다 — MP3, WAV, OGG, AAC/M4A는 사실상 모든 최신 브라우저에서 작동합니다. 브라우저가 오디오를 재생할 때 사용하는 것과 동일한 decodeAudioData() 함수가 이 도구를 구동하기 때문입니다.

다운로드 전에 선택 영역을 미리 들어볼 수 있나요?

네 — "선택 구간 재생" 버튼은 시작 및 종료 마커 사이의 구간을 최종 자르기에 사용될 것과 동일한 버퍼 오프셋으로 재생하므로, 들리는 소리가 다운로드되는 파일과 정확히 일치합니다.

댓글

아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!

비슷한 도구