Documentation ¶
Overview ¶
Package audio provides audio players.
The stream format must be 16-bit little endian and 2 channels. The format is as follows:
[data] = [sample 1] [sample 2] [sample 3] ... [sample *] = [channel 1] ... [channel *] = [byte 1] [byte 2] ...
An audio context (audio.Context object) has a sample rate you can specify and all streams you want to play must have the same sample rate. However, decoders in e.g. audio/mp3 package adjust sample rate automatically, and you don't have to care about it as long as you use those decoders.
An audio context can generate 'players' (audio.Player objects), and you can play sound by calling Play function of players. When multiple players play, mixing is automatically done. Note that too many players may cause distortion.
For the simplest example to play sound, see wav package in the examples.
Index ¶
- type Context
- type InfiniteLoop
- type Player
- func (p *Player) Close() error
- func (p *Player) Current() time.Duration
- func (p *Player) IsPlaying() bool
- func (p *Player) Pause()
- func (p *Player) Play()
- func (p *Player) Rewind() error
- func (p *Player) Seek(offset time.Duration) error
- func (p *Player) SetBufferSize(bufferSize time.Duration)
- func (p *Player) SetVolume(volume float64)
- func (p *Player) Volume() float64
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Context ¶
type Context struct {
// contains filtered or unexported fields
}
A Context represents a current state of audio.
At most one Context object can exist in one process. This means only one constant sample rate is valid in your one application.
For a typical usage example, see examples/wav/main.go.
func CurrentContext ¶
func CurrentContext() *Context
CurrentContext returns the current context or nil if there is no context.
func NewContext ¶
NewContext creates a new audio context with the given sample rate.
The sample rate is also used for decoding MP3 with audio/mp3 package or other formats as the target sample rate.
sampleRate should be 44100 or 48000. Other values might not work. For example, 22050 causes error on Safari when decoding MP3.
NewContext panics when an audio context is already created.
func (*Context) IsReady ¶
IsReady returns a boolean value indicating whether the audio is ready or not.
On some browsers, user interaction like click or pressing keys is required to start audio.
func (*Context) NewPlayer ¶ added in v2.2.0
NewPlayer creates a new player with the given stream.
src's format must be linear PCM (16bits little endian, 2 channel stereo) without a header (e.g. RIFF header). The sample rate must be same as that of the audio context.
The player is seekable when src is io.Seeker. Attempt to seek the player that is not io.Seeker causes panic.
Note that the given src can't be shared with other Player objects.
NewPlayer tries to call Seek of src to get the current position. NewPlayer returns error when the Seek returns error.
A Player doesn't close src even if src implements io.Closer. Closing the source is src owner's responsibility.
func (*Context) NewPlayerFromBytes ¶ added in v2.2.0
NewPlayerFromBytes creates a new player with the given bytes.
As opposed to NewPlayer, you don't have to care if src is already used by another player or not. src can be shared by multiple players.
The format of src should be same as noted at NewPlayer.
type InfiniteLoop ¶
type InfiniteLoop struct {
// contains filtered or unexported fields
}
InfiniteLoop represents a looped stream which never ends.
func NewInfiniteLoop ¶
func NewInfiniteLoop(src io.ReadSeeker, length int64) *InfiniteLoop
NewInfiniteLoop creates a new infinite loop stream with a source stream and length in bytes.
If the loop's total length is exactly the same as src's length, you might hear noises around the loop joint. This noise can be heard especially when src is decoded from a lossy compression format like Ogg/Vorbis and MP3. In this case, try to add more (about 0.1[s]) data to src after the loop end. If src has data after the loop end, an InfiniteLoop uses part of the data to blend with the loop start to make the loop joint smooth.
func NewInfiniteLoopWithIntro ¶
func NewInfiniteLoopWithIntro(src io.ReadSeeker, introLength int64, loopLength int64) *InfiniteLoop
NewInfiniteLoopWithIntro creates a new infinite loop stream with an intro part. NewInfiniteLoopWithIntro accepts a source stream src, introLength in bytes and loopLength in bytes.
If the loop's total length is exactly the same as src's length, you might hear noises around the loop joint. This noise can be heard especially when src is decoded from a lossy compression format like Ogg/Vorbis and MP3. In this case, try to add more (about 0.1[s]) data to src after the loop end. If src has data after the loop end, an InfiniteLoop uses part of the data to blend with the loop start to make the loop joint smooth.
type Player ¶
type Player struct {
// contains filtered or unexported fields
}
Player is an audio player which has one stream.
Even when all references to a Player object is gone, the object is not GCed until the player finishes playing. This means that if a Player plays an infinite stream, the object is never GCed unless Close is called.
func NewPlayerFromBytes
deprecated
func (*Player) Close ¶
Close closes the stream.
When Close is called, the stream owned by the player is NOT closed, even if the stream implements io.Closer.
Close returns error when the player is already closed.
func (*Player) Current ¶
Current returns the current position in time.
As long as the player continues to play, Current's returning value is increased monotonically, even though the source stream loops and its position goes back.
func (*Player) Rewind ¶
Rewind rewinds the current position to the start.
The passed source to NewPlayer must be io.Seeker, or Rewind panics.
Rewind returns error when seeking the source stream returns error.
func (*Player) Seek ¶
Seek seeks the position with the given offset.
The passed source to NewPlayer must be io.Seeker, or Seek panics.
Seek returns error when seeking the source stream returns error.
func (*Player) SetBufferSize ¶ added in v2.3.0
SetBufferSize adjusts the buffer size of the player. If 0 is specified, the default buffer size is used. A small buffer size is useful if you want to play a real-time PCM for example. Note that the audio quality might be affected if you modify the buffer size.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
Package mp3 provides MP3 decoder.
|
Package mp3 provides MP3 decoder. |
Package vorbis provides Ogg/Vorbis decoder.
|
Package vorbis provides Ogg/Vorbis decoder. |
Package wav provides WAV (RIFF) decoder.
|
Package wav provides WAV (RIFF) decoder. |