Naver Perl Community & Study Cafe


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 변수에 따라서 전체 반복을 설정 가능하게 하였고 

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


- 추가 되어야 될 소스

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

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

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


오늘안에 랜덤재생도 한번 구현이나.. 후욱;;
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 2


티스토리 툴바