본문 바로가기
programming language/MATLAB

MATLAB 에서 mp3 파일 읽기

by 남성 2012. 10. 31.
반응형

MATLAB 에서는 다양한 파일형태에 대해 읽고 쓸 수 있는 함수들을 기본적으로 제공하고 있습니다.

 

그런데 요즘 사람들이 가장 많이 사용하는 음악 파일 형태인 mp3 파일은 읽어 올 수 있는 함수가 없더군요.

 

그래서 검색을 해보니 역시… 내가 필요한 것은 어딘가에는 다 있더군요.

 

아래 주소에서 Alfredo Fernandez 라는 분이 만든 MP3WRITE(), MP3READ() 함수가 들어 있는 library 를 다운로드 받을 수 있었습니다.

 

http://www.mathworks.com/matlabcentral/fileexchange/6152-MP3WRITE%20and%20MP3READ

 

아래 그림 같은 화면에서 다운로드를 눌러서 mp3_toolbox_v2.0.zip파일을 다운로드 받습니다.

 

 

그럼 이제 MATLAB 에서 인식 할 수 있도록 path 만 설정해 주면 됩니다.

 

일단 위에서 다운로드 한 파일을 MATLAB 설치폴더 하위의 toolbox 폴더에 압축을 풉니다. 저는 C:\MATLAB\R2011a\toolbox\mp3_toolbox_v2.0 에 압축을 풀었습니다.

 

MATLAB toolbox 폴더는 윈도우의 경우 보통 C:\ Program Files\MATLAB\R2011a\toolbox 에 위치 합니다.

 

이제 MATLAB 을 켜고 맨위의 메뉴 중에 File à Set Path 메뉴를 선택 합니다.

 

그리고 아래 그림과 같이 Add with Subfolders 를 클릭하여 path 설정을 해 줍니다.

 

 

그럼 이제 간단하게 사용해 보죠~ Temp_mp3_file.MP3 라는 파일을 불러오는 예제 입니다.

 

[Y,FS,NBITS,encoding_info,ID3v1_tag_info] =mp3read('Temp_mp3_file.MP3');

 

위 값에서 Y 값이 바로 음악 데이터 파일 입니다. Stereo 와 mono 를 읽어 들일 수 있습니다.

 

Fs 는 sampling rate , NBITS 는 샘플당 비트 수 , encoding_info 는 말 그대로 encoding 정보 , ID3v1_tag_info 는 음악 파일의 태그 정보라고 하는군요.

 

저는 위 예제의 mp3 파일에 대해 실행 시켜 보니깐~ 요렇게~ 되는군요.

 

 

Y 값은 너무 길어서 나타내지 않았습니다.

 

mp3 파일을 만들 때는 mp3write() 함수를 사용하구요~

 

mp3write(Y,FS,NBITS,MP3FILE,ENCODING)

 

의 형태로 사용합니다.

 

Y,FS,NBITS 은 필수 입력 요소이구요. 위에서 설명한 인자들 입니다.

 

MP3FILE 은 만들고자 하는 mp3 파일명, ENCODING 은 저자가 정한 encoding 옵션 입니다.

인코딩 옵션에 대해 알고 싶은 분은 MATLAB command 창에 doc mp3write 라고 타이핑 하면 될 것 같습니다. Default 는 2번이네요.

 

그냥 간단하게 mp3 파일을 만들 때는 mp3write(Y,FS,NBITS) 하면 알아서~~ 추천하는 encoding 옵션으로 만들어 집니다.

 

요즘 나오는 음악 파일들 중에 간혹 mp3read() 함수로 읽어지지 안는 경우가 있는데 이는 대부분이 decoding 문제 같더군요.

 

이럴 때는 Goldwave 와 같은 프로그램을 이용하여 wave 파일로 변환해서 wavread() 함수를 사용하시거나 encoding 을 변경한 후에 읽어 들이면 정상적으로 읽어 집니다.

 

Goldwave 를 사용한 Wave 파일 변환 방법은 아래 포스팅을 참조하시길~

  

2012/04/23 - [유틸] - Goldwave 로 mp3 를 wav 파일로 만들기


지금까지의 설명은 윈도우를 기준으로 한 설명이었고~ 위 mp3read, mp3write 라이브러리는 윈도우에서만 돌아간다고 하더군요.

 

다른 운영체제를 사용하시는 분들은 아래 주소를 참조하시는 게 좋을 것 같습니다.

 

Alfredo Fernandez 도 아래 주소의 내용들에 영감을 받아서 위 함수들을 윈도용으로 만든 거라고 써 져 있더군요.

 

Dan Ellis 라는 콜롬비아 대학 교수가 만든 라이브러리네요~

 

http://www.mathworks.com/matlabcentral/fileexchange/13852

 

http://www.ee.columbia.edu/~dpwe/resources/matlab/mp3read.html

 

그럼 오늘의 포스팅은 여기서 마치겠습니다~~


반응형

댓글4

  • 질문자 2013.11.03 16:31

    >> [Y,FS,NBITS,encoding_info,tag_info] =mp3read('test_music.mp3');
    ??? Error using ==> mp3read at 46
    Error while decoding file. File may be corrupted


    안녕하세요. 포스팅 잘 보았습니다. 해당 라이브러리 다운 받고 mp3파일을 가져오려 하는데 이러한 에러메시지가 뜨는데 이건 어디서 잘못된건지 혹시 알 수 있나요?
    답글

    • 남성 2013.11.03 17:04 신고

      방문해 주셔서 감사합니다. ^^

      포스팅에서도 소개한 아래 주소에서

      http://www.ee.columbia.edu/~dpwe/resources/matlab/mp3read.html

      중간 정도에 보시면 Other file formats 라는 부분을 볼 수 가 있는데요.

      MPEG-1 Audio layers 1, 2, and 3 은 인식 할수 있지만, MPEG-4 audio 파일은 인식할수 없다고 합니다. 위 포스팅에서도 말씀드린데로 일부 읽어들이지 못하는 파일의 경우 Goldwave 와 같은 프로그램으로 wav 로 변환한 후에 읽어들이시면 됩니다.

      아래 포스팅 참조하시구요.

      http://iamaman.tistory.com/445

      또한 최신 MATLAB 프로그램을 사용하신다면, audioread() 라는 함수를 사용해서 mp3 파일을 읽어들일 수 있습니다. 2012b 버전에는 audioread() 함수가 있더군요. 이전버전에는 모르겟습니다.

      audioread() 함수는 wave, mp3 뿐만 아니라 FLAC, OGG 파일도 읽어 들일 수 있습니다.

      혹시 위 변환 프로그램들의 사용방법이 어렵다 하시면 namsung_32@naver.com 로 파일 보내 주시면 wav 파일로 변환해서 보내드리겠습니다.

  • 2016.06.06 08:50

    비밀댓글입니다
    답글

    • 남성 2016.06.06 10:36 신고

      mp3read 를 할 때 Y 만 써 줘도 됩니다. 위에 답변에도 썼지만MPEG-1 Audio layers 1, 2, and 3 은 인식 할수 있지만, MPEG-4 audio 파일은 인식할수 없다고 합니다. 참조하시기 바랍니다.