참고 : 지식인
파워포인트 기본 기능으로는 특정 슬라이드에 이르렀을 때 오디오가 페이드아웃되게 만들 수 없습니다.
VBA를 이용하면 가능하게 만들 수는 있습니다.
MCISendString 이라는 명령을 이용해서 mp3등의 파일을 재생을 하다가
특정 슬라이드에서 볼륨을 3초간 계속 점점 줄이는 명령을 보낸다면 fade out 효과를 낼 수 있습니다.
더보기
Option Explicit
#If VBA7 Then
Public Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Public Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Public Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As Any, _
ByVal uReturnLength As Long, ByVal hwndCallback As LongPtr) As Long
Public TimerID As LongPtr
#Else
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As Any, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Public TimerID As Long
#End If
'재생 파일명(같은 폴더에 존재해야 함)
Const FileName As String = "bensound.mp3"
'오디오 재생시작 슬라이드
Const StartSlide As Long = 2
'오디오 재생정지 슬라이드
Const EndSlide As Long = 6
'페이드 아웃 지속시간
Const FadeDuration As Long = 30 '3 sec * 10 interval
Const DefaultVolume As Integer = 150 '최초 볼륨
'타이머 카운트
Dim TimerCount As Long
Dim Playing As Boolean
'타이머에서 주기적으로 호출되는 함수(절대 에러 발생하면 안됨)
Private Sub myTimer()
On Error Resume Next
Dim vol As Single
TimerCount = TimerCount + 1
vol = DefaultVolume * (FadeDuration - TimerCount) / FadeDuration
'Debug.Print vol
mciSendString "setaudio SoundFile volume to " & CStr(vol), vbNullString, 0, 0&
If TimerCount >= FadeDuration Then StopAudio
End Sub
Sub PlayAudio()
mciSendString "close all", vbNullString, 0, 0&
'enclose the FileName with Chr(34)s for a long filename with blank characters
mciSendString "Open " & Chr(34) & FileName & Chr(34) & " alias SoundFile", vbNullString, 0, 0&
mciSendString "Play SoundFile", vbNullString, 0, 0&
mciSendString "setaudio SoundFile volume to " & DefaultVolume, vbNullString, 0, 0&
Playing = True
End Sub
Sub FadeOutAudio()
If Playing Then startTimer
End Sub
Sub StopAudio()
mciSendString "Stop SoundFile", vbNullString, 0, 0&
stopTimer
Playing = False
End Sub
Private Sub startTimer()
If TimerID = 0& Then
TimerID = SetTimer(0&, 0&, 100&, AddressOf myTimer) ' 1000 = 1초, 500 = 0.5초
End If
End Sub
Private Sub stopTimer()
On Error Resume Next
KillTimer 0&, TimerID
TimerID = 0&
TimerCount = 0
End Sub
Sub onSlideShowTerminate(SSW As SlideShowWindow)
stopTimer
mciSendString "close all", vbNullString, 0, 0&
Playing = False
End Sub
'페이지가 변할 때마다 호출
Sub onSlideShowPageChange(SSW As SlideShowWindow)
If SSW.View.Slide.SlideIndex = StartSlide Then
PlayAudio
ElseIf SSW.View.Slide.SlideIndex = EndSlide Then
FadeOutAudio
Else
'
End If
End Sub
위의 경우 2슬라이드에서 재생을 시작하고
6슬라이드로 이동하면 3초동안 fadeout 하다가 재생을 멈추게 됩니다.
기본 볼륨150이었다가 3초 동안 점점 볼륨을 줄이는 명령을 보냅니다.
실행영상:
주의: bensound.mp3파일이 pptm 파일과 같은 폴더에 존재해야 합니다.
첨부파일 압축해제하고 테스트해보세요.
참고: 오디오 실시간 재생 위치 출력
https://konahn.tistory.com/entry/AudioProgress
'PPT+VBA' 카테고리의 다른 글
TTS활용 영어 단어 풀이 슬라이드 자동 생성 (0) | 2022.12.19 |
---|---|
엑셀데이터 연동 PPT 슬라이드 만들기 예제와 구글 TTS 발음 다운로드 (0) | 2022.12.02 |
지도 도형 내부를 사각형으로 자동채우기 (0) | 2022.11.21 |
PPT 시작할 때 매크로 파일들 자동으로 열기 (0) | 2022.11.16 |
랜덤 사진 슬라이드쇼 (1) | 2022.11.03 |
PPT 합치기 (1) | 2022.10.31 |
VBA로 메모 일괄 처리하기 (2) | 2022.09.28 |
발표자 보기에서 여러 개의 슬라이드 미리 보기 (2) | 2022.09.12 |
최근댓글