From a48d07ff6b33ff1e2821e3d8832adbb72dc3ce85 Mon Sep 17 00:00:00 2001 From: faiface Date: Mon, 3 Jul 2017 14:05:08 +0200 Subject: [PATCH] audio: add Streamer interface --- audio/interface.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 audio/interface.go diff --git a/audio/interface.go b/audio/interface.go new file mode 100644 index 0000000..f7a0a81 --- /dev/null +++ b/audio/interface.go @@ -0,0 +1,38 @@ +package audio + +// SampleRate is the number of audio samples a Streamer should produce per one second of audio. +// +// This value should be set at most once before using audio package. It is safe to rely on the fact, +// that this value does not change during runtime. +var SampleRate = 48000 + +// Streamer is able to stream a finite or infinite sequence of audio samples. +type Streamer interface { + // Stream copies at most len(samples) next audio samples to the samples slice. + // + // The sample rate of the samples is specified by the global SampleRate variable/constant. + // The value at samples[i][0] is the value of the left channel of the i-th sample. + // Similarly, samples[i][1] is the value of the right channel of the i-th sample. + // + // Stream returns the number of streamed samples. If the Streamer is drained and no more + // samples will be produced, it returns 0 and false. Stream must not touch any samples + // outside samples[:n]. + // + // There are 3 valid return pattterns of the Stream method: + // + // 1. n == len(samples) && ok + // + // Stream streamed all of the requested samples. Cases 1, 2 and 3 may occur in the following + // calls. + // + // 2. 0 < n && n < len(samples) && ok + // + // Stream streamed n samples and drained the Streamer. Only case 3 may occur in the + // following calls. + // + // 3. n == 0 && !ok + // + // The Streamer is drained and no more samples will come. Only this case may occur in the + // following calls. + Stream(samples [][2]float64) (n int, ok bool) +}