This commit is contained in:
gauthiier 2022-03-20 12:25:41 +01:00
parent efb3bfd43b
commit 4ed3ee2435
5 changed files with 521 additions and 79 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.DS_Store

118
src/Voice.cpp Normal file
View File

@ -0,0 +1,118 @@
#include "Voice.h"
void Voice::setup(Receiver &receiver)
{
_font = Font(_font_name, _size);
_tex = gl::TextureFont::create(_font);
/*- NET -*/
receiver.setListener(_channel + "/utterance",
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_utterance_mutex);
std::string u = m[0].string();
if(_utterance != u) {
_utterance = u;
_utterance_cb(this);
}
});
receiver.setListener(_channel + "/font/color",
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_color_mutex);
float a = m[0].flt();
float r = m[1].flt();
float g = m[2].flt();
float b = m[3].flt();
ColorA c(r, g, b, a);
if(_color != c) {
_color = c;
_change_cb(this);
console() << _name << ": change color" << endl;
console() << r << ", " << g << ", " << b << ", " << a << endl;
}
});
receiver.setListener(_channel + "/background",
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_color_mutex);
float a = m[0].flt();
float r = m[1].flt();
float g = m[2].flt();
float b = m[3].flt();
ColorA c(r, g, b, a);
if(_background != c) {
_background = c;
_change_cb(this);
console() << _name << ": change background" << endl;
console() << r << ", " << g << ", " << b << ", " << a << endl;
}
});
receiver.setListener(_channel + "/font/size",
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_font_mutex);
int s = m[0].int32();
if(_size != s) {
_size = s;
_change_cb(this);
_update_font = true;
console() << _name << ": change font size" << endl;
}
});
receiver.setListener(_channel + "/font/type",
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_font_mutex);
std::string type = m[0].string();
if(_font.getName() != type) {
_font_name = type;
_change_cb(this);
_update_font = true;
console() << _name << ": change font type" << endl;
}
});
}
void Voice::update()
{
if(_update_font){
// need to check if the font name is valide... bof...
_font = Font(_font_name, _size);
_tex = gl::TextureFont::create(_font);
_update_font = false;
}
}
void Voice::draw(Rectf &bounds)
{
// gl::color(_color);
vec2 offset = vec2(0);
_tex->drawStringWrapped(_utterance, bounds + offset);
}
void VoiceAloud::setup()
{
auto ctx = audio::master();
mFilter = ctx->makeNode( new audio::FilterLowPassNode );
mGen = ctx->makeNode( new audio::GenSineNode );
mGain = ctx->makeNode( new audio::GainNode );
mGen->setFreq( _freq );
mFilter->setCutoffFreq(_freq / 2);
mFilter->setResonance(0.5f);
mGain->setValue( _amp );
mGen >> mFilter >> mGain >> ctx->getOutput();
mGen->enable();
ctx->enable();
}
void VoiceAloud::update()
{
mGen->setFreq( _freq );
mGain->setValue( _amp );
}

78
src/Voice.h Normal file
View File

@ -0,0 +1,78 @@
#ifndef _Voice_
#define _Voice_
#include "cinder/gl/gl.h"
#include "cinder/gl/TextureFont.h"
#include "cinder/gl/GlslProg.h"
#include "cinder/osc/Osc.h"
#include "cinder/audio/Voice.h"
#include "cinder/audio/Context.h"
#include "cinder/audio/GenNode.h"
#include "cinder/audio/GainNode.h"
#include "cinder/audio/FilterNode.h"
#include "cinder/audio/NodeEffects.h"
#include "cinder/Timeline.h"
using namespace ci;
using namespace ci::app;
using namespace std;
/*- NET -*/
using Receiver = osc::ReceiverUdp;
/*- Voice -*/
class Voice {
public:
Voice(std::string name, std::string channel, std::string font, int size, ColorA8u color, ColorA8u background, std::function<void(Voice*)> utterance_cb, std::function<void(Voice*)> change_cb)
: _name(name),
_channel(channel),
_utterance(name),
_font_name(font),
_size(size),
_color(color),
_background(background),
_utterance_cb(utterance_cb),
_change_cb(change_cb)
{};
void setup(Receiver &receiver);
void update();
void draw(Rectf &bounds);
std::string _name;
std::string _channel;
std::string _utterance;
Font _font;
std::string _font_name;
ColorA8u _color;
ColorA8u _background;
int _size;
bool _update_font = false;
gl::TextureFontRef _tex;
gl::GlslProgRef _glsl;
std::mutex _color_mutex, _font_mutex, _utterance_mutex;
std::function<void(Voice*)> _utterance_cb, _change_cb;
audio::VoiceRef _sound;
};
class VoiceAloud {
public:
VoiceAloud(float freq, float amp) : _freq(freq), _amp(amp) {};
void setup();
void update();
audio::GenNodeRef mGen; // Gen's generate audio signals
audio::FilterLowPassNodeRef mFilter;
audio::GainNodeRef mGain; // Gain modifies the volume of the signal
Anim<float> _freq;
Anim<float> _amp;
};
#endif /* Voice_hpp */

