'mp3'에 해당되는 글 3건

  1. 2008.10.12 음악을 들어보자 #3 (5)
  2. 2008.10.09 음악을 들어보자! #2 (2)
  3. 2008.10.08 음악을 들어보자! (1)

Naver Perl Community & Study Cafe


2008.10.12 18:16

음악을 들어보자 #3

초안을 한번 잡아 보려고 한다.

GTK2를 사용해서 이것저것 만들다보니 전체 틀이 나왔다.

각각의 객체를 접근하는 부분이 까다로워 고민이 들지만...

한시간만에 이렇게 만들었다는 것이 나조차도 믿기지는 않지만;; 

GTK2의 위대함을 엿볼 수 있는 단편적인 부분이기도 하다.

사실.. 슥삭슥삭 그려넣는... MFC와 비베가 훨신 더 편하기도... ㅡ.ㅠ





구간반복을 빼먹었...

신고
Trackback 0 Comment 5
2008.10.09 14:12

음악을 들어보자! #2


첫번째로 mp3list.pm 모듈을 만들어 보자.

이것은 해당 폴더 안에 있는 mp3파일을 모두 찾아주며

경로까지 붙여 저장 시켜주는 모듈이다.

- mp3list.pm

package mp3list;
use Exporter;
use strict;
use vars qw( @ISA @EXPORT_OK $VERSION ); 
use Cwd;
@ISA = qw( Exporter );
@EXPORT_OK = qw(folder_name);
$VERSION = '0.1';

sub folder_name {
	my $folder = shift;
	my @list;
	my $cwd = fastcwd()."/$folder";
	opendir( DIR, $cwd ) or die "ls $cwd : $!\n";
	foreach ( readdir(DIR) ) {	
		push @list,"$cwd/$_" if(m!.+\.mp3!);
	}
	closedir DIR;
	#print join "\n",@list; 
	return @list;
}

1;

전종필님의 ls명령어 구현하는 코드를 참고하여 만들었으며

일단 메인 소스에 구현을 한 뒤에 모듈로 만들어 보았다.

모듈 사용하는 김에 $VERSION도 추가 !

까다로웠던 부분은 

my $folder = shift;

넘긴 인자값을 shift로 받아오는 이 부분을 

my $folder = @_;

배열로 받아버려 perl프로그램이 맛이 가는 현상을 맛보게 되었다...

이 작은 오타 하나 때문에 매우 답답함을 격었다.... 

디버깅 할 수도 없고..ㅡ.ㅠ


- mp3player.pl
use strict;
use Win32::MediaPlayer;
use mp3list 0.1 qw(folder_name);
my @Mp3_list = folder_name('myMusic');
my $all = 1;
while($all){ #$all변수에 따라 전체 반복
	my $count = 0;
	foreach(@Mp3_list)
	{
		$count++;
		
		my $winmm = new Win32::MediaPlayer;  
		$winmm->load($_);        
		$winmm->play;                
		$winmm->volume(100);              
		$winmm->seek('00:00');           
		m![^\/]+\.mp3!ix; #/ 제외한 파일명을 저장한다. 
		print "Playing MP3 file : $&\n" ;
		#$winmm->pause;                   
		#$winmm->resume;                  
		#Next Mp3 file		
		if($count != $#Mp3_list+1){
			$Mp3_list[$count] =~ m![^\/]+\.mp3!ix;
			print "Next MP3 file : $&\n";		
		}else{
			print "다음곡이 없습니다 \n";
		}
		
		print 'Total Length : '.$winmm->length(1),$/; 

		print 'Now Position : ';
		while($winmm->pos(1) ne $winmm->length(1) ){
			print $winmm->pos(1)."\b\b\b\b\b";   
		}
		$winmm->pause;                   
	}
}

__END__

mp3list 모듈은 폴더안의 mp3 파일을 읽어온 뒤 목록들을 나열 한다.

$all 변수에 따라서 전체 반복을 설정 가능하게 하였고 

다음곡을 출력하는 기능을 추가했다.


- 추가 되어야 될 소스

전체 반복일때와 그렇지 않을 때

전체 반복일때는 다음곡이 맨 처음 곡으로 나와야 하는 알고리즘 구현

