Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

382
Visualizações
Extraiga la duración de los archivos de audio alojados en R (sin descargar el archivo)

Tengo una lista de archivos de audio alojados para los que me gustaría obtener la duración, sin tener que descargar los archivos.

Puedo hacer esto creando un elemento html DOM <audio> y extrayendo la duración con el duration de duración. Esto funciona muy bien en la siguiente aplicación brillante: al hacer clic en el botón "Hacer clic en mí", la duración se devuelve en una alerta.

 shinyApp( ui = fluidPage( useShinyjs(), actionButton("btn", "Click me"), tags$audio(id = "myaudio", src = "https://download.samplelib.com/mp3/sample-3s.mp3", type = "audio/mp3", autoplay = NA, controls = NA) ), server = function(input, output) { observeEvent(input$btn, { runjs("alert(myaudio.duration);") }) } )

Este es el punto en el que estoy atascado: ¿Cómo puedo aprovechar este método para extraer la duración de múltiples (> 1'000) mp3?

  1. ¿Cómo puedo reemplazar el src= e iterar una lista de mp3?
  2. ¿Cómo puedo escribir la duración para poder procesar esto en R ?
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esta respuesta solo funciona para un archivo de audio.

Para obtener la duración del audio e imprimirlo, necesitamos usar js , un entorno en shinyjs de la siguiente manera:

Defina get_duration como nuestro JS y especifique qué sucede cuando la entrada cambia a través Shiny.onInputChange . Aquí también he usado reactiveValues para almacenar duraciones en el cambio.

 library(shinyjs) library(shiny) get_duration <- 'shinyjs.aud_duration = function(params) { var duration = myaudio.duration; Shiny.onInputChange("aud_duration", duration); }' ui <- fluidPage( useShinyjs(), extendShinyjs(text = get_duration, functions = "aud_duration"), actionButton("btn", "Click me"), tags$audio(id = "myaudio", src = "https://download.samplelib.com/mp3/sample-3s.mp3", type = "audio/mp3", autoplay = NA, controls = NA), verbatimTextOutput("aud_duration") ) server <- function(input, output) { js$aud_duration() durations <- reactiveValues(duration = NA) observeEvent(input$btn, durations$duration <- input$aud_duration ) output$aud_duration <- renderText(durations$duration) } shinyApp(ui, server)
about 4 years ago · Juan Pablo Isaza Relatório

0

Gracias a la respuesta de @NelsonGon, que resolvió parte del problema, pude desarrollar una solución a mi problema que escala y, por lo tanto, funciona en múltiples URL. Resuelve los siguientes problemas:

  1. no espera a que un usuario haga clic en un botón, sino que intenta obtener la duración cada segundo hasta que lo logra (ya que los metadatos tardan un tiempo en descargarse)
  2. la aplicación brillante está envuelta en una función, de modo que se puede ingresar la URL de la fuente
  3. en caso de éxito, se devuelve el valor de duración
 get_duration <- function(src){ library(shinyjs) library(shiny) get_duration <- 'shinyjs.aud_duration = function(params) { var duration = myaudio.duration; Shiny.onInputChange("aud_duration", duration); }' ui <- fluidPage( useShinyjs(), extendShinyjs(text = get_duration, functions = "aud_duration"), tags$audio(id = "myaudio", src = src), ) server <- function(input, output) { js$aud_duration() durations <- reactiveValues(duration = NA) observe({ invalidateLater(1000) if(!is.null(isolate(input$aud_duration))){ stopApp(input$aud_duration) } }) } shiny::runGadget(ui, server) }

se puede ejecutar de la siguiente manera:

 get_duration("https://download.samplelib.com/mp3/sample-3s.mp3") [1] 3.239184
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda