Appinventor – 음성변환 앱, 내 음성 적어줘

내가 말을 하면 문자로 척척 바꾸어 주는 애플을 만들고자 합니다.
앱인벤터에는 음성인식이라는 컴포넌트가 그런 기능을 합니다. 다만 음성인식 컴포넌트를 어떻게 구성하고 어떻게 구현하는냐에 따라 사용하기 편리한 애플이 될 수도 그렇지 않을 수도 있습니다.
음성인식 컴포넌트는 음성인식이 시작된 후 사용자가 말을 하지 않으면 음성인식을 종료합니다. 말을 하더라도 일정 시간이 지나면 종료합니다. 이러한 속성들은 우리가 수정 할 수는 없습니다. 주어진 음성인식 컴포넌트를 최대한 편리하게 구성하는 것이 우리의 목표입니다.
첫 버전에서는 변환된 텍스트메세지를 파일로 저장하거나, 클립보드에 복사하는 기능을 주겠습니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

영문모드에서 편집하겠습니다.
가장먼저 Screen1의 속성들 중, AppName에 ‘MyMessage’로 적고 Title에서 ‘내 음성 적어줘’라고 적습니다.
그리고 우리가 사용할 컴포넌트들을 그림과 같이 배치해 주세요.
User Interfase 에서 ListView를 배치하고 Rename버튼을 클릭해 이름을 ‘리스트목록’으로 바꿉니다.
Layout 에서 HorizontalArrangement를 배치하고, 가로정렬 속성을 중앙으로 하고, 폭을 부모폭으로 합니다.
Button 3개를 각각 추가버튼, 저장버튼, 복사버튼 이라는 이름으로 HorizontalArrangement 내부에 배치하고 각각 ‘메세지 추가’, ‘파일로 저장’, ‘복사’라고 택스팅합니다.
CheckBox를 ‘삭제체크’라는 이름으로 배치하고 ‘메세지 삭제’라고 텍스팅합니다.
Notifier는 ‘알림’이라는 이름으로 배치합니다.
Media 에서 SoundRecorder를 배치하고 ‘음성인식’으로 리네임합니다.
Sensors 에서 Clock를 ‘시계’라는 이름으로 배치합니다.
Storage 에서 File을 ‘파일’이라는 이름으로 배치합니다.
Extenson에서 TaifunClipboard를 ‘클립보드’라는 이름으로 배치합니다.

Extension에서 TaifunClipboard를 찾을 수 없을 수도 있습니다. 그런 경우에는 해당 Extension을 검색하여 다운로드 받은 수 추가하여야 합니다. TaifunClipboard는 https://puravidaapps.com/clipboard.php 에서 다운로드 받을 수 있습니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

messageBlock 라는 이름으로 리스트형 전역변수를 만듭니다. IndexNumber 라는 이름으로 전역변수를 만들고 0으로 초기화 합니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

‘메세지추가’라는 이름의 procedure를 만드는데 내부 블럭들을 그림과 같이 코딩합니다.
messageBlock은 글로 변환된 음성메세지를 담는 리스트입니다. 이곳에 item 하나를 추가합니다.
리스트목록은 messageBlock의 메세지들을 보여주는 비쥬얼 컴포넌트입니다.
IndexNumber는 리스트에서 수정할 메세지 위치를 가르키는 번호입니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

앱이 처음 실행되면 Screen1이 초기화되는데 그 때 실행할 코드블럭을 정의합니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

음성인식이 종료되면 문자로 변환된 음성인식결과가 result에 저장됩니다.
그 뒤에 마침표를 추가하여 다시 result에 저장합니다. 이것을 messageBlock 리스트에 담습니다. 이 때, 새로 추가하는 것이 아니라 교체하는 것입니다. IndexNumber는 리스트에서 교체할 메세지 위치 번호입니다.
리스트가 수정된 후에는 리스트목록의 Elements도 바꾸어줍니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

추가번튼을 클릭하면 전 단계에서 정의한 ‘메세지추가’프로시져를 호출하고, 음성인식을 실행합니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

음성인식이 잘못된 경우 이를 수정하거나 삭제하기 위해 리스트목록에서 해당 메세지를 클릭(터치)할 수 있습니다.그 때 발생하는 이벤트를 정의합니다.
삭제체크가 없는 경우에는 해당 메세지의 번호를 IndexNumber에 저장하고 음성인식을 호출합니다.
삭제체크가 있으면 해당 메세지를 목록에서 삭제하고 삭제체크를 해제합니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

messageBlock을 파일로 저장할 경우 저장버튼을 클릭하면 됩니다. 성공적으로 저장되었다면 이벤트가 뜨는데 그 사실을 사용자에게 알려주기 위해 알림박스를 만듭니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

messageBlock을 파일로 저장할 경우 저장버튼을 클릭하는데 그 때 실행할 블럭을 정의합니다.
저장할 파일이름을 생성하기 위해 시계함수를 호출합니다. 파일의 저장위치를 이 예제에서는 /AppInventor/data로 하였습니다.

[siteorigin_widget class="WP_Widget_Media_Image"][/siteorigin_widget]

복사버튼을 클릭하면 메세지를 클립보드에 저장할 수 있도록 합니다.

appinventor – clipboard extention

앱인벤터에 클립보드 관련 컴포넌트가 없다. 어이없게도...

이 부분에서 앱인벤터에 조금 실망스럽지만, 다행이 누군가 고맙게도 만든 clipboard extention을 쉽게 찾을 수 있었다.

https://puravidaapps.com/clipboard.php

덕분에 앱인벤터로 복사 및 붙여넣기 기능을 구현할 수가 있게 되었습니다. 감사합니다.