View File

@ -1,34 +1,280 @@
#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/gl/gl.h"
#include "cinder/gl/TextureFont.h"
#include "cinder/osc/Osc.h"
#include "cinder/Json.h"
#include "cinder/Log.h"
#include "cinder/Timeline.h"
#include "Voice.h"
using namespace ci;
using namespace ci::app;
using namespace std;
class voicemachineApp : public App {
int WINDOW_H = 1500;
float RATIO = 0.5625;
/*- NET -*/
using Receiver = osc::ReceiverUdp;
using protocol = asio::ip::udp;
std::string hexA(ColorA8u c) {
//https://stackoverflow.com/questions/5100718/integer-to-hex-string-in-c
uint32_t cu = c.a << 24 | c.r << 16 | c.g << 8 | c.b;
std::stringstream hex_s;
hex_s << "0x" << std::setfill ('0') << std::setw(sizeof(uint32_t)) << std::hex << cu;
return hex_s.str();
}
ColorA8u lerp_color(const ColorA8u &start, const ColorA8u &end, float t ) {
uint8_t r = abs(floor(start.r + (end.r - start.r) * t));
uint8_t g = abs(floor(start.g + (end.g - start.g) * t));
uint8_t b = abs(floor(start.b + (end.b - start.b) * t));
uint8_t a = abs(floor(start.a + (end.a - start.a) * t));
return ColorA8u(r, g, b, a);
}
class VoiceMachineApp : public App {
public:
VoiceMachineApp();
void setup() override;
void mouseDown( MouseEvent event ) override;
void update() override;
void draw() override;
void cleanup() override;
void keyDown( KeyEvent event ) override;
void stage_config();
void save_config();
void utterance(Voice* v);
void change(Voice* v);
void clear();
std::map<std::string, Voice*> _map_voices;
Voice* _current_voice = NULL;
Anim<ColorA8u> _background = ColorA8u::black();
Anim<ColorA8u> _voice_color = ColorA8u::white();
// ColorA8u _background = ColorA8u::black();
// ColorA8u _voice_color = ColorA8u::white();
/*- NET -*/
std::shared_ptr<asio::io_service> _io_service;
std::shared_ptr<asio::io_service::work> _work;
std::thread _thread;
std::shared_ptr<Receiver> _receiver;
std::map<uint64_t, protocol::endpoint> _connections;
std::mutex _command_mutex;
// VoiceAloud audio = VoiceAloud(100, 0.5f);
};
void voicemachineApp::setup()
VoiceMachineApp::VoiceMachineApp()
: _io_service(new asio::io_service),
_work(new asio::io_service::work(*_io_service))
// _receiver(PORT, protocol::v4(), *_io_service)
{}
void VoiceMachineApp::stage_config()
{
try {
const JsonTree config(loadAsset("voice.config.json"));
// RECEIVER PORT
int port = config["port_voicemachine"].getValue<int>();
_receiver = std::shared_ptr<Receiver>(new Receiver(port, protocol::v4(), *_io_service));
//VOICES
for(auto &voice: config["voices"].getChildren()){
std::string name = voice["name"].getValue();
std::string channel = voice["osc_channel"]["root"].getValue();
std::string font = voice["font"].getValue();
int size = voice["size"].getValue<int>();
std::string hexcolor = voice["color"].getValue();
ColorA8u color = ColorA8u::hexA(std::stoul(hexcolor, nullptr, 16));
std::string hexbackground = voice["background"].getValue();
ColorA background = ColorA::hexA(std::stoul(hexbackground, nullptr, 16));
std::function<void(Voice*)> utterance_cb = [=](Voice* v) {
this->utterance(v);
};
std::function<void(Voice*)> change_cb = [=](Voice* v) {
this->change(v);
};
Voice* v = new Voice(name, channel, font, size, color, background, utterance_cb, change_cb);
_map_voices[name] = v;
// //garbage
// _current_voice = v;
}
std::string command_channel = config["command_osc_channel"].getValue();
_receiver->setListener(command_channel,
[&](const osc::Message &m){
std::lock_guard<std::mutex> lock(_command_mutex);
std::string cmd = m[0].string();
console() << "command: " << cmd << endl;
if(cmd == "save") save_config();
else if (cmd == "clear") clear();
});
} catch (ci::Exception &exc) {
CI_LOG_D("Failed to stage config: " << exc.what());
}
}
void voicemachineApp::mouseDown( MouseEvent event )
void VoiceMachineApp::save_config()
{
try {
JsonTree config(loadAsset("voice.config.json"));
JsonTree voices = config.getChild("voices");
for(int i = 0; i < voices.getNumChildren(); i++) {
Voice* v = _map_voices[voices[i]["name"].getValue()];
voices[i]["font"] = JsonTree("font", v->_font.getName());
voices[i]["size"] = JsonTree("size", v->_size);
voices[i]["color"] = JsonTree("color", hexA(v->_color));
voices[i]["background"] = JsonTree("background", hexA(v->_background));
}
config["voices"] = voices;
config.write(getAssetPath("voice.config.json"));
CI_LOG_D("saved config");
} catch (ci::Exception &exc) {
CI_LOG_D("Failed to save config: " << exc.what());
}
}
void voicemachineApp::update()
void VoiceMachineApp::utterance(Voice* v)
{
console() << "utterance : " << v->_name << endl;
if(_current_voice != v) {
_current_voice = v;
timeline().apply( &_voice_color, _current_voice->_color, 4.5f, EaseInSine(), lerp_color );
timeline().apply( &_background, _current_voice->_background, 7.5f, EaseInCubic(), lerp_color ).appendTo(&_voice_color);
}
}
void voicemachineApp::draw()
void VoiceMachineApp::change(Voice* v)
{
gl::clear( Color( 0, 0, 0 ) );
console() << "change : " << v->_name << endl;
_current_voice = v;
_background = _current_voice->_background;
_voice_color = _current_voice->_color;
}
CINDER_APP( voicemachineApp, RendererGl )
void VoiceMachineApp::clear()
{
console() << "clearing" << endl;
_current_voice = NULL;
}
void VoiceMachineApp::setup()
{
// audio.setup();
stage_config();
for(const auto& [n, v]: _map_voices)
v->setup(*_receiver);
try {
_receiver->bind();
} catch (const osc::Exception &e) {
CI_LOG_E("Error receiver bind: " << e.what() << " - " << e.value());
quit();
}
_receiver->listen(
[](asio::error_code e, protocol::endpoint end) -> bool {
if(e){
CI_LOG_E("Error receiver listen: " << e.message() << " - " << e.value() << " - " << end);
return false;
} return true;
});
//3. start thread
_thread = std::thread(std::bind(
[](std::shared_ptr<asio::io_service> &service){
service->run();
}, _io_service));
}
void VoiceMachineApp::update()
{
for(const auto& [n, v]: _map_voices)
v->update();
// audio.update();
}
void VoiceMachineApp::draw()
{
gl::setMatricesWindow( getWindowSize() );
gl::enableAlphaBlending();
gl::clear(_background.value());
gl::color(_voice_color);
if(_current_voice){
Rectf bounds( 40, _current_voice->_tex->getAscent() + 40, getWindowWidth() - 40, getWindowHeight() - 40 );
_current_voice->draw(bounds);
}
}
void VoiceMachineApp::cleanup()
{
_work.reset();
_io_service->stop();
_thread.join();
}
void VoiceMachineApp::keyDown( KeyEvent event )
{
switch( event.getChar() ) {
case 's':
{
CI_LOG_D("saving config...");
save_config();
break;
}
// case '-':
// mFont = Font( mFont.getName(), mFont.getSize() - 1 );
// mTextureFont = gl::TextureFont::create( mFont );
// break;
}
}
auto settingsFunc = [](App::Settings *settings) {
settings->setMultiTouchEnabled( false );
settings->setFrameRate(25);
settings->setWindowSize(int(WINDOW_H * RATIO), WINDOW_H );
// settings->setFullScreen();
//FullScreenOptions& exclusive( bool enable = true )
};
CINDER_APP( VoiceMachineApp, RendererGl, settingsFunc )

View File

@ -16,14 +16,12 @@
00B784B60FF439BC000DE1D7 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B784B20FF439BC000DE1D7 /* CoreAudio.framework */; };
00B9955A1B128DF400A5C623 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B995581B128DF400A5C623 /* IOKit.framework */; };
00B9955B1B128DF400A5C623 /* IOSurface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B995591B128DF400A5C623 /* IOSurface.framework */; };
5323E6B20EAFCA74003A9687 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5323E6B10EAFCA74003A9687 /* CoreVideo.framework */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
4C873AE62C144407A9725762 /* Osc.h in Headers */ = {isa = PBXBuildFile; fileRef = A43DE166BACA4EFFBF60EEAD /* Osc.h */; };
61BC22F18F324E6E8815BD34 /* Osc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEED49B18AF14821BF61F719 /* Osc.cpp */; };
9694A235FF1F47B6B3C80AEC /* voicemachine_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = BA89722D261F445CBA3D8E1C /* voicemachine_Prefix.pch */; };
7CFBE1F4D6B14DE585A12E16 /* CinderApp.icns in Resources */ = {isa = PBXBuildFile; fileRef = AE451D503FF042C9AE08908C /* CinderApp.icns */; };
A6850AE63D214AEDA0375FB5 /* Resources.h in Headers */ = {isa = PBXBuildFile; fileRef = D36537B11C304E7DAA1E9FDD /* Resources.h */; };
14BED3D2B12E45A98475E9EA /* voicemachineApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B0C0230F695948E8B2D6A7B3 /* voicemachineApp.cpp */; };
5323E6B20EAFCA74003A9687 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5323E6B10EAFCA74003A9687 /* CoreVideo.framework */; };
61BC22F18F324E6E8815BD34 /* Osc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEED49B18AF14821BF61F719 /* Osc.cpp */; };
7CFBE1F4D6B14DE585A12E16 /* CinderApp.icns in Resources */ = {isa = PBXBuildFile; fileRef = AE451D503FF042C9AE08908C /* CinderApp.icns */; };
8C053D7E27E7402800BE7270 /* Voice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C053D7D27E7402800BE7270 /* Voice.cpp */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -37,17 +35,19 @@
00B995581B128DF400A5C623 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
00B995591B128DF400A5C623 /* IOSurface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOSurface.framework; path = System/Library/Frameworks/IOSurface.framework; sourceTree = SDKROOT; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
16410EF0C18C4B3D9B23B091 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
5323E6B10EAFCA74003A9687 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = "<absolute>"; };
8C053D7C27E7402800BE7270 /* Voice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Voice.h; path = ../src/Voice.h; sourceTree = "<group>"; };
8C053D7D27E7402800BE7270 /* Voice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Voice.cpp; path = ../src/Voice.cpp; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* voicemachine.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = voicemachine.app; sourceTree = BUILT_PRODUCTS_DIR; };
B0C0230F695948E8B2D6A7B3 /* voicemachineApp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.cpp; path = ../src/voicemachineApp.cpp; sourceTree = "<group>"; name = voicemachineApp.cpp; };
D36537B11C304E7DAA1E9FDD /* Resources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ../include/Resources.h; sourceTree = "<group>"; name = Resources.h; };
AE451D503FF042C9AE08908C /* CinderApp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ../resources/CinderApp.icns; sourceTree = "<group>"; name = CinderApp.icns; };
16410EF0C18C4B3D9B23B091 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; name = Info.plist; };
BA89722D261F445CBA3D8E1C /* voicemachine_Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = "\"\""; path = voicemachine_Prefix.pch; sourceTree = "<group>"; name = voicemachine_Prefix.pch; };
EEED49B18AF14821BF61F719 /* Osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.cpp; path = ../blocks/OSC/src/cinder/osc/Osc.cpp; sourceTree = "<group>"; name = Osc.cpp; };
A43DE166BACA4EFFBF60EEAD /* Osc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ../blocks/OSC/src/cinder/osc/Osc.h; sourceTree = "<group>"; name = Osc.h; };
A43DE166BACA4EFFBF60EEAD /* Osc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Osc.h; path = ../blocks/OSC/src/cinder/osc/Osc.h; sourceTree = "<group>"; };
AE451D503FF042C9AE08908C /* CinderApp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = CinderApp.icns; path = ../resources/CinderApp.icns; sourceTree = "<group>"; };
B0C0230F695948E8B2D6A7B3 /* voicemachineApp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.cpp; name = voicemachineApp.cpp; path = ../src/voicemachineApp.cpp; sourceTree = "<group>"; };
BA89722D261F445CBA3D8E1C /* voicemachine_Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = "\"\""; path = voicemachine_Prefix.pch; sourceTree = "<group>"; };
D36537B11C304E7DAA1E9FDD /* Resources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Resources.h; path = ../include/Resources.h; sourceTree = "<group>"; };
EEED49B18AF14821BF61F719 /* Osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.cpp; name = Osc.cpp; path = ../blocks/OSC/src/cinder/osc/Osc.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -72,9 +72,19 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
01B97315FEAEA392516A2CEA /* Blocks */ = {
isa = PBXGroup;
children = (
674D71528C1B4016B5E8F7A8 /* OSC */,
);
name = Blocks;
sourceTree = "<group>";
};
080E96DDFE201D6D7F000001 /* Source */ = {
isa = PBXGroup;
children = (
8C053D7D27E7402800BE7270 /* Voice.cpp */,
8C053D7C27E7402800BE7270 /* Voice.h */,
B0C0230F695948E8B2D6A7B3 /* voicemachineApp.cpp */,
);
name = Source;
@ -128,47 +138,6 @@
name = voicemachine;
sourceTree = "<group>";
};
A844FD97CE404410A8F0EE52 /* osc */ = {
isa = PBXGroup;
children = (
EEED49B18AF14821BF61F719 /* Osc.cpp */,
A43DE166BACA4EFFBF60EEAD /* Osc.h */,
);
name = osc;
sourceTree = "<group>";
};
62DA978992674AE3A1DE794A /* cinder */ = {
isa = PBXGroup;
children = (
A844FD97CE404410A8F0EE52 /* osc */,
);
name = cinder;
sourceTree = "<group>";
};
945EEA54632045E092AADDB7 /* src */ = {
isa = PBXGroup;
children = (
62DA978992674AE3A1DE794A /* cinder */,
);
name = src;
sourceTree = "<group>";
};
674D71528C1B4016B5E8F7A8 /* OSC */ = {
isa = PBXGroup;
children = (
945EEA54632045E092AADDB7 /* src */,
);
name = OSC;
sourceTree = "<group>";
};
01B97315FEAEA392516A2CEA /* Blocks */ = {
isa = PBXGroup;
children = (
674D71528C1B4016B5E8F7A8 /* OSC */,
);
name = Blocks;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Headers */ = {
isa = PBXGroup;
children = (
@ -196,6 +165,39 @@
name = Frameworks;
sourceTree = "<group>";
};
62DA978992674AE3A1DE794A /* cinder */ = {
isa = PBXGroup;
children = (
A844FD97CE404410A8F0EE52 /* osc */,
);
name = cinder;
sourceTree = "<group>";
};
674D71528C1B4016B5E8F7A8 /* OSC */ = {
isa = PBXGroup;
children = (
945EEA54632045E092AADDB7 /* src */,
);
name = OSC;
sourceTree = "<group>";
};
945EEA54632045E092AADDB7 /* src */ = {
isa = PBXGroup;
children = (
62DA978992674AE3A1DE794A /* cinder */,
);
name = src;
sourceTree = "<group>";
};
A844FD97CE404410A8F0EE52 /* osc */ = {
isa = PBXGroup;
children = (
EEED49B18AF14821BF61F719 /* Osc.cpp */,
A43DE166BACA4EFFBF60EEAD /* Osc.h */,
);
name = osc;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -222,6 +224,8 @@
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "voicemachine" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
@ -259,6 +263,7 @@
files = (
14BED3D2B12E45A98475E9EA /* voicemachineApp.cpp in Sources */,
61BC22F18F324E6E8815BD34 /* Osc.cpp in Sources */,
8C053D7E27E7402800BE7270 /* Voice.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -269,17 +274,17 @@
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
GCC_DYNAMIC_NO_PIC = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = voicemachine_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = voicemachine_Prefix.pch;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
@ -301,12 +306,12 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_OPTIMIZATION_LEVEL = 3;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = voicemachine_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = (
"NDEBUG=1",
"$(inherited)",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = voicemachine_Prefix.pch;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
@ -333,10 +338,7 @@
MACOSX_DEPLOYMENT_TARGET = 10.13;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
USER_HEADER_SEARCH_PATHS = (
"\"$(CINDER_PATH)/include\" ../include",
../blocks/OSC/src,
);
USER_HEADER_SEARCH_PATHS = "\"$(CINDER_PATH)/include\" ../include ../blocks/OSC/src";
};
name = Debug;
};
@ -352,10 +354,7 @@
HEADER_SEARCH_PATHS = "\"$(CINDER_PATH)/include\"";
MACOSX_DEPLOYMENT_TARGET = 10.13;
SDKROOT = macosx;
USER_HEADER_SEARCH_PATHS = (
"\"$(CINDER_PATH)/include\" ../include",
../blocks/OSC/src,
);
USER_HEADER_SEARCH_PATHS = "\"$(CINDER_PATH)/include\" ../include ../blocks/OSC/src";
};
name = Release;
};