2016-03-24 6 views
2

Nachdem ich how to make a Shiny server play a wav file herausgefunden habe, habe ich einen glänzenden Server erstellt, der dynamisch WAV-Dateien basierend auf reaktivem Input erstellt. Die erste wav-Datei wird jedoch zwischengespeichert, und trotz Änderungen an der Datei oder sogar beim Umbenennen der Datei wird nur die erste wav abgespielt, bis eine vollständige Seite aktualisiert wird.HTML (oder R Shiny) Audio Caching

Wie könnte ich eine geänderte WAV-Datei wiedergeben, nachdem sie durch eine HTML-basierte Shiny-App geändert wurde?

Ich verstehe, dass diese Frage in ein paar Plätzen für HTML-Entwickler (und gelöst) wurde gebeten, mit javascript oder Jquery/php oder einem server-side solution, aber ich habe nicht herausgefunden, wie mit glänzendem eines dieser Arbeit zu machen.

+1

Warum dies in die Warteschleife stellen? Das Aktualisieren eines HTML-basierten Audio-Tags ist allgemein, aber das Generieren des Codes in einer R Shiny-App ist ziemlich spezifisch und wird nirgendwo sonst veröffentlicht oder ausgearbeitet. In der Tat ist das Abspielen von Audio an erster Stelle mit R glänzend nur spärlich dokumentiert. Ich habe kein funktionierendes Beispiel, weil das Thema so spezifisch ist. – Zediiiii

+0

Können Sie mir sagen, wie Sie es geschafft haben, WAV-Dateien auf einem glänzenden Server zu speichern? Ich versuche etwas Ähnliches zu machen und habe den gleichen Ansatz wie hier [http://stackoverflow.com/questions/33594007/writting-wav-file-in-shiny-app-with-seewave-and- Tuner). Aber irgendwie läuft das nicht. – zielinskipp

+0

@Piotr Zieliński http://stackoverflow.com/questions/36205419/r-shiny-audio-playback bringt Sie nicht dorthin, dann PM mir und ich werde Ihnen etwas von meinem Code senden. – Zediiiii

Antwort

1

Gelöst von BSU prof. Champion. An der Spitze des Skripts haben wir einige Namen Funktionen für die Führung der wav Namen eindeutig, Handhabung und dann eine Funktion, die die entsprechende Audio-Tag bekommt:

get_audio_tag<-function(filename){tags$audio(src = filename, 
            type ="audio/wav", controls = NA)} 
    wave_name<-function(n,p1,f1,p2,f2,p3,f3,l){ 
    paste0(paste("sound","num",n, "w1",p1,f1,"w2", p2,f2,"w3",p3,f3,"lev", 
    gsub("\\.","_",l), sep="_"), ".wav") 
    } 

Der Trick besteht darin, dass die variablen wavname Updates dynamisch in einem der Ausgabefunktionen, so dass jedes Mal, wenn ein reaktiver Eingang berührt wird, die wav-Datei ihre Namen ändert. Dann läuft die get_audio_tag Funktion auch innerhalb der Ausgabefunktion, so dass die Aktualisierung stattfindet. Der Code der Ausgabefunktion wie folgt aussieht:

wname<-wave_name( input$radio, 
        input$frequency1,input$form1, 
        input$frequency2,input$form2, 
        input$frequency3,input$form3, 
        input$level) 

output$audiotag<-renderUI(get_audio_tag("tempwav.wav")) #starting wave file  
output$audiotag<-renderUI(get_audio_tag(wavname)) 

Der Start tempwav notwendig ist, weil die Audio-Tags im HTML geladen werden, bevor die reaktiven Elemente ihrer ersten Ausgabe senden.