Advanced Recording

サンプルプロジェクトファイル

このスクリーンショットはKwik3のものですが,プロジェクトファイルはKwik4のものにアップデートされています

このチュートリアルではユーザーの声を録音するための方法について説明いたします.

  • 録音,再生,削除ボタンが表示されます.
  • ユーザーが録音ボタンを押すと,録音が始まる前に3秒のカウントダウンが始まります.
  • X秒後に録音が始まり,ユーザーに録音時間を知らせるためにもう一度X秒のカウントダウンが始まります.

概要

  • action_hide_allは全てのボタン,スタートカウンター,録音時間カウンターを隠します.
  • isRecordedData変数は録音ボタンもしくはPlay/Deleteボタンを表示するためのフラグです.
  • 録音ボタンはstartingCountカウントダウンを開始させます.カウントダウンが終わると,act_hide_startingを起動します.act_hide_startingは録音時間をスタートさせて"myrecord.lua"という外部ファイルを呼び出します.カウントダウンが終わると,act_hide_recordingが動き出します.
  • act_hide_recordingは録音を終了させて,Play/Deleteボタンを表示します.
  • 再生ボタンは外部コードである"myplay.lua"を呼び出します.
  • 削除ボタンはYES/NOボタンを呼び出します.
  • YESボタンは"mydelete.lua"を呼び出します.NOボタンは何も動作せず,YES/NOレイヤーを隠します.

act_hide_starting

ユーザーが録音ボタンを押すと3秒のカウントダウンがスタートします.カウントダウンが終了すると,act_hide_startingが動き出します.

  • 終了したときに、startingCntが隠されます
  • RecordingSec countdownレイヤーが表示されます
  • RecordingSec countdownを動かします 
  • 外部コードの"myrecord.lua"によって録音を開始します.
  • Message1の"now recording .."が表示されます.

act_hide_all

このactionを他のactionに設定し,'Show'を指定したレイヤーに表示するようにします.

act_hide_recording

RecordingSecのカウントダウンが終了したとき,録音を終了します.

  • 全てのレイヤーを隠します
  • RecordingSecカウントダウンを隠します
  • 再生ボタンを表示します
  • 削除ボタンを表示します
  • "now recording .."のメッセージを隠します
  • "mystop.lua"の拡張コードを作動させます

act_init

このactionはページがロードされたときにタイマーと一緒に呼び出されます(タイマーは0秒でセットされます).

  • 外部コードの"myinit.lua"はisRecordedDataをtrueもしくはfalseに設定します
  • 全てのレイヤーを隠します
  • isRecordedData == true の時以下の動作が行われます
  • show Play
  • show Delete
  • else
  • show Record
  • show message "3 sec.."
  • endif

but_record

再録音する前に3秒のカウントダウンが始まります

  • startingCnt countdown が再生されます
  • startingCnt layer を表示します
  • Stop button を表示します
  • Record button を隠します
  • "Wait 3 sec .." message を隠します

but_stop

録音を停止します

  • 外部コードの"mystop"は録音を停止させます
  • 全てのレイヤーを隠します
  • if isRecordedData == true の時以下の動作を行います
    • show Play button
    • show Delete button
  • else
    • Recode button
  • end
  • hide "Wait 3 sec .." message

but_play

外部コードの"myplay.lua"によって録音された音声が再生されます

but_delete

Yes/Noボタンを表示します

but_yes

録音された音声を削除します

  • 全てのレイヤーを隠します
  • 外部ファイルの"mydelete.lua"を使用します
  • 録音ボタンを表示します

but_no

"delete"をキャンセルします

YES/NOボタンを隠し,Play/Deleteボタンを再表示します

Add Variable

isRecordedDataは外部ファイル内で使われます

startingCnt countdown

  • 録音が始まるまでの3秒間をカウントダウンします
  • act_hide_startingが始まります

RecordingSec countdown

録音中にカウントダウンをします

act_hide_recordingを発生させます 秒単位で録音時間を設定してください.サンプルでは5秒です.外部コードでもこの時間を設定することができます. 以下の外部コードをご覧ください.

Timer Init

このタイマーはページが始まるときに0秒として一度呼び出されます.

myinit.lua

これはisRecordedDataが存在するかしないかをチェックします.

print("myinit")
local filePath = system.pathForFile("page_"..UI.curPage..".pcm", system.DocumentsDirectory )
local file = io.open(filePath, "r")
if file then
  UI.isRecordedData = true
end

myrecord.lua

1行目で録音時間を設定できます.

local RecordingSecSeconds = 5

print("myrecord")
_K = require("Application")
local RecordingTime = 5000
UI.allAudios.playback = nil
local filePath = system.pathForFile("page_"..UI.curPage..".pcm", system.DocumentsDirectory )
UI.recodring = media.newRecording(filePath)
UI.recodring:startRecording( )
local audioClosure = function(event )
     UI.recodring:stopRecording()
     -- sceneGroup.alpha = 1
     local file = io.open(filePath, "r")
     if file then
        UI.isRecordedData = true
     end
end
_K.timerStash.recTimer = timer.performWithDelay(RecordingTime, audioClosure )
layer.RecordingSecSeconds = RecordingSecSeconds
UI.upTime_RecordingSec()
if (_K.timerStash.RecordingSec) then
    timer.cancel(_K.timerStash.RecordingSec)
    _K.timerStash.RecordingSec = nil
end
_K.timerStash.RecordingSec = timer.performWithDelay(1000, UI.upTime_RecordingSec, RecordingSecSeconds+1 )

myplay.lua

print("myplay")
local filePath = system.pathForFile("page_"..UI.curPage..".pcm", system.DocumentsDirectory )
local file = io.open(filePath, "r")
if file then
    io.close(file)
    UI.allAudios.playback = audio.loadStream( "page_"..UI.curPage..".pcm", system.DocumentsDirectory )
    audio.play(UI.allAudios.playback, {channel=31})
    print("recoded length:"..audio.getDuration(UI.allAudios.playback))
end

mystop.lua

print("mystop")
_K = require("Application")
if _K.timerStash.RecordingSec then
  timer.cancel(_K.timerStash.RecordingSec)
end

if UI.recodring then
  UI.recodring:stopRecording()
end

if _K.timerStash.recTimer then
  timer.cancel(_K.timerStash.recTimer)
end

layer.startingCntSeconds = -2
_K.timerStash.RecordingSec = nil
sceneGroup.alpha = 1

local filePath = system.pathForFile("page_"..UI.curPage..".pcm", system.DocumentsDirectory )
local file = io.open(filePath, "r")
if file then
  UI.isRecordedData = true
end

mydelete.lua

print("mydelete")
local filePath = system.pathForFile("page_"..UI.curPage..".pcm", system.DocumentsDirectory )
local destDir = system.DocumentsDirectory  -- Location where the file is stored
local result, reason = os.remove( filePath )
if result then
   print( "File removed" )
else
   print( "File does not exist", reason )  --> File does not exist    apple.txt: No such file or directory
end

UI.isRecordedData = false

もし他のページでも録音をコントロールしたい場合には以下のリンクをお読みください page controls/menu overlay

results matching ""

    No results matching ""