CSL
5.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
SpatialSource.cpp
Go to the documentation of this file.
1
//
2
// SpeakerSource.cpp -- Spatial Sound Source
3
// See the copyright notice and acknowledgment of authors in the file COPYRIGHT
4
// Created by Jorge Castellanos on 6/16/06. Hacked 8/09 by STP.
5
//
6
7
#include "
SpatialSource.h
"
8
9
#include <stdlib.h>
10
#include <iostream>
11
12
using
std::cout;
13
using
std::endl;
14
15
using namespace
csl;
16
17
// SpatialSource constructors
18
19
SpatialSource::SpatialSource
() : mPosition(NULL), mPositionChanged(
true
) { }
20
21
SpatialSource::SpatialSource
(
UnitGenerator
&input,
float
azi,
float
ele,
float
dist)
22
: mPosition(NULL),
23
mPositionChanged(
true
) {
24
if
(input.
numChannels
() != 1)
25
throw
LogicError
(
"Adding a non-mono ugen to a spatial source"
);
26
mPosition
=
new
CPoint
(
kPolar
, (
float
)dist, (
float
)(azi *
CSL_PI
/180.0), (
float
)(ele *
CSL_PI
/180.0));
27
this->
addInput
(
CSL_INPUT
, input);
28
#ifdef CSL_DEBUG
29
logMsg
(
"SpatialSource::input UG added"
);
30
#endif
31
}
32
33
SpatialSource::~SpatialSource
() {
34
if
(
mPosition
)
35
delete
mPosition
;
36
}
37
38
// Geometry
39
40
CPoint
*
SpatialSource::position
(
unsigned
channelNum) {
41
if
(
mPosition
== NULL)
42
mPosition
=
new
CPoint
(1.0, 0.0, 0.0);
43
return
mPosition
;
44
}
45
46
void
SpatialSource::setPosition
(
CPoint
pos) {
47
mPosition
= & pos;
48
}
49
50
void
SpatialSource::setPosition
(
float
x,
float
y,
float
z) {
51
if
(
mPosition
) {
52
mPosition
->
set
(x, y, z );
53
mPositionChanged
=
true
;
54
}
else
55
mPosition
=
new
CPoint
(x, y, z);
56
}
57
58
void
SpatialSource::setPosition
(
double
x,
double
y,
double
z) {
59
if
(
mPosition
) {
60
mPosition
->
set
(x, y, z );
61
mPositionChanged
=
true
;
62
}
else
63
mPosition
=
new
CPoint
(x, y, z);
64
}
65
66
void
SpatialSource::setPosition
(
char
s,
float
azi,
float
ele,
float
dist) {
67
if
(
mPosition
) {
68
mPosition
->
set
(
kPolar
, (
float
)dist, (
float
)(azi *
CSL_PI
/180.0), (
float
)(ele *
CSL_PI
/180.0) );
69
mPositionChanged
=
true
;
70
}
else
71
mPosition
=
new
CPoint
(
kPolar
, (
float
)dist, (
float
)(azi *
CSL_PI
/180.0), (
float
)(ele *
CSL_PI
/180.0));
72
}
73
74
void
SpatialSource::setPosition
(
char
s,
double
azi,
double
ele,
double
dist) {
75
if
(
mPosition
) {
76
mPosition
->
set
(
kPolar
, (
float
)dist, (
float
)(azi *
CSL_PI
/180.0), (
float
)(ele *
CSL_PI
/180.0) );
77
mPositionChanged
=
true
;
78
}
else
79
mPosition
=
new
CPoint
(
kPolar
, (
float
)dist, (
float
)(azi *
CSL_PI
/180.0), (
float
)(ele *
CSL_PI
/180.0));
80
}
81
82
void
SpatialSource::dump
() {
83
// cout << "x: " << mPosition->x << "\t" << "y: " << mPosition->y << "\t" << "z: " << mPosition->z << endl;
84
// cout << "\t\tradius: " << distance() << "\tazi: " << azimuth() << "\tele: " << elevation() << endl;
85
printf(
"\taz: %5.2f el: %5.2f dist: %4.2f\n"
,
86
azimuth
(),
// * CSL_DEGS_PER_RAD,
87
elevation
(),
// * CSL_DEGS_PER_RAD,
88
distance
());
89
}
90
91
// nextBuffer
92
93
void
SpatialSource::nextBuffer
(
Buffer
&outputBuffer,
unsigned
outBufNum)
throw
(
CException
) {
94
Port
*inPort = mInputs[
CSL_INPUT
];
95
inPort->
mUGen
->
nextBuffer
(outputBuffer);
// get its UGen
96
mPositionChanged =
false
;
97
}
98
99
void
SpatialSource::nextBuffer
(
Buffer
&outputBuffer)
throw
(
CException
) {
100
#ifdef CSL_DEBUG
101
logMsg
(
"SpatialSource::nextBuffer"
);
102
#endif
103
nextBuffer(outputBuffer, 0);
104
}
CSL
Spatializers
SpatialSource.cpp
Generated on Thu Nov 15 2012 22:01:10 for CSL by
1.8.1.1