음악파일 재생에 대해 궁금한 점이 있습니다.

qkrwncks593의 이미지

mp3 , ogg 등 이러한 음악파일을 재생할때 윈도우즈가 제공해주는 네이티브 함수를 통해 음악파일이 재생되는걸로 생각하고 있었는데

파일 포맷마다 저음질 포맷 고음질 포맷 등 뭐 여러가지가 있더라구요 , 저음질 포맷 고음질 포맷으로 구분된다는건 음악재생을 하나의 네이티브 API 로 하는게 아니라던가

무언가의 다른방법으로 재생하는것 같은데 .... 음악파일이 재생되는 원리가 궁금합니다. 어떤 윈도우즈 네이티브 API 가 사용되고 포맷을 나누는 이유

mirheekl의 이미지

mp3, ogg등의 코덱 또는 컨테이너를 쓰는 이유는 대략 두가지.
- 비압축 음성은 크기가 너무 큽니다. CD음질 한곡당 수십 메가바이트 수준. -> 이건 코덱을 쓰는 이유.
- 컨테이너에 다양한 메타데이터를 저장할 수 있습니다. 곡명, 가수, 장르, ... 그리고 동일 컨테이너라면 내부 구조도 같으므로 정형화된 처리가 가능합니다. -> 이건 컨테이너를 쓰는 이유.

저음질 고음질 등으로 나뉘는건 동영상과 마찬가지로 압축률, 출력품질, 차지하는 용량 등과 밀접한 관계가 있습니다. 저전력 저용량 기기에 CD음질 음성을 넣을 이유는 없음을 생각해보시면 됩니다. (멀티미디어 파일처리에는 많은 연산력이 소모됩니다.) 다만, 파일 포맷 자체가 음질과 직접적으로 관련이 있는 건 아닙니다. 어느정도 상관관계는 있지만.. 가령 일반적으로 알려진 무손실 고음질 포맷인 FLAC에 mp3보다 못한 음질을 넣는 것도 못할 이유는 없습니다. 고 비트레이트 고해상도 XVID영상이 저 비트레이트 저해상도 H.264영상보다 뛰어날 수 있는 것과 같습니다. 또한 이런 컨테이너와 코덱들이 전세계적으로 경쟁 관계에 있기 때문에 여러 가지가 존재하는 것이죠. 각자의 장단점을 가지고 말이죠. 물론 장점보다 단점이 두드러진 컨테이너와 코덱들은 이미 많이 도태되기도 했고요. 다만 mp3의 경우는 이제는 장점보다 단점이 많은 코덱이자 컨테이너이지만 선점효과와 점유율을 통해서 아직까지 도태되지 않고 살아남아 있군요.

윈도에서 음악 출력은 크게 두가지 방법으로 이루어집니다.
- 직접 파일을 열고 코덱 라이브러리를 호출해서 디코딩한뒤 사운드 함수를 이용해서 출력하는 방법.
- DirectShow를 이용해서 시스템에 설치된 필터를 가지고 시스템이 알아서 재생하게 하는 방법.

후자의 경우는 윈도 제공 함수만 써서 출력하는 것이 당연히 가능합니다. 다만 시스템에 해당 포맷과 코덱을 지원하는 필터가 설치돼있어야 합니다.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.