transcribeServer: Make the Transcription Interface Interactive

View source: R/transcribeServer.R

transcribeServerR Documentation

Make the Transcription Interface Interactive

Description

Make the Transcription Interface Interactive

Usage

transcribeServer(
  id = "transcribe",
  trigger = NULL,
  audioFile,
  outFile,
  allowPause = FALSE,
  n_play = NULL,
  result = c("clear", "hide"),
  instructions =
    "Play the audio file. Then, enter what you heard in the box below.\n                                             Click the submit button when you are finished.",
  n_lines = 1,
  width = "100%",
  submitLab = "SUBMIT"
)

Arguments

id

The module id. Must be the same as transcribeUI.

trigger

If not NULL (the default), a reactive expression returning the event that should trigger the appearance of the interface.

audioFile

The file path to a file relative to the applications www directory. (The file must be in the www directory, but the path should not include the "www/" prefix).

outFile

If not NULL (the default), a file path with the extension .rds, which will store the name of the audio file, the transcription entered, and the number of times the participant played the audio.

allowPause

Boolean. Should the participant be given a button to pause the audio during the transcription? Defaults to FALSE.

n_play

Integer. How many times can a participant play the audio file before clicking "submit"? Defaults to 1.

result

One of "hide" or "clear". Should the interface be hidden or simply cleared (restored to its original state) when a participant clicks submit?

instructions

Character. Instructions that will appear above the text entry area. Defaults to generic instructions for transcription.

n_lines

Integer. The number of lines the text input area should occupy. Defaults to 1. Could be set higher for longer transcriptions, so the entire text entered remains visible to the participant.

width

Character. Defaults to "100%", defines how much of the horizontal space the transcription interface will occupy.

submitLab

The label on the submit button. Defaults to "SUBMIT".

Value

Returns a set of reactive values including the name of the audio file, the text the participant entered, and the number of times they clicked play.

Examples

data("samp_wav")
tuneR::writeWave(samp_wav, "sample.wav")
wwwPrep(from = "sample.wav")

if (interactive()) {
  library(shiny)
  library(speechcollectr)
  library(shinyjs)

  ui <- fluidPage(
    actionButton("begin", "Begin"),
    transcribeUI(id = "transcribe"),
    h5("Click 'Begin' each time you want to transcribe.
        The recording will not change from trial to trial."),
    h5("To demonstrate the transcription evaluation procedure,
        we'll use a different 'correct transcritiption' for each trial."),
    h5("The correct answers for the first 4 trials are:
        'a', 'ab', 'abc', 'abcd' (in that order).")
  )

  server <- function(input, output, session) {
    rvs <- reactiveValues(n = 1, attempt = 1)
    answers <- c("a", "ab", "abc", "abcd")

    observeEvent(input$begin, {
      disable("begin")
      rvs$out <- transcribeServer(id="transcribe",
                                  audioFile = "sample.wav",
                                  n_play = 4,
                                  outFile = paste0("sample", rvs$n, ".rds"),
                                  result = "hide")
    })

    observeEvent(input[["transcribe-submit"]], {
      delay(500,
            correct <- evalTranscServer(filename = paste0("sample", rvs$n, ".rds"),
                                        correct = answers[rvs$n],
                                        attempts = 2,
                                        counter = rvs$attempt,
                                        passInputId = "pass",
                                        warnInputId = "warn",
                                        failInputId = "fail"))
    })
  }

  observeEvent(input$pass, {
    rvs$n <- rvs$n + 1
    rvs$attempt <- 1
    enable("begin")
  })

  observeEvent(input$warn, {
    rvs$attempt <- rvs$attempt + 1
    enable("begin")
  })

  shinyApp(ui = ui, server = server)
}

abbey-thomas/speechcollectr documentation built on Nov. 19, 2024, 7:09 p.m.