천체 반복이 아닐때는 뭐.. 그냥 다음 곡이 없다고 나오면 될 것 


오늘안에 랜덤재생도 한번 구현이나.. 후욱;;
신고
Trackback 1 Comment 2
2008.10.08 21:11

음악을 들어보자!

 갓 프로그래밍에 입문한 친구 중에 한명이 MFC로 음악을 재생해주는 프로그램을 만드는 것을 보았다.

괜찮게 만들었길레 어떤점이 제일 어려웠냐고 물어봤더니 모르는 라이브러리를 사용하며

부딛치는 난관들을 극복하기가 어려웠다고 한다.

심심한데 perl로 한번 해볼까? 생각이 들어... 

일단 음악파일을 재생해주는 모듈부터 검색을 하였다.

cpan에서 막연하게 MP3만 검색을 했더니 찾고자 하는 모듈이 검색되지 않았는데

10분정도 붙잡고 있었더니 드디어 발견!!


Windows에서 음악파일을 재생 시켜주는 모듈을 발견!

Author을 확인해보니 중국 사람이 만들었는데... 

귀엽게 생겨서..... 쫌... ^^;


이제 확인했으니 샤샤샥!


Cpan으로 설치!


cpan shell -- CPAN exploration and modules installation (v1.9205)
ReadLine support enabled

cpan> install Win32::MediaPlayer

--- 생략 ---

Installing C:\Perl\html\site\lib\Win32\MediaPlayer.html
Installing C:\Perl\site\lib\Win32\MediaPlayer.pm
Appending installation info to C:\Perl\lib/perllocal.pod
KENWU/Win32-MediaPlayer-0.2.zip
nmake install  -- OK   # 오키오키!



SYNOPSIS를 조금만 수정하여 실제로 동작하는지 확인하였다.

    use Win32::MediaPlayer;
    $mp3_name = 'D:/Music^^/still_on_my_brain.mp3';

    $winmm = new Win32::MediaPlayer;  
    $winmm->load($mp3_name);        
    $winmm->play;                   
    $winmm->volume(100);            
    $winmm->seek('00:32');         
    $mp3_name =~ m!\w+\.mp3!;
    print "Playing MP3 file : $&\n";

    #$winmm->pause;                   # Pause music playing
    #$winmm->resume;                  # Resume music playing

    print 'Total Length : '.$winmm->length(1),$/; 
    while(1) {
          sleep 1;
          print 'Now Position: '.$winmm->pos(1)."\r";  
    };


증명은 할 수 없지만 음악재생이 잘된다;


실행하면 재생되는 음악에 대한 정보가 나온다.

간단한 정규식을 2줄 추가하여 재생되고 있는 파일의 이름이 출력되도록 설정하였다.


Playing MP3 file : still_on_my_brain.mp3

Total Length : 04:39


이제.. 여기다가 살을 붙여보는 작업을 해보려고 한다.

간단히 머릿속에 떠오르는 내용들만 적어보자면...


1. 특정 폴더안에 있는 MP3파일을 재생목록에 넣은뒤 차례대로 재생시킨다.

   -  디렉토리 안의 파일명을 모두 읽어와서 mp3파일만 정규식으로 빼낸뒤 

       배열에 저장 후 플레이 시키면 되지 않을까..

2. 순차적인 재생만이 아닌 랜덤으로 재생도 구현...

   - 랜덤함수만 쓰면 뭐...

3. seek프로그램을 보니 구간반복도 기능도 추가 가능할듯...

   - A<->B  요거 알고리즘 생각해보니깐 별꺼 없다는... 변수 두개만 있으면 가능 할 듯 한데...

4. gtk2를 사용하여 gui로 만들기...

   - OTL... 버튼 구현만 할까... 아니면 메뉴로 재생만 되게 할까...;;



-- 추가 기능 --

애머렛군이 만든 블로그 주소를 검색하면 mp3를 자동 다운받아지는 프로그램도 같이 넣어

검색창을 하나 만들어 mp3수집도 할 수 있도록 하는건 어떨까 하는 생각이...


시간을 들여서 천천히 만들자... Enjoy Perl~^^/

신고
Trackback 0 Comment 1