Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/audiodocs/docs/sources/audio-buffer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ Once you have data in `AudioBuffer`, audio can be played by passing it to [`Audi
## Constructor

```tsx
constructor(context: BaseAudioContext, options: AudioBufferOptions)
constructor(options: AudioBufferOptions)
```

### `AudioBufferOptions`

| Parameter | Type | Default | Description |
| :---: | :---: | :----: | :---- |
| `numberOfChannels` <Optional /> | `number` | 1.0 | Number of [`channels`](/docs/sources/audio-buffer#properties) in buffer |
| `length` | `number` | - | [`Length`](/docs/sources/audio-buffer#properties) of the buffer |
| `numberOfChannels` <Optional /> | `number` | 1.0 | Number of [`channels`](/docs/sources/audio-buffer#properties) in buffer |
| `sampleRate` | `number` | - | [`Sample rate`](/docs/sources/audio-buffer#properties) of the buffer in Hz |

Or by using `BaseAudioContext` factory method:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <audioapi/utils/AudioBus.h>

namespace audioapi {
MyProcessorNode::MyProcessorNode(BaseAudioContext *context)
MyProcessorNode::MyProcessorNode(std::shared_ptr<BaseAudioContext> context)
: AudioNode(context) {
isInitialized_ = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AudioBus;

class MyProcessorNode : public AudioNode {
public:
explicit MyProcessorNode(BaseAudioContext *context);
explicit MyProcessorNode(std::shared_ptr<BaseAudioContext> context);

protected:
std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus> &bus,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
#include <audioapi/HostObjects/AudioContextHostObject.h>
#include <audioapi/HostObjects/OfflineAudioContextHostObject.h>
#include <audioapi/HostObjects/inputs/AudioRecorderHostObject.h>
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
#include <audioapi/HostObjects/utils/AudioDecoderHostObject.h>
#include <audioapi/HostObjects/utils/AudioStretcherHostObject.h>
#include <audioapi/core/AudioContext.h>
#include <audioapi/core/OfflineAudioContext.h>
#include <audioapi/core/inputs/AudioRecorder.h>
#include <audioapi/core/sources/AudioBuffer.h>
#include <audioapi/jsi/JsiPromise.h>

#include <audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h>
Expand Down Expand Up @@ -36,13 +38,15 @@ class AudioAPIModuleInstaller {
getCreateAudioRecorderFunction(jsiRuntime, audioEventHandlerRegistry);
auto createOfflineAudioContext = getCreateOfflineAudioContextFunction(
jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
auto createAudioBuffer = getCrateAudioBufferFunction(jsiRuntime);
auto createAudioDecoder = getCreateAudioDecoderFunction(jsiRuntime, jsCallInvoker);
auto createAudioStretcher = getCreateAudioStretcherFunction(jsiRuntime, jsCallInvoker);

jsiRuntime->global().setProperty(*jsiRuntime, "createAudioContext", createAudioContext);
jsiRuntime->global().setProperty(*jsiRuntime, "createAudioRecorder", createAudioRecorder);
jsiRuntime->global().setProperty(
*jsiRuntime, "createOfflineAudioContext", createOfflineAudioContext);
jsiRuntime->global().setProperty(*jsiRuntime, "createAudioBuffer", createAudioBuffer);
jsiRuntime->global().setProperty(*jsiRuntime, "createAudioDecoder", createAudioDecoder);
jsiRuntime->global().setProperty(*jsiRuntime, "createAudioStretcher", createAudioStretcher);

Expand All @@ -63,7 +67,7 @@ class AudioAPIModuleInstaller {
return jsi::Function::createFromHostFunction(
*jsiRuntime,
jsi::PropNameID::forAscii(*jsiRuntime, "createAudioContext"),
0,
1,
[jsCallInvoker, audioEventHandlerRegistry, uiRuntime](
jsi::Runtime &runtime,
const jsi::Value &thisValue,
Expand Down Expand Up @@ -94,7 +98,7 @@ class AudioAPIModuleInstaller {
return jsi::Function::createFromHostFunction(
*jsiRuntime,
jsi::PropNameID::forAscii(*jsiRuntime, "createOfflineAudioContext"),
0,
3,
[jsCallInvoker, audioEventHandlerRegistry, uiRuntime](
jsi::Runtime &runtime,
const jsi::Value &thisValue,
Expand Down Expand Up @@ -181,6 +185,23 @@ class AudioAPIModuleInstaller {
return jsi::Object::createFromHostObject(runtime, audioStretcherHostObject);
});
}

static jsi::Function getCrateAudioBufferFunction(jsi::Runtime *jsiRuntime) {
return jsi::Function::createFromHostFunction(
*jsiRuntime,
jsi::PropNameID::forAscii(*jsiRuntime, "createAudioStretcher"),
3,
[](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *args, size_t count)
-> jsi::Value {
auto numberOfChannels = static_cast<int>(args[0].getNumber());
auto length = static_cast<size_t>(args[1].getNumber());
auto sampleRate = static_cast<float>(args[2].getNumber());

auto audioBuffer = std::make_shared<AudioBuffer>(numberOfChannels, length, sampleRate);
auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(audioBuffer);
return jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
});
}
};

} // namespace audioapi
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@

namespace audioapi {

AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node) : node_(node) {
AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node,
const AudioNodeOptions &options) : node_(node) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include <audioapi/jsi/JsiHostObject.h>
#include <audioapi/types/NodeOptions.h>

#include <jsi/jsi.h>
#include <memory>
Expand All @@ -13,7 +14,9 @@ class AudioNode;

class AudioNodeHostObject : public JsiHostObject {
public:
explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node);
explicit AudioNodeHostObject(
const std::shared_ptr<AudioNode> &node,
const AudioNodeOptions &options = AudioNodeOptions());
~AudioNodeHostObject() override;

JSI_PROPERTY_GETTER_DECL(numberOfInputs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ BaseAudioContextHostObject::BaseAudioContextHostObject(
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createIIRFilter),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferSource),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createConvolver),
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser),
Expand Down Expand Up @@ -260,19 +259,6 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferQueueSource) {
return jsi::Object::createFromHostObject(runtime, bufferStreamSourceHostObject);
}

JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBuffer) {
const auto options = args[0].asObject(runtime);
const auto audioBufferOptions =
audioapi::option_parser::parseAudioBufferOptions(runtime, options);
auto buffer = BaseAudioContext::createBuffer(audioBufferOptions);
auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);

auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
jsiObject.setExternalMemoryPressure(runtime, bufferHostObject->getSizeInBytes());

return jsiObject;
}

JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createPeriodicWave) {
auto arrayBufferReal =
args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class BaseAudioContextHostObject : public JsiHostObject {
JSI_HOST_FUNCTION_DECL(createIIRFilter);
JSI_HOST_FUNCTION_DECL(createBufferSource);
JSI_HOST_FUNCTION_DECL(createBufferQueueSource);
JSI_HOST_FUNCTION_DECL(createBuffer);
JSI_HOST_FUNCTION_DECL(createPeriodicWave);
JSI_HOST_FUNCTION_DECL(createAnalyser);
JSI_HOST_FUNCTION_DECL(createConvolver);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <audioapi/HostObjects/analysis/AnalyserNodeHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/HostObjects/utils/JsEnumParser.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/analysis/AnalyserNode.h>
Expand All @@ -9,7 +9,7 @@
namespace audioapi {

AnalyserNodeHostObject::AnalyserNodeHostObject(const std::shared_ptr<BaseAudioContext>& context, const AnalyserOptions &options)
: AudioNodeHostObject(context->createAnalyser(options)) {
: AudioNodeHostObject(context->createAnalyser(options), options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, fftSize),
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, frequencyBinCount),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include <audioapi/HostObjects/AudioNodeHostObject.h>
#include <audioapi/core/destinations/AudioDestinationNode.h>
#include <audioapi/types/NodeOptions.h>

#include <memory>
#include <vector>
Expand All @@ -12,6 +13,6 @@ using namespace facebook;
class AudioDestinationNodeHostObject : public AudioNodeHostObject {
public:
explicit AudioDestinationNodeHostObject(const std::shared_ptr<AudioDestinationNode> &node)
: AudioNodeHostObject(node) {}
: AudioNodeHostObject(node, AudioDestinationOptions()) {}
};
} // namespace audioapi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h>
#include <audioapi/HostObjects/AudioParamHostObject.h>
#include <audioapi/HostObjects/utils/JsEnumParser.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/BiquadFilterNode.h>
#include <audioapi/core/types/BiquadFilterType.h>
Expand All @@ -12,7 +12,7 @@ namespace audioapi {

BiquadFilterNodeHostObject::BiquadFilterNodeHostObject(const std::shared_ptr<BaseAudioContext>& context,
const BiquadFilterOptions &options)
: AudioNodeHostObject(context->createBiquadFilter(options)) {
: AudioNodeHostObject(context->createBiquadFilter(options), options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, frequency),
JSI_EXPORT_PROPERTY_GETTER(BiquadFilterNodeHostObject, detune),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include <audioapi/HostObjects/effects/ConvolverNodeHostObject.h>
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/ConvolverNode.h>

Expand All @@ -9,7 +9,7 @@
namespace audioapi {

ConvolverNodeHostObject::ConvolverNodeHostObject(const std::shared_ptr<BaseAudioContext>& context, const ConvolverOptions &options)
: AudioNodeHostObject(context->createConvolver(options)) {
: AudioNodeHostObject(context->createConvolver(options), options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, normalize),
JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, buffer));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
#include <audioapi/HostObjects/AudioParamHostObject.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/DelayNode.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>

#include <memory>

namespace audioapi {

DelayNodeHostObject::DelayNodeHostObject(const std::shared_ptr<BaseAudioContext>& context, const DelayOptions &options)
: AudioNodeHostObject(context->createDelay(options)) {
: AudioNodeHostObject(context->createDelay(options), options) {
addGetters(JSI_EXPORT_PROPERTY_GETTER(DelayNodeHostObject, delayTime));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <audioapi/HostObjects/effects/GainNodeHostObject.h>

#include <audioapi/HostObjects/AudioParamHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/GainNode.h>
#include <memory>
Expand All @@ -11,7 +11,7 @@ namespace audioapi {
GainNodeHostObject::GainNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const GainOptions &options)
: AudioNodeHostObject(context->createGain(options)) {
: AudioNodeHostObject(context->createGain(options), options) {
addGetters(JSI_EXPORT_PROPERTY_GETTER(GainNodeHostObject, gain));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <audioapi/HostObjects/effects/IIRFilterNodeHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/IIRFilterNode.h>
#include <memory>
Expand All @@ -9,7 +9,7 @@ namespace audioapi {
IIRFilterNodeHostObject::IIRFilterNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const IIRFilterOptions &options)
: AudioNodeHostObject(context->createIIRFilter(options)) {
: AudioNodeHostObject(context->createIIRFilter(options), options) {

addFunctions(JSI_EXPORT_FUNCTION(IIRFilterNodeHostObject, getFrequencyResponse));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <audioapi/HostObjects/effects/StereoPannerNodeHostObject.h>

#include <audioapi/HostObjects/AudioParamHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/StereoPannerNode.h>
#include <memory>
Expand All @@ -11,7 +11,7 @@ namespace audioapi {
StereoPannerNodeHostObject::StereoPannerNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const StereoPannerOptions &options)
: AudioNodeHostObject(context->createStereoPanner(options)) {
: AudioNodeHostObject(context->createStereoPanner(options), options) {
addGetters(JSI_EXPORT_PROPERTY_GETTER(StereoPannerNodeHostObject, pan));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include <audioapi/HostObjects/effects/WaveShaperNodeHostObject.h>
#include <audioapi/HostObjects/utils/JsEnumParser.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/effects/WaveShaperNode.h>
#include <audioapi/jsi/AudioArrayBuffer.h>
Expand All @@ -13,7 +13,7 @@ namespace audioapi {
WaveShaperNodeHostObject::WaveShaperNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const WaveShaperOptions &options)
: AudioNodeHostObject(context->createWaveShaper(options)) {
: AudioNodeHostObject(context->createWaveShaper(options), options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(WaveShaperNodeHostObject, oversample),
JSI_EXPORT_PROPERTY_GETTER(WaveShaperNodeHostObject, curve));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

#include <audioapi/HostObjects/AudioParamHostObject.h>
#include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
#include <audioapi/types/NodeOptions.h>
#include <memory>

namespace audioapi {

AudioBufferBaseSourceNodeHostObject::AudioBufferBaseSourceNodeHostObject(
const std::shared_ptr<AudioBufferBaseSourceNode> &node)
: AudioScheduledSourceNodeHostObject(node) {
const std::shared_ptr<AudioBufferBaseSourceNode> &node,
const BaseAudioBufferSourceOptions &options)
: AudioScheduledSourceNodeHostObject(node, options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, playbackRate),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ namespace audioapi {
using namespace facebook;

class AudioBufferBaseSourceNode;
struct BaseAudioBufferSourceOptions;

class AudioBufferBaseSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
public:
explicit AudioBufferBaseSourceNodeHostObject(
const std::shared_ptr<AudioBufferBaseSourceNode> &node);
const std::shared_ptr<AudioBufferBaseSourceNode> &node,
const BaseAudioBufferSourceOptions &options);

~AudioBufferBaseSourceNodeHostObject() override;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h>

#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
#include <memory>
Expand All @@ -11,7 +11,7 @@ namespace audioapi {
AudioBufferQueueSourceNodeHostObject::AudioBufferQueueSourceNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const BaseAudioBufferSourceOptions &options)
: AudioBufferBaseSourceNodeHostObject(context->createBufferQueueSource(options)) {
: AudioBufferBaseSourceNodeHostObject(context->createBufferQueueSource(options), options) {
functions_->erase("start");

addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onBufferEnded));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h>

#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
#include <audioapi/HostObjects/utils/NodeOptions.h>
#include <audioapi/types/NodeOptions.h>
#include <audioapi/core/BaseAudioContext.h>
#include <audioapi/core/sources/AudioBufferSourceNode.h>
#include <memory>
Expand All @@ -11,7 +11,7 @@ namespace audioapi {
AudioBufferSourceNodeHostObject::AudioBufferSourceNodeHostObject(
const std::shared_ptr<BaseAudioContext> &context,
const AudioBufferSourceOptions &options)
: AudioBufferBaseSourceNodeHostObject(context->createBufferSource(options)) {
: AudioBufferBaseSourceNodeHostObject(context->createBufferSource(options), options) {
addGetters(
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
Expand Down
Loading