1
//=========================================================
4
// $Id: audiomix.cpp,v 1.1 2002/01/30 14:54:03 muse Exp $
6
// (C) Copyright 2000 Werner Schweer (ws@seh.de)
7
//=========================================================
13
#define MIN(a,b) (a)>(b)?(b):(a)
15
//---------------------------------------------------------
17
//---------------------------------------------------------
19
void AudioFifo::setup(int buffers, int bsize)
22
for (int i = 0; i < size; ++i)
26
head = tail = used = 0;
28
data = new float*[size];
29
for (int i = 0; i < size; ++i)
30
data[i] = new float[bsize];
33
//---------------------------------------------------------
35
//---------------------------------------------------------
37
AudioFifo::~AudioFifo()
40
for (int i = 0; i < size; ++i)
46
//---------------------------------------------------------
48
//---------------------------------------------------------
50
float* AudioFifo::getFreeBuffer()
57
//---------------------------------------------------------
59
//---------------------------------------------------------
61
void AudioFifo::writeBuffer()
68
//---------------------------------------------------------
70
//---------------------------------------------------------
72
void AudioFifo::getData(float* buffer, int /*idx*/)
74
int n = sizeof(float) * channels() * segmentSize;
76
printf("AudioFifo::getData(): underrun\n");
80
memcpy(buffer, data[head], n);
86
//---------------------------------------------------------
88
//---------------------------------------------------------
90
AudioMixer::AudioMixer()
94
//---------------------------------------------------------
96
//---------------------------------------------------------
98
AudioMixer::~AudioMixer()
102
//---------------------------------------------------------
105
//---------------------------------------------------------
107
void AudioMixer::getData(float* buffer, int idx)
109
memset(buffer, 0, channels() * segmentSize * sizeof(float));
110
for (iAudioNode i = inputs.begin(); i != inputs.end(); ++i)
111
(*i)->fillBuffer(channels(), buffer, idx);
114
//---------------------------------------------------------
116
// add audio source to mixer object
117
//---------------------------------------------------------
119
void AudioMixer::connect(AudioNode* as)
123
for (iAudioNode src = inputs.begin(); src != inputs.end(); ++src) {
127
inputs.push_back(as);
130
//---------------------------------------------------------
132
// remove audio source from mixer object
133
//---------------------------------------------------------
135
void AudioMixer::disconnect(AudioNode* as)
137
for (iAudioNode src = inputs.begin(); src != inputs.end(); ++src) {
143
printf("AudioMixer::disconnect(): not found\n");