Class: Decoder
Overview
Audio file decoder. Provides raw PCM audio and metadata from various compressed formats.
The Superpowered decoder is independent from the standard decodeAudioData Web Audio API, which means it has identical codec support across web browsers. The Decoder can be used in Workers and Worklets too which allow for multiple threaded decoding, preventing blocking in the main thread.
Alternatively, if you'd like to fetch audio and decode in one step then please see:
Supported file formats
- Stereo or mono pcm WAV and AIFF (16-bit int, 24-bit int, 32-bit int or 32-bit IEEE float).
- MP3: MPEG-1 Layer III (sample rates: 32000 Hz, 44100 Hz, 48000 Hz). MPEG-2 Layer III is not supported (mp3 with sample rates below 32000 Hz).
- AAC or HE-AAC in M4A container (iTunes) or ADTS container (.aac).
iOS, macOS and tvOS: ALAC/Apple Lossless support.
How to implement
// Decodes an entire audio file in memory to AudioInMemory format in a single call. The output can be loaded by the AdvancedAudioPlayer.let pointerToAudioInMemory = Superpowered.Decoder.decodeToAudioInMemory(pointer, // Pointer to an audio file loaded onto the WebAssembly Linear Memory.1000000 // The audio file length in bytes.);// Constructor. Has no additional parameters.let decoder = new Superpowered.Decoder();// Opens a memory location in Superpowered AudioInMemory format for decoding.let openErrorCode = decoder.openMemory(pointer, // Pointer to information in Superpowered AudioInMemory format on the WebAssembly Linear Memory.false // If true, it opens the file for fast metadata reading only, not for decoding audio.);// Opens a memory location for decoding.let openErrorCode = decoder.openAudioFileInMemory(pointer, // Pointer to an audio file loaded onto the WebAssembly Linear Memory.1000000, // The audio file length in bytes.false // If true, it opens the file for fast metadata reading only, not for decoding audio.);// Error codes for the openMemory() method:Superpowered.Decoder.OpenSuccess;Superpowered.Decoder.OpenError_OutOfMemory; // Some memory allocation failed. Recommended action: check for memory leaks.Superpowered.Decoder.OpenError_PathIsNull; // Path is NULL.Superpowered.Decoder.OpenError_ID3VersionNotSupported; // ID3 version 2.2, 2.3 and 2.4 are supported only.Superpowered.Decoder.OpenError_ID3ReadError; // File read error while reading the ID3 tag.Superpowered.Decoder.OpenError_FileFormatNotRecognized; // The decoder is not able to decode this file format.Superpowered.Decoder.OpenError_FileTooShort; // The file has just a few bytes of data.Superpowered.Decoder.OpenError_ImplementationError0; // Should never happen. But if it does, please let us know.Superpowered.Decoder.OpenError_ImplementationError1; // Should never happen. But if it does, please let us know.Superpowered.Decoder.OpenError_ImplementationError2; // Should never happen. But if it does, please let us know.// Returns with a human readable error string.let pointer = Superpowered.Decoder.statusCodeToString(openErrorCode // The error code.)// Returns with how many frames are in one chunk of the source file. For example: MP3 files store 1152 audio frames in a chunk.let fc = decoder.getFramesPerChunk();// Decodes audio.let decodeErrorCode = decoder.decodeAudio(pointer, // Pointer to 16-bit signed integer numbers. The output. Must be at least numberOfFrames * 4 + 16384 bytes big.fc // The requested number of frames. Should NOT be less than the value returned by getFramesPerChunk().);// Error codes for the decodeAudio(), getAudioStartFrame() and getAudioEndFrame() methods:Superpowered.Decoder.EndOfFile; // End-of-file reached.Superpowered.Decoder.BufferingTryAgainLater; // Buffering (waiting for the network to pump enough data).Superpowered.Decoder.Error; // Decoding error.// Returns with the duration of the current file in frames.// Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.let df = decoder.getDurationFrames();// Returns with the duration of the current file in seconds.// Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.let ds = decoder.getDurationSeconds();// Returns with the current position in frames. The postion may change after each decode() or seekTo().let pos = decoder.getPositionFrames();// Returns with the sample rate of the current file.let sr = decoder.getSamplerate();// Returns with the format of the current file.let f = decoder.getFormat();// File/decoder formant constants:Superpowered.Decoder.Format_MP3; // MP3Superpowered.Decoder.Format_AAC; // AAC, HE-AACSuperpowered.Decoder.Format_AIFF; // AIFFSuperpowered.Decoder.Format_WAV; // WAV// Jumps to the specified position's chunk (frame) beginning.// Some codecs (such as MP3) contain audio in chunks (frames). This method will not jump precisely to the specified position, but to the chunk's beginning the position belongs to.// Returns with success (true) or failure (false).let success = decoder.setPositionQuick(10052 // The requested position in frames.);// Jumps to a specific position. This method is a little bit slower than setPositionQuick().// Returns with success (true) or failure (false).let success = decoder.setPositionPrecise(10052 // The requested position in frames.);// Detects silence at the beginning. This function changes the position!// The return value can be:// - A positive number or zero: the frame index where audio starts.// - Superpowered.Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry getAudioStartFrame() or getAudioEndFrame() later (it's recommended to wait at least 0.1 seconds).// - Superpowered.Decoder.NetworkError: network (download) error.// - Superpowered.Decoder.Error: internal decoder error.let start = decoder.getAudioStartFrame(0, // Limit frames. How far to search for. 0 means "the entire audio file".0 // Loudness threshold in decibel. 0 means "any non-zero audio". The value -49 is useful for vinyl rips having vinyl noise (crackles).);// Detects silence at the end. This function changes the position!// The return value can be:// - A positive number or zero: the frame index where audio ends.// - Superpowered.Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry getAudioEndFrame() later (it's recommended to wait at least 0.1 seconds).// - Superpowered.Decoder.NetworkError: network (download) error.// - Superpowered.Decoder.Error: internal decoder error.let end = decoder.getAudioEndFrame(0, // Limit frames. How far to search for from the end (the duration in frames). 0 means "the entire audio file".0 // Loudness threshold in decibel. 0 means "any non-zero audio". The value -49 is useful for vinyl rips having vinyl noise (crackles).);
#include "SuperpoweredDecoder.h"// Decodes an entire audio file in memory to AudioInMemory format in a single call. The output can be loaded by the AdvancedAudioPlayer.void *pointerToAudioInMemory = Superpowered::Decoder::decodeToAudioInMemory(pointer, // Pointer to an audio file loaded into the memory.1000000 // The audio file length in bytes.);// Constructor. Has no additional parameters.Superpowered::Decoder *decoder = new Superpowered::Decoder();// Opens a memory location in Superpowered AudioInMemory format for decoding.int openErrorCode = decoder->openMemory(pointer, // Pointer to information in Superpowered AudioInMemory formatfalse // If true, it opens the file for fast metadata reading only, not for decoding audio.);// Opens a memory location for decoding.int openErrorCode2 = decoder->openAudioFileInMemory(pointer, // Pointer to an audio file loaded into memory1000000, // The audio file length in bytes.false // If true, it opens the file for fast metadata reading only, not for decoding audio.);// Returns with a human readable error string.const char *errorString = Superpowered::Decoder::statusCodeToString(openErrorCode // The error code.);// Returns with how many frames are in one chunk of the source file. For example: MP3 files store 1152 audio frames in a chunk.int fc = decoder->getFramesPerChunk();// Decodes audio.int decodeErrorCode = decoder->decodeAudio(pointer2, // Pointer to 16-bit signed integer numbers. The output. Must be at least numberOfFrames * 4 + 16384 bytes big.fc // The requested number of frames. Should NOT be less than the value returned by getFramesPerChunk().);// Returns with the duration of the current file in frames.// Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.int df = decoder->getDurationFrames();// Returns with the duration of the current file in seconds.// Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.double ds = decoder->getDurationSeconds();// Returns with the current position in frames. The postion may change after each decode() or seekTo().int pos = decoder->getPositionFrames();// Returns with the sample rate of the current file.unsigned int sr = decoder->getSamplerate();// Returns with the format of the current file.Superpowered::Decoder::Format f = decoder->getFormat();// Jumps to the specified position's chunk (frame) beginning.// Some codecs (such as MP3) contain audio in chunks (frames). This method will not jump precisely to the specified position, but to the chunk's beginning the position belongs to.// Returns with success (true) or failure (false).bool success = decoder->setPositionQuick(10052 // The requested position in frames.);// Jumps to a specific position. This method is a little bit slower than setPositionQuick().// Returns with success (true) or failure (false).bool success2 = decoder->setPositionPrecise(10052 // The requested position in frames.);// Detects silence at the beginning. This function changes the position!// The return value can be:// - A positive number or zero: the frame index where audio starts.// - Superpowered.Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry getAudioStartFrame() or getAudioEndFrame() later (it's recommended to wait at least 0.1 seconds).// - Superpowered.Decoder.NetworkError: network (download) error.// - Superpowered.Decoder.Error: internal decoder error.int start = decoder->getAudioStartFrame(0, // Limit frames. How far to search for. 0 means "the entire audio file".0 // Loudness threshold in decibel. 0 means "any non-zero audio". The value -49 is useful for vinyl rips having vinyl noise (crackles).);// Detects silence at the end. This function changes the position!// The return value can be:// - A positive number or zero: the frame index where audio ends.// - Superpowered.Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry getAudioEndFrame() later (it's recommended to wait at least 0.1 seconds).// - Superpowered.Decoder.NetworkError: network (download) error.// - Superpowered.Decoder.Error: internal decoder error.int end = decoder->getAudioEndFrame(0, // Limit frames. How far to search for from the end (the duration in frames). 0 means "the entire audio file".0 // Loudness threshold in decibel. 0 means "any non-zero audio". The value -49 is useful for vinyl rips having vinyl noise (crackles).);
Accessing metadata
// Parses all ID3 frames. Do not use startReadingID3/readNextID3Frame after this.decoder.parseAllID3Frames(true, // Parsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU.16384, // The maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images).);// Starts reading ID3 frames. Use readNextID3Frame() in an iteration after this.decoder.startParsingID3Frames(true, // Parsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU.16384, // The maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images).);// Reads the next ID3 frame and returns with its data size or -1 if finished reading.let frameSizeBytes = decoder.readNextID3Frame();// Returns with the current ID3 frame name (four char). To be used with readNextID3Frame().let frameName = decoder.getID3FrameName();// Returns with the raw data of the current ID3 frame. To be used with readNextID3Frame().let pointerToFrame = decoder.getID3FrameData();// Returns with the current ID3 frame data length.let frameDataLengthBytes = decoder.getID3FrameDataLengthBytes();// Returns with the text inside the current ID3 frame. To be used with readNextID3Frame(). Use it for frames containing text only!// Returns a pointer to the text in UTF-8 encoding (you take ownership on the data, don't forget to free() when done to prevent memory leaks), or NULL if empty.let pointer = decoder.getID3FrameAsString(0 // Offset. Parse from this byte index.);// Returns with the contents "best" artist tag (TP1-4, TPE1-4, QT atoms). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let pointer = decoder.getArtist(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the contents "best" title tag (TT1-3, TIT1-3, QT atoms). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let pointer = decoder.getTitle(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the contents of the TALB tag (or QT atom). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let pointer = decoder.getAlbum(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the track index (track field or TRCK).// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let ti = decoder.getTrackIndex();// Returns with the contents "best" image tag (PIC, APIC, QT atom). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let pointer = decoder.getImage(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the the size of the image returned by getImage(). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let imageSizeBytes = decoder.getImageSizeBytes();// Returns with the bpm value of the "best" bpm tag (TBP, TBPM, QT atom). May return 0.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().let bpm = decoder.getBPM();
// Parses all ID3 frames. Do not use startReadingID3/readNextID3Frame after this.decoder->parseAllID3Frames(true, // Parsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU.16384 // The maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images).);// Starts reading ID3 frames. Use readNextID3Frame() in an iteration after this.decoder->startParsingID3Frames(true, // Parsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU.16384 // The maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images).);// Reads the next ID3 frame and returns with its data size or -1 if finished reading.unsigned int frameSizeBytes = decoder->readNextID3Frame();// Returns with the current ID3 frame name (four char). To be used with readNextID3Frame().unsigned int frameName = decoder->getID3FrameName();// Returns with the raw data of the current ID3 frame. To be used with readNextID3Frame().void *pointerToFrame = decoder->getID3FrameData();// Returns with the current ID3 frame data length.unsigned int frameDataLengthBytes = decoder->getID3FrameDataLengthBytes();// Returns with the text inside the current ID3 frame. To be used with readNextID3Frame(). Use it for frames containing text only!// Returns a pointer to the text in UTF-8 encoding (you take ownership on the data, don't forget to free() when done to prevent memory leaks), or NULL if empty.char *frame = decoder->getID3FrameAsString(0 // Offset. Parse from this byte index.);// Returns with the contents "best" artist tag (TP1-4, TPE1-4, QT atoms). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().char *artist = decoder->getArtist(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the contents "best" title tag (TT1-3, TIT1-3, QT atoms). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().char *title = decoder->getTitle(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the contents of the TALB tag (or QT atom). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().char *album = decoder->getAlbum(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the track index (track field or TRCK).// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().unsigned int ti = decoder->getTrackIndex();// Returns with the contents "best" image tag (PIC, APIC, QT atom). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().void *image = decoder->getImage(false // Take ownership. For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks).);// Returns with the the size of the image returned by getImage(). May return NULL.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().unsigned int imageSizeBytes = decoder->getImageSizeBytes();// Returns with the bpm value of the "best" bpm tag (TBP, TBPM, QT atom). May return 0.// Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().float bpm = decoder->getBPM();
Clearing up memory
// Destructor (to free up memory).decoder.destruct();
delete decoder;
Constants
Superpowered.Decoder
CONSTANTSConstants in the main Decoder namespace.Value Description Format_MP3 MP3 Format_AAC AAC, HE-AAC. Format_AIFF AIFF Format_WAV WAV Format_MediaServer Other format decoded by iOS, macOS or tvOS. Format_HLS HTTP Live Streaming. EndOfFile End-of-file reached. BufferingTryAgainLater Buffering (waiting for the network to pump enough data). NetworkError Network (download) error. Error Decoding error. OpenSuccess Opened successfully. OpenError_OutOfMemory Some memory allocation failed. Recommended action: check for memory leaks. OpenError_PathIsNull Path is NULL. OpenError_FastMetadataNotLocal metaOnly was true, but it works on local files only. OpenError_ID3VersionNotSupported ID3 version 2.2, 2.3 and 2.4 are supported only. OpenError_ID3ReadError File read error while reading the ID3 tag. OpenError_FileFormatNotRecognized The decoder is not able to decode this file format. OpenError_FileOpenError Such as fopen() failed. Recommended action: check if the path and read permissions are correct. OpenError_FileLengthError Such as fseek() failed. Recommended action: check if read permissions are correct. OpenError_FileTooShort The file has just a few bytes of data. OpenError_AppleAssetFailed The Apple system codec could not create an AVURLAsset on the resource. Wrong file format? OpenError_AppleMissingTracks The Apple system codec did not found any audio tracks. Wrong file format? OpenError_AppleDecoding The Apple system codec could not get the audio frames. Wrong file format? OpenError_ImplementationError0 Should never happen. But if it does, please let us know. OpenError_ImplementationError1 Should never happen. But if it does, please let us know. OpenError_ImplementationError2 Should never happen. But if it does, please let us know. OpenError_UseSetTempFolder Call AdvancedAudioPlayer.setTempFolder first. Superpowered::Decoder
CONSTANTSConstants in the main Decoder namespace.Value Description Format_MP3 MP3 Format_AAC AAC, HE-AAC. Format_AIFF AIFF Format_WAV WAV Format_MediaServer Other format decoded by iOS, macOS or tvOS. Format_HLS HTTP Live Streaming. EndOfFile End-of-file reached. BufferingTryAgainLater Buffering (waiting for the network to pump enough data). NetworkError Network (download) error. Error Decoding error. OpenSuccess Opened successfully. OpenError_OutOfMemory Some memory allocation failed. Recommended action: check for memory leaks. OpenError_PathIsNull Path is NULL. OpenError_FastMetadataNotLocal metaOnly was true, but it works on local files only. OpenError_ID3VersionNotSupported ID3 version 2.2, 2.3 and 2.4 are supported only. OpenError_ID3ReadError File read error while reading the ID3 tag. OpenError_FileFormatNotRecognized The decoder is not able to decode this file format. OpenError_FileOpenError Such as fopen() failed. Recommended action: check if the path and read permissions are correct. OpenError_FileLengthError Such as fseek() failed. Recommended action: check if read permissions are correct. OpenError_FileTooShort The file has just a few bytes of data. OpenError_AppleAssetFailed The Apple system codec could not create an AVURLAsset on the resource. Wrong file format? OpenError_AppleMissingTracks The Apple system codec did not found any audio tracks. Wrong file format? OpenError_AppleDecoding The Apple system codec could not get the audio frames. Wrong file format? OpenError_ImplementationError0 Should never happen. But if it does, please let us know. OpenError_ImplementationError1 Should never happen. But if it does, please let us know. OpenError_ImplementationError2 Should never happen. But if it does, please let us know. OpenError_UseSetTempFolder Call AdvancedAudioPlayer::setTempFolder first.
Static Methods
decodeToAudioInMemory
METHODDecodes an entire audio file in memory to AudioInMemory format in a single call. The output can be loaded by the AdvancedAudioPlayer.ParametersReturnsName Type Description pointer Number (pointer in Linear Memory)Pointer to an audio file loaded onto the WebAssembly Linear Memory. The Decoder will free() this data. sizeBytes NumberThe audio file length in bytes. Type Description Number (pointer in Linear Memory)Linear Memory pointer or 0 on error. decodeToAudioInMemory
METHODDecodes an entire audio file in memory to AudioInMemory format in a single call. The output can be loaded by the AdvancedAudioPlayer.ParametersReturnsName Type Default Description pointer void *Pointer to an audio file loaded onto the heap. Should be allocated using malloc() (and not _aligned_malloc() or similar). The Decoder will free() this data. sizeBytes unsigned intThe audio file length in bytes. Type Description void *Pointer or NULL on error. statusCodeToString
METHODReturns with a human readable error string.ParametersReturnsName Type Description code NumberThe return value of the open...() method. Type Description Number (pointer in Linear Memory)You can use Superpowered.toString(this_pointer) to create a JavaScript string from it. statusCodeToString
METHODReturns with a human readable error string.ParametersReturnsName Type Default Description code intThe return value of the open...() method. Type Description const char *A human readable error string.
Properties
HLSAutomaticAlternativeSwitching
PROPERTYIf true, then the decoder will automatically switch between the HLS alternatives according to the available network bandwidth.
| Type | Min | Max | Default | bool | true |
|---|
HLSBufferingSeconds
PROPERTYHow many seconds ahead of the playback position to download.
| Type | Min | Max | Default | int | HLS_DOWNLOAD_REMAINING |
|---|
HLSMaximumDownloadAttempts
PROPERTYHow many times to retry if a HLS segment download fails.
| Type | Min | Max | Default | int | 100 |
|---|
Methods
constructor
METHODCreates an instance of the Decoder class.ParametersNoneReturnsType Description Superpowered.DecoderThe constructed instance. constructor
METHODCreates an instance of the Decoder class.ParametersNoneReturnsType Description Superpowered::DecoderThe constructed instance. decodeAudio
METHODDecodes audio.ParametersReturnsName Type Description output Number (pointer in Linear Memory)Allocated memory to store the output. Must be at least numberOfFrames * 4 + 16384 bytes big. numberOfFrames NumberThe requested number of frames. Should NOT be less than the value returned by getFramesPerChunk(). Type Description Number- A positive number above zero: the number of frames decoded.
- Decoder.EndOfFile: end of file reached, there is nothing more to decode. Use setPosition.
- Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry decodeAudio() later (it's recommended to wait at least 0.1 seconds).
- Decoder.NetworkError: network (download) error.
- Decoder.Error: internal decoder error.
decodeAudio
METHODDecodes audio.ParametersReturnsName Type Default Description output short int *Allocated memory to store the output. Must be at least numberOfFrames * 4 + 16384 bytes big. numberOfFrames unsigned intThe requested number of frames. Should NOT be less than the value returned by getFramesPerChunk(). Type Description int- A positive number above zero: the number of frames decoded.
- Decoder.EndOfFile: end of file reached, there is nothing more to decode. Use setPosition.
- Decoder.BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry decodeAudio() later (it's recommended to wait at least 0.1 seconds).
- Decoder.NetworkError: network (download) error.
- Decoder.Error: internal decoder error.
destruct
METHODDestructor to free Linear Memory.ParametersNoneReturnsNonegetAlbum
METHODReturns with the contents of the TALB tag (or QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Description takeOwnership BooleanFor advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description Number (pointer in Linear Memory)The string or 0 if not found. getAlbum
METHODReturns with the contents of the TALB tag (or QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Default Description takeOwnership boolfalse For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description char *The string or NULL if not found. getArtist
METHODReturns with the contents "best" artist tag (TP1-4, TPE1-4, QT atoms). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Description takeOwnership BooleanFor advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description Number (pointer in Linear Memory)The string or 0 if not found. getArtist
METHODReturns with the contents "best" artist tag (TP1-4, TPE1-4, QT atoms). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Default Description takeOwnership boolfalse For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description char *The string or NULL if not found. getAudioEndFrame
METHODDetects silence at the end. WARNING! This function changes the position!ParametersReturnsName Type Description limitFrames NumberOptional. How far to search for from the end (the duration in frames). 0 means 'the entire audio file'. thresholdDb NumberOptional. Loudness threshold in decibel. 0 means 'any non-zero audio'. The value -49 is useful for vinyl rips having vinyl noise (crackles). Type Description Number- A positive number or zero: the frame index where audio ends.
- Decoder::BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry
getAudioEndFrame()later (it's recommended to wait at least 0.1 seconds). - Decoder::NetworkError: network (download) error.
- Decoder::Error: internal decoder error.
getAudioEndFrame
METHODDetects silence at the end. WARNING! This function changes the position!ParametersReturnsName Type Default Description limitFrames unsigned int0 Optional. How far to search for from the end (the duration in frames). 0 means 'the entire audio file'. thresholdDb int0 Optional. Loudness threshold in decibel. 0 means 'any non-zero audio'. The value -49 is useful for vinyl rips having vinyl noise (crackles). Type Description int- A positive number or zero: the frame index where audio ends.
- Decoder::BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry
getAudioEndFrame()later (it's recommended to wait at least 0.1 seconds). - Decoder::NetworkError: network (download) error.
- Decoder::Error: internal decoder error.
getAudioStartFrame
METHODDetects silence at the beginning. WARNING! This function changes the position!ParametersReturnsName Type Description limitFrames NumberOptional. How far to search for from the end (the duration in frames). 0 means 'the entire audio file'. thresholdDb NumberOptional. Loudness threshold in decibel. 0 means 'any non-zero audio'. The value -49 is useful for vinyl rips having vinyl noise (crackles). Type Description Number- A positive number or zero: the frame index where audio ends.
- Decoder::BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry
getAudioStartFrame()later (it's recommended to wait at least 0.1 seconds). - Decoder::NetworkError: network (download) error.
- Decoder::Error: internal decoder error.
getAudioStartFrame
METHODDetects silence at the beginning. WARNING! This function changes the position!ParametersReturnsName Type Default Description limitFrames unsigned intOptional. How far to search for from the end (the duration in frames). 0 means 'the entire audio file'. thresholdDb intOptional. Loudness threshold in decibel. 0 means 'any non-zero audio'. The value -49 is useful for vinyl rips having vinyl noise (crackles). Type Description int- A positive number or zero: the frame index where audio ends.
- Decoder::BufferingTryAgainLater: the decoder needs more data to be downloaded. Retry
getAudioStartFrame()later (it's recommended to wait at least 0.1 seconds). - Decoder::NetworkError: network (download) error.
- Decoder::Error: internal decoder error.
getBPM
METHODReturns with the bpm value of the "best" bpm tag (TBP, TBPM, QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description NumberBPM or 0. getBPM
METHODReturns with the bpm value of the "best" bpm tag (TBP, TBPM, QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description floatBPM or 0. getBufferedEndPercent
METHODIndicates which part of the file has fast access. For local files it will always be 1.0f.ParametersNoneReturnsType Description floatPercentage between 0 and 1. getBufferedStartPercent
METHODIndicates which part of the file has fast access. For local files it will always be 0.0f.ParametersNoneReturnsType Description floatPercentage between 0 and 1. getCurrentBps
METHODReturns with the current download speed.ParametersNoneReturnsType Description unsigned intCurrent download speed in bytes per second. getDurationFrames
METHODReturns with the duration of the current file in frames. Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.ParametersNoneReturnsType Description NumberDuration of the current file in frames. getDurationFrames
METHODReturns with the duration of the current file in frames. Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.ParametersNoneReturnsType Description intDuration of the current file in frames. getDurationSeconds
METHODReturns with the duration of the current file in seconds. Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.ParametersNoneReturnsType Description NumberDuration of the current file in seconds. getDurationSeconds
METHODReturns with the duration of the current file in seconds. Duration may change after each decode() or seekTo(), because some audio formats doesn't contain precise length information.ParametersNoneReturnsType Description doubleDuration of the current file in seconds. getFormat
METHODReturns with the format of the current file.ParametersNoneReturnsType Description Superpowered.Decoder.FormatFormat of the current file. getFormat
METHODReturns with the format of the current file.ParametersNoneReturnsType Description Superpowered::Decoder::FormatFormat of the current file. getFramesPerChunk
METHODReturns with how many frames are in one chunk of the source file. For example: MP3 files store 1152 audio frames in a chunk.ParametersNoneReturnsType Description NumberNumber of frames in one chunk. getFramesPerChunk
METHODReturns with how many frames are in one chunk of the source file. For example: MP3 files store 1152 audio frames in a chunk.ParametersNoneReturnsType Description unsigned intNumber of frames in one chunk. getFullyDownloadedPath
METHODThe file system path of the fully downloaded audio file for progressive downloads.ParametersNoneReturnsType Description const char *Path of the fully downloaded audio file or NULL until the download finishes. getID3FrameAsString
METHODReturns with the text inside the current ID3 frame. To be used with readNextID3Frame(). Use it for frames containing text only!ParametersReturnsName Type Description offset NumberParse from this byte index. Type Description Number (pointer in Linear Memory)The text in UTF-8 encoding (you take ownership on the data, don't forget to free() when done to prevent memory leaks), or 0 if empty. You can use Superpowered.toString(this_pointer) to create a JavaScript string from it. getID3FrameAsString
METHODReturns with the text inside the current ID3 frame. To be used with readNextID3Frame(). Use it for frames containing text only!ParametersReturnsName Type Default Description offset int0 Parse from this byte index. Type Description char *A pointer to the text in UTF-8 encoding (you take ownership on the data, don't forget to free() when done to prevent memory leaks), or NULL if empty. getID3FrameData
METHODReturns with the raw data of the current ID3 frame. To be used with readNextID3Frame().ParametersNoneReturnsType Description Number (pointer in Linear Memory)The data. getID3FrameData
METHODReturns with the raw data of the current ID3 frame. To be used with readNextID3Frame().ParametersNoneReturnsType Description void *The data. getID3FrameDataLengthBytes
METHODReturns with the current ID3 frame data length.ParametersNoneReturnsType Description NumberLength of the current ID3 frame in bytes. getID3FrameDataLengthBytes
METHODReturns with the current ID3 frame data length.ParametersNoneReturnsType Description unsigned intLength of the current ID3 frame in bytes. getID3FrameName
METHODReturns with the current ID3 frame name. To be used with readNextID3Frame().ParametersNoneReturnsType Description NumberName of the current ID3 frame as a "four char". getID3FrameName
METHODReturns with the current ID3 frame name. To be used with readNextID3Frame().ParametersNoneReturnsType Description unsigned intName of the current ID3 frame as a "four char". getImage
METHODReturns with the contents 'best' image tag (PIC, APIC, QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Description takeOwnership BooleanFor advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description Number (pointer in Linear Memory)Pointer to the image or 0 if not found. getImage
METHODReturns with the contents 'best' image tag (PIC, APIC, QT atom). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Default Description takeOwnership boolfalse For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description void *Pointer to the image or NULL if not found. getImageSizeBytes
METHODReturns with the the size of the image returned by getImage(). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description NumberThe size of the ID3 image in bytes or 0 if not found. getImageSizeBytes
METHODReturns with the the size of the image returned by getImage(). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description unsigned intThe size of the ID3 image in bytes or 0 if not found. getPositionFrames
METHODReturns with the current position in frames. The postion may change after each decode() or seekTo().ParametersNoneReturnsType Description NumberCurrent position in frames. getPositionFrames
METHODReturns with the current position in frames. The postion may change after each decode() or seekTo().ParametersNoneReturnsType Description intCurrent position in frames. getSampleRate
METHODReturns with the sample rate of the current file.ParametersNoneReturnsType Description NumberSample rate of the current file. getSampleRate
METHODReturns with the sample rate of the current file.ParametersNoneReturnsType Description unsigned intSample rate of the current file. getStemsJSONString
METHODReturns with the JSON metadata string for the Native Instruments Stems format.ParametersNoneReturnsType Description Number (pointer in Linear Memory)Linear Memory pointer or 0 if the file is not Stems. You can use Superpowered.toString(this_pointer) to create a JavaScript string from it. getStemsJSONString
METHODReturns with the JSON metadata string for the Native Instruments Stems format.ParametersNoneReturnsType Description const char *JSON metadata string or NULL if the file is not Stems. getTitle
METHODReturns with the contents "best" title tag (TT1-3, TIT1-3, QT atoms). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Description takeOwnership BooleanFor advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description Number (pointer in Linear Memory)The string or 0 if not found. getTitle
METHODReturns with the contents "best" title tag (TT1-3, TIT1-3, QT atoms). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersReturnsName Type Default Description takeOwnership boolfalse For advanced use. If true, you take ownership on the data (don't forget to free() when done to prevent memory leaks). Type Description char *The string or NULL if not found. getTrackIndex
METHODReturns with the track index (track field or TRCK). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description NumberID3 track index getTrackIndex
METHODReturns with the track index (track field or TRCK). Call this after parseAllID3Frames() OR finished reading all ID3 frames with readNextID3Frame().ParametersNoneReturnsType Description unsigned intID3 track index open
METHODOpen a file for decoding.ParametersReturnsName Type Default Description path const char *Full file system path or progressive download path (http or https). metaOnly boolIf true, it opens the file for fast metadata reading only, not for decoding audio. Available for fully available local files only (no network access). offset int0 Byte offset in the file. Primarily designed to open raw files from an apk. length int0 Byte length from offset. Set offset and length to 0 to read the entire file. stemsIndex int0 Stems track index for Native Instruments Stems format. customHTTPRequest Superpowered::httpRequest *0 If custom HTTP communication is required (such as sending http headers for authorization), pass a fully prepared http request object. The decoder will copy this object. Type Description int- The return value can be grouped into four categories:
- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
- The return value can be grouped into four categories:
openAudioFileInMemory
METHODOpens a memory location for decoding.ParametersReturnsName Type Description pointer Number (pointer in Linear Memory)An audio file loaded onto Linear Memory. The Decoder will take ownership on this data. sizeBytes NumberThe audio file length in bytes. metaOnly BooleanIf true, it opens the file for fast metadata reading only, not for decoding audio. Type Description Number- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
openAudioFileInMemory
METHODOpens a memory location for decoding.ParametersReturnsName Type Default Description pointer void *An audio file loaded onto the heap. Should be allocated using malloc() (and not _aligned_malloc() or similar). The Decoder will take ownership on this data. sizeBytes unsigned intThe audio file length in bytes. metaOnly boolfalse If true, it opens the file for fast metadata reading only, not for decoding audio. Type Description int- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
openHLS
METHODOpens a HTTP Live Streaming stream.ParametersReturnsName Type Default Description url const char *Stream URL. liveLatencySeconds char-1 When connecting or reconnecting to a HLS live stream, the decoder will try to skip audio to maintain this latency. Default: -1 (the decoder wil not skip audio and the live stream starts at the first segment specified by the server). customHTTPRequest Superpowered::httpRequest *0 If custom HTTP communication is required (such as sending http headers for authorization), pass a fully prepared http request object. The decoder will copy this object. Type Description int- The return value can be grouped into four categories:
- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
- The return value can be grouped into four categories:
openMemory
METHODOpens a memory location in Superpowered AudioInMemory format for decoding.ParametersReturnsName Type Description pointer Number (pointer in Linear Memory)Data in Superpowered AudioInMemory format. Ownership is controlled by the AudioInMemory format. metaOnly BooleanIf true, it opens the file for fast metadata reading only, not for decoding audio. Type Description Number- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
openMemory
METHODOpens a memory location in Superpowered AudioInMemory format for decoding.ParametersReturnsName Type Default Description pointer void *Data in Superpowered AudioInMemory format. Ownership is controlled by the AudioInMemory format. metaOnly boolfalse If true, it opens the file for fast metadata reading only, not for decoding audio. Type Description int- Decoder::OpenSuccess: successful open.
- httpResponse::StatusCode_Progress: the open method needs more time opening an audio file from the network. In this case retry open() later until it returns something else than StatusCode_Progress (it's recommended to wait at least 0.1 seconds).
- A value above 1000: internal decoder error.
- A HTTP status code for network errors.
parseAllID3Frames
METHODParses all ID3 frames. Do not use startReadingID3/readNextID3Frame after this.ParametersReturnsName Type Description skipImages BooleanParsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU. maxFrameDataSize NumberThe maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images). NoneparseAllID3Frames
METHODParses all ID3 frames. Do not use startReadingID3/readNextID3Frame after this.ParametersReturnsName Type Default Description skipImages boolParsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU. maxFrameDataSize unsigned intfalse The maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images). NonereadNextID3Frame
METHODReads the next ID3 frame.ParametersNoneReturnsType Description NumberID3 frame data size or -1 if finished reading. readNextID3Frame
METHODReads the next ID3 frame.ParametersNoneReturnsType Description usigned intID3 frame data size or -1 if finished reading. reconnectToMediaserver
METHODApple's built-in codec may be used in some cases, such as decoding ALAC files. Call this after a media server reset or audio session interrupt to resume playback.ParametersNoneReturnsNonesetPositionPrecise
METHODJumps to a specific position. This method is a little bit slower than setPositionQuick().ParametersReturnsName Type Description positionFrames NumberThe requested position. Type Description BooleanReturns with success (true) or failure (false). setPositionPrecise
METHODJumps to a specific position. This method is a little bit slower than setPositionQuick().ParametersReturnsName Type Default Description positionFrames intThe requested position. Type Description boolReturns with success (true) or failure (false). setPositionQuick
METHODJumps to the specified position's chunk (frame) beginning. Some codecs (such as MP3) contain audio in chunks (frames). This method will not jump precisely to the specified position, but to the chunk's beginning the position belongs to.ParametersReturnsName Type Description positionFrames NumberThe requested position. Type Description BooleanReturns with success (true) or failure (false). setPositionQuick
METHODJumps to the specified position's chunk (frame) beginning. Some codecs (such as MP3) contain audio in chunks (frames). This method will not jump precisely to the specified position, but to the chunk's beginning the position belongs to.ParametersReturnsName Type Default Description positionFrames intThe requested position. Type Description boolReturns with success (true) or failure (false). startParsingID3Frames
METHODStarts reading ID3 frames. Use readNextID3Frame() in an iteration after this.ParametersReturnsName Type Description skipImages BooleanParsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU. maxFrameDataSize NumberThe maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images). NonestartParsingID3Frames
METHODStarts reading ID3 frames. Use readNextID3Frame() in an iteration after this.ParametersReturnsName Type Default Description skipImages boolParsing ID3 image frames is significantly slower than parsing other frames. Set this to true if not interested in image information to save CPU. maxFrameDataSize unsigned intThe maximum frame size in bytes to retrieve if the decoder can not memory map the entire audio file. Affects memory usage. Useful to skip large payloads (such as images). None
FAQ
Do you know where I can find example code for decoding a MP3 file to PCM for Android?
Do you support FLAC or OGG format?
Is BIFS decoding for mp4 available?
Is there a different version of Superpowered SDK / codecs that support Dolby 5.1 channel audio format?
The tempo and pitch of the dumped audio file sounds changed while listening with other raw supported player. Approx pitch by +4 and tempo by +10