370 likes | 660 Views
억양합성을 통한 영어교육 Synthesizing Exaggerated F0 and duration. 경남대학교 영어학부 윤규철 나사렛 대학교 교양교직학부 초청강연 교양영어 추계학술행사 2007. 11. 16. 특강 내용. 영어의 운율 …3쪽 강세와 강조 …8쪽 과장을 통한 억양연습 …13쪽 과장된 억양의 합성 …16쪽 과장된 길이의 합성 …2 8 쪽 영어교육에의 응용 … 30 쪽 부록: 프랏 스크립트 … 33 쪽. 1. 영어의 운율. English Prosody. 1. 영어의 운율.
E N D
억양합성을 통한 영어교육Synthesizing Exaggerated F0 and duration 경남대학교 영어학부 윤규철 나사렛 대학교 교양교직학부 초청강연 교양영어 추계학술행사 2007. 11. 16.
특강 내용 • 영어의 운율…3쪽 • 강세와 강조 …8쪽 • 과장을 통한 억양연습 …13쪽 • 과장된 억양의 합성 …16쪽 • 과장된 길이의 합성…28쪽 • 영어교육에의 응용 …30쪽 부록: 프랏 스크립트 …33쪽
1. 영어의 운율 English Prosody
1. 영어의 운율 • 운율이란? • 음의 높낮이 + 음의 길이 + 음의 강도
1. 영어의 운율 • 말소리 • 분절음(자,모음) + 초분절음(운율)가나다라…+
1. 영어의 운율 • 운율 없는 말소리가 가능할까?음의 높낮이, 음의 길이, 음의 강도가 정해지지 않고 소리가 날 수 있을까?가로, 세로, 높이를 정하지 않고 건물을 만들어 내라는 것과 같은 소리…
1. 영어의 운율 • 음계의 ‘파’음을 악보에 그리지 않고 낼 수 있을까?‘도레미파솔라시도’는 머리 속에만 있는 추상적 소리일 뿐…
2. 강세와 강조 Stress & Prominence
2. 강세와 강조 • 강세(stress)는 운율을 조작하여 강조함으로써 만든다 • 음의 높낮이를 이용 • 음의 길이를 이용 • 음의 강도를 이용예) banana [bənǽnə] A: “What did you have for lunch?” B: “A banana.” A: “A banana?”
2. 강세와 강조 • 강조는 주변보다 두드러짐을 나타낸다 • 즉, 주변환경(주변음절들)에 따라 정해진다 • 말문장에 있어, 특정 음절을 강조하려면 주변의 음절들보다 두드러지도록 만든다 • 예) 주변의 음절들이 조용하면 강조음절을 시끄럽게 • 예) 주변의 음절들이 시끄러우면 강조음절을 조용하게
2. 강세와 강조 다음 중 강조된 낱말은? 강조 1 강조 2 강조 3
3. 과장을 통한 억양연습 Exaggerating Intonation
3. 과장을 통한 억양연습 • 종이를 90도 각도로 접으려면?(1) 89도로 접는다(2) 90도로 접는다(3) 90도 이상으로 접었다가 조금 펴서 90도로 만든다
3. 과장을 통한 억양연습 • 영어 억양을 잘 익히려면?조금 과장되게 연습한다
4. 과장된 억양의 합성 Synthesizing Exaggerated Intonation
4. 과장된 억양의 합성 • MOMEL algorithm(Hirst & Espesser, 1991)을 이용한 극대점/극소점 위치 파악 • Praat implementation by Cyril Auranhttp://stl.recherche.univ-lille3.fr/sitespersonnels/auran/english/index.html • 혹은 PSOLA algorithm(Moulines & Charpentier, 1990)을 이용하여, 극대점/극소점을 수작업이나 혹은 프랏스크립트를 이용하여 ‘과장’하여 합성한다 • MOMEL algorithm을 이용하지 않고 프랏 Manipulation object의 “Stylize pitch (2 st)” 명령을 이용할 수도 있다
5. 과장된 길이의 합성 Synthesizing lengthened duration
5. 과장된 길이의 합성 PSOLA algorithm(Moulines & Charpentier, 1990)을 이용, 극대점을 프랏스크립트를 이용하여 늘린다
6. 영어교육에의 응용 Implications for English Teaching
6. 영어교육에의 응용 • 주어진 영어문장을 자동으로 과장하여 학생들이 따라 말하고 들을 수 있도록 한다 • 억양합성 시스템을 구축하여 영어말하기 교육에 이용한다 • 과장하여 연습한 학생들과 그렇지 않은 학생들을 비교하여 그 차이를 살펴본다 • 원어민을 이용한 평가의 경우 억양 이외의 운율 요소를 동일하게 조작하여 억양만을 판별할 수도 있다
A Praat script for manual exaggeration of intonation using stylization ################################################################# # exaggerateIntonation.praat (Written by Kyuchul Yoon, kyoon@kyungnam.ac.kr) # Given a sound file, this script turns it into a Manipulation object, # stylizes it, and asks the user to manually 'exaggerate' the pitch contour to the # user's needs. When all done, it resynthesizes the sound and saves it as a # sound file in the input folder. #--------------------------------------------------------------------------- # When exaggerating the pitch contour, the user has only to place the cursor # to a particular position by just clicking once and press CONTINUE button. # The user repeats this process until the desired pitch contour is created. # When the process is finished, the user DOES NOT move the cursor (letting # the script know that it's time to get out of the 'exaggerating' loop) and # press the CONTINUE button. ################################################################# form Parameters word inputFile_(wav) testnn.wav word inputFolder_(subfolder) nonnative word outputFileSuffix_(to_be_appended_to_inputFile) -manip natural numPoints_(per_parabola_for_resynthesis) 8 comment Clean objects? choice CleanObject: 2 button Yes button No endform # Create the output file name inputFilePrefix$ = inputFile$ - ".wav" outputFile$ = inputFilePrefix$ + outputFileSuffix$ outputFile$ = outputFile$ + ".wav" # Read the input file and make it a Manipulation object Read from file... 'inputFolder$'/'inputFile$' Rename... inFileObj To Manipulation... 0.01 75 600 Rename... inFileManipObj # 'Exaggerating' loop select Manipulation inFileManipObj Edit editor Manipulation inFileManipObj Stylize pitch (2 st) currentCursor = 0 lastCursor = Get cursor # Repeat this process until the user does not move the cursor while currentCursor <> lastCursor lastCursor = currentCursor pause Place cursor at Max/Min. ... When all done, click CONTINUE without moving cursor. currentCursor = Get cursor # Remove the nearest existing pitch point and insert # a new 'exaggerated' pitch point to where the user # place the cursor Remove pitch point(s) Add pitch point at cursor endwhile # Make the pitch contour smooth Interpolate quadratically... numPoints Publish resynthesis endeditor Rename... outFileObj Write to WAV file... 'inputFolder$'/'outputFile$' pause Check the input file folder for the resynthesized output file! # Clean objects only when the user said "Yes" if cleanObject$ = "Yes" select Manipulation inFileManipObj plus Sound inFileObj plus Sound outFileObj Remove endif
A Praat editor script for manual exaggeration of intonation of MOMEL Manipulation object #################################################################### # exaggerateIntonation-editorScript.praat (Kyuchul Yoon, kyoon@kyungnam.ac.kr) # Run this script as an editor script from within the editor window of the # Manipulation object that is created during the execution of the # Momel_intsint-mono.praat script. # The user is expected to exaggerate the pitch contour point by point in the # Manipulation object window #################################################################### Stylize pitch (2 st) currentCursor = 0 lastCursor = Get cursor # Repeat this process until the user does not move the cursor while currentCursor <> lastCursor lastCursor = currentCursor pause Place cursor at Max/Min. ... When all done, click CONTINUE without moving cursor. currentCursor = Get cursor # Remove the nearest existing pitch point and insert # a new 'exaggerated' pitch point to where the user # place the cursor Remove pitch point(s) Add pitch point at cursor endwhile # Make the pitch contour smooth Interpolate quadratically... 8 Publish resynthesis endeditor Rename... exaggerated pause Be sure to save 'exaggerate' Sound object into a WAV file! ########## END OF EDITOR SCRIPT ##############
A Praat script for automatic exaggeration of intonation using stylization for i to numPitchPoints # For all the pitch points except for the last one. This is necessary because the 'exaggerating' # is done for two neighboring pitch points. The last one has no such neighbor. if i <> numPitchPoints # Special treatment for the first pitch point if flagModified = 0 iPrevHz = Get value at index... i # If it's not the first pitch point, the next pitch point from the earlier loop becomes # the previous pitch point in the current loop else iPrevHz = iNextHz endif # Get the Hz value and the time values of the two points iNextHz = Get value at index... (i+1) iPrevTime = Get time from index... i iNextTime = Get time from index... (i+1) # Decide which is bigger biggerHz = imax(iPrevHz, iNextHz) # If the first of the two pitch points is bigger,then boost/lower it by freqValue if biggerHz = 1 flagModified = 1 Remove point... i Add point... iPrevTime (iPrevHz+freqValue) Remove point... (i+1) Add point... iNextTime (iNextHz-freqValue) elsif biggerHz = 2 flagModified = 1 Remove point... i Add point... iPrevTime (iPrevHz-freqValue) Remove point... (i+1) Add point... iNextTime (iNextHz+freqValue) # If same, do nothing else # Do nothing flagModified = 0 endif endif endfor # Switch the exaggerated pitch tier object plus Manipulation inFileManipObj Replace pitch tier select Manipulation inFileManipObj Copy... manipExaggerated select Manipulation inFileManipObj Edit editor Manipulation inFileManipObj Interpolate quadratically... numPoints Publish resynthesis Close endeditor Rename... outFileObj Write to WAV file... 'inputFolder$'/'outputFile$' ################################################################################ # exaggerateIntonationAutomatically.praat (2007. 11.04 by Kyuchul Yoon, kyoon@kyungnam.ac.kr) # Given a sound file, this script stylizes the original pitch contour, and exaggerates it automatically. # Exaggeration algorithm: # 1. Compare two neighboring pitch points in Hz. # 2. The point with lower Hz gets boosted, while the lower one gets lowered. If same, nothing happens. # 3. Move to the next two points, the first of which is the second from the previous step. # (i.e. advances by one pitch point) Use values before boosting/lowering from the previous step. # 4. Repeat step 1. ################################################################################# form Parameters word inputFile_(wav) testnn.wav word inputFolder_(subfolder) nonnative word outputFileSuffix_(to_be_appended_to_inputFile) -exaggerated natural stylizeSemitones 3 natural freqValue_(Hz_difference_for_boosting) 30 natural numPoints_(per_parabola_for_resynthesis) 8 endform # Create the output file name inputFilePrefix$ = inputFile$ - ".wav" outputFile$ = inputFilePrefix$ + outputFileSuffix$ outputFile$ = outputFile$ + ".wav" # Read the input file and make it a Manipulation object Read from file... 'inputFolder$'/'inputFile$' Rename... inFileObj To Manipulation... 0.01 75 600 Rename... manipOriginal Copy... inFileManipObj # Stylize the original sound file, leaving a copy of the stylized manipulation # object for later comparison Edit editor Manipulation inFileManipObj Stylize pitch... stylizeSemitones Semitones Close endeditor Copy... manipOriginalStylized # 'Exaggerating' loop. The exaggeration is performed on the pitch tier object select Manipulation inFileManipObj Extract pitch tier Rename... inFilePitchTierObj numPitchPoints = Get number of points # A flag to signal whether a pitch point was modified or not flagModified = 0
A Praat script for automatic exaggeration of F0 & duration using stylization ========================================================================= comment Duration exaggeration by lengthening peaks choice ExaggerateDuration: 1 button Yes button No real durValue_(times_orig_duration_for_lengthening) 1.5 comment ========================================================================= comment For resynthesis (Default value would suffice) natural numFreqPoints_(per_parabola_for_resynthesis) 8 endform To Manipulation... 0.01 75 600 Rename... inFileManipObj Copy... original Edit select Manipulation inFileManipObj Edit editor Manipulation inFileManipObj Stylize pitch... stylizeSemitones Semitones Close endeditor Copy... original_stylized select Manipulation inFileManipObj Extract pitch tier Rename... inFilePitchTierObj numPitchPoints = Get number of points # Check user's choice if (exaggerateFrequency$ = "Yes" and exaggerateDuration$ = "Yes") call procExaggerateFreq freqValue call procExaggerateDur durValue select Manipulation inFileManipObj Rename... exaggerated_F0_Dur Edit elsif (exaggerateFrequency$ = "Yes" and exaggerateDuration$ = "No") call procExaggerateFreq freqValue select Manipulation inFileManipObj Rename... exaggerated_F0 Edit elsif (exaggerateFrequency$ = "No" and exaggerateDuration$ = "Yes") call procExaggerateDur durValue select Manipulation inFileManipObj Rename... exaggerated_Dur Edit endif ############### END OF MAIN FUNCTION ############### ############################################################################ # exaggerateF0-duration-button.praat (2007. 11.08) # (Written by Kyuchul Yoon, kyoon@kyungnam.ac.kr) # Given a sound file, this script stylizes the original pitch contour, # and exaggerates its F0 contour and peak durations automatically. # NOTE) Users can check graphically how the original sound gets exaggerated # by following the pop-up Manipulation Editor window. # NOTE) Users can also select which parameter(s) to exaggerate: # (1) F0 contour only # (2) Duration only (for the F0 peaks) # (3) Both ############################################################################ # F0 exaggeration algorithm: # 1. Compare two neighboring pitch points in Hz. # 2. The point with higher Hz gets boosted, while the lower one gets lowered. # If same, nothing happens. # 3. Move to the next two points, the first of which is the second from the # previous step. (i.e. advances by one pitch point) # Use values before boosting/lowering from the previous step. # 4. Repeat step 1. ############################################################################# # Duration exaggeration algorithm: # 1. Lengthen stylized pitch tier object peaks durValue times. # 2. Neighboring valleys maintain the original duration. ############################################################################# # Installation procedure: # (1) Start Praat : Praat > Open Praat script... # (2) Open this script "exaggerateF0-duration-button.praat # (3) In the script editor window : File > Add to dynamic menu... # (4) Replace "Do it..." with something like "Exaggerate!" # (5) Click [OK] # (6) Close Script Editor window # (7) You can now launch the script from within Praat using the "Exaggerate!" # button when a sound object is selected. ############################################################################ form Parameters comment F0 exaggeration by boosting peaks and lowering valleys choice ExaggerateFrequency: 1 button Yes button No natural stylizeSemitones 2 natural freqValue_(Hz_diff_for_boosting_and_lowering) 30 comment
procedure procExaggerateFreq fValue select PitchTier inFilePitchTierObj flagModified = 0 for i to numPitchPoints # For all the pitch points except for the last one # This is necessary because the 'exaggerating' is done for two # neighboring pitch points. The last one has no such neighbor. if i <> numPitchPoints # Special treatment for the first pitch point if flagModified = 0 iPrevHz = Get value at index... i else iPrevHz = iNextHz endif # Get the Hz value and the time values of the two points iNextHz = Get value at index... (i+1) iPrevTime = Get time from index... i iNextTime = Get time from index... (i+1) # Decide which is bigger biggerHz = imax(iPrevHz, iNextHz) # If the first of the two pitch points is bigger, # then boost it by freqValue and lower the second by as much if biggerHz = 1 flagModified = 1 Remove point... i Add point... iPrevTime (iPrevHz+fValue) Remove point... (i+1) Add point... iNextTime (iNextHz-fValue) # If the second is bigger, then do similar jobs elsif biggerHz = 2 flagModified = 1 Remove point... i Add point... iPrevTime (iPrevHz-fValue) Remove point... (i+1) Add point... iNextTime (iNextHz+fValue) else # Do nothing flagModified = 0 endif endif endfor # Switch the exaggerated pitch tier object plus Manipulation inFileManipObj Replace pitch tier select Manipulation inFileManipObj Edit editor Manipulation inFileManipObj Interpolate quadratically... numFreqPoints Publish resynthesis Close endeditor Rename... exaggerated endproc procedure procExaggerateDur dValue select PitchTier inFilePitchTierObj # Identify the pitch peaks # Initialize the index of the peak array variable k = 0 # Except for the first and last pitch point, check if it's a peak for j from 2 to (numPitchPoints-1) leftPointFreq = Get value at index... (j-1) rightPointFreq = Get value at index... (j+1) currentPointFreq = Get value at index... j indexOfMax = imax(leftPointFreq, currentPointFreq, rightPointFreq) # If the current point is at the peak, remember the time coordinate # in an array variable timeOfPeaks. Remember its neighboring valleys if indexOfMax = 2 k = k + 1 timeOfPeaks'k' = Get time from index... j timeOfLeftValley'k' = Get time from index... (j-1) timeOfRightValley'k' = Get time from index... (j+1) endif endfor select Manipulation inFileManipObj Extract duration tier Rename... inFileDurTierObj # Add duration points at the peak locations for m to k peakTime = timeOfPeaks'm' leftPeakTime = timeOfLeftValley'm' rightPeakTime = timeOfRightValley'm' Add point... peakTime dValue Add point... leftPeakTime 1 Add point... rightPeakTime 1 endfor # Switch the exaggerated duration tier object plus Manipulation inFileManipObj Replace duration tier select Manipulation inFileManipObj Edit editor Manipulation inFileManipObj Interpolate quadratically... numFreqPoints Publish resynthesis Close endeditor Rename... exaggerated endproc ######## END OF SCRIPT ##########