사운드파일 편집/추출

pcw919의 이미지

현재 사운드 베이스 게임을 만들고 있습니다...

기타 히어로나 DJMax 와 같은 형식의 게임인데요, 이게임에서 저희는 유저인풋(유저가 사운드 파일을 추가하여, 그 사운드파일로 게임을 한다)을 지원하고자 합니다.

그러다보니, 유저인풋의 사운드파일을 편집하거나 추출하는 기능이 필요하게 되었습니다.

추출/편집의 의미가 무엇이냐하면, 그 음악파일의 음들을 추출하여, 적절한 음( DJmax 에서 유저가 버튼을 누를떄마다 소리가나지요) 을 추출하고 그 추출된음이 존재하는 시간(음악 플레이시간중 위치)

을 얻어내야 하는 것입니다.

이 기능을 추가하기위해서 어떤것들이 필요할까요?

푸리에 변환과 같은 것들을 참고해보긴 했습니다만...뭔가 추상적이네요...참고자료가 있으시면 링크나 댓글 부탁드립니다 (__)

snowall의 이미지

보통은 사운드파일 편집 프로그램으로 일일이 자르지 않나요? 기능이 아닌것 같던데요.

피할 수 있을때 즐겨라! http://melotopia.net/b

pcw919의 이미지

최근의 게임을 보면 유저인풋을 지원하는 게임들이 많습니다...저도 시도해 보고싶었구요...

여기에서 푸리에 변환에 관한 게시글을 읽다가, 자신이 원하는 악기(음악내에서)의 음만을 추출하는것도 가능하다. 라는 글을 본적이있었습니다.

그래서 그것에 대한 자세한 정보를 얻고자 한것이구요.

원하는 음이나, 다양한 악기들의 연주로 이루어진 연주를 담은 파일을 각각의 악기연주들로 나누어 추출할수있다면,

충분히 가능하다고 생각합니다. 도움부탁드립니다 (__)

snowall의 이미지

사람 귀와 뇌는 그걸 자동으로 해줍니다만...

"악기의 음"이란 음색과 음높이인데, 음색은 주파수 도메인에서 나타나는 스펙트럼이고, 음높이는 주파수 도메인의 메인 주파수 대역이 되죠.

뒤섞인 음에서 특정 악기를 추출한다는 것은, 이런겁니다.

두 악기의 음색과 특정 시간동안의 음악이 다음과 같은 스펙트럼을 갖고 있다고 하면

악기A = (0.1, 0.8, 0.1)

악기B = (0.2, 0.3, 0.5)

음악 = (3, 2, 5) = a*A + b*B

여기서 a와 b를 찾아내는 것이죠.

물론 악기도 더 많고, 음악은 더 길겠죠.

게다가 악기의 스펙트럼을 모르는 상황에서 추출한다는건, 거의 음성인식과 동일한 노가다를 하셔야 할 겁니다.

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0MSpA&articleno=7156135&categoryId=728918&regdt=20090117000723#ajax_history_home
간단히 검색해봤는데, 위의 프로그램에서도 특정 악기만을 지원합니다. 그리고 노트를 잘라주지는 않죠.

https://encrypted.google.com/url?sa=t&rct=j&q=%EC%95%85%EA%B8%B0%20%EC%9D%8C%EC%95%85%20%EC%B6%94%EC%B6%9C&source=web&cd=9&sqi=2&ved=0CIoBEBYwCA&url=http%3A%2F%2Fhanulso.knu.kr%2Fhboard%2Fdownload.php%3Ftable_name%3Dseminar%26no%3D83%26filename%3DMelody%2520Extraction_25_%25B0%25FB%25C7%25F6%25BF%25B1.pptx&ei=NErUTrqnKoOViQevvpiQDw&usg=AFQjCNEFVD52txssCPaIxTs8vKnPLAF-zA&cad=rja

이런게 있긴 합니다. 피아노에 관한 내용이죠. 보다시피, 음색을 알아야 뭘 할 수 있다고 보면 됩니다.

그나저나, 이미 구현된 게임들은 어떻게 구현했는지 궁금하네요.

피할 수 있을때 즐겨라! http://melotopia.net/b

planetarium의 이미지

정확히 아는건 아니지만
이미 구현된 게임들은 해당하는 음악파일의 소스를 가지고 (저작권 등의 문제도 있으니 어차피 원곡자와 컨택은 필요하겠죠) 필요한 노트들을 만들어낼겁니다.
혹은 사운드 파일들을 새로 만들어낼 수도 있구요.

이 질문은 코딩에 비유하면 바이너리 파일만을 가지고 역공학을 하는 방법을 묻는것 같네요...

cleansugar의 이미지

렌더링 후의 일반 음원으로 멜로디 추출하는 것은 인공지능으로 하기 때문에 어렵고 부정확합니다.

악기별로 분리하고 거기서 멜로디도 다시 추출해야 되죠.

현재 보컬만 추출하는 기능이 있지만 기능에 한계가 있습니다.

게임이라면 멜로디 인식이 정확해야하기 때문에, 사용자가 만든 걸 쓰시려면 미디로 입력받는 수밖에 없습니다.

기존의 게임은 일일히 손으로 박자와 계명을 따로 쓴 겁니다.

토끼군님인가가 만든 자유오픈소스 음악게임이 소스포지에서 순위권인 걸로 알고 있습니다.

소스를 참고하시면 되겠지요.

차세대 엠펙오디오에서는 악기별로 분류해서 저장하는 기능이 있다지만 여기서도 멜로디 인식 기능이 없을 겁니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.