-
Notifications
You must be signed in to change notification settings - Fork 161
Audio API changes #797
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
yilinwei
wants to merge
42
commits into
scala-js:main
Choose a base branch
from
yilinwei:base-audio
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Audio API changes #797
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit
Hold shift + click to select a range
4f524b8
backup
yilinwei 8b1d132
backup
yilinwei b44eaa8
backup
yilinwei 2aaf2ed
Switch back to using traits for now.
yilinwei b91df37
typo.
yilinwei a4edff5
Switch encoding for mima.
yilinwei 9887ce0
Check-in API report
yilinwei 081534d
BlobEvent and MediaRecorder.
zainab-ali fca6713
Make sure `BlobEvent` is class.
yilinwei 4dda4bf
`data` is required.
yilinwei a4cfb9a
Add `AudioWorkletNode` and associated options.
yilinwei 0099ad3
Add `Worklet` and `AudioWorklet`.
yilinwei e8b3650
Fix signature
yilinwei 1178935
Add `AudioParamDescriptor`.
yilinwei fdb9aad
Add `defaultValue` for `AudioParamDescriptor`.
yilinwei c067de2
Make sure to extend `js.Object`.
yilinwei ba8f619
Add `AudioWorkletGlobalScope`.
yilinwei 3e32f25
`AudioWorkletNode` should not be abstract.
yilinwei 42275a7
Make `ReadOnlyMapLike` extend `js.Iterable`.
yilinwei 0e90800
`self` does not yet exist within the `Worklet` contexts.
yilinwei f860eaa
Correct `ReadOnlyMapLike` signature `forEach`.
yilinwei b548118
Add docs.
zainab-ali 2d1f240
Add docs.
zainab-ali f7adab3
Doc improvements.
zainab-ali 56d513b
Add js.native annotation to AudioParamAutomationRate.
zainab-ali 6781565
More docs.
zainab-ali 7d6eb4e
Add js.native annotation to AudioTimestamp.
zainab-ali d159170
Correct type of params for AudioWorkletProcessor.
zainab-ali 3bac38d
WorkletOptions should extend js.Object.
zainab-ali e32a80c
Add MediaRecorder and options.
zainab-ali c221e2b
Correct scaladoc.
zainab-ali 824092d
Api reports.
zainab-ali e637830
AudioWorkletGlobalScope should be an abstract class.
zainab-ali 314c67b
AudioScheduledSourceNode should be an abstract class.
zainab-ali 9923b6b
MediaElementAudioSourceNode mediaElement should be a def.
zainab-ali 98af177
Regenerate api reports.
zainab-ali 18a6f7d
Add docs for ReadOnlyMapLike.
zainab-ali df8e9cf
Reformat doc comments.
zainab-ali 523266a
Remove redundant comment.
zainab-ali 07dcf43
Remove channelCount, channelCountMode and channelInterpretation.
zainab-ali b3a694e
Refactor enums for Scala 3.
zainab-ali e305129
Regenerate API reports.
zainab-ali File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
dom/src/main/scala/org/scalajs/dom/AudioScheduledSourceNode.scala
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/** Documentation is thanks to Mozilla Contributors at https://developer.mozilla.org/en-US/docs/Web/API and available | ||
* under the Creative Commons Attribution-ShareAlike v2.5 or later. http://creativecommons.org/licenses/by-sa/2.5/ | ||
* | ||
* Everything else is under the MIT License http://opensource.org/licenses/MIT | ||
*/ | ||
package org.scalajs.dom | ||
|
||
import scala.scalajs.js | ||
|
||
@js.native | ||
trait AudioScheduledSourceNode extends AudioNode { | ||
|
||
/** This method specifies the exact time to start playing the tone. */ | ||
def start(): Unit = js.native | ||
|
||
/** This method specifies the exact time to stop playing the tone. */ | ||
def stop(): Unit = js.native | ||
|
||
/** This method specifies the exact time to start playing the tone. */ | ||
def start(when: Double): Unit = js.native | ||
|
||
/** This method specifies the exact time to stop playing the tone. */ | ||
def stop(when: Double): Unit = js.native | ||
|
||
/** Used to set the event handler for the ended event, which fires when the tone has stopped playing. */ | ||
var onended: js.Function1[Event, _] = js.native | ||
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
/** Documentation is thanks to Mozilla Contributors at https://developer.mozilla.org/en-US/docs/Web/API and available | ||
* under the Creative Commons Attribution-ShareAlike v2.5 or later. http://creativecommons.org/licenses/by-sa/2.5/ | ||
* | ||
* Everything else is under the MIT License http://opensource.org/licenses/MIT | ||
*/ | ||
package org.scalajs.dom | ||
|
||
import scala.scalajs.js | ||
|
||
trait AudioTimestamp extends js.Object { | ||
var contextTime: Double | ||
var performanceTime: Double | ||
} |
140 changes: 140 additions & 0 deletions
140
dom/src/main/scala/org/scalajs/dom/BaseAudioContext.scala
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
/** Documentation is thanks to Mozilla Contributors at https://developer.mozilla.org/en-US/docs/Web/API and available | ||
* under the Creative Commons Attribution-ShareAlike v2.5 or later. http://creativecommons.org/licenses/by-sa/2.5/ | ||
* | ||
* Everything else is under the MIT License http://opensource.org/licenses/MIT | ||
*/ | ||
package org.scalajs.dom | ||
|
||
import scala.scalajs.js | ||
|
||
/** The BaseAudioContext interface of the Web Audio API acts as a base definition for online and offline audio-processing graphs, as represented by AudioContext and OfflineAudioContext respectively. You wouldn't use BaseAudioContext directly — you'd use its features via one of these two inheriting interfaces. | ||
|
||
A BaseAudioContext can be a target of events, therefore it implements the EventTarget interface. */ | ||
@js.native | ||
trait BaseAudioContext extends EventTarget { | ||
|
||
/** Returns a double representing an ever-increasing hardware time in seconds used for scheduling. It starts at 0 and | ||
* cannot be stopped, paused or reset. | ||
*/ | ||
def currentTime: Double = js.native | ||
|
||
/** Returns an AudioDestinationNode representing the final destination of all audio in the context. It can be thought | ||
* of as the audio-rendering device. | ||
*/ | ||
val destination: AudioDestinationNode = js.native | ||
|
||
/** Returns the AudioListener object, used for 3D spatialization. */ | ||
val listener: AudioListener = js.native | ||
|
||
/** Returns a float representing the sample rate (in samples per second) used by all nodes in this context. The | ||
* sample-rate of an AudioContext cannot be changed. | ||
*/ | ||
val sampleRate: Double = js.native | ||
|
||
/** Returns the current state of the AudioContext. */ | ||
def state: String = js.native | ||
|
||
/** Creates an AnalyserNode, which can be used to expose audio time and frequency data and for example to create data | ||
* visualisations. | ||
*/ | ||
def createAnalyser(): AnalyserNode = js.native | ||
|
||
/** Creates a BiquadFilterNode, which represents a second order filter configurable as several different common filter | ||
* types: high-pass, low-pass, band-pass, etc. | ||
*/ | ||
def createBiquadFilter(): BiquadFilterNode = js.native | ||
|
||
/** Creates a new, empty AudioBuffer object, which can then be populated by data and played via an | ||
* AudioBufferSourceNode. | ||
* | ||
* @param numOfChannels | ||
* An integer representing the number of channels this buffer should have. Implementations must support a minimum | ||
* 32 channels. | ||
* @param length | ||
* An integer representing the size of the buffer in sample-frames. | ||
* @param sampleRate | ||
* The sample-rate of the linear audio data in sample-frames per second. An implementation must support | ||
* sample-rates in at least the range 22050 to 96000. | ||
*/ | ||
def createBuffer(numOfChannels: Int, length: Int, sampleRate: Int): AudioBuffer = js.native | ||
|
||
/** Creates an AudioBufferSourceNode, which can be used to play and manipulate audio data contained within an | ||
* AudioBuffer object. AudioBuffers are created using AudioContext.createBuffer or returned by | ||
* AudioContext.decodeAudioData when it successfully decodes an audio track. | ||
*/ | ||
def createBufferSource(): AudioBufferSourceNode = js.native | ||
|
||
/** Creates a ChannelMergerNode, which is used to combine channels from multiple audio streams into a single audio | ||
* stream. | ||
* | ||
* @param numberOfInputs | ||
* The number of channels in the input audio streams, which the output stream will contain; the default is 6 is | ||
* this parameter is not specified. | ||
*/ | ||
def createChannelMerger(numberOfInputs: Int = js.native): ChannelMergerNode = js.native | ||
|
||
/** Creates a ChannelSplitterNode, which is used to access the individual channels of an audio stream and process them | ||
* separately. | ||
* | ||
* @param numberOfOutputs | ||
* The number of channels in the input audio stream that you want to output separately; the default is 6 is this | ||
* parameter is not specified. | ||
*/ | ||
def createChannelSplitter(numberOfOutputs: Int = js.native): ChannelSplitterNode = js.native | ||
|
||
/** Creates a ConvolverNode, which can be used to apply convolution effects to your audio graph, for example a | ||
* reverberation effect. | ||
*/ | ||
def createConvolver(): ConvolverNode = js.native | ||
|
||
/** Creates a DelayNode, which is used to delay the incoming audio signal by a certain amount. This node is also | ||
* useful to create feedback loops in a Web Audio API graph. | ||
* | ||
* @param maxDelayTime | ||
* The maximum amount of time, in seconds, that the audio signal can be delayed by. The default value is 0. | ||
*/ | ||
def createDelay(maxDelayTime: Int): DelayNode = js.native | ||
|
||
/** Creates a DynamicsCompressorNode, which can be used to apply acoustic compression to an audio signal. */ | ||
def createDynamicsCompressor(): DynamicsCompressorNode = js.native | ||
|
||
/** Creates a GainNode, which can be used to control the overall volume of the audio graph. */ | ||
def createGain(): GainNode = js.native | ||
|
||
/** Creates an OscillatorNode, a source representing a periodic waveform. It basically generates a tone. */ | ||
def createOscillator(): OscillatorNode = js.native | ||
|
||
/** Creates a PannerNode, which is used to spatialise an incoming audio stream in 3D space. */ | ||
def createPanner(): PannerNode = js.native | ||
|
||
/** Creates a PeriodicWave, used to define a periodic waveform that can be used to determine the output of an | ||
* OscillatorNode. | ||
*/ | ||
def createPeriodicWave(real: js.typedarray.Float32Array, imag: js.typedarray.Float32Array): PeriodicWave = js.native | ||
|
||
/** Creates a StereoPannerNode, which can be used to apply stereo panning to an audio source. */ | ||
def createStereoPanner(): StereoPannerNode = js.native | ||
|
||
/** Creates a WaveShaperNode, which is used to implement non-linear distortion effects. */ | ||
def createWaveShaper(): WaveShaperNode = js.native | ||
|
||
/** Asynchronously decodes audio file data contained in an ArrayBuffer. In this case, the ArrayBuffer is usually | ||
* loaded from an XMLHttpRequest's response attribute after setting the responseType to arraybuffer. This method only | ||
* works on complete files, not fragments of audio files. | ||
* | ||
* @param audioData | ||
* An ArrayBuffer containing the audio data to be decoded, usually grabbed from an XMLHttpRequest's response | ||
* attribute after setting the responseType to arraybuffer. | ||
* @param successCallback | ||
* A callback function to be invoked when the decoding successfully finishes. The single argument to this callback | ||
* is an AudioBuffer representing the decoded PCM audio data. Usually you'll want to put the decoded data into an | ||
* AudioBufferSourceNode, from which it can be played and manipulated how you want. | ||
* @param errorCallback | ||
* An optional error callback, to be invoked if an error occurs when the audio data is being decoded. | ||
*/ | ||
def decodeAudioData( | ||
audioData: js.typedarray.ArrayBuffer, successCallback: js.Function1[AudioBuffer, _] = js.native, | ||
errorCallback: js.Function0[_] = js.native | ||
): js.Promise[AudioBuffer] = js.native | ||
|
||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.