| Type: | Package |
| Title: | 'Shiny' Extension of 'howler.js' |
| Version: | 0.3.0 |
| Description: | Audio interactivity within 'shiny' applications using 'howler.js'. Enables the status of the audio player to be sent from the UI to the server, and events such as playing and pausing the audio can be triggered from the server. |
| License: | MIT + file LICENSE |
| URL: | https://github.com/ashbaldry/howler, https://github.com/goldfire/howler.js |
| BugReports: | https://github.com/ashbaldry/howler/issues |
| Encoding: | UTF-8 |
| Imports: | shiny, htmlwidgets |
| Suggests: | rmarkdown, knitr, chromote, shinytest2, globals, testthat (≥ 3.0.0) |
| Language: | en-GB |
| RoxygenNote: | 7.3.1 |
| VignetteBuilder: | knitr |
| NeedsCompilation: | no |
| Packaged: | 2024-06-04 18:49:26 UTC; arbal |
| Author: | Ashley Baldry [aut, cre], James Simpson [aut] (Creator of howler.js) |
| Maintainer: | Ashley Baldry <arbaldry91@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2024-06-04 19:00:02 UTC |
Create a Howler Audio Player
Description
howler is used to initialise the 'howler.js' framework by adding all of the specified tracks to the
player, and can be run by either including UI buttons or server-side actions.
Usage
howler(
tracks,
options = list(),
track_formats = NULL,
auto_continue = FALSE,
auto_loop = FALSE,
seek_ping_rate = 1000L,
elementId = NULL
)
Arguments
tracks |
A named vector of file paths to sounds. If multiple file extensions are included, then use a named list instead, with each list item containing each extension of the sound. |
options |
A named list of options to add to the player. For a full list of options see https://github.com/goldfire/howler.js?tab=readme-ov-file#options |
track_formats |
An optional list of formats of the sounds. By default 'howler' will guess the format to play in. Must be the same length as tracks |
auto_continue |
If there are multiple files, would you like to auto play the next file after the current
one has finished? Defaults to |
auto_loop |
Once all files have been played, would you like to restart playing the playlist?
Defaults to |
seek_ping_rate |
Number of milliseconds between each update of 'input${id}_seek' while playing. Default is set to 1000. If set to 0, then 'input${id}_seek' will not exist. |
elementId |
HTML id tag to be given to the howler player element |
Details
All buttons associated with the howler should be given the same id argument. This is to ensure
that the buttons are linked to the player.
i.e. If howler(id = "howler"), then howlerPlayButton(id = "howler")
Value
A shiny.tag containing all of the required options for a Howl JavaScript
object to be initialised in a shiny application.
On the server side there will be up to four additional objects available as inputs:
{id}_playingA logical value as to whether or not the
howleris playing audio{id}_trackBasename of the file currently loaded
{id}_seek(If
seek_ping_rate > 0) the current time (in seconds) of the track loaded{id}_durationThe duration (in seconds) of the track loaded
See Also
Examples
library(shiny)
ui <- fluidPage(
title = "howler.js Player",
howler(elementId = "howler", c(sound = "audio/sound.mp3")),
howlerPlayPauseButton("howler")
)
server <- function(input, output) {
}
shinyApp(ui, server)
# Multiple file formats
howler(
elementId = "howler",
list(
track_1 = c("audio/sound.webm", "audio/sound.mp3"),
track_2 = c("audio/sound2.webm", "audio/sound2.mp3"),
)
)
Shiny bindings for howler
Description
Output and render functions for using howler within Shiny applications and interactive Rmd documents.
Usage
howlerOutput(outputId)
renderHowler(expr, env = parent.frame(), quoted = FALSE)
Arguments
outputId |
output variable to read from |
expr |
An expression that generates a howler |
env |
The environment in which to evaluate |
quoted |
Is |
Value
An output or render function that enables the use of the widget within Shiny applications.
Examples
if (interactive()) {
library(shiny)
ui <- fluidPage(
title = "howler.js Player",
howlerOutput("howler"),
howlerPlayPauseButton("howler")
)
server <- function(input, output) {
output$howler <- renderHowler(howler(c(sound = "audio/sound.mp3")))
}
shinyApp(ui, server)
}
Audio Buttons
Description
Buttons that can be used to interact with the howler.
howlerPlayButton, howlerPauseButton, howlerPlayPauseButton and
howlerStopButton will all be applied to the current track.
howlerBackButton and howlerForwardButton will
change the track position by a specified amount of time.
howlerPreviousButton and howlerNextButton will
play the previous/following track supplied to the player.
howlerVolumeDownButton and howlerVolumeUpButton will
change the volume of the player by a specified percentage.
howlerButton is a customisable version of any of the above individual button.
Usage
howlerButton(howler_id, button_type = HOWLER_BUTTON_TYPES, ...)
howlerPlayButton(howler_id)
howlerPauseButton(howler_id)
howlerPlayPauseButton(howler_id)
howlerStopButton(howler_id)
howlerBackButton(howler_id, seek_change = 10L)
howlerForwardButton(howler_id, seek_change = 10L)
howlerPreviousButton(howler_id)
howlerNextButton(howler_id)
howlerVolumeUpButton(howler_id, volume_change = 0.1)
howlerVolumeDownButton(howler_id, volume_change = 0.1)
howlerVolumeToggleButton(howler_id)
Arguments
howler_id |
ID given to the |
button_type |
Type of button to create. Available buttons are in the details, default set to |
... |
Attributes/Inner tags added to the button |
seek_change |
Time (in seconds) to move forward/backward the track when clicked. Default is 10 seconds |
volume_change |
How much to change the volume by. Default is 10%. |
Details
The following button_type are available to create:
play_pause(default) Switch between playing and pausing the track
playResumes the current track
pausePauses the current track
stopStops current track, when played will start from beginning
previous,nextSwitches to the previous/following track
volumedown,volumeupDecreases/Increases the volume by 10% (If using
howlerButtoninclude the attribute`data-volume-change`)back,forwardSeek forward/backwards 10s (If using
howlerButtoninclude the attribute`data-seek-change`with negative values to go backwards)
When using a play_pause button, the icon will toggle between the play and pause button
depending on whether or not the track is playing.
Value
An HTML tag containing the audio button.
An additional input will be available in the server side in the form {id}_{button_type}. For example
howlerBackButton("howler") will create an input element of input$howler_back. All of these will work in
the same way as actionButton
Examples
if (interactive()) {
library(shiny)
ui <- fluidPage(
tile = "howler.js Player",
howler(elementId = "howler", "audio/sound.mp3"),
howlerPreviousButton("howler"),
howlerBackButton("howler"),
howlerPlayPauseButton("howler"),
howlerForwardButton("howler"),
howlerNextButton("howler"),
howlerVolumeDownButton("howler"),
howlerVolumeUpButton("howler")
)
server <- function(input, output) {
}
shinyApp(ui, server)
}
Current Track
Description
A way to display track information in the UI without having to communicate with the server.
Usage
howlerCurrentTrack(id, ...)
howlerSeekTime(id, ...)
howlerDurationTime(id, ...)
Arguments
id |
ID given to the current track label. For it to work with the |
... |
Other attributes to give to the HTML tag. |
Value
A div tag that will be linked to the howler to show the current track.
Examples
if (interactive()) {
library(shiny)
ui <- fluidPage(
title = "howler.js Player",
howler(elementId = "sound", "audio/sound.mp3"),
howlerCurrentTrack("sound"),
p(
howlerSeekTime("sound"),
"/",
howlerDurationTime("sound")
),
howlerPlayPauseButton("sound")
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
}
Howler.js Module
Description
A simple module containing a howler player and a default set of howler buttons. The module also contains the current position of the track being played and the duration of the track.
Usage
howlerModuleUI(id, files, ..., include_current_track = TRUE, width = "300px")
howlerBasicModuleUI(id, files, ..., width = "300px")
howlerModuleServer(id)
Arguments
id |
ID to give to the namespace of the module. The howler player will have the ID |
files |
Files that will be used in the player. This can either be a single vector, or a list where different formats of the same file are kept in each element of the list. |
... |
Further arguments to send to |
include_current_track |
Logical, should the current track be included in the UI of the module? |
width |
Width (in pixels) of the player. Defaults to 400px. |
Value
The UI will provide a player with a play/pause button, previous and next buttons, duration information and a volume slider.
The server-side module will return a list of reactive objects:
- playing
Logical value whether or not the player is currently playing
- track
Name of the track currently loaded
- duration
Duration (in seconds) of the track currently loaded
- seek
Current position (in seconds) of the track currently loaded
Examples
if (interactive()) {
ui <- fluidPage(
title = "howler.js Module",
howlerModuleUI("howl", c("audio/track1.mp3", "audio/track2.mp3"))
)
server <- function(input, output, session) {
howlerModuleServer("howl")
}
shinyApp(ui, server)
}
Seek Slider
Description
A UI element that can be included with a howler to manually change the location of the track.
Usage
howlerSeekSlider(id)
Arguments
id |
ID given to the volume slider. For it to work with the |
Value
A slider element of class howler-seek-slider that will display the position of the current track
playing.
Examples
if (interactive()) {
library(shiny)
ui <- fluidPage(
title = "howler.js Player",
howler(elementId = "sound", "audio/sound.mp3"),
howlerPlayPauseButton("sound"),
howlerSeekSlider("sound")
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
}
Update howler.js Server-Side
Description
Change the state of the howler player from the server.
playHowl, pauseHowl, togglePlayHowl and stopHowl
will all be applied to the current track.
changeTrack will update the track to the file specified.
addTrack will add a new track to the specified player.
Usage
changeTrack(id, track, session = getDefaultReactiveDomain())
addTrack(id, track, play_track = FALSE, session = getDefaultReactiveDomain())
deleteTrack(id, track, session = getDefaultReactiveDomain())
playHowl(id, session = getDefaultReactiveDomain())
pauseHowl(id, session = getDefaultReactiveDomain())
togglePlayHowl(id, session = getDefaultReactiveDomain())
stopHowl(id, session = getDefaultReactiveDomain())
seekHowl(id, seek, session = getDefaultReactiveDomain())
changeHowlSpeed(id, rate = 1, session = getDefaultReactiveDomain())
Arguments
id |
ID of the |
track |
Either the track name of the file to change to, or the index of the file to play. If the file is not included in the player nothing will happen. |
session |
Shiny session |
play_track |
Logical, should the new track be played on addition? |
seek |
Time (in seconds) to set the position of the track |
rate |
Rate (from 0.5 to 4.0) of the audio playback speed |
Details
For 'deleteTrack', make sure that the name is used of the track rather than the file name.
Value
Updates the the state of the specified howler in the shiny application.
Examples
if (interactive()) {
library(shiny)
tracks <- c("audio/track1.mp3", "audio/track2.mp3")
ui <- fluidPage(
title = "howler.js Player",
selectInput("track", "Select Track", basename(tracks)),
howler(elementId = "howler", tracks),
howlerPlayPauseButton("howler")
)
server <- function(input, output) {
observeEvent(input$track, changeHowlerTrack("howler", input$track))
}
runShiny(ui, server)
}
Volume Slider
Description
A more user friendly way to adjust the volume of the howler than by using buttons. There are
still volume up/down buttons, but a slider can be moved up/down as required.
Usage
howlerVolumeSlider(id, volume = 1, button = TRUE)
Arguments
id |
ID given to the volume slider. For it to work with the |
volume |
Initial volume to set the player at. Defaults at 100% |
button |
Logical, should a mute toggle button be included next to the slider? Default is |
Details
If using howlerVolumeSlider, avoid using the volume buttons, as this will cause duplicate IDs to appear in the
shiny application and prevents the slider from working properly.
Value
A volume slider with a howlerVolumeDownButton and a howlerVolumeUpButton either side.
Examples
if (interactive()) {
library(shiny)
ui <- fluidPage(
title = "howler.js Player",
howler(elementId = "sound", "audio/sound.mp3"),
howlerPlayPauseButton("sound"),
howlerVolumeSlider("sound")
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
}
Play Sound
Description
Using howler.js, play a sound within a shiny application.
Usage
playSound(track, options = NULL, session = getDefaultReactiveDomain())
Arguments
track |
Either a URL, file path or Base 64 character string of the sound to play |
options |
A named list of options to add to the sound. For a full list of options see https://github.com/goldfire/howler.js?tab=readme-ov-file#options |
session |
Shiny session |
Details
The 'src' and 'autoplay' options are pre-determined by 'playSound' and are not required in 'options'. If they are included, a warning will be printed and they will be ignored from the list.
Examples
library(shiny)
audio_files_dir <- system.file("examples/_audio", package = "howler")
addResourcePath("sample_audio", audio_files_dir)
ui <- fluidPage(
actionButton("play", "Play Sound")
)
server <- function(input, output) {
observeEvent(input$play, {
playSound("sample_audio/running_out.mp3")
})
}
shinyApp(ui, server)
Run {howler} Example Applications
Description
Run {howler} Example Applications
Usage
runHowlerExample(example = "basic", display.mode = "showcase", ...)
availableHowlerExamples()
Arguments
example |
Name of the example to load. Current examples include:
|
display.mode |
The mode in which to display the application. By default set to |
... |
Optional arguments to send to |
Value
This function does not return a value; interrupt R to stop the application (usually by pressing Ctrl+C or Esc).
Examples
availableHowlerExamples()
if (interactive()) {
library(shiny)
library(howler)
runHowlerExample("basic")
}