참고 : 지식인

 

파워포인트 기본 기능으로는 특정 슬라이드에 이르렀을 때 오디오가 페이드아웃되게 만들 수 없습니다.

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 파일과 같은 폴더에 존재해야 합니다.

첨부파일 압축해제하고 테스트해보세요.

오디오FadeOut효과.zip
9.50MB

 

참고: 오디오 실시간 재생 위치 출력

https://konahn.tistory.com/entry/AudioProgress