Skip to content

JohannesFriedrich/qoa4R

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
R
 
 
 
 
 
 
 
 
man
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

qoa

QOA is fast. It decodes audio 3x faster than Ogg-Vorbis, while offering better quality and compression (278 kbits/s for 44khz stereo) than ADPCM.

https://qoaformat.org/

This R-package is a wrapper to handle QOA files with R. The package is completely written in base R with no dependencies and pure C-code. To handle the raw audio data the R-package tuneRis highly recommended.

See this blogpost for an introduction https://phoboslab.org/log/2023/02/qoa-time-domain-audio-compression

Project Status: Active – The project has reached a stable, usable state and is being actively developed.

Installation

You can install the development version from GitHub with the following command:

if (!require("devtools")) install.packages("devtools")
devtools::install_github("JohannesFriedrich/qoa4R")

Usage

There are just two main functions: readQOA() and writeQOA().

  • readQOA(): Takes an qoa-format audio file and decodes it into it´s raw audio data. Return value is a list with decoded values represented as matrix, used channels, sample rate and samples.
  • writeQOA(): Takes an matrix with every channel in new column and the sample rate as input and and encodes it into an qoa audio file.

readQOA()

Let´s read in an QOA-file delivered with this package:

library(qoa)
qoa_file <- system.file("extdata", "58_guitar_sarasate_stereo.qoa", package = "qoa")
qoa_data <- readQOA(qoa_file)

qoa_data is a list with the following elements: * data: a matrix with all the samples. The dimension of the matrix is samples x channels * channels: Number of channels * samples: Number of samples per channel * samplerate: Sample rate of the file

It is possible to write these samples and information with the tuneR package back to an wave file:

tuneR::writeWave(
  WaveMC(
    data = qoa_data$data, 
    samp.rate = qoa_data$samplerate, 
    bit = 16), 
  "wave_from_qoa.wav", 
  extensible = FALSE)

writeQOA()

With this function it is possible to write an qoa-file. The input arguments are:

  • samples: a matrix with dimensions samples x channels
  • samplerate: samplerate of the audio file
  • target: Either name of the file to write, a binary connection or a raw vector indicating that the output should be a raw vector (the hex-interpretation of the qoa-file).

If no second argument is given, the returned value is the hex-interpretation of the image in the QOI-file format.

wav_original <- tuneR::readWave("wave_from_qoa.wav", toWaveMC = TRUE)
writeQOA(samples = wav_original@.Data, 
         samplerate = wav_original@samp.rate)

If an second argument is given as character the image is saved to this name:

writeQOA(samples = wav_original@.Data, 
         samplerate = wav_original@samp.rate, 
         target = "test.qoa")

If the second argument is of type connection the hex interpretation of the audio file will be send to this connection, e.g. via sockets or FTP.

file <- file("file.qoa", "wb")
writeQOA(samples = wav_original@.Data, 
         samplerate = wav_original@samp.rate, 
         target = "test.qoa")
close(file)

Acknowlegment

This package would not exist without the following persons/homepages/tutorial/…:

Releases

No releases published

Packages

No packages published