AutoIt Example2011. 2. 14. 14:45

SoundPlay 함수를 이용해서 mp3재생기를 만들어 보겠습니다.


일단 먼저 MP3 파일의 목록을 만들어 보겠습니다.

Local $sDir, $sPath, $cmd, $hFile, $iFiles = 0, $mp3
;MP3 목록만들기
$sDir = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "My Music")
$sDir = FileSelectFolder("재생할 폴더를 선택해 주세요" & @LF & "기본 : 내 음악", "", BitOR(2, 4), $sDir)
If @error = 1 Then Exit

$sPath = @TempDir & "\mp3list.txt"
$cmd = @ComSpec & " /c dir """ & $sDir & "\*.mp3"" /b /s > """ & $sPath & """"
RunWait($cmd, @WorkingDir, @SW_HIDE)


Autoit 자제를 이용해서 한번에 모든 변수를 구할 방법도 있으나,

이번에는 간단히 도스의 Dir 명령을 이용해 mp3파일을 구해 보도록 해 보겠습니다.

$cmd = @ComSpec & " /c dir """ & $sDir & "\*.mp3"" /b /s > """ & $sPath & """"

$sDir 에서 *.mp3 확장자를 가진 파일을 $sPath 에 저장합니다.



이제 생성된 파일을 이용해서 파일 전체 줄 수를 구해 보겠습니다.

;MP3 목록의 파일갯수 구하기
$hFile = FileOpen($sPath, 0)
If $hFile = -1 Then Exit
While 1
    FileReadLine($hFile)
    If @error = -1 Then
        FileClose($hFile)
        ExitLoop
    Else
        $iFiles += 1
    EndIf
WEnd

FileReadLine를 이용해서 특정한 줄을 얻어오는 방법입니다.

_FileCountLines($sPath)를 이용해서 구하는 방법도 있겠으나,
파일전체를 읽어와서 @LF의 갯수를 구하는 방식이라 CPU를좀 먹습니다.

그래서 와 를 이용해서 간단하게 파일을 읽어서 파일의 줄 수를 구합니다.

파일 전체를 Array로 받아오려면, _FileReadToArray를 사용하면 되겠습니다만 간단히 재생을 위해서 여기서는 사용을 하지 않겠습니다.


중간에 "If $hFile = -1 Then Exit" 라는 분기문이 있습니다.

특별히 파일의 생성유무를 확인하는 FileExists가 없는데, 그 이유가 이부분 때문입니다.

파일이 없을경우 "-1"를 반환해서 딱히 필요가 없거든요.




이제 특정한 줄을 읽어서 반환하는 함수인 "FileReadLine"를 사용해보겠습니다.

;재생하기 (랜덤)
While 1
    $i = Random(1, $iFiles, 1)
    $mp3 = FileReadLine($sPath, $i)
    ConsoleWrite(StringFormat("no%03d | %s\n", $i, $mp3))
    SoundPlay($mp3, 1)
WEnd

;재생하기 (순차)
For $i = 1 To $iFiles
    $mp3 = FileReadLine($sPath, $i)
    ConsoleWrite(StringFormat("no%03d | %s\n", $i, $mp3))
    SoundPlay($mp3, 1)
Next


두가지 예제 입니다.

하나는 순차재생이고 하나는 랜덤재생입니다. $i를 만드는 방법에 따른 차이 입니다.

Random(1, $iFiles, 1)을 통하여 만들면, "1" ~ "$iFiles" 까지중 임의 번호를 만드는 것이고
(마지막 ", 1"은 정수를 반환하기 위함입니다. 기본은 소수점 까지 반환을 합니다.)

For ... Next 것을 통해 만들면 "1" ~ "$iFiles" 까지 +1 씩 증가하는 값입니다.

이 소스의 핵심부분인 FileReadLine($sPath, $i) 입니다.

$mp3 = FileReadLine($sPath, $i)

FileReadLine를 이용해서 $sPath에서 $i 번째 줄을 읽어오는 명령입니다.

위 소스를 사용하기 위해서 파일의 줄 수가 필요했습니다.


그리고, SoundPlay 를 사용해서 mp3를 재생이 완료될때까지 기다리게 하기 위해 ", 1)"를 추가하면 됩니다.

SoundPlay($mp3)
Sleep(30 * 1000)
이렇게 처리를 해주면 모든 파일을 30초 미리 듣기가 되겠습니다.





'AutoIt Example' 카테고리의 다른 글

autoit-v3.3.10.0  (1) 2013.12.28
파일명 변경하기  (1) 2008.12.25
한글의 변환  (2) 2008.10.25
Autoit으로 트레이 런쳐 만들어 보기..  (11) 2008.06.16
[예제] @GUI_DRAGFILE  (0) 2008.01.23
Posted by 빈마음