안녕하세요, Scripting Guy! - 스크립트 내에서 소리를 재생하려면 어떻게 해야 하나요?


새로운 TechNet 칼럼에 오신 것을 환영합니다. 이 칼럼에서는 Microsoft Scripting Guy가 시스템 관리 스크립팅과 관련하여 자주 물어보는 질문에 대한 답변을 드립니다. 시스템 관리 스크립팅에 대해 궁금한 내용이 있으십니까? 그렇다면scripter@microsoft.com으로 전자 메일을 보내십시오. 모든 질문을 다룰 수는 없지만 최선을 다해 답변을 드리겠습니다.

오늘의 질문: 스크립트 내에서 소리를 재생하려면 어떻게 해야 하나요?


스크립트 내에서 소리를 재생하려면 어떻게 해야 하나요?

Q 안녕하세요, Scripting Guy! 사용자에게 문제를 알려주는 경고 메시지 상자를 표시하는 스크립트가 있습니다. 이 메시지 상자가 표시될 때 소리가 나도록 할 수 있을까요?

-- TL
A
안녕하세요, TL님. 명확하게 대답하기 어려운 질문이네요. 그와 관련한 다른 경우는 있습니다. 즉, VBScript 및 WSH 설명서에서 음의 높낮이 관련 정보를 검색할 수는 있지만 스크립트 내에서 소리를 직접 재생할 수 있는 방법은 없습니다. 경고음 정도의 소리조차도 재생할 수 없습니다.

따라서 소리를 재생하려면 다른 유틸리티를 호출해야 합니다. 소리가 .WAV 형식인 경우에는 Windows 녹음기를 사용하는 것이 가장 좋습니다. 그 이유로는 적어도 다음 두 가지를 들 수 있습니다. 먼저 이 녹음기는 가벼워서 쉽게 로드할 수 있는 반면, 미디어 플레이어는 훨씬 강력하지만 무거워서 경고음을 재생하는 데 다소 부담이 될 수 있습니다. 또 다른 이유는 적절한 명령줄 매개 변수가 전달되어 녹음기가 표시되지 않고 실행된다는 점입니다. 따라서 소리를 들을 수 있지만 화면에 녹음기가 나타나지는 않습니다.

다음은 Windows\Media 폴더에 있는 표준 운영 체제 소리인 Notify.wav를 재생하는 스크립트입니다.
strSoundFile = "C:\Windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, true

이 스크립트의 처음 두 줄은 매우 간단합니다. 첫째 줄에서는 파일 경로를 변수 strSoundFile에 할당하고 둘째 줄에서는 녹음기를 실제로 실행하는 데 사용할 Wscript Shell 개체의 인스턴스를 만듭니다.

셋째 줄에서는 내용이 조금 복잡해집니다. 명령 프롬프트에서 녹음기를 실행하려면 다음 명령을 입력해야 합니다.

sndrec32 /play /close "C:\Windows\Media\Notify.wav"

처음 두 개의 명령줄 매개 변수는 이 파일을 재생한 다음 종료할 것을 녹음기에 알려 줍니다. 세 번째 매개 변수는 재생할 파일의 이름입니다. 이 예에서 파일 경로를 큰 따옴표로 묶지 않아도 됩니다. 경로 이름에 공백이 있을 경우에만 따옴표가 필요합니다. 여기서는 경로 이름에 공백이 있는 소리 파일을 재생할 때 사용할 수 있는 예를 제시하기 위해 큰 따옴표로 묶었습니다. 코드는 다음과 같습니다.

sndrec32 /play /close "C:\Windows\Media\Windows XP Error.wav"

파일 경로를 큰 따옴표로 묶으려면 문자열에 큰 따옴표를 삽입하는 Chr(34) 명령을 사용합니다. 그러므로 이 코드 줄에서는 sndrec32 /play /close, 여는 큰 따옴표 기호(“), 파일 C:\Windows\Media\Notify.wav 및 닫는 큰 따옴표 기호(”)로 문자열을 구성합니다.

strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)

마지막으로 네 번째 줄에서는 Run 메서드를 사용하여 방금 구성한 명령 문자열을 전달합니다. 0 매개 변수는 녹음기가 숨겨진 창에서 실행되도록 하며 true는 소리 재생이 끝날 때까지 기다렸다가 다시 시작하도록 스크립트에 알립니다.

메시지 상자를 표시할 때 소리를 재생하는 일은 거의 불가능하다고 볼 수 있습니다. 그 이유는 녹음기가 로드되어 재생하는 데 이미 1~2초가 걸리기 때문입니다. 이 경우 수행할 수 있는 최선의 방법 두 가지는 다음과 같습니다. 첫째, 녹음기를 호출할 때 False 매개 변수를 사용합니다. 이 매개 변수는 소리 재생이 끝날 때까지 기다리지 않고 녹음기를 시작한 후 계속 실행하도록 스크립트에 알립니다.

둘째, Wscript.Sleep 명령을 사용하여 1초 정도 스크립트를 중지합니다. 그러면 그 사이에 녹음기가 로드되고 메시지 상자가 표시될 때 소리 재생이 시작될 수도 있습니다. 그렇다면 메시지 상자가 나타날 때 동시에 소리 재생도 시작될까요? 그렇지는 않습니다. 그러나 비슷하게는 시작할 수 있습니다.

다음은 메시지 상자가 표시될 때 거의 동시에 소리를 재생하는 샘플 스크립트입니다.

strSoundFile = "C:\windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, False
Wscript.Sleep 1000
Msgbox "A problem has occurred."

자세한 정보

자세한 내용은 안녕하세요, Scripting Guy! - Archive  를 참조하십시오.

페이지 맨 위로 페이지 맨 위로

최종수정일 : 2005년 6월 22일