mirror of
https://github.com/thestk/stk
synced 2026-01-20 16:01:54 +00:00
Version 4.1.2
This commit is contained in:
committed by
Stephen Sinclair
parent
6e0d1955a8
commit
586b0add5f
@@ -105,9 +105,9 @@ void ADSR :: setReleaseTime(MY_FLOAT aTime)
|
||||
{
|
||||
if (aTime < 0.0) {
|
||||
printf("ADSR: negative times not allowed ... correcting!\n");
|
||||
releaseRate = 1.0 / ( -aTime * Stk::sampleRate() );
|
||||
releaseRate = sustainLevel / ( -aTime * Stk::sampleRate() );
|
||||
}
|
||||
else releaseRate = 1.0 / ( aTime * Stk::sampleRate() );
|
||||
else releaseRate = sustainLevel / ( aTime * Stk::sampleRate() );
|
||||
}
|
||||
|
||||
void ADSR :: setAllTimes(MY_FLOAT aTime, MY_FLOAT dTime, MY_FLOAT sLevel, MY_FLOAT rTime)
|
||||
|
||||
@@ -182,7 +182,7 @@ void BandedWG :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "BandedWG: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "BandedWG: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
if (freakency > 1568.0) freakency = 1568.0;
|
||||
@@ -197,13 +197,13 @@ void BandedWG :: setFrequency(MY_FLOAT frequency)
|
||||
delay[i].setDelay( length );
|
||||
gains[i]=basegains[i];
|
||||
// gains[i]=(MY_FLOAT) pow(basegains[i], 1/((MY_FLOAT)delay[i].getDelay()));
|
||||
// cerr << gains[i];
|
||||
// std::cerr << gains[i];
|
||||
}
|
||||
else {
|
||||
nModes = i;
|
||||
break;
|
||||
}
|
||||
// cerr << endl;
|
||||
// std::cerr << std::endl;
|
||||
|
||||
// Set the bandpass filter resonances
|
||||
radius = 1.0 - PI * 32 / Stk::sampleRate(); //freakency * modes[i] / Stk::sampleRate()/32;
|
||||
@@ -257,7 +257,7 @@ void BandedWG :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->startBowing(amplitude, amplitude * 0.001);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BandedWG: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "BandedWG: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@ void BandedWG :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBowing((1.0 - amplitude) * 0.005);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BandedWG: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "BandedWG: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -320,11 +320,11 @@ void BandedWG :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "BandedWG: Control value less than zero!" << endl;
|
||||
std::cerr << "BandedWG: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "BandedWG: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "BandedWG: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_BowPressure_) { // 2
|
||||
@@ -353,7 +353,7 @@ void BandedWG :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_ModWheel_) { // 1
|
||||
// baseGain = 0.9989999999 + (0.001 * norm );
|
||||
baseGain = 0.8999999999999999 + (0.1 * norm);
|
||||
// cerr << "Yuck!" << endl;
|
||||
// std::cerr << "Yuck!" << std::endl;
|
||||
for (int i=0; i<nModes; i++)
|
||||
gains[i]=(MY_FLOAT) basegains[i]*baseGain;
|
||||
// gains[i]=(MY_FLOAT) pow(baseGain, (int)((MY_FLOAT)delay[i].getDelay()+i));
|
||||
@@ -371,10 +371,10 @@ void BandedWG :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_ProphesyRibbon_) // 16
|
||||
this->setPreset((int) value);
|
||||
else
|
||||
cerr << "BandedWG: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "BandedWG: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BandedWG: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "BandedWG: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -33,25 +33,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "BeeThree.h"
|
||||
#include <string.h>
|
||||
|
||||
BeeThree :: BeeThree()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 0.999);
|
||||
this->setRatio(1, 1.997);
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
#include "BlowBotl.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
|
||||
#define __BOTTLE_RADIUS_ 0.999
|
||||
|
||||
@@ -29,10 +28,8 @@ BlowBotl :: BlowBotl()
|
||||
dcBlock = new PoleZero();
|
||||
dcBlock->setBlockZero();
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency( 5.925 );
|
||||
vibratoGain = 0.0;
|
||||
|
||||
@@ -67,7 +64,7 @@ void BlowBotl :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "BlowBotl: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "BlowBotl: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -94,7 +91,7 @@ void BlowBotl :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
outputGain = amplitude + 0.001;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowBotl: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "BlowBotl: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -103,7 +100,7 @@ void BlowBotl :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.02);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowBotl: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "BlowBotl: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -134,11 +131,11 @@ void BlowBotl :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "BlowBotl: Control value less than zero!" << endl;
|
||||
std::cerr << "BlowBotl: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "BlowBotl: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "BlowBotl: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_NoiseLevel_) // 4
|
||||
@@ -150,9 +147,9 @@ void BlowBotl :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "BlowBotl: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "BlowBotl: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowBotl: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "BlowBotl: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include "BlowHole.h"
|
||||
#include "SKINI.msg"
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
BlowHole :: BlowHole(MY_FLOAT lowestFrequency)
|
||||
{
|
||||
@@ -83,10 +82,8 @@ BlowHole :: BlowHole(MY_FLOAT lowestFrequency)
|
||||
// Start with register vent closed
|
||||
vent->setGain(0.0);
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency((MY_FLOAT) 5.735);
|
||||
outputGain = (MY_FLOAT) 1.0;
|
||||
noiseGain = (MY_FLOAT) 0.2;
|
||||
@@ -121,7 +118,7 @@ void BlowHole :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "BlowHole: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "BlowHole: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -181,7 +178,7 @@ void BlowHole :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
outputGain = amplitude + 0.001;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowHole: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "BlowHole: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -190,7 +187,7 @@ void BlowHole :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.01);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowHole: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "BlowHole: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -234,11 +231,11 @@ void BlowHole :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "BlowHole: Control value less than zero!" << endl;
|
||||
std::cerr << "BlowHole: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "BlowHole: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "BlowHole: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_ReedStiffness_) // 2
|
||||
@@ -252,9 +249,9 @@ void BlowHole :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
envelope->setValue( norm );
|
||||
else
|
||||
cerr << "BlowHole: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "BlowHole: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "BlowHole: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "BlowHole: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
#include "Bowed.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
|
||||
Bowed :: Bowed(MY_FLOAT lowestFrequency)
|
||||
{
|
||||
@@ -36,10 +35,8 @@ Bowed :: Bowed(MY_FLOAT lowestFrequency)
|
||||
bowTable = new BowTabl;
|
||||
bowTable->setSlope((MY_FLOAT) 3.0);
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency((MY_FLOAT) 6.12723);
|
||||
vibratoGain = (MY_FLOAT) 0.0;
|
||||
|
||||
@@ -81,7 +78,7 @@ void Bowed :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Bowed: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Bowed: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -111,7 +108,7 @@ void Bowed :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->setFrequency(frequency);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Bowed: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Bowed: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -120,7 +117,7 @@ void Bowed :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBowing(((MY_FLOAT) 1.0 - amplitude) * (MY_FLOAT) 0.005);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Bowed: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Bowed: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -163,11 +160,11 @@ void Bowed :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Bowed: Control value less than zero!" << endl;
|
||||
std::cerr << "Bowed: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Bowed: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Bowed: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_BowPressure_) // 2
|
||||
@@ -184,9 +181,9 @@ void Bowed :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget(norm);
|
||||
else
|
||||
cerr << "Bowed: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Bowed: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Bowed: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Bowed: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
#include "Brass.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
Brass :: Brass(MY_FLOAT lowestFrequency)
|
||||
@@ -38,10 +37,8 @@ Brass :: Brass(MY_FLOAT lowestFrequency)
|
||||
adsr = new ADSR;
|
||||
adsr->setAllTimes( 0.005, 0.001, 1.0, 0.010);
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency( 6.137 );
|
||||
vibratoGain = 0.0;
|
||||
|
||||
@@ -73,7 +70,7 @@ void Brass :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Brass: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Brass: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -89,7 +86,7 @@ void Brass :: setLip(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Brass: setLip parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Brass: setLip parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -115,7 +112,7 @@ void Brass :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->startBlowing(amplitude, amplitude * 0.001);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Brass: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Brass: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -124,7 +121,7 @@ void Brass :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.005);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Brass: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Brass: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -151,11 +148,11 @@ void Brass :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Brass: Control value less than zero!" << endl;
|
||||
std::cerr << "Brass: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Brass: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Brass: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_LipTension_) { // 2
|
||||
@@ -171,9 +168,9 @@ void Brass :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "Brass: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Brass: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Brass: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Brass: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Chorus.h"
|
||||
#include <string.h>
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
Chorus :: Chorus(MY_FLOAT baseDelay)
|
||||
{
|
||||
@@ -18,12 +17,9 @@ Chorus :: Chorus(MY_FLOAT baseDelay)
|
||||
delayLine[1] = new DelayL((long) (baseDelay), (long) baseDelay + 2);
|
||||
baseLength = baseDelay;
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char path[128];
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
mods[0] = new WaveLoop( strcat(path,"sinewave.raw"), TRUE );
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
mods[1] = new WaveLoop( strcat(path,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
mods[0] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
mods[1] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
mods[0]->setFrequency(0.2);
|
||||
mods[1]->setFrequency(0.222222);
|
||||
modDepth = 0.05;
|
||||
@@ -51,11 +47,11 @@ void Chorus :: setEffectMix(MY_FLOAT mix)
|
||||
{
|
||||
effectMix = mix;
|
||||
if ( mix < 0.0 ) {
|
||||
cerr << "Chorus: setEffectMix parameter is less than zero!" << endl;
|
||||
std::cerr << "Chorus: setEffectMix parameter is less than zero!" << std::endl;
|
||||
effectMix = 0.0;
|
||||
}
|
||||
else if ( mix > 1.0 ) {
|
||||
cerr << "Chorus: setEffectMix parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "Chorus: setEffectMix parameter is greater than 1.0!" << std::endl;
|
||||
effectMix = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
#include "Clarinet.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
|
||||
Clarinet :: Clarinet(MY_FLOAT lowestFrequency)
|
||||
{
|
||||
@@ -37,10 +36,8 @@ Clarinet :: Clarinet(MY_FLOAT lowestFrequency)
|
||||
envelope = new Envelope;
|
||||
noise = new Noise;
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char path[128];
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(path,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency((MY_FLOAT) 5.735);
|
||||
outputGain = (MY_FLOAT) 1.0;
|
||||
noiseGain = (MY_FLOAT) 0.2;
|
||||
@@ -67,7 +64,7 @@ void Clarinet :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Clarinet: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Clarinet: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -97,7 +94,7 @@ void Clarinet :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
outputGain = amplitude + (MY_FLOAT) 0.001;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Clarinet: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Clarinet: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -106,7 +103,7 @@ void Clarinet :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * (MY_FLOAT) 0.01);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Clarinet: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Clarinet: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -140,11 +137,11 @@ void Clarinet :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Clarinet: Control value less than zero!" << endl;
|
||||
std::cerr << "Clarinet: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Clarinet: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Clarinet: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_ReedStiffness_) // 2
|
||||
@@ -158,9 +155,9 @@ void Clarinet :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
envelope->setValue(norm);
|
||||
else
|
||||
cerr << "Clarinet: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Clarinet: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Clarinet: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Clarinet: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Delay.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
Delay :: Delay()
|
||||
{
|
||||
@@ -64,13 +64,13 @@ void Delay :: clear(void)
|
||||
void Delay :: setDelay(long theDelay)
|
||||
{
|
||||
if (theDelay > length-1) { // The value is too big.
|
||||
cerr << "Delay: setDelay(" << theDelay << ") too big!" << endl;
|
||||
std::cerr << "Delay: setDelay(" << theDelay << ") too big!" << std::endl;
|
||||
// Force delay to maxLength.
|
||||
outPoint = inPoint + 1;
|
||||
delay = length - 1;
|
||||
}
|
||||
else if (theDelay < 0 ) {
|
||||
cerr << "Delay: setDelay(" << theDelay << ") less than zero!" << endl;
|
||||
std::cerr << "Delay: setDelay(" << theDelay << ") less than zero!" << std::endl;
|
||||
outPoint = inPoint;
|
||||
delay = 0;
|
||||
}
|
||||
@@ -109,15 +109,15 @@ MY_FLOAT Delay :: energy(void) const
|
||||
return e;
|
||||
}
|
||||
|
||||
MY_FLOAT Delay :: contentsAt(long tapDelay) const
|
||||
MY_FLOAT Delay :: contentsAt(unsigned long tapDelay) const
|
||||
{
|
||||
long i = tapDelay;
|
||||
if (i < 0) {
|
||||
cerr << "Delay: contentsAt(" << tapDelay << ") too small!" << endl;
|
||||
i = 0;
|
||||
if (i < 1) {
|
||||
std::cerr << "Delay: contentsAt(" << tapDelay << ") too small!" << std::endl;
|
||||
i = 1;
|
||||
}
|
||||
else if (i > delay) {
|
||||
cerr << "Delay: contentsAt(" << tapDelay << ") too big!" << endl;
|
||||
std::cerr << "Delay: contentsAt(" << tapDelay << ") too big!" << std::endl;
|
||||
i = (long) delay;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "DelayA.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
DelayA :: DelayA()
|
||||
{
|
||||
@@ -46,6 +46,7 @@ DelayA :: DelayA(MY_FLOAT theDelay, long maxDelay)
|
||||
|
||||
inPoint = 0;
|
||||
this->setDelay(theDelay);
|
||||
apInput = 0.0;
|
||||
doNextOut = true;
|
||||
}
|
||||
|
||||
@@ -64,13 +65,13 @@ void DelayA :: setDelay(MY_FLOAT theDelay)
|
||||
MY_FLOAT outPointer;
|
||||
|
||||
if (theDelay > length-1) {
|
||||
cerr << "DelayA: setDelay(" << theDelay << ") too big!" << endl;
|
||||
std::cerr << "DelayA: setDelay(" << theDelay << ") too big!" << std::endl;
|
||||
// Force delay to maxLength
|
||||
outPointer = inPoint + 1.0;
|
||||
delay = length - 1;
|
||||
}
|
||||
else if (theDelay < 0.5) {
|
||||
cerr << "DelayA: setDelay(" << theDelay << ") less than 0.5 not possible!" << endl;
|
||||
std::cerr << "DelayA: setDelay(" << theDelay << ") less than 0.5 not possible!" << std::endl;
|
||||
outPointer = inPoint + 0.4999999999;
|
||||
delay = 0.5;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "DelayL.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
DelayL :: DelayL()
|
||||
{
|
||||
@@ -56,13 +56,13 @@ void DelayL :: setDelay(MY_FLOAT theDelay)
|
||||
MY_FLOAT outPointer;
|
||||
|
||||
if (theDelay > length-1) {
|
||||
cerr << "DelayL: setDelay(" << theDelay << ") too big!" << endl;
|
||||
std::cerr << "DelayL: setDelay(" << theDelay << ") too big!" << std::endl;
|
||||
// Force delay to maxLength
|
||||
outPointer = inPoint + 1.0;
|
||||
delay = length - 1;
|
||||
}
|
||||
else if (theDelay < 0 ) {
|
||||
cerr << "DelayL: setDelay(" << theDelay << ") less than zero!" << endl;
|
||||
std::cerr << "DelayL: setDelay(" << theDelay << ") less than zero!" << std::endl;
|
||||
outPointer = inPoint;
|
||||
delay = 0;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Drummer.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
// Not really General MIDI yet. Coming soon.
|
||||
@@ -75,16 +74,16 @@ Drummer :: ~Drummer()
|
||||
void Drummer :: noteOn(MY_FLOAT instrument, MY_FLOAT amplitude)
|
||||
{
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Drummer: NoteOn instrument = " << instrument << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Drummer: NoteOn instrument = " << instrument << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
|
||||
MY_FLOAT gain = amplitude;
|
||||
if ( amplitude > 1.0 ) {
|
||||
cerr << "Drummer: noteOn amplitude parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "Drummer: noteOn amplitude parameter is greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
else if ( amplitude < 0.0 ) {
|
||||
cerr << "Drummer: noteOn amplitude parameter is less than 0.0!" << endl;
|
||||
std::cerr << "Drummer: noteOn amplitude parameter is less than 0.0!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -122,11 +121,8 @@ void Drummer :: noteOn(MY_FLOAT instrument, MY_FLOAT amplitude)
|
||||
nSounding += 1;
|
||||
|
||||
sounding[nSounding-1] = noteNum;
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char path[128];
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
strcat(path, waveNames[genMIDIMap[noteNum]]);
|
||||
waves[nSounding-1] = new WvIn(path, TRUE);
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
waves[nSounding-1] = new WvIn( (Stk::rawwavePath() + waveNames[genMIDIMap[noteNum]]).c_str(), TRUE );
|
||||
if (Stk::sampleRate() != 22050.0)
|
||||
waves[nSounding-1]->setRate( 22050.0 / Stk::sampleRate() );
|
||||
filters[nSounding-1]->setPole((MY_FLOAT) 0.999 - (gain * 0.6) );
|
||||
@@ -134,9 +130,9 @@ void Drummer :: noteOn(MY_FLOAT instrument, MY_FLOAT amplitude)
|
||||
}
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Number Sounding = " << nSounding << endl;
|
||||
for (i=0; i<nSounding; i++) cerr << sounding[i] << " ";
|
||||
cerr << "\n";
|
||||
std::cerr << "Number Sounding = " << nSounding << std::endl;
|
||||
for (i=0; i<nSounding; i++) std::cerr << sounding[i] << " ";
|
||||
std::cerr << "\n";
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
10
src/Echo.cpp
10
src/Echo.cpp
@@ -9,7 +9,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Echo.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
Echo :: Echo(MY_FLOAT longestDelay)
|
||||
{
|
||||
@@ -34,11 +34,11 @@ void Echo :: setDelay(MY_FLOAT delay)
|
||||
{
|
||||
MY_FLOAT size = delay;
|
||||
if ( delay < 0.0 ) {
|
||||
cerr << "Echo: setDelay parameter is less than zero!" << endl;
|
||||
std::cerr << "Echo: setDelay parameter is less than zero!" << std::endl;
|
||||
size = 0.0;
|
||||
}
|
||||
else if ( delay > length ) {
|
||||
cerr << "Echo: setDelay parameter is greater than delay length!" << endl;
|
||||
std::cerr << "Echo: setDelay parameter is greater than delay length!" << std::endl;
|
||||
size = length;
|
||||
}
|
||||
|
||||
@@ -49,11 +49,11 @@ void Echo :: setEffectMix(MY_FLOAT mix)
|
||||
{
|
||||
effectMix = mix;
|
||||
if ( mix < 0.0 ) {
|
||||
cerr << "Echo: setEffectMix parameter is less than zero!" << endl;
|
||||
std::cerr << "Echo: setEffectMix parameter is less than zero!" << std::endl;
|
||||
effectMix = 0.0;
|
||||
}
|
||||
else if ( mix > 1.0 ) {
|
||||
cerr << "Echo: setEffectMix parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "Echo: setEffectMix parameter is greater than 1.0!" << std::endl;
|
||||
effectMix = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
25
src/FM.cpp
25
src/FM.cpp
@@ -25,7 +25,6 @@
|
||||
|
||||
#include "FM.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
FM :: FM(int operators)
|
||||
@@ -41,10 +40,8 @@ FM :: FM(int operators)
|
||||
twozero->setB2( -1.0 );
|
||||
twozero->setGain( 0.0 );
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file.
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency(6.0);
|
||||
|
||||
int i;
|
||||
@@ -115,11 +112,11 @@ void FM :: setFrequency(MY_FLOAT frequency)
|
||||
void FM :: setRatio(int waveIndex, MY_FLOAT ratio)
|
||||
{
|
||||
if ( waveIndex < 0 ) {
|
||||
cerr << "FM: setRatio waveIndex parameter is less than zero!" << endl;
|
||||
std::cerr << "FM: setRatio waveIndex parameter is less than zero!" << std::endl;
|
||||
return;
|
||||
}
|
||||
else if ( waveIndex >= nOperators ) {
|
||||
cerr << "FM: setRatio waveIndex parameter is greater than the number of operators!" << endl;
|
||||
std::cerr << "FM: setRatio waveIndex parameter is greater than the number of operators!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -133,11 +130,11 @@ void FM :: setRatio(int waveIndex, MY_FLOAT ratio)
|
||||
void FM :: setGain(int waveIndex, MY_FLOAT gain)
|
||||
{
|
||||
if ( waveIndex < 0 ) {
|
||||
cerr << "FM: setGain waveIndex parameter is less than zero!" << endl;
|
||||
std::cerr << "FM: setGain waveIndex parameter is less than zero!" << std::endl;
|
||||
return;
|
||||
}
|
||||
else if ( waveIndex >= nOperators ) {
|
||||
cerr << "FM: setGain waveIndex parameter is greater than the number of operators!" << endl;
|
||||
std::cerr << "FM: setGain waveIndex parameter is greater than the number of operators!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -181,7 +178,7 @@ void FM :: noteOff(MY_FLOAT amplitude)
|
||||
keyOff();
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "FM: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "FM: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -190,11 +187,11 @@ void FM :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "FM: Control value less than zero!" << endl;
|
||||
std::cerr << "FM: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "FM: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "FM: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_Breath_) // 2
|
||||
@@ -212,10 +209,10 @@ void FM :: controlChange(int number, MY_FLOAT value)
|
||||
adsr[3]->setTarget( norm );
|
||||
}
|
||||
else
|
||||
cerr << "FM: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "FM: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "FM: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "FM: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -33,25 +33,14 @@
|
||||
#include "FMVoices.h"
|
||||
#include "SKINI.msg"
|
||||
#include "Phonemes.h"
|
||||
#include <string.h>
|
||||
|
||||
FMVoices :: FMVoices()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 2.00);
|
||||
this->setRatio(1, 4.00);
|
||||
@@ -129,7 +118,7 @@ void FMVoices :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->keyOn();
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "FMVoices: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "FMVoices: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -162,11 +151,11 @@ void FMVoices :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "FMVoices: Control value less than zero!" << endl;
|
||||
std::cerr << "FMVoices: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "FMVoices: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "FMVoices: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -186,9 +175,9 @@ void FMVoices :: controlChange(int number, MY_FLOAT value)
|
||||
tilt[2] = tilt[1] * norm;
|
||||
}
|
||||
else
|
||||
cerr << "FMVoices: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "FMVoices: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "FMVoices: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "FMVoices: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************/
|
||||
/*! \class Fluate
|
||||
/*! \class Flute
|
||||
\brief STK flute physical model class.
|
||||
|
||||
This class implements a simple flute
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
#include "Flute.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
|
||||
Flute :: Flute(MY_FLOAT lowestFrequency)
|
||||
{
|
||||
@@ -39,10 +38,8 @@ Flute :: Flute(MY_FLOAT lowestFrequency)
|
||||
noise = new Noise();
|
||||
adsr = new ADSR();
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency( 5.925 );
|
||||
|
||||
this->clear();
|
||||
@@ -84,7 +81,7 @@ void Flute :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
lastFrequency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Flute: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Flute: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
lastFrequency = 220.0;
|
||||
}
|
||||
|
||||
@@ -119,7 +116,7 @@ void Flute :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
outputGain = amplitude + 0.001;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Flute: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Flute: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -128,7 +125,7 @@ void Flute :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.02);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Flute: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Flute: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -177,11 +174,11 @@ void Flute :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Flute: Control value less than zero!" << endl;
|
||||
std::cerr << "Flute: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Flute: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Flute: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_JetDelay_) // 2
|
||||
@@ -195,9 +192,9 @@ void Flute :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "Flute: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Flute: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Flute: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Flute: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -27,25 +27,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "HevyMetl.h"
|
||||
#include <string.h>
|
||||
|
||||
HevyMetl :: HevyMetl()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 1.0 * 1.000);
|
||||
this->setRatio(1, 4.0 * 0.999);
|
||||
|
||||
@@ -21,7 +21,7 @@ Instrmnt :: ~Instrmnt()
|
||||
|
||||
void Instrmnt :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
cerr << "Instrmnt: virtual setFrequency function call!" << endl;
|
||||
std::cerr << "Instrmnt: virtual setFrequency function call!" << std::endl;
|
||||
}
|
||||
|
||||
MY_FLOAT Instrmnt :: lastOut() const
|
||||
@@ -29,6 +29,17 @@ MY_FLOAT Instrmnt :: lastOut() const
|
||||
return lastOutput;
|
||||
}
|
||||
|
||||
// Support for stereo output:
|
||||
MY_FLOAT Instrmnt :: lastOutLeft(void) const
|
||||
{
|
||||
return 0.5 * lastOutput;
|
||||
}
|
||||
|
||||
MY_FLOAT Instrmnt :: lastOutRight(void) const
|
||||
{
|
||||
return 0.5 * lastOutput;
|
||||
}
|
||||
|
||||
MY_FLOAT *Instrmnt :: tick(MY_FLOAT *vector, unsigned int vectorSize)
|
||||
{
|
||||
for (unsigned int i=0; i<vectorSize; i++)
|
||||
|
||||
@@ -38,7 +38,7 @@ JCRev :: JCRev(MY_FLOAT T60)
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
combDelays[i] = new Delay(lengths[i], lengths[i]);
|
||||
combCoefficient[i] = pow(10,(-3 * lengths[i] / (T60 * Stk::sampleRate())));
|
||||
combCoefficient[i] = pow(10.0,(-3 * lengths[i] / (T60 * Stk::sampleRate())));
|
||||
}
|
||||
|
||||
outLeftDelay = new Delay(lengths[7], lengths[7]);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
### libstk Makefile - for various flavors of unix
|
||||
|
||||
LIBRARY = libstk.a
|
||||
AR = ar -qc
|
||||
AR = ar -rsc
|
||||
RM = /bin/rm
|
||||
OBJECT_PATH = @object_path@
|
||||
vpath %.o $(OBJECT_PATH)
|
||||
@@ -43,7 +43,7 @@ CFLAGS += @warn@ $(INCLUDE)
|
||||
REALTIME = @realtime@
|
||||
ifeq ($(REALTIME),yes)
|
||||
OBJECTS += RtMidi.o RtAudio.o RtWvOut.o RtWvIn.o RtDuplex.o TcpWvOut.o TcpWvIn.o Thread.o Socket.o
|
||||
DEFS += @sound_api@
|
||||
DEFS += @audio_apis@
|
||||
DEFS += @midiator@
|
||||
endif
|
||||
|
||||
@@ -61,7 +61,6 @@ all : $(LIBRARY)
|
||||
$(LIBRARY) : $(OBJECTS)
|
||||
/bin/rm -f $(LIBRARY)
|
||||
$(AR) $(LIBRARY) $(OBJECT_PATH)/*.o
|
||||
ranlib $(LIBRARY)
|
||||
|
||||
$(OBJECTS) : Stk.h
|
||||
|
||||
|
||||
@@ -30,37 +30,23 @@
|
||||
#include "Mandolin.h"
|
||||
#include "SKINI.msg"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
Mandolin :: Mandolin(MY_FLOAT lowestFrequency)
|
||||
: PluckTwo(lowestFrequency)
|
||||
{
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char temp[128];
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[0] = new WvIn( strcat(temp,"mand1.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[1] = new WvIn( strcat(temp,"mand2.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[2] = new WvIn( strcat(temp,"mand3.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[3] = new WvIn( strcat(temp,"mand4.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[4] = new WvIn( strcat(temp,"mand5.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[5] = new WvIn( strcat(temp,"mand6.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[6] = new WvIn( strcat(temp,"mand7.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[7] = new WvIn( strcat(temp,"mand8.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[8] = new WvIn( strcat(temp,"mand9.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[9] = new WvIn( strcat(temp,"mand10.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[10] = new WvIn( strcat(temp,"mand11.raw"), TRUE );
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
soundfile[11] = new WvIn( strcat(temp,"mand12.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
soundfile[0] = new WvIn( (Stk::rawwavePath() + "mand1.raw").c_str(), TRUE );
|
||||
soundfile[1] = new WvIn( (Stk::rawwavePath() + "mand2.raw").c_str(), TRUE );
|
||||
soundfile[2] = new WvIn( (Stk::rawwavePath() + "mand3.raw").c_str(), TRUE );
|
||||
soundfile[3] = new WvIn( (Stk::rawwavePath() + "mand4.raw").c_str(), TRUE );
|
||||
soundfile[4] = new WvIn( (Stk::rawwavePath() + "mand5.raw").c_str(), TRUE );
|
||||
soundfile[5] = new WvIn( (Stk::rawwavePath() + "mand6.raw").c_str(), TRUE );
|
||||
soundfile[6] = new WvIn( (Stk::rawwavePath() + "mand7.raw").c_str(), TRUE );
|
||||
soundfile[7] = new WvIn( (Stk::rawwavePath() + "mand8.raw").c_str(), TRUE );
|
||||
soundfile[8] = new WvIn( (Stk::rawwavePath() + "mand9.raw").c_str(), TRUE );
|
||||
soundfile[9] = new WvIn( (Stk::rawwavePath() + "mand10.raw").c_str(), TRUE );
|
||||
soundfile[10] = new WvIn( (Stk::rawwavePath() + "mand11.raw").c_str(), TRUE );
|
||||
soundfile[11] = new WvIn( (Stk::rawwavePath() + "mand12.raw").c_str(), TRUE );
|
||||
|
||||
directBody = 1.0;
|
||||
mic = 0;
|
||||
dampTime = 0;
|
||||
@@ -83,11 +69,11 @@ void Mandolin :: pluck(MY_FLOAT amplitude)
|
||||
waveDone = false;
|
||||
pluckAmplitude = amplitude;
|
||||
if ( amplitude < 0.0 ) {
|
||||
cerr << "Mandolin: pluck amplitude parameter less than zero!" << endl;
|
||||
std::cerr << "Mandolin: pluck amplitude parameter less than zero!" << std::endl;
|
||||
pluckAmplitude = 0.0;
|
||||
}
|
||||
else if ( amplitude > 1.0 ) {
|
||||
cerr << "Mandolin: pluck amplitude parameter greater than 1.0!" << endl;
|
||||
std::cerr << "Mandolin: pluck amplitude parameter greater than 1.0!" << std::endl;
|
||||
pluckAmplitude = 1.0;
|
||||
}
|
||||
|
||||
@@ -101,11 +87,11 @@ void Mandolin :: pluck(MY_FLOAT amplitude, MY_FLOAT position)
|
||||
// Pluck position puts zeroes at position * length.
|
||||
pluckPosition = position;
|
||||
if ( position < 0.0 ) {
|
||||
cerr << "Mandolin: pluck position parameter less than zero!" << endl;
|
||||
std::cerr << "Mandolin: pluck position parameter less than zero!" << std::endl;
|
||||
pluckPosition = 0.0;
|
||||
}
|
||||
else if ( position > 1.0 ) {
|
||||
cerr << "Mandolin: pluck position parameter greater than 1.0!" << endl;
|
||||
std::cerr << "Mandolin: pluck position parameter greater than 1.0!" << std::endl;
|
||||
pluckPosition = 1.0;
|
||||
}
|
||||
|
||||
@@ -118,7 +104,7 @@ void Mandolin :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->pluck(amplitude);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Mandolin: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Mandolin: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -165,11 +151,11 @@ void Mandolin :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Mandolin: Control value less than zero!" << endl;
|
||||
std::cerr << "Mandolin: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Mandolin: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Mandolin: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_BodySize_) // 2
|
||||
@@ -183,9 +169,9 @@ void Mandolin :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
mic = (int) (norm * 11.0);
|
||||
else
|
||||
cerr << "Mandolin: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Mandolin: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Mandolin: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Mandolin: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -145,11 +145,11 @@ void Mesh2D :: setNX(short lenX)
|
||||
{
|
||||
NX = lenX;
|
||||
if ( lenX < 2 ) {
|
||||
cerr << "Mesh2D::setNX(" << lenX << "): Minimum length is 2!" << endl;
|
||||
std::cerr << "Mesh2D::setNX(" << lenX << "): Minimum length is 2!" << std::endl;
|
||||
NX = 2;
|
||||
}
|
||||
else if ( lenX > NXMAX ) {
|
||||
cerr << "Mesh2D::setNX(" << lenX << "): Maximum length is " << NXMAX << "!" << endl;
|
||||
std::cerr << "Mesh2D::setNX(" << lenX << "): Maximum length is " << NXMAX << "!" << std::endl;
|
||||
NX = NXMAX;
|
||||
}
|
||||
}
|
||||
@@ -158,11 +158,11 @@ void Mesh2D :: setNY(short lenY)
|
||||
{
|
||||
NY = lenY;
|
||||
if ( lenY < 2 ) {
|
||||
cerr << "Mesh2D::setNY(" << lenY << "): Minimum length is 2!" << endl;
|
||||
std::cerr << "Mesh2D::setNY(" << lenY << "): Minimum length is 2!" << std::endl;
|
||||
NY = 2;
|
||||
}
|
||||
else if ( lenY > NYMAX ) {
|
||||
cerr << "Mesh2D::setNY(" << lenY << "): Maximum length is " << NYMAX << "!" << endl;
|
||||
std::cerr << "Mesh2D::setNY(" << lenY << "): Maximum length is " << NYMAX << "!" << std::endl;
|
||||
NY = NYMAX;
|
||||
}
|
||||
}
|
||||
@@ -171,11 +171,11 @@ void Mesh2D :: setDecay(MY_FLOAT decayFactor)
|
||||
{
|
||||
MY_FLOAT gain = decayFactor;
|
||||
if ( decayFactor < 0.0 ) {
|
||||
cerr << "Mesh2D::setDecay decayFactor value is less than 0.0!" << endl;
|
||||
std::cerr << "Mesh2D::setDecay decayFactor value is less than 0.0!" << std::endl;
|
||||
gain = 0.0;
|
||||
}
|
||||
else if ( decayFactor > 1.0 ) {
|
||||
cerr << "Mesh2D::setDecay decayFactor value is greater than 1.0!" << endl;
|
||||
std::cerr << "Mesh2D::setDecay decayFactor value is greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
|
||||
@@ -190,22 +190,22 @@ void Mesh2D :: setDecay(MY_FLOAT decayFactor)
|
||||
void Mesh2D :: setInputPosition(MY_FLOAT xFactor, MY_FLOAT yFactor)
|
||||
{
|
||||
if ( xFactor < 0.0 ) {
|
||||
cerr << "Mesh2D::setInputPosition xFactor value is less than 0.0!" << endl;
|
||||
std::cerr << "Mesh2D::setInputPosition xFactor value is less than 0.0!" << std::endl;
|
||||
xInput = 0;
|
||||
}
|
||||
else if ( xFactor > 1.0 ) {
|
||||
cerr << "Mesh2D::setInputPosition xFactor value is greater than 1.0!" << endl;
|
||||
std::cerr << "Mesh2D::setInputPosition xFactor value is greater than 1.0!" << std::endl;
|
||||
xInput = NX - 1;
|
||||
}
|
||||
else
|
||||
xInput = (short) (xFactor * (NX - 1));
|
||||
|
||||
if ( yFactor < 0.0 ) {
|
||||
cerr << "Mesh2D::setInputPosition yFactor value is less than 0.0!" << endl;
|
||||
std::cerr << "Mesh2D::setInputPosition yFactor value is less than 0.0!" << std::endl;
|
||||
yInput = 0;
|
||||
}
|
||||
else if ( yFactor > 1.0 ) {
|
||||
cerr << "Mesh2D::setInputPosition yFactor value is greater than 1.0!" << endl;
|
||||
std::cerr << "Mesh2D::setInputPosition yFactor value is greater than 1.0!" << std::endl;
|
||||
yInput = NY - 1;
|
||||
}
|
||||
else
|
||||
@@ -225,14 +225,14 @@ void Mesh2D :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
}
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Mesh2D: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Mesh2D: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
void Mesh2D :: noteOff(MY_FLOAT amplitude)
|
||||
{
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Mesh2D: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Mesh2D: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -362,11 +362,11 @@ void Mesh2D :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Mesh2D: Control value less than zero!" << endl;
|
||||
std::cerr << "Mesh2D: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Mesh2D: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Mesh2D: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == 2) // 2
|
||||
@@ -380,9 +380,9 @@ void Mesh2D :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
;
|
||||
else
|
||||
cerr << "Mesh2D: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Mesh2D: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Mesh2D: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Mesh2D: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
#include "Messager.h"
|
||||
#include <string.h>
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
int socket_port = 2001;
|
||||
|
||||
@@ -76,7 +76,7 @@ Messager :: Messager(int inputMask, int port)
|
||||
// If STK_PIPE is not specified, let the users know they can exit
|
||||
// the program via the console if necessary.
|
||||
if ( !(sources & STK_PIPE) && sources )
|
||||
cout << "\nType `Exit<cr>' to quit.\n" << endl;
|
||||
std::cout << "\nType `Exit<cr>' to quit.\n" << std::endl;
|
||||
|
||||
sources |= STK_SOCKET;
|
||||
socket_port = port;
|
||||
@@ -148,7 +148,7 @@ void Messager :: setRtDelta(long nSamples)
|
||||
if ( nSamples > 0 )
|
||||
rtDelta = nSamples;
|
||||
else
|
||||
cerr << "Messager: setRtDelta(" << nSamples << ") less than or equal to zero!" << endl;
|
||||
std::cerr << "Messager: setRtDelta(" << nSamples << ") less than or equal to zero!" << std::endl;
|
||||
}
|
||||
|
||||
long Messager :: getDelta() const
|
||||
@@ -245,7 +245,7 @@ bool Messager :: socketMessage()
|
||||
if (nSockets == 0)
|
||||
pipefd = newfd;
|
||||
else
|
||||
cout << "New socket connection made.\n" << endl;
|
||||
std::cout << "New socket connection made.\n" << std::endl;
|
||||
|
||||
// Set the socket to non-blocking mode.
|
||||
Socket::setBlocking( newfd, false );
|
||||
@@ -274,7 +274,7 @@ bool Messager :: socketMessage()
|
||||
if ( nSockets == 1 && FD_ISSET(pipefd, &mask) ) {
|
||||
// The "piping" socket is still running.
|
||||
if (sources & STK_MIDI) {
|
||||
cout << "MIDI input still running ... type 'Exit<cr>' to quit.\n" << endl;
|
||||
std::cout << "MIDI input still running ... type 'Exit<cr>' to quit.\n" << std::endl;
|
||||
}
|
||||
else if (!(sources & STK_PIPE) ) {
|
||||
// The user didn't specify this connection, so quit now.
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Modal.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
Modal :: Modal(int modes)
|
||||
@@ -38,10 +37,8 @@ Modal :: Modal(int modes)
|
||||
envelope = new Envelope;
|
||||
onepole = new OnePole;
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE);
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
|
||||
// Set some default values.
|
||||
vibrato->setFrequency( 6.0 );
|
||||
@@ -87,11 +84,11 @@ void Modal :: setFrequency(MY_FLOAT frequency)
|
||||
void Modal :: setRatioAndRadius(int modeIndex, MY_FLOAT ratio, MY_FLOAT radius)
|
||||
{
|
||||
if ( modeIndex < 0 ) {
|
||||
cerr << "Modal: setRatioAndRadius modeIndex parameter is less than zero!" << endl;
|
||||
std::cerr << "Modal: setRatioAndRadius modeIndex parameter is less than zero!" << std::endl;
|
||||
return;
|
||||
}
|
||||
else if ( modeIndex >= nModes ) {
|
||||
cerr << "Modal: setRatioAndRadius modeIndex parameter is greater than the number of operators!" << endl;
|
||||
std::cerr << "Modal: setRatioAndRadius modeIndex parameter is greater than the number of operators!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -106,7 +103,7 @@ void Modal :: setRatioAndRadius(int modeIndex, MY_FLOAT ratio, MY_FLOAT radius)
|
||||
while (temp * baseFrequency > nyquist) temp *= (MY_FLOAT) 0.5;
|
||||
ratios[modeIndex] = temp;
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Modal : Aliasing would occur here ... correcting." << endl;
|
||||
std::cerr << "Modal : Aliasing would occur here ... correcting." << std::endl;
|
||||
#endif
|
||||
}
|
||||
radii[modeIndex] = radius;
|
||||
@@ -131,11 +128,11 @@ void Modal :: setDirectGain(MY_FLOAT aGain)
|
||||
void Modal :: setModeGain(int modeIndex, MY_FLOAT gain)
|
||||
{
|
||||
if ( modeIndex < 0 ) {
|
||||
cerr << "Modal: setModeGain modeIndex parameter is less than zero!" << endl;
|
||||
std::cerr << "Modal: setModeGain modeIndex parameter is less than zero!" << std::endl;
|
||||
return;
|
||||
}
|
||||
else if ( modeIndex >= nModes ) {
|
||||
cerr << "Modal: setModeGain modeIndex parameter is greater than the number of operators!" << endl;
|
||||
std::cerr << "Modal: setModeGain modeIndex parameter is greater than the number of operators!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -146,11 +143,11 @@ void Modal :: strike(MY_FLOAT amplitude)
|
||||
{
|
||||
MY_FLOAT gain = amplitude;
|
||||
if ( amplitude < 0.0 ) {
|
||||
cerr << "Modal: strike amplitude is less than zero!" << endl;
|
||||
std::cerr << "Modal: strike amplitude is less than zero!" << std::endl;
|
||||
gain = 0.0;
|
||||
}
|
||||
else if ( amplitude > 1.0 ) {
|
||||
cerr << "Modal: strike amplitude is greater than 1.0!" << endl;
|
||||
std::cerr << "Modal: strike amplitude is greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
|
||||
@@ -176,7 +173,7 @@ void Modal :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->setFrequency(frequency);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Modal: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Modal: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -187,7 +184,7 @@ void Modal :: noteOff(MY_FLOAT amplitude)
|
||||
this->damp(1.0 - (amplitude * 0.03));
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Modal: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Modal: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -30,16 +30,13 @@
|
||||
|
||||
#include "ModalBar.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
ModalBar :: ModalBar()
|
||||
: Modal()
|
||||
{
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
wave = new WvIn( strcat(file,"marmstk1.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
wave = new WvIn( (Stk::rawwavePath() + "marmstk1.raw").c_str(), TRUE );
|
||||
wave->setRate((MY_FLOAT) 0.5 * 22050.0 / Stk::sampleRate() );
|
||||
|
||||
// Set the resonances for preset 0 (marimba).
|
||||
@@ -55,11 +52,11 @@ void ModalBar :: setStickHardness(MY_FLOAT hardness)
|
||||
{
|
||||
stickHardness = hardness;
|
||||
if ( hardness < 0.0 ) {
|
||||
cerr << "ModalBar: setStickHardness parameter is less than zero!" << endl;
|
||||
std::cerr << "ModalBar: setStickHardness parameter is less than zero!" << std::endl;
|
||||
stickHardness = 0.0;
|
||||
}
|
||||
else if ( hardness > 1.0 ) {
|
||||
cerr << "ModalBar: setStickHarness parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "ModalBar: setStickHarness parameter is greater than 1.0!" << std::endl;
|
||||
stickHardness = 1.0;
|
||||
}
|
||||
|
||||
@@ -71,11 +68,11 @@ void ModalBar :: setStrikePosition(MY_FLOAT position)
|
||||
{
|
||||
strikePosition = position;
|
||||
if ( position < 0.0 ) {
|
||||
cerr << "ModalBar: setStrikePositions parameter is less than zero!" << endl;
|
||||
std::cerr << "ModalBar: setStrikePositions parameter is less than zero!" << std::endl;
|
||||
strikePosition = 0.0;
|
||||
}
|
||||
else if ( position > 1.0 ) {
|
||||
cerr << "ModalBar: setStrikePosition parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "ModalBar: setStrikePosition parameter is greater than 1.0!" << std::endl;
|
||||
strikePosition = 1.0;
|
||||
}
|
||||
|
||||
@@ -160,11 +157,11 @@ void ModalBar :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "ModalBar: Control value less than zero!" << endl;
|
||||
std::cerr << "ModalBar: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "ModalBar: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "ModalBar: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_StickHardness_) // 2
|
||||
@@ -182,9 +179,9 @@ void ModalBar :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
envelope->setTarget( norm );
|
||||
else
|
||||
cerr << "ModalBar: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "ModalBar: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "ModalBar: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "ModalBar: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -11,14 +11,11 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Modulate.h"
|
||||
#include <string.h>
|
||||
|
||||
Modulate :: Modulate()
|
||||
{
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(file,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency( 6.0 );
|
||||
vibratoGain = 0.04;
|
||||
|
||||
|
||||
28
src/Moog.cpp
28
src/Moog.cpp
@@ -21,20 +21,12 @@
|
||||
#include "Moog.h"
|
||||
#include "SKINI.msg"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
Moog :: Moog()
|
||||
{
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char temp[128];
|
||||
char file[128];
|
||||
strcpy(temp, RAWWAVE_PATH);
|
||||
strcpy(file,temp);
|
||||
attacks[0] = new WvIn( strcat(file,"mandpluk.raw"), TRUE );
|
||||
strcpy(file,temp);
|
||||
loops[0] = new WaveLoop( strcat(file,"impuls20.raw"), TRUE );
|
||||
strcpy(file,temp);
|
||||
loops[1] = new WaveLoop( strcat(file,"sinewave.raw"), TRUE ); // vibrato
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
attacks[0] = new WvIn( (Stk::rawwavePath() + "mandpluk.raw").c_str(), TRUE );
|
||||
loops[0] = new WaveLoop( (Stk::rawwavePath() + "impuls20.raw").c_str(), TRUE );
|
||||
loops[1] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE ); // vibrato
|
||||
loops[1]->setFrequency((MY_FLOAT) 6.122);
|
||||
|
||||
filters[0] = new FormSwep();
|
||||
@@ -62,7 +54,7 @@ void Moog :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
baseFrequency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Moog: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Moog: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
baseFrequency = 220.0;
|
||||
}
|
||||
|
||||
@@ -92,7 +84,7 @@ void Moog :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
filters[1]->setSweepRate( filterRate * 22050.0 / Stk::sampleRate() );
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Moog: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Moog: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -126,11 +118,11 @@ void Moog :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Moog: Control value less than zero!" << endl;
|
||||
std::cerr << "Moog: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Moog: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Moog: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_FilterQ_) // 2
|
||||
@@ -144,10 +136,10 @@ void Moog :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "Moog: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Moog: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Moog: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Moog: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ NRev :: NRev(MY_FLOAT T60)
|
||||
|
||||
for (i=0; i<6; i++) {
|
||||
combDelays[i] = new Delay( lengths[i], lengths[i]);
|
||||
combCoefficient[i] = pow(10, (-3 * lengths[i] / (T60 * Stk::sampleRate())));
|
||||
combCoefficient[i] = pow(10.0, (-3 * lengths[i] / (T60 * Stk::sampleRate())));
|
||||
}
|
||||
|
||||
for (i=0; i<8; i++)
|
||||
|
||||
@@ -12,9 +12,19 @@
|
||||
|
||||
#include "Noise.h"
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
Noise :: Noise() : Stk()
|
||||
{
|
||||
{
|
||||
// Seed the random number generator with system time.
|
||||
this->setSeed( 0 );
|
||||
lastOutput = (MY_FLOAT) 0.0;
|
||||
}
|
||||
|
||||
Noise :: Noise( unsigned int seed ) : Stk()
|
||||
{
|
||||
// Seed the random number generator
|
||||
this->setSeed( seed );
|
||||
lastOutput = (MY_FLOAT) 0.0;
|
||||
}
|
||||
|
||||
@@ -22,6 +32,14 @@ Noise :: ~Noise()
|
||||
{
|
||||
}
|
||||
|
||||
void Noise :: setSeed( unsigned int seed )
|
||||
{
|
||||
if ( seed == 0 )
|
||||
srand( (unsigned int) time(NULL) );
|
||||
else
|
||||
srand( seed );
|
||||
}
|
||||
|
||||
MY_FLOAT Noise :: tick()
|
||||
{
|
||||
lastOutput = (MY_FLOAT) (2.0 * rand() / (RAND_MAX + 1.0) );
|
||||
|
||||
@@ -35,10 +35,10 @@ PRCRev :: PRCRev(MY_FLOAT T60)
|
||||
}
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
allpassDelays[i] = new Delay( lengths[i], lengths[i] );
|
||||
combDelays[i] = new Delay( lengths[i+2], lengths[i+2] );
|
||||
combCoefficient[i] = pow(10,(-3 * lengths[i+2] / (T60 * Stk::sampleRate())));
|
||||
}
|
||||
allpassDelays[i] = new Delay( lengths[i], lengths[i] );
|
||||
combDelays[i] = new Delay( lengths[i+2], lengths[i+2] );
|
||||
combCoefficient[i] = pow(10.0,(-3 * lengths[i+2] / (T60 * Stk::sampleRate())));
|
||||
}
|
||||
|
||||
allpassCoefficient = 0.7;
|
||||
effectMix = 0.5;
|
||||
|
||||
@@ -27,25 +27,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "PercFlut.h"
|
||||
#include <string.h>
|
||||
|
||||
PercFlut :: PercFlut()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 1.50 * 1.000);
|
||||
this->setRatio(1, 3.00 * 0.995);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Phonemes.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
const char Phonemes :: phonemeNames[32][4] =
|
||||
{"eee", "ihh", "ehh", "aaa",
|
||||
@@ -215,7 +215,7 @@ Phonemes :: ~Phonemes(void)
|
||||
const char *Phonemes :: name( unsigned int index )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: name index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: name index is greater than 31!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
return phonemeNames[index];
|
||||
@@ -224,7 +224,7 @@ const char *Phonemes :: name( unsigned int index )
|
||||
MY_FLOAT Phonemes :: voiceGain( unsigned int index )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: voiceGain index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: voiceGain index is greater than 31!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
return phonemeGains[index][0];
|
||||
@@ -233,7 +233,7 @@ MY_FLOAT Phonemes :: voiceGain( unsigned int index )
|
||||
MY_FLOAT Phonemes :: noiseGain( unsigned int index )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: noiseGain index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: noiseGain index is greater than 31!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
return phonemeGains[index][1];
|
||||
@@ -242,11 +242,11 @@ MY_FLOAT Phonemes :: noiseGain( unsigned int index )
|
||||
MY_FLOAT Phonemes :: formantFrequency( unsigned int index, unsigned int partial )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: formantFrequency index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: formantFrequency index is greater than 31!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
if ( partial > 3 ) {
|
||||
cerr << "Phonemes: formantFrequency partial is greater than 3!" << endl;
|
||||
std::cerr << "Phonemes: formantFrequency partial is greater than 3!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
return phonemeParameters[index][partial][0];
|
||||
@@ -255,11 +255,11 @@ MY_FLOAT Phonemes :: formantFrequency( unsigned int index, unsigned int partial
|
||||
MY_FLOAT Phonemes :: formantRadius( unsigned int index, unsigned int partial )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: formantRadius index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: formantRadius index is greater than 31!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
if ( partial > 3 ) {
|
||||
cerr << "Phonemes: formantRadius partial is greater than 3!" << endl;
|
||||
std::cerr << "Phonemes: formantRadius partial is greater than 3!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
return phonemeParameters[index][partial][1];
|
||||
@@ -268,11 +268,11 @@ MY_FLOAT Phonemes :: formantRadius( unsigned int index, unsigned int partial )
|
||||
MY_FLOAT Phonemes :: formantGain( unsigned int index, unsigned int partial )
|
||||
{
|
||||
if ( index > 31 ) {
|
||||
cerr << "Phonemes: formantGain index is greater than 31!" << endl;
|
||||
std::cerr << "Phonemes: formantGain index is greater than 31!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
if ( partial > 3 ) {
|
||||
cerr << "Phonemes: formantGain partial is greater than 3!" << endl;
|
||||
std::cerr << "Phonemes: formantGain partial is greater than 3!" << std::endl;
|
||||
return 0.0;
|
||||
}
|
||||
return phonemeParameters[index][partial][2];
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "PitShift.h"
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
PitShift :: PitShift()
|
||||
@@ -40,11 +40,11 @@ void PitShift :: setEffectMix(MY_FLOAT mix)
|
||||
{
|
||||
effectMix = mix;
|
||||
if ( mix < 0.0 ) {
|
||||
cerr << "PitShift: setEffectMix parameter is less than zero!" << endl;
|
||||
std::cerr << "PitShift: setEffectMix parameter is less than zero!" << std::endl;
|
||||
effectMix = 0.0;
|
||||
}
|
||||
else if ( mix > 1.0 ) {
|
||||
cerr << "PitShift: setEffectMix parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "PitShift: setEffectMix parameter is greater than 1.0!" << std::endl;
|
||||
effectMix = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ void PluckTwo :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
lastFrequency = frequency;
|
||||
if ( lastFrequency <= 0.0 ) {
|
||||
cerr << "PluckTwo: setFrequency parameter less than or equal to zero!" << endl;
|
||||
std::cerr << "PluckTwo: setFrequency parameter less than or equal to zero!" << std::endl;
|
||||
lastFrequency = 220.0;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ void PluckTwo :: setDetune(MY_FLOAT detune)
|
||||
{
|
||||
detuning = detune;
|
||||
if ( detuning <= 0.0 ) {
|
||||
cerr << "PluckTwo: setDetune parameter less than or equal to zero!" << endl;
|
||||
std::cerr << "PluckTwo: setDetune parameter less than or equal to zero!" << std::endl;
|
||||
detuning = 0.1;
|
||||
}
|
||||
delayLine->setDelay(( lastLength / detuning) - (MY_FLOAT) 0.5);
|
||||
@@ -100,11 +100,11 @@ void PluckTwo :: setPluckPosition(MY_FLOAT position)
|
||||
{
|
||||
pluckPosition = position;
|
||||
if ( position < 0.0 ) {
|
||||
cerr << "PluckTwo: setPluckPosition parameter is less than zero!" << endl;
|
||||
std::cerr << "PluckTwo: setPluckPosition parameter is less than zero!" << std::endl;
|
||||
pluckPosition = 0.0;
|
||||
}
|
||||
else if ( position > 1.0 ) {
|
||||
cerr << "PluckTwo: setPluckPosition parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "PluckTwo: setPluckPosition parameter is greater than 1.0!" << std::endl;
|
||||
pluckPosition = 1.0;
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ void PluckTwo :: noteOff(MY_FLOAT amplitude)
|
||||
loopGain = ((MY_FLOAT) 1.0 - amplitude) * (MY_FLOAT) 0.5;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "PluckTwo: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "PluckTwo: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ void Plucked :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Plucked: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Plucked: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -66,11 +66,11 @@ void Plucked :: pluck(MY_FLOAT amplitude)
|
||||
{
|
||||
MY_FLOAT gain = amplitude;
|
||||
if ( gain > 1.0 ) {
|
||||
cerr << "Plucked: pluck amplitude greater than 1.0!" << endl;
|
||||
std::cerr << "Plucked: pluck amplitude greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
else if ( gain < 0.0 ) {
|
||||
cerr << "Plucked: pluck amplitude less than zero!" << endl;
|
||||
std::cerr << "Plucked: pluck amplitude less than zero!" << std::endl;
|
||||
gain = 0.0;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ void Plucked :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->pluck(amplitude);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Plucked: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Plucked: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -95,16 +95,16 @@ void Plucked :: noteOff(MY_FLOAT amplitude)
|
||||
{
|
||||
loopGain = (MY_FLOAT) 1.0 - amplitude;
|
||||
if ( loopGain < 0.0 ) {
|
||||
cerr << "Plucked: noteOff amplitude greater than 1.0!" << endl;
|
||||
std::cerr << "Plucked: noteOff amplitude greater than 1.0!" << std::endl;
|
||||
loopGain = 0.0;
|
||||
}
|
||||
else if ( loopGain > 1.0 ) {
|
||||
cerr << "Plucked: noteOff amplitude less than or zero!" << endl;
|
||||
std::cerr << "Plucked: noteOff amplitude less than or zero!" << std::endl;
|
||||
loopGain = (MY_FLOAT) 0.99999;
|
||||
}
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Plucked: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Plucked: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ void Resonate :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->setResonance(frequency, poleRadius);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Resonate: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Resonate: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
void Resonate :: noteOff(MY_FLOAT amplitude)
|
||||
@@ -66,7 +66,7 @@ void Resonate :: noteOff(MY_FLOAT amplitude)
|
||||
this->keyOff();
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Resonate: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Resonate: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -74,17 +74,17 @@ void Resonate :: setResonance(MY_FLOAT frequency, MY_FLOAT radius)
|
||||
{
|
||||
poleFrequency = frequency;
|
||||
if ( frequency < 0.0 ) {
|
||||
cerr << "Resonate: setResonance frequency parameter is less than zero!" << endl;
|
||||
std::cerr << "Resonate: setResonance frequency parameter is less than zero!" << std::endl;
|
||||
poleFrequency = 0.0;
|
||||
}
|
||||
|
||||
poleRadius = radius;
|
||||
if ( radius < 0.0 ) {
|
||||
cerr << "Resonate: setResonance radius parameter is less than 0.0!" << endl;
|
||||
std::cerr << "Resonate: setResonance radius parameter is less than 0.0!" << std::endl;
|
||||
poleRadius = 0.0;
|
||||
}
|
||||
else if ( radius >= 1.0 ) {
|
||||
cerr << "Resonate: setResonance radius parameter is greater than or equal to 1.0, which is unstable!" << endl;
|
||||
std::cerr << "Resonate: setResonance radius parameter is greater than or equal to 1.0, which is unstable!" << std::endl;
|
||||
poleRadius = 0.9999;
|
||||
}
|
||||
filter->setResonance( poleFrequency, poleRadius, TRUE );
|
||||
@@ -94,13 +94,13 @@ void Resonate :: setNotch(MY_FLOAT frequency, MY_FLOAT radius)
|
||||
{
|
||||
zeroFrequency = frequency;
|
||||
if ( frequency < 0.0 ) {
|
||||
cerr << "Resonate: setNotch frequency parameter is less than zero!" << endl;
|
||||
std::cerr << "Resonate: setNotch frequency parameter is less than zero!" << std::endl;
|
||||
zeroFrequency = 0.0;
|
||||
}
|
||||
|
||||
zeroRadius = radius;
|
||||
if ( radius < 0.0 ) {
|
||||
cerr << "Resonate: setNotch radius parameter is less than 0.0!" << endl;
|
||||
std::cerr << "Resonate: setNotch radius parameter is less than 0.0!" << std::endl;
|
||||
zeroRadius = 0.0;
|
||||
}
|
||||
|
||||
@@ -124,11 +124,11 @@ void Resonate :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Resonate: Control value less than zero!" << endl;
|
||||
std::cerr << "Resonate: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Resonate: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Resonate: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == 2) // 2
|
||||
@@ -142,9 +142,9 @@ void Resonate :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "Resonate: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Resonate: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Resonate: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Resonate: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -31,25 +31,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Rhodey.h"
|
||||
#include <string.h>
|
||||
|
||||
Rhodey :: Rhodey()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file.
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 1.0);
|
||||
this->setRatio(1, 0.5);
|
||||
|
||||
8762
src/RtAudio.cpp
8762
src/RtAudio.cpp
File diff suppressed because it is too large
Load Diff
112
src/RtDuplex.cpp
112
src/RtDuplex.cpp
@@ -25,84 +25,94 @@
|
||||
|
||||
RtDuplex :: RtDuplex(int nChannels, MY_FLOAT sampleRate, int device, int bufferFrames, int nBuffers )
|
||||
{
|
||||
channels = nChannels;
|
||||
bufferSize = bufferFrames;
|
||||
RtAudio::RTAUDIO_FORMAT format = ( sizeof(MY_FLOAT) == 8 ) ? RtAudio::RTAUDIO_FLOAT64 : RtAudio::RTAUDIO_FLOAT32;
|
||||
channels_ = nChannels;
|
||||
bufferSize_ = bufferFrames;
|
||||
RtAudioFormat format = ( sizeof(MY_FLOAT) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
|
||||
|
||||
audio_ = 0;
|
||||
try {
|
||||
audio = new RtAudio(&stream, device, channels, device, channels, format,
|
||||
(int)sampleRate, &bufferSize, nBuffers);
|
||||
data = (MY_FLOAT *) audio->getStreamBuffer(stream);
|
||||
audio_ = new RtAudio();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
|
||||
lastOutput = (MY_FLOAT *) new MY_FLOAT[channels];
|
||||
for (unsigned int i=0; i<channels; i++) lastOutput[i] = 0.0;
|
||||
counter = 0;
|
||||
stopped = true;
|
||||
// Now open a stream and get the buffer pointer.
|
||||
try {
|
||||
audio_->openStream(device, channels_, device, channels_, format,
|
||||
(int)sampleRate, &bufferSize_, nBuffers);
|
||||
data_ = (MY_FLOAT *) audio_->getStreamBuffer();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
|
||||
lastOutput_ = (MY_FLOAT *) new MY_FLOAT[channels_];
|
||||
for (unsigned int i=0; i<channels_; i++) lastOutput_[i] = 0.0;
|
||||
counter_ = 0;
|
||||
stopped_ = true;
|
||||
}
|
||||
|
||||
RtDuplex :: ~RtDuplex()
|
||||
{
|
||||
if ( !stopped )
|
||||
audio->stopStream(stream);
|
||||
delete audio;
|
||||
delete [] lastOutput;
|
||||
data = 0; // RtAudio deletes the buffer itself.
|
||||
if ( !stopped_ )
|
||||
audio_->stopStream();
|
||||
delete audio_;
|
||||
delete [] lastOutput_;
|
||||
data_ = 0; // RtAudio deletes the buffer itself.
|
||||
}
|
||||
|
||||
void RtDuplex :: start()
|
||||
{
|
||||
if ( stopped ) {
|
||||
audio->startStream(stream);
|
||||
stopped = false;
|
||||
if ( stopped_ ) {
|
||||
audio_->startStream();
|
||||
stopped_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void RtDuplex :: stop()
|
||||
{
|
||||
if ( !stopped ) {
|
||||
audio->stopStream(stream);
|
||||
stopped = true;
|
||||
if ( !stopped_ ) {
|
||||
audio_->stopStream();
|
||||
stopped_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
MY_FLOAT RtDuplex :: lastOut(void) const
|
||||
{
|
||||
if ( channels == 1 )
|
||||
return *lastOutput;
|
||||
if ( channels_ == 1 )
|
||||
return *lastOutput_;
|
||||
|
||||
MY_FLOAT output = 0.0;
|
||||
for (unsigned int i=0; i<channels; i++ ) {
|
||||
output += lastOutput[i];
|
||||
for (unsigned int i=0; i<channels_; i++ ) {
|
||||
output += lastOutput_[i];
|
||||
}
|
||||
return output / channels;
|
||||
return output / channels_;
|
||||
}
|
||||
|
||||
MY_FLOAT RtDuplex :: tick(const MY_FLOAT sample)
|
||||
{
|
||||
if ( stopped )
|
||||
if ( stopped_ )
|
||||
start();
|
||||
|
||||
if (counter == 0) {
|
||||
if (counter_ == 0) {
|
||||
try {
|
||||
audio->tickStream(stream);
|
||||
audio_->tickStream();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long temp = counter * channels;
|
||||
for (unsigned int i=0; i<channels; i++) {
|
||||
lastOutput[i] = data[temp];
|
||||
data[temp++] = sample;
|
||||
unsigned long temp = counter_ * channels_;
|
||||
for (unsigned int i=0; i<channels_; i++) {
|
||||
lastOutput_[i] = data_[temp];
|
||||
data_[temp++] = sample;
|
||||
}
|
||||
|
||||
counter++;
|
||||
if (counter >= (long) bufferSize)
|
||||
counter = 0;
|
||||
counter_++;
|
||||
if (counter_ >= (long) bufferSize_)
|
||||
counter_ = 0;
|
||||
|
||||
return lastOut();
|
||||
}
|
||||
@@ -117,36 +127,36 @@ MY_FLOAT *RtDuplex :: tick(MY_FLOAT *vector, unsigned int vectorSize)
|
||||
|
||||
const MY_FLOAT *RtDuplex :: lastFrame() const
|
||||
{
|
||||
return lastOutput;
|
||||
return lastOutput_;
|
||||
}
|
||||
|
||||
MY_FLOAT *RtDuplex :: tickFrame(MY_FLOAT *frameVector, unsigned int frames)
|
||||
{
|
||||
if ( stopped )
|
||||
if ( stopped_ )
|
||||
start();
|
||||
|
||||
unsigned int i;
|
||||
unsigned long temp;
|
||||
for (unsigned int j=0; j<frames; j++ ) {
|
||||
if (counter == 0) {
|
||||
if (counter_ == 0) {
|
||||
try {
|
||||
audio->tickStream(stream);
|
||||
audio_->tickStream();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
}
|
||||
|
||||
temp = counter * channels;
|
||||
for (i=0; i<channels; i++) {
|
||||
lastOutput[i] = data[temp];
|
||||
data[temp++] = frameVector[j*channels+i];
|
||||
frameVector[j*channels+i] = lastOutput[i];
|
||||
temp = counter_ * channels_;
|
||||
for (i=0; i<channels_; i++) {
|
||||
lastOutput_[i] = data_[temp];
|
||||
data_[temp++] = frameVector[j*channels_+i];
|
||||
frameVector[j*channels_+i] = lastOutput_[i];
|
||||
}
|
||||
|
||||
counter++;
|
||||
if (counter >= (long) bufferSize)
|
||||
counter = 0;
|
||||
counter_++;
|
||||
if (counter_ >= (long) bufferSize_)
|
||||
counter_ = 0;
|
||||
}
|
||||
|
||||
return frameVector;
|
||||
|
||||
189
src/RtMidi.cpp
189
src/RtMidi.cpp
@@ -33,7 +33,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <iostream.h>
|
||||
|
||||
#define MIDI_BUFFER_SIZE 256
|
||||
int writeIndex;
|
||||
@@ -328,7 +327,7 @@ int RtMidi :: nextMessage()
|
||||
}
|
||||
|
||||
|
||||
#elif ( defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) )
|
||||
#elif ( defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__LINUX_JACK__) )
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/time.h>
|
||||
@@ -341,6 +340,11 @@ int RtMidi :: nextMessage()
|
||||
#include <errno.h>
|
||||
int midi_in;
|
||||
|
||||
#elif ( defined(__LINUX_ALSA__) || defined(__LINUX_JACK__) )
|
||||
|
||||
#include <alsa/asoundlib.h>
|
||||
snd_rawmidi_t *midi_in = 0;
|
||||
|
||||
#elif defined(__LINUX_OSS__)
|
||||
|
||||
#include <fcntl.h>
|
||||
@@ -350,11 +354,6 @@ int midi_in;
|
||||
#include <errno.h>
|
||||
int midi_in;
|
||||
|
||||
#else // __LINUX_ALSA__
|
||||
|
||||
#include <alsa/asoundlib.h>
|
||||
snd_rawmidi_t *midi_in = 0;
|
||||
|
||||
#endif
|
||||
|
||||
typedef unsigned char byte;
|
||||
@@ -389,7 +388,12 @@ void *midiInputThread(void *)
|
||||
|
||||
for (;;) {
|
||||
|
||||
#if defined(__LINUX_OSS__) || defined(__MIDIATOR__)
|
||||
#if ( defined(__LINUX_ALSA__) || defined(__LINUX_JACK__) )
|
||||
|
||||
if ((n = snd_rawmidi_read(midi_in, &newByte, 1)) == -1)
|
||||
fprintf(stderr, "RtMidi: Error reading ALSA raw MIDI data from device!\n");
|
||||
|
||||
#elif defined(__LINUX_OSS__) || defined(__MIDIATOR__)
|
||||
|
||||
// Normally, you should check the return value of this read() call.
|
||||
// A return of -1 usually indicates an error. However, for OSS
|
||||
@@ -397,11 +401,6 @@ void *midiInputThread(void *)
|
||||
|
||||
n = read(midi_in, &newByte, 1);
|
||||
|
||||
#else // ALSA_API
|
||||
|
||||
if ((n = snd_rawmidi_read(midi_in, &newByte, 1)) == -1)
|
||||
fprintf(stderr, "RtMidi: Error reading ALSA raw MIDI data from device!\n");
|
||||
|
||||
#endif
|
||||
|
||||
while (n > 0) {
|
||||
@@ -556,85 +555,7 @@ RtMidi :: RtMidi(int device)
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(__LINUX_OSS__) // normal OSS setup
|
||||
|
||||
#define MAX_DEVICES 8
|
||||
#define MIDI_NAME "/dev/midi"
|
||||
|
||||
RtMidi :: RtMidi(int device)
|
||||
{
|
||||
char msg[256];
|
||||
char name[16];
|
||||
char deviceNames[MAX_DEVICES][16];
|
||||
midi_in = 0;
|
||||
|
||||
// /dev/midi should be a link to the default midi device under OSS
|
||||
strcpy(name, MIDI_NAME);
|
||||
|
||||
// The OSS API doesn't really give us a means for probing the
|
||||
// capabilities of devices. Thus, we'll just pursue a brute
|
||||
// force method of opening devices until we either find something
|
||||
// that doesn't complain or we have to give up. We'll start with
|
||||
// the default device, then try /dev/midi00, /dev/midi01, etc...
|
||||
int i, nDevices = 0;
|
||||
for ( i=0; i<MAX_DEVICES; i++ ) {
|
||||
if (i > 0) sprintf(name, "%s%d%d", MIDI_NAME, 0, i-1);
|
||||
midi_in = open(name, O_RDONLY | O_NONBLOCK, 0);
|
||||
if ( midi_in != -1 ) {
|
||||
strncpy( deviceNames[nDevices++], name, 16 );
|
||||
close( midi_in );
|
||||
}
|
||||
else if ( errno == EBUSY )
|
||||
fprintf(stderr,"RtMidi: MIDI device (%s) is busy and cannot be opened.\n", name);
|
||||
}
|
||||
|
||||
if (nDevices == 0) {
|
||||
sprintf(msg, "RtMidi: no OSS MIDI cards reported available.");
|
||||
handleError(msg, StkError::MIDI_SYSTEM);
|
||||
}
|
||||
|
||||
// Check device argument and print list if necessary.
|
||||
int deveyes;
|
||||
if ( device >= 0 && device < nDevices )
|
||||
deveyes = device;
|
||||
else if ( nDevices == 1 )
|
||||
deveyes = 0;
|
||||
else {
|
||||
// Invalid device argument ... print list.
|
||||
printf("\n");
|
||||
for ( i=0; i<nDevices; i++ )
|
||||
printf("MIDI Device %d: %s\n", i, deviceNames[i]);
|
||||
|
||||
char choice[16];
|
||||
deveyes = -1;
|
||||
while ( deveyes < 0 || deveyes >= nDevices ) {
|
||||
printf("\nType a MIDI device number from above: ");
|
||||
fgets(choice, 16, stdin);
|
||||
deveyes = atoi(choice);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
midi_in = open(deviceNames[deveyes], O_RDONLY, 0);
|
||||
if ( midi_in == -1) {
|
||||
sprintf(msg, "RtMidi: Unable to open OSS device (%s) for MIDI input!",
|
||||
deviceNames[deveyes]);
|
||||
handleError(msg, StkError::MIDI_SYSTEM);
|
||||
}
|
||||
|
||||
// Set up the circular buffer for the MIDI input messages
|
||||
midiBuffer = new MIDIMESSAGE[MIDI_BUFFER_SIZE];
|
||||
readIndex = 0;
|
||||
writeIndex = 0;
|
||||
|
||||
int result = pthread_create(&midi_input_thread, NULL, midiInputThread, NULL);
|
||||
if (result) {
|
||||
sprintf(msg, "RtMidi: unable to create MIDI input thread.");
|
||||
handleError(msg, StkError::PROCESS_THREAD);
|
||||
}
|
||||
}
|
||||
|
||||
#else // ALSA_API
|
||||
#elif ( defined(__LINUX_ALSA__) || defined(__LINUX_JACK__) )
|
||||
|
||||
#define MAX_DEVICES 8
|
||||
|
||||
@@ -730,6 +651,84 @@ RtMidi :: RtMidi(int device)
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(__LINUX_OSS__) // normal OSS setup
|
||||
|
||||
#define MAX_DEVICES 8
|
||||
#define MIDI_NAME "/dev/midi"
|
||||
|
||||
RtMidi :: RtMidi(int device)
|
||||
{
|
||||
char msg[256];
|
||||
char name[16];
|
||||
char deviceNames[MAX_DEVICES][16];
|
||||
midi_in = 0;
|
||||
|
||||
// /dev/midi should be a link to the default midi device under OSS
|
||||
strcpy(name, MIDI_NAME);
|
||||
|
||||
// The OSS API doesn't really give us a means for probing the
|
||||
// capabilities of devices. Thus, we'll just pursue a brute
|
||||
// force method of opening devices until we either find something
|
||||
// that doesn't complain or we have to give up. We'll start with
|
||||
// the default device, then try /dev/midi00, /dev/midi01, etc...
|
||||
int i, nDevices = 0;
|
||||
for ( i=0; i<MAX_DEVICES; i++ ) {
|
||||
if (i > 0) sprintf(name, "%s%d%d", MIDI_NAME, 0, i-1);
|
||||
midi_in = open(name, O_RDONLY | O_NONBLOCK, 0);
|
||||
if ( midi_in != -1 ) {
|
||||
strncpy( deviceNames[nDevices++], name, 16 );
|
||||
close( midi_in );
|
||||
}
|
||||
else if ( errno == EBUSY )
|
||||
fprintf(stderr,"RtMidi: MIDI device (%s) is busy and cannot be opened.\n", name);
|
||||
}
|
||||
|
||||
if (nDevices == 0) {
|
||||
sprintf(msg, "RtMidi: no OSS MIDI cards reported available.");
|
||||
handleError(msg, StkError::MIDI_SYSTEM);
|
||||
}
|
||||
|
||||
// Check device argument and print list if necessary.
|
||||
int deveyes;
|
||||
if ( device >= 0 && device < nDevices )
|
||||
deveyes = device;
|
||||
else if ( nDevices == 1 )
|
||||
deveyes = 0;
|
||||
else {
|
||||
// Invalid device argument ... print list.
|
||||
printf("\n");
|
||||
for ( i=0; i<nDevices; i++ )
|
||||
printf("MIDI Device %d: %s\n", i, deviceNames[i]);
|
||||
|
||||
char choice[16];
|
||||
deveyes = -1;
|
||||
while ( deveyes < 0 || deveyes >= nDevices ) {
|
||||
printf("\nType a MIDI device number from above: ");
|
||||
fgets(choice, 16, stdin);
|
||||
deveyes = atoi(choice);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
midi_in = open(deviceNames[deveyes], O_RDONLY, 0);
|
||||
if ( midi_in == -1) {
|
||||
sprintf(msg, "RtMidi: Unable to open OSS device (%s) for MIDI input!",
|
||||
deviceNames[deveyes]);
|
||||
handleError(msg, StkError::MIDI_SYSTEM);
|
||||
}
|
||||
|
||||
// Set up the circular buffer for the MIDI input messages
|
||||
midiBuffer = new MIDIMESSAGE[MIDI_BUFFER_SIZE];
|
||||
readIndex = 0;
|
||||
writeIndex = 0;
|
||||
|
||||
int result = pthread_create(&midi_input_thread, NULL, midiInputThread, NULL);
|
||||
if (result) {
|
||||
sprintf(msg, "RtMidi: unable to create MIDI input thread.");
|
||||
handleError(msg, StkError::PROCESS_THREAD);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
RtMidi :: ~RtMidi()
|
||||
@@ -740,11 +739,11 @@ RtMidi :: ~RtMidi()
|
||||
#if defined(__MIDIATOR__)
|
||||
tcdrain(midi_in);
|
||||
if (midi_in != 0) close(midi_in);
|
||||
#elif defined(__LINUX_OSS__)
|
||||
if (midi_in != 0) close(midi_in);
|
||||
#else // ALSA_API
|
||||
#elif ( defined(__LINUX_ALSA__) || defined(__LINUX_JACK__) )
|
||||
if (midi_in != 0)
|
||||
snd_rawmidi_close(midi_in);
|
||||
#elif defined(__LINUX_OSS__)
|
||||
if (midi_in != 0) close(midi_in);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -25,44 +25,54 @@ RtWvIn :: RtWvIn(int nChannels, MY_FLOAT sampleRate, int device, int bufferFrame
|
||||
{
|
||||
channels = nChannels;
|
||||
int size = bufferFrames;
|
||||
RtAudio::RTAUDIO_FORMAT format = ( sizeof(MY_FLOAT) == 8 ) ? RtAudio::RTAUDIO_FLOAT64 : RtAudio::RTAUDIO_FLOAT32;
|
||||
RtAudioFormat format = ( sizeof(MY_FLOAT) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
|
||||
|
||||
audio_ = 0;
|
||||
try {
|
||||
audio = new RtAudio(&stream, 0, 0, device, channels, format,
|
||||
(int)sampleRate, &size, nBuffers);
|
||||
data = (MY_FLOAT *) audio->getStreamBuffer(stream);
|
||||
audio_ = new RtAudio();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
|
||||
// Now open a stream and get the buffer pointer.
|
||||
try {
|
||||
audio_->openStream(0, 0, device, channels, format,
|
||||
(int)sampleRate, &size, nBuffers);
|
||||
data = (MY_FLOAT *) audio_->getStreamBuffer();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
|
||||
bufferSize = size;
|
||||
lastOutput = (MY_FLOAT *) new MY_FLOAT[channels];
|
||||
for (unsigned int i=0; i<channels; i++) lastOutput[i] = 0.0;
|
||||
counter = 0;
|
||||
stopped = true;
|
||||
counter_ = 0;
|
||||
stopped_ = true;
|
||||
}
|
||||
|
||||
RtWvIn :: ~RtWvIn()
|
||||
{
|
||||
if ( !stopped )
|
||||
audio->stopStream(stream);
|
||||
delete audio;
|
||||
if ( !stopped_ )
|
||||
audio_->stopStream();
|
||||
delete audio_;
|
||||
data = 0; // RtAudio deletes the buffer itself.
|
||||
}
|
||||
|
||||
void RtWvIn :: start()
|
||||
{
|
||||
if ( stopped ) {
|
||||
audio->startStream(stream);
|
||||
stopped = false;
|
||||
if ( stopped_ ) {
|
||||
audio_->startStream();
|
||||
stopped_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void RtWvIn :: stop()
|
||||
{
|
||||
if ( !stopped ) {
|
||||
audio->stopStream(stream);
|
||||
stopped = true;
|
||||
if ( !stopped_ ) {
|
||||
audio_->stopStream();
|
||||
stopped_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,25 +102,25 @@ const MY_FLOAT *RtWvIn :: lastFrame() const
|
||||
|
||||
const MY_FLOAT *RtWvIn :: tickFrame(void)
|
||||
{
|
||||
if ( stopped )
|
||||
if ( stopped_ )
|
||||
start();
|
||||
|
||||
if (counter == 0) {
|
||||
if (counter_ == 0) {
|
||||
try {
|
||||
audio->tickStream(stream);
|
||||
audio_->tickStream();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
}
|
||||
|
||||
long temp = counter * channels;
|
||||
long temp = counter_ * channels;
|
||||
for (unsigned int i=0; i<channels; i++)
|
||||
lastOutput[i] = data[temp++];
|
||||
|
||||
counter++;
|
||||
if (counter >= (long) bufferSize)
|
||||
counter = 0;
|
||||
counter_++;
|
||||
if (counter_ >= (long) bufferSize)
|
||||
counter_ = 0;
|
||||
|
||||
return lastOutput;
|
||||
}
|
||||
|
||||
@@ -19,46 +19,57 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "RtWvOut.h"
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
|
||||
RtWvOut :: RtWvOut(unsigned int nChannels, MY_FLOAT sampleRate, int device, int bufferFrames, int nBuffers )
|
||||
RtWvOut :: RtWvOut( unsigned int nChannels, MY_FLOAT sampleRate, int device, int bufferFrames, int nBuffers )
|
||||
{
|
||||
// We'll let RtAudio deal with channel and srate limitations.
|
||||
channels = nChannels;
|
||||
bufferSize = bufferFrames;
|
||||
RtAudio::RTAUDIO_FORMAT format = ( sizeof(MY_FLOAT) == 8 ) ? RtAudio::RTAUDIO_FLOAT64 : RtAudio::RTAUDIO_FLOAT32;
|
||||
bufferSize_ = bufferFrames;
|
||||
RtAudioFormat format = ( sizeof(MY_FLOAT) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
|
||||
|
||||
audio_ = 0;
|
||||
try {
|
||||
audio = new RtAudio(&stream, device, (int)channels, 0, 0, format,
|
||||
(int)sampleRate, &bufferSize, nBuffers);
|
||||
data = (MY_FLOAT *) audio->getStreamBuffer(stream);
|
||||
audio_ = new RtAudio();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
stopped = true;
|
||||
|
||||
// Now open a stream and set the callback function.
|
||||
try {
|
||||
audio_->openStream(device, (int)channels, 0, 0, format,
|
||||
(int)sampleRate, &bufferSize_, nBuffers);
|
||||
data = (MY_FLOAT *) audio_->getStreamBuffer();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
|
||||
stopped_ = true;
|
||||
}
|
||||
|
||||
RtWvOut :: ~RtWvOut()
|
||||
{
|
||||
if ( !stopped )
|
||||
audio->stopStream(stream);
|
||||
delete audio;
|
||||
data = 0; // RtAudio deletes the buffer itself.
|
||||
if ( !stopped_ )
|
||||
audio_->stopStream();
|
||||
delete audio_;
|
||||
data = 0;
|
||||
}
|
||||
|
||||
void RtWvOut :: start()
|
||||
{
|
||||
if ( stopped ) {
|
||||
audio->startStream(stream);
|
||||
stopped = false;
|
||||
if ( stopped_ ) {
|
||||
audio_->startStream();
|
||||
stopped_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void RtWvOut :: stop()
|
||||
{
|
||||
if ( !stopped ) {
|
||||
audio->stopStream(stream);
|
||||
stopped = true;
|
||||
if ( !stopped_ ) {
|
||||
audio_->stopStream();
|
||||
stopped_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,21 +85,21 @@ MY_FLOAT RtWvOut :: getTime( void ) const
|
||||
|
||||
void RtWvOut :: tick(const MY_FLOAT sample)
|
||||
{
|
||||
if ( stopped )
|
||||
if ( stopped_ )
|
||||
start();
|
||||
|
||||
|
||||
for ( unsigned int j=0; j<channels; j++ )
|
||||
data[counter*channels+j] = sample;
|
||||
|
||||
counter++;
|
||||
totalCount++;
|
||||
|
||||
if ( counter >= (unsigned int )bufferSize ) {
|
||||
if ( counter >= (unsigned int )bufferSize_ ) {
|
||||
try {
|
||||
audio->tickStream(stream);
|
||||
audio_->tickStream();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
counter = 0;
|
||||
}
|
||||
@@ -102,7 +113,7 @@ void RtWvOut :: tick(const MY_FLOAT *vector, unsigned int vectorSize)
|
||||
|
||||
void RtWvOut :: tickFrame(const MY_FLOAT *frameVector, unsigned int frames)
|
||||
{
|
||||
if ( stopped )
|
||||
if ( stopped_ )
|
||||
start();
|
||||
|
||||
for ( unsigned int i=0; i<frames; i++ ) {
|
||||
@@ -111,12 +122,12 @@ void RtWvOut :: tickFrame(const MY_FLOAT *frameVector, unsigned int frames)
|
||||
}
|
||||
counter++;
|
||||
|
||||
if ( counter >= (unsigned int)bufferSize ) {
|
||||
if ( counter >= (unsigned int)bufferSize_ ) {
|
||||
try {
|
||||
audio->tickStream(stream);
|
||||
audio_->tickStream();
|
||||
}
|
||||
catch (RtError &error) {
|
||||
handleError( error.getMessage(), StkError::AUDIO_SYSTEM );
|
||||
handleError( error.getMessageString(), StkError::AUDIO_SYSTEM );
|
||||
}
|
||||
counter = 0;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Saxofony.h"
|
||||
#include <string.h>
|
||||
#include "SKINI.msg"
|
||||
|
||||
Saxofony :: Saxofony(MY_FLOAT lowestFrequency)
|
||||
@@ -54,10 +53,8 @@ Saxofony :: Saxofony(MY_FLOAT lowestFrequency)
|
||||
envelope = new Envelope;
|
||||
noise = new Noise;
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char path[128];
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
vibrato = new WaveLoop( strcat(path,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
vibrato = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
vibrato->setFrequency((MY_FLOAT) 5.735);
|
||||
|
||||
outputGain = (MY_FLOAT) 0.3;
|
||||
@@ -87,7 +84,7 @@ void Saxofony :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Saxofony: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Saxofony: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -133,7 +130,7 @@ void Saxofony :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
outputGain = amplitude + 0.001;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Saxofony: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Saxofony: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -142,7 +139,7 @@ void Saxofony :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.01);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Saxofony: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Saxofony: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -172,11 +169,11 @@ void Saxofony :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Saxofony: Control value less than zero!" << endl;
|
||||
std::cerr << "Saxofony: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Saxofony: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Saxofony: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_ReedStiffness_) // 2
|
||||
@@ -194,10 +191,10 @@ void Saxofony :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == 26) // reed table offset
|
||||
reedTable->setOffset(0.4 + ( norm * 0.6));
|
||||
else
|
||||
cerr << "Saxofony: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Saxofony: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Saxofony: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Saxofony: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -344,7 +344,7 @@ int Shakers :: setupName(char* instr)
|
||||
}
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Shakers: Setting instrument to " << instrs[which] << endl;
|
||||
std::cerr << "Shakers: Setting instrument to " << instrs[which] << std::endl;
|
||||
#endif
|
||||
|
||||
return this->setupNum(which);
|
||||
@@ -795,14 +795,14 @@ int Shakers :: setupNum(int inst)
|
||||
void Shakers :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
{
|
||||
// Yep ... pretty kludgey, but it works!
|
||||
int noteNum = (int) ((12*log(frequency/220)/log(2)) + 57.01) % 32;
|
||||
int noteNum = (int) ((12*log(frequency/220.0)/log(2.0)) + 57.01) % 32;
|
||||
if (instType != noteNum) instType = this->setupNum(noteNum);
|
||||
shakeEnergy += amplitude * MAX_SHAKE * 0.1;
|
||||
if (shakeEnergy > MAX_SHAKE) shakeEnergy = MAX_SHAKE;
|
||||
if (instType==10 || instType==3) ratchetPos += 1;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Shakers: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Shakers: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -891,11 +891,11 @@ void Shakers :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Shakers: Control value less than zero!" << endl;
|
||||
std::cerr << "Shakers: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Shakers: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Shakers: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
MY_FLOAT temp;
|
||||
@@ -982,10 +982,10 @@ void Shakers :: controlChange(int number, MY_FLOAT value)
|
||||
this->setupNum(instType);
|
||||
}
|
||||
else
|
||||
cerr << "Shakers: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Shakers: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Shakers: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Shakers: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -19,17 +19,14 @@
|
||||
|
||||
#include "Simple.h"
|
||||
#include "SKINI.msg"
|
||||
#include <string.h>
|
||||
|
||||
Simple :: Simple()
|
||||
{
|
||||
adsr = new ADSR;
|
||||
baseFrequency = (MY_FLOAT) 440.0;
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
loop = new WaveLoop( strcat(file,"impuls10.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
loop = new WaveLoop( (Stk::rawwavePath() + "impuls10.raw").c_str(), TRUE );
|
||||
|
||||
filter = new OnePole(0.5);
|
||||
noise = new Noise;
|
||||
@@ -64,7 +61,7 @@ void Simple :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
filter->setGain(amplitude);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Simple: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Simple: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
void Simple :: noteOff(MY_FLOAT amplitude)
|
||||
@@ -72,7 +69,7 @@ void Simple :: noteOff(MY_FLOAT amplitude)
|
||||
keyOff();
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Simple: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Simple: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -97,11 +94,11 @@ void Simple :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Clarinet: Control value less than zero!" << endl;
|
||||
std::cerr << "Clarinet: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Clarinet: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Clarinet: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_Breath_) // 2
|
||||
@@ -117,9 +114,9 @@ void Simple :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_AfterTouch_Cont_) // 128
|
||||
adsr->setTarget( norm );
|
||||
else
|
||||
cerr << "Simple: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Simple: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Simple: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Simple: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ void Sitar :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Sitar: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Sitar: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ void Sitar :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
amGain = 0.1 * amplitude;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Sitar: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Sitar: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -87,16 +87,16 @@ void Sitar :: noteOff(MY_FLOAT amplitude)
|
||||
{
|
||||
loopGain = (MY_FLOAT) 1.0 - amplitude;
|
||||
if ( loopGain < 0.0 ) {
|
||||
cerr << "Plucked: noteOff amplitude greater than 1.0!" << endl;
|
||||
std::cerr << "Plucked: noteOff amplitude greater than 1.0!" << std::endl;
|
||||
loopGain = 0.0;
|
||||
}
|
||||
else if ( loopGain > 1.0 ) {
|
||||
cerr << "Plucked: noteOff amplitude less than or zero!" << endl;
|
||||
std::cerr << "Plucked: noteOff amplitude less than or zero!" << std::endl;
|
||||
loopGain = (MY_FLOAT) 0.99999;
|
||||
}
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Plucked: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Plucked: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ void StifKarp :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
lastFrequency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "StifKarp: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "StifKarp: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
lastFrequency = 220.0;
|
||||
}
|
||||
|
||||
@@ -116,11 +116,11 @@ void StifKarp :: setStretch(MY_FLOAT stretch)
|
||||
void StifKarp :: setPickupPosition(MY_FLOAT position) {
|
||||
pickupPosition = position;
|
||||
if ( position < 0.0 ) {
|
||||
cerr << "StifKarp: setPickupPosition parameter is less than zero!" << endl;
|
||||
std::cerr << "StifKarp: setPickupPosition parameter is less than zero!" << std::endl;
|
||||
pickupPosition = 0.0;
|
||||
}
|
||||
else if ( position > 1.0 ) {
|
||||
cerr << "StifKarp: setPickupPosition parameter is greater than 1.0!" << endl;
|
||||
std::cerr << "StifKarp: setPickupPosition parameter is greater than 1.0!" << std::endl;
|
||||
pickupPosition = 1.0;
|
||||
}
|
||||
|
||||
@@ -139,11 +139,11 @@ void StifKarp :: pluck(MY_FLOAT amplitude)
|
||||
{
|
||||
MY_FLOAT gain = amplitude;
|
||||
if ( gain > 1.0 ) {
|
||||
cerr << "StifKarp: pluck amplitude greater than 1.0!" << endl;
|
||||
std::cerr << "StifKarp: pluck amplitude greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
else if ( gain < 0.0 ) {
|
||||
cerr << "StifKarp: pluck amplitude less than zero!" << endl;
|
||||
std::cerr << "StifKarp: pluck amplitude less than zero!" << std::endl;
|
||||
gain = 0.0;
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ void StifKarp :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
this->pluck(amplitude);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "StifKarp: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "StifKarp: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -169,17 +169,17 @@ void StifKarp :: noteOff(MY_FLOAT amplitude)
|
||||
{
|
||||
MY_FLOAT gain = amplitude;
|
||||
if ( gain > 1.0 ) {
|
||||
cerr << "StifKarp: noteOff amplitude greater than 1.0!" << endl;
|
||||
std::cerr << "StifKarp: noteOff amplitude greater than 1.0!" << std::endl;
|
||||
gain = 1.0;
|
||||
}
|
||||
else if ( gain < 0.0 ) {
|
||||
cerr << "StifKarp: noteOff amplitude less than zero!" << endl;
|
||||
std::cerr << "StifKarp: noteOff amplitude less than zero!" << std::endl;
|
||||
gain = 0.0;
|
||||
}
|
||||
loopGain = (1.0 - gain) * 0.5;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "StifPluck: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "StifPluck: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -204,11 +204,11 @@ void StifKarp :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "StifKarp: Control value less than zero!" << endl;
|
||||
std::cerr << "StifKarp: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "StifKarp: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "StifKarp: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_PickPosition_) // 4
|
||||
@@ -218,10 +218,10 @@ void StifKarp :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_StringDetune_) // 1
|
||||
setStretch( 0.9 + (0.1 * (1.0 - norm)) );
|
||||
else
|
||||
cerr << "StifKarp: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "StifKarp: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "StifKarp: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "StifKarp: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
20
src/Stk.cpp
20
src/Stk.cpp
@@ -17,11 +17,12 @@
|
||||
#include <string.h>
|
||||
|
||||
MY_FLOAT Stk :: srate = (MY_FLOAT) SRATE;
|
||||
std::string Stk :: rawwavepath = RAWWAVE_PATH;
|
||||
const Stk::STK_FORMAT Stk :: STK_SINT8 = 1;
|
||||
const Stk::STK_FORMAT Stk :: STK_SINT16 = 2;
|
||||
const Stk::STK_FORMAT Stk :: STK_SINT32 = 8;
|
||||
const Stk::STK_FORMAT Stk :: STK_FLOAT32 = 16;
|
||||
const Stk::STK_FORMAT Stk :: STK_FLOAT64 = 32;
|
||||
const Stk::STK_FORMAT Stk :: MY_FLOAT32 = 16;
|
||||
const Stk::STK_FORMAT Stk :: MY_FLOAT64 = 32;
|
||||
|
||||
Stk :: Stk(void)
|
||||
{
|
||||
@@ -42,6 +43,21 @@ void Stk :: setSampleRate(MY_FLOAT newRate)
|
||||
srate = newRate;
|
||||
}
|
||||
|
||||
std::string Stk :: rawwavePath(void)
|
||||
{
|
||||
return rawwavepath;
|
||||
}
|
||||
|
||||
void Stk :: setRawwavePath(std::string newPath)
|
||||
{
|
||||
if ( !newPath.empty() )
|
||||
rawwavepath = newPath;
|
||||
|
||||
// Make sure the path includes a "/"
|
||||
if ( rawwavepath[rawwavepath.length()-1] != '/' )
|
||||
rawwavepath += "/";
|
||||
}
|
||||
|
||||
void Stk :: swap16(unsigned char *ptr)
|
||||
{
|
||||
register unsigned char val;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
Table :: Table(char *fileName)
|
||||
{
|
||||
@@ -77,11 +77,11 @@ MY_FLOAT Table :: tick(MY_FLOAT index)
|
||||
long temp;
|
||||
|
||||
if (index > length-1) {
|
||||
cerr << "Table: Index (" << index << ") exceeds table length ... sticking at end!" << endl;
|
||||
std::cerr << "Table: Index (" << index << ") exceeds table length ... sticking at end!" << std::endl;
|
||||
index = length-1;
|
||||
}
|
||||
else if (index < 0.0) {
|
||||
cerr << "Table: Index (" << index << ") is less than zero ... setting to zero!" << endl;
|
||||
std::cerr << "Table: Index (" << index << ") is less than zero ... setting to zero!" << std::endl;
|
||||
index = 0.0;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,8 +105,8 @@ void TcpWvIn :: listen(unsigned int nChannels, Stk::STK_FORMAT format)
|
||||
channels = nChannels;
|
||||
|
||||
if ( format == STK_SINT16 ) dataSize = 2;
|
||||
else if ( format == STK_SINT32 || format == STK_FLOAT32 ) dataSize = 4;
|
||||
else if ( format == STK_FLOAT64 ) dataSize = 8;
|
||||
else if ( format == STK_SINT32 || format == MY_FLOAT32 ) dataSize = 4;
|
||||
else if ( format == MY_FLOAT64 ) dataSize = 8;
|
||||
else if ( format == STK_SINT8 ) dataSize = 1;
|
||||
else {
|
||||
sprintf( msg, "TcpWvIn: Unknown data type specified (%ld).", format );
|
||||
@@ -234,7 +234,7 @@ int TcpWvIn :: readData( void )
|
||||
data[i] *= gain;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
FLOAT32 *buf = (FLOAT32 *) (buffer+readPoint);
|
||||
for (int i=0; i<samples; i++ ) {
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
@@ -243,7 +243,7 @@ int TcpWvIn :: readData( void )
|
||||
data[i] = (MY_FLOAT) *buf++;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
FLOAT64 *buf = (FLOAT64 *) (buffer+readPoint);
|
||||
for (int i=0; i<samples; i++ ) {
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
|
||||
@@ -63,8 +63,8 @@ void TcpWvOut :: connect(int port, const char *hostname, unsigned int nChannels,
|
||||
|
||||
if ( format == STK_SINT8 ) dataSize = 1;
|
||||
else if ( format == STK_SINT16 ) dataSize = 2;
|
||||
else if ( format == STK_SINT32 || format == STK_FLOAT32 ) dataSize = 4;
|
||||
else if ( format == STK_FLOAT64 ) dataSize = 8;
|
||||
else if ( format == STK_SINT32 || format == MY_FLOAT32 ) dataSize = 4;
|
||||
else if ( format == MY_FLOAT64 ) dataSize = 8;
|
||||
else {
|
||||
sprintf( msg, "TcpWvOut: Unknown data type specified (%ld).", format );
|
||||
handleError(msg, StkError::FUNCTION_ARGUMENT);
|
||||
@@ -95,7 +95,7 @@ void TcpWvOut :: disconnect(void)
|
||||
}
|
||||
}
|
||||
|
||||
void TcpWvOut :: writeData( long frames )
|
||||
void TcpWvOut :: writeData( unsigned long frames )
|
||||
{
|
||||
if ( dataType == STK_SINT8 ) {
|
||||
signed char *ptr = (signed char *) buffer;
|
||||
@@ -122,7 +122,7 @@ void TcpWvOut :: writeData( long frames )
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
FLOAT32 *ptr = (FLOAT32 *) buffer;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
*ptr = (FLOAT32) data[k];
|
||||
@@ -132,7 +132,7 @@ void TcpWvOut :: writeData( long frames )
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
FLOAT64 *ptr = (FLOAT64 *) buffer;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
*ptr = (FLOAT64) data[k];
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Thread.h"
|
||||
#include<iostream.h>
|
||||
|
||||
Thread :: Thread()
|
||||
{
|
||||
|
||||
@@ -31,25 +31,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "TubeBell.h"
|
||||
#include <string.h>
|
||||
|
||||
TubeBell :: TubeBell()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file.
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 1.0 * 0.995);
|
||||
this->setRatio(1, 1.414 * 0.995);
|
||||
|
||||
@@ -30,14 +30,11 @@
|
||||
#include "SKINI.msg"
|
||||
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
VoicForm :: VoicForm() : Instrmnt()
|
||||
{
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char file[128];
|
||||
strcpy(file, RAWWAVE_PATH);
|
||||
voiced = new SingWave( strcat(file,"impuls20.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
voiced = new SingWave( (Stk::rawwavePath() + "impuls20.raw").c_str(), TRUE );
|
||||
voiced->setGainRate( 0.001 );
|
||||
voiced->setGainTarget( 0.0 );
|
||||
|
||||
@@ -86,7 +83,7 @@ void VoicForm :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency;
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "VoicForm: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "VoicForm: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -107,14 +104,14 @@ bool VoicForm :: setPhoneme(const char *phoneme )
|
||||
setVoiced( Phonemes::voiceGain( i ) );
|
||||
setUnVoiced( Phonemes::noiseGain( i ) );
|
||||
#if defined(_STK_DEBUG_)
|
||||
cout << "VoicForm: found formant " << phoneme << " (number " << i << ")" << endl;
|
||||
cout << "VoicForm: found formant " << phoneme << " (number " << i << ")" << std::endl;
|
||||
#endif
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if ( !found )
|
||||
cerr << "VoicForm: phoneme " << phoneme << " not found!" << endl;
|
||||
std::cerr << "VoicForm: phoneme " << phoneme << " not found!" << std::endl;
|
||||
|
||||
return found;
|
||||
}
|
||||
@@ -132,7 +129,7 @@ void VoicForm :: setUnVoiced(MY_FLOAT nGain)
|
||||
void VoicForm :: setFilterSweepRate(int whichOne, MY_FLOAT rate)
|
||||
{
|
||||
if ( whichOne < 0 || whichOne > 3 ) {
|
||||
cerr << "VoicForm: setFilterSweepRate filter argument outside range 0-3!" << endl;
|
||||
std::cerr << "VoicForm: setFilterSweepRate filter argument outside range 0-3!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -191,11 +188,11 @@ void VoicForm :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "VoicForm: Control value less than zero!" << endl;
|
||||
std::cerr << "VoicForm: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "VoicForm: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "VoicForm: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_Breath_) { // 2
|
||||
@@ -240,9 +237,9 @@ void VoicForm :: controlChange(int number, MY_FLOAT value)
|
||||
onepole->setPole( 0.97 - ( norm * 0.2) );
|
||||
}
|
||||
else
|
||||
cerr << "VoicForm: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "VoicForm: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "VoicForm: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "VoicForm: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -45,14 +45,13 @@ Voicer :: Voicer( int maxInstruments, MY_FLOAT decayTime )
|
||||
Voicer :: ~Voicer()
|
||||
{
|
||||
delete [] voices;
|
||||
//free( voices );
|
||||
}
|
||||
|
||||
void Voicer :: addInstrument( Instrmnt *instrument, int channel )
|
||||
{
|
||||
//voices = (Voice *) realloc( (void *) voices, nVoices+1 * sizeof( Voice ) );
|
||||
if ( nVoices == maxVoices ) {
|
||||
cerr << "Voicer: Maximum number of voices already added!!" << endl;
|
||||
std::cerr << "Voicer: Maximum number of voices already added!!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -226,10 +225,13 @@ void Voicer :: silence( void )
|
||||
|
||||
MY_FLOAT Voicer :: tick()
|
||||
{
|
||||
lastOutput = 0.0;
|
||||
lastOutput = lastOutputLeft = lastOutputRight = 0.0;
|
||||
for ( int i=0; i<nVoices; i++ ) {
|
||||
if ( voices[i].sounding != 0 )
|
||||
if ( voices[i].sounding != 0 ) {
|
||||
lastOutput += voices[i].instrument->tick();
|
||||
lastOutputLeft += voices[i].instrument->lastOutLeft();
|
||||
lastOutputRight += voices[i].instrument->lastOutRight();
|
||||
}
|
||||
if ( voices[i].sounding < 0 ) {
|
||||
voices[i].sounding++;
|
||||
if ( voices[i].sounding == 0 )
|
||||
@@ -252,3 +254,13 @@ MY_FLOAT Voicer :: lastOut() const
|
||||
return lastOutput;
|
||||
}
|
||||
|
||||
MY_FLOAT Voicer :: lastOutLeft() const
|
||||
{
|
||||
return lastOutputLeft;
|
||||
}
|
||||
|
||||
MY_FLOAT Voicer :: lastOutRight() const
|
||||
{
|
||||
return lastOutputRight;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
WaveLoop :: WaveLoop( const char *fileName, bool raw )
|
||||
: WvIn( fileName, raw ), phaseOffset(0.0)
|
||||
{
|
||||
// If at end of file, redo extra sample frame for looping.
|
||||
if (chunkPointer+bufferSize == fileSize) {
|
||||
for (unsigned int j=0; j<channels; j++)
|
||||
data[bufferSize*channels+j] = data[j];
|
||||
}
|
||||
}
|
||||
|
||||
WaveLoop :: ~WaveLoop()
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include "Whistle.h"
|
||||
#include "SKINI.msg"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#define CAN_RADIUS 100
|
||||
@@ -43,10 +42,8 @@ Whistle :: Whistle()
|
||||
pea = new Sphere(PEA_RADIUS);
|
||||
bumper = new Sphere(BUMP_RADIUS);
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file
|
||||
char path[128];
|
||||
strcpy(path, RAWWAVE_PATH);
|
||||
sine = new WaveLoop( strcat(path,"sinewave.raw"), TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave file
|
||||
sine = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
sine->setFrequency(2800.0);
|
||||
|
||||
can->setPosition(0, 0, 0); // set can location
|
||||
@@ -93,7 +90,7 @@ void Whistle :: setFrequency(MY_FLOAT frequency)
|
||||
{
|
||||
MY_FLOAT freakency = frequency * 4; // the whistle is a transposing instrument
|
||||
if ( frequency <= 0.0 ) {
|
||||
cerr << "Whistle: setFrequency parameter is less than or equal to zero!" << endl;
|
||||
std::cerr << "Whistle: setFrequency parameter is less than or equal to zero!" << std::endl;
|
||||
freakency = 220.0;
|
||||
}
|
||||
|
||||
@@ -117,7 +114,7 @@ void Whistle :: noteOn(MY_FLOAT frequency, MY_FLOAT amplitude)
|
||||
setFrequency(frequency);
|
||||
startBlowing(amplitude*2.0 ,amplitude * 0.2);
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Whistle: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << endl;
|
||||
std::cerr << "Whistle: NoteOn frequency = " << frequency << ", amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -126,7 +123,7 @@ void Whistle :: noteOff(MY_FLOAT amplitude)
|
||||
this->stopBlowing(amplitude * 0.02);
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Whistle: NoteOff amplitude = " << amplitude << endl;
|
||||
std::cerr << "Whistle: NoteOff amplitude = " << amplitude << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -230,11 +227,11 @@ void Whistle :: controlChange(int number, MY_FLOAT value)
|
||||
MY_FLOAT norm = value * ONE_OVER_128;
|
||||
if ( norm < 0 ) {
|
||||
norm = 0.0;
|
||||
cerr << "Whistle: Control value less than zero!" << endl;
|
||||
std::cerr << "Whistle: Control value less than zero!" << std::endl;
|
||||
}
|
||||
else if ( norm > 1.0 ) {
|
||||
norm = 1.0;
|
||||
cerr << "Whistle: Control value greater than 128.0!" << endl;
|
||||
std::cerr << "Whistle: Control value greater than 128.0!" << std::endl;
|
||||
}
|
||||
|
||||
if (number == __SK_NoiseLevel_) // 4
|
||||
@@ -250,10 +247,10 @@ void Whistle :: controlChange(int number, MY_FLOAT value)
|
||||
else if (number == __SK_Sustain_) // 64
|
||||
if (value < 1.0) subSample = 1;
|
||||
else
|
||||
cerr << "Whistle: Undefined Control Number (" << number << ")!!" << endl;
|
||||
std::cerr << "Whistle: Undefined Control Number (" << number << ")!!" << std::endl;
|
||||
|
||||
#if defined(_STK_DEBUG_)
|
||||
cerr << "Whistle: controlChange number = " << number << ", value = " << value << endl;
|
||||
std::cerr << "Whistle: controlChange number = " << number << ", value = " << value << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -31,25 +31,14 @@
|
||||
/***************************************************/
|
||||
|
||||
#include "Wurley.h"
|
||||
#include <string.h>
|
||||
|
||||
Wurley :: Wurley()
|
||||
: FM()
|
||||
{
|
||||
int i;
|
||||
char files[4][128];
|
||||
|
||||
// Concatenate the STK RAWWAVE_PATH to the rawwave file.
|
||||
for ( i=0; i<4; i++ )
|
||||
strcpy( files[i], RAWWAVE_PATH);
|
||||
|
||||
strcat(files[0], "sinewave.raw");
|
||||
strcat(files[1], "sinewave.raw");
|
||||
strcat(files[2], "sinewave.raw");
|
||||
strcat(files[3], "fwavblnk.raw");
|
||||
|
||||
for ( i=0; i<4; i++ )
|
||||
waves[i] = new WaveLoop( files[i], TRUE );
|
||||
// Concatenate the STK rawwave path to the rawwave files
|
||||
for ( int i=0; i<3; i++ )
|
||||
waves[i] = new WaveLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), TRUE );
|
||||
waves[3] = new WaveLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), TRUE );
|
||||
|
||||
this->setRatio(0, 1.0);
|
||||
this->setRatio(1, 4.0);
|
||||
|
||||
47
src/WvIn.cpp
47
src/WvIn.cpp
@@ -42,14 +42,14 @@
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <iostream.h>
|
||||
#include <iostream>
|
||||
|
||||
WvIn :: WvIn()
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
WvIn :: WvIn( const char *fileName, bool raw )
|
||||
WvIn :: WvIn( const char *fileName, bool raw, bool doNormalize )
|
||||
{
|
||||
init();
|
||||
openFile( fileName, raw );
|
||||
@@ -86,7 +86,7 @@ void WvIn :: closeFile( void )
|
||||
finished = true;
|
||||
}
|
||||
|
||||
void WvIn :: openFile( const char *fileName, bool raw )
|
||||
void WvIn :: openFile( const char *fileName, bool raw, bool doNormalize )
|
||||
{
|
||||
closeFile();
|
||||
|
||||
@@ -129,6 +129,11 @@ void WvIn :: openFile( const char *fileName, bool raw )
|
||||
if ( result == false )
|
||||
handleError(msg, StkError::FILE_ERROR);
|
||||
|
||||
if ( fileSize == 0 ) {
|
||||
sprintf(msg, "WvIn: File (%s) data size is zero!", fileName);
|
||||
handleError(msg, StkError::FILE_ERROR);
|
||||
}
|
||||
|
||||
// Allocate new memory if necessary.
|
||||
samples = (bufferSize+1)*channels;
|
||||
if ( lastSamples < samples ) {
|
||||
@@ -144,7 +149,7 @@ void WvIn :: openFile( const char *fileName, bool raw )
|
||||
chunkPointer = 0;
|
||||
reset();
|
||||
readData( 0 ); // Load file data.
|
||||
normalize();
|
||||
if ( doNormalize ) normalize();
|
||||
finished = false;
|
||||
return;
|
||||
|
||||
@@ -204,10 +209,11 @@ bool WvIn :: getWavInfo( const char *fileName )
|
||||
|
||||
// Check that the data is not compressed.
|
||||
SINT16 format_tag;
|
||||
if ( fseek(fd, 4, SEEK_CUR) == -1 ) goto error; // Jump over chunkSize.
|
||||
if ( fread(&chunkSize, 4, 1, fd) != 1 ) goto error; // Read fmt chunk size.
|
||||
if ( fread(&format_tag, 2, 1, fd) != 1 ) goto error;
|
||||
#ifndef __LITTLE_ENDIAN__
|
||||
swap16((unsigned char *)&format_tag);
|
||||
swap32((unsigned char *)&chunkSize);
|
||||
#endif
|
||||
if (format_tag != 1 && format_tag != 3 ) { // PCM = 1, FLOAT = 3
|
||||
sprintf(msg, "WvIn: %s contains an unsupported data format type (%d).", fileName, format_tag);
|
||||
@@ -250,17 +256,21 @@ bool WvIn :: getWavInfo( const char *fileName )
|
||||
}
|
||||
else if ( format_tag == 3 ) {
|
||||
if (temp == 32)
|
||||
dataType = STK_FLOAT32;
|
||||
dataType = MY_FLOAT32;
|
||||
else if (temp == 64)
|
||||
dataType = STK_FLOAT64;
|
||||
dataType = MY_FLOAT64;
|
||||
}
|
||||
if ( dataType == 0 ) {
|
||||
sprintf(msg, "WvIn: %d bits per sample with data format %d are not supported (%s).", temp, format_tag, fileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Jump over any remaining part of the "fmt" chunk.
|
||||
if ( fseek(fd, chunkSize-16, SEEK_CUR) == -1 ) goto error;
|
||||
|
||||
// Find "data" chunk ... it must come after the "fmt" chunk.
|
||||
if ( fread(&id, 4, 1, fd) != 1 ) goto error;
|
||||
|
||||
while ( strncmp(id, "data", 4) ) {
|
||||
if ( fread(&chunkSize, 4, 1, fd) != 1 ) goto error;
|
||||
#ifndef __LITTLE_ENDIAN__
|
||||
@@ -308,8 +318,8 @@ bool WvIn :: getSndInfo( const char *fileName )
|
||||
if (format == 2) dataType = STK_SINT8;
|
||||
else if (format == 3) dataType = STK_SINT16;
|
||||
else if (format == 5) dataType = STK_SINT32;
|
||||
else if (format == 6) dataType = STK_FLOAT32;
|
||||
else if (format == 7) dataType = STK_FLOAT64;
|
||||
else if (format == 6) dataType = MY_FLOAT32;
|
||||
else if (format == 7) dataType = MY_FLOAT64;
|
||||
else {
|
||||
sprintf(msg, "WvIn: data format in file %s is not supported.", fileName);
|
||||
return false;
|
||||
@@ -447,8 +457,8 @@ bool WvIn :: getAifInfo( const char *fileName )
|
||||
}
|
||||
else {
|
||||
if ( fread(&id, 4, 1, fd) != 1 ) goto error;
|
||||
if ( (!strncmp(id, "fl32", 4) || !strncmp(id, "FL32", 4)) && temp == 32 ) dataType = STK_FLOAT32;
|
||||
else if ( (!strncmp(id, "fl64", 4) || !strncmp(id, "FL64", 4)) && temp == 64 ) dataType = STK_FLOAT64;
|
||||
if ( (!strncmp(id, "fl32", 4) || !strncmp(id, "FL32", 4)) && temp == 32 ) dataType = MY_FLOAT32;
|
||||
else if ( (!strncmp(id, "fl64", 4) || !strncmp(id, "FL64", 4)) && temp == 64 ) dataType = MY_FLOAT64;
|
||||
}
|
||||
if ( dataType == 0 ) {
|
||||
sprintf(msg, "WvIn: %d bits per sample in file %s are not supported.", temp, fileName);
|
||||
@@ -544,8 +554,8 @@ bool WvIn :: getMatInfo( const char *fileName )
|
||||
if ( tmp == 1 ) dataType = STK_SINT8;
|
||||
else if ( tmp == 3 ) dataType = STK_SINT16;
|
||||
else if ( tmp == 5 ) dataType = STK_SINT32;
|
||||
else if ( tmp == 7 ) dataType = STK_FLOAT32;
|
||||
else if ( tmp == 9 ) dataType = STK_FLOAT64;
|
||||
else if ( tmp == 7 ) dataType = MY_FLOAT32;
|
||||
else if ( tmp == 9 ) dataType = MY_FLOAT64;
|
||||
else {
|
||||
sprintf(msg, "WvIn: The MAT-file array data format (%d) is not supported.", tmp);
|
||||
return false;
|
||||
@@ -649,7 +659,7 @@ void WvIn :: readData( unsigned long index )
|
||||
for (i=length*channels-1; i>=0; i--)
|
||||
data[i] = buf[i];
|
||||
}
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
FLOAT32 *buf = (FLOAT32 *)data;
|
||||
if (fseek(fd, dataOffset+(long)(chunkPointer*channels*4), SEEK_SET) == -1) goto error;
|
||||
if (fread(buf, length*channels, 4, fd) != 4 ) goto error;
|
||||
@@ -661,7 +671,7 @@ void WvIn :: readData( unsigned long index )
|
||||
for (i=length*channels-1; i>=0; i--)
|
||||
data[i] = buf[i];
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
FLOAT64 *buf = (FLOAT64 *)data;
|
||||
if (fseek(fd, dataOffset+(long)(chunkPointer*channels*8), SEEK_SET) == -1) goto error;
|
||||
if (fread(buf, length*channels, 8, fd) != 8 ) goto error;
|
||||
@@ -674,11 +684,11 @@ void WvIn :: readData( unsigned long index )
|
||||
data[i] = buf[i];
|
||||
}
|
||||
else if ( dataType == STK_SINT8 ) {
|
||||
char *buf = (char *)data;
|
||||
unsigned char *buf = (unsigned char *)data;
|
||||
if (fseek(fd, dataOffset+(long)(chunkPointer*channels), SEEK_SET) == -1) goto error;
|
||||
if (fread(buf, length*channels, 1, fd) != 1 ) goto error;
|
||||
for (i=length*channels-1; i>=0; i--)
|
||||
data[i] = buf[i];
|
||||
data[i] = buf[i] - 128.0; // 8-bit WAV data is unsigned!
|
||||
}
|
||||
|
||||
// If at end of file, repeat last sample frame for interpolation.
|
||||
@@ -719,7 +729,7 @@ void WvIn :: normalize(MY_FLOAT peak)
|
||||
if ( dataType == STK_SINT8 ) gain = peak / 128.0;
|
||||
else if ( dataType == STK_SINT16 ) gain = peak / 32768.0;
|
||||
else if ( dataType == STK_SINT32 ) gain = peak / 2147483648.0;
|
||||
else if ( dataType == STK_FLOAT32 || dataType == STK_FLOAT64 ) gain = peak;
|
||||
else if ( dataType == MY_FLOAT32 || dataType == MY_FLOAT64 ) gain = peak;
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -731,6 +741,7 @@ void WvIn :: normalize(MY_FLOAT peak)
|
||||
if (fabs(data[i]) > max)
|
||||
max = (MY_FLOAT) fabs((double) data[i]);
|
||||
}
|
||||
|
||||
if (max > 0.0) {
|
||||
max = (MY_FLOAT) 1.0 / max;
|
||||
max *= peak;
|
||||
|
||||
@@ -168,8 +168,8 @@ void WvOut :: openFile( const char *fileName, unsigned int nChannels, WvOut::FIL
|
||||
fileType = type;
|
||||
|
||||
if ( format != STK_SINT8 && format != STK_SINT16 &&
|
||||
format != STK_SINT32 && format != STK_FLOAT32 &&
|
||||
format != STK_FLOAT64 ) {
|
||||
format != STK_SINT32 && format != MY_FLOAT32 &&
|
||||
format != MY_FLOAT64 ) {
|
||||
sprintf( msg, "WvOut: Unknown data type specified (%ld).", format );
|
||||
handleError(msg, StkError::FUNCTION_ARGUMENT);
|
||||
}
|
||||
@@ -259,11 +259,11 @@ bool WvOut :: setWavFile( const char *fileName )
|
||||
hdr.bits_per_samp = 16;
|
||||
else if ( dataType == STK_SINT32 )
|
||||
hdr.bits_per_samp = 32;
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
hdr.format_tag = 3;
|
||||
hdr.bits_per_samp = 32;
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
hdr.format_tag = 3;
|
||||
hdr.bits_per_samp = 64;
|
||||
}
|
||||
@@ -297,9 +297,9 @@ void WvOut :: closeWavFile( void )
|
||||
int bytes_per_sample = 1;
|
||||
if ( dataType == STK_SINT16 )
|
||||
bytes_per_sample = 2;
|
||||
else if ( dataType == STK_SINT32 || dataType == STK_FLOAT32 )
|
||||
else if ( dataType == STK_SINT32 || dataType == MY_FLOAT32 )
|
||||
bytes_per_sample = 4;
|
||||
else if ( dataType == STK_FLOAT64 )
|
||||
else if ( dataType == MY_FLOAT64 )
|
||||
bytes_per_sample = 8;
|
||||
|
||||
SINT32 bytes = totalCount * channels * bytes_per_sample;
|
||||
@@ -338,9 +338,9 @@ bool WvOut :: setSndFile( const char *fileName )
|
||||
hdr.format = 3;
|
||||
else if ( dataType == STK_SINT32 )
|
||||
hdr.format = 5;
|
||||
else if ( dataType == STK_FLOAT32 )
|
||||
else if ( dataType == MY_FLOAT32 )
|
||||
hdr.format = 6;
|
||||
else if ( dataType == STK_FLOAT64 )
|
||||
else if ( dataType == MY_FLOAT64 )
|
||||
hdr.format = 7;
|
||||
|
||||
byteswap = false;
|
||||
@@ -368,9 +368,9 @@ void WvOut :: closeSndFile( void )
|
||||
bytes_per_sample = 2;
|
||||
else if ( dataType == STK_SINT32 )
|
||||
bytes_per_sample = 4;
|
||||
else if ( dataType == STK_FLOAT32 )
|
||||
else if ( dataType == MY_FLOAT32 )
|
||||
bytes_per_sample = 4;
|
||||
else if ( dataType == STK_FLOAT64 )
|
||||
else if ( dataType == MY_FLOAT64 )
|
||||
bytes_per_sample = 8;
|
||||
|
||||
SINT32 bytes = totalCount * bytes_per_sample * channels;
|
||||
@@ -407,12 +407,12 @@ bool WvOut :: setAifFile( const char *fileName )
|
||||
hdr.sample_size = 16;
|
||||
else if ( dataType == STK_SINT32 )
|
||||
hdr.sample_size = 32;
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
hdr.aiff[3] = 'C';
|
||||
hdr.sample_size = 32;
|
||||
hdr.comm_size = 24;
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
hdr.aiff[3] = 'C';
|
||||
hdr.sample_size = 64;
|
||||
hdr.comm_size = 24;
|
||||
@@ -465,13 +465,13 @@ bool WvOut :: setAifFile( const char *fileName )
|
||||
if ( fwrite(&hdr.sample_size, 2, 1, fd) != 1 ) goto error;
|
||||
if ( fwrite(&hdr.srate, 10, 1, fd) != 1 ) goto error;
|
||||
|
||||
if ( dataType == STK_FLOAT32 ) {
|
||||
if ( dataType == MY_FLOAT32 ) {
|
||||
char type[4] = {'f','l','3','2'};
|
||||
char zeroes[2] = { 0, 0 };
|
||||
if ( fwrite(&type, 4, 1, fd) != 1 ) goto error;
|
||||
if ( fwrite(&zeroes, 2, 1, fd) != 1 ) goto error;
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
char type[4] = {'f','l','6','4'};
|
||||
char zeroes[2] = { 0, 0 };
|
||||
if ( fwrite(&type, 4, 1, fd) != 1 ) goto error;
|
||||
@@ -500,13 +500,13 @@ void WvOut :: closeAifFile( void )
|
||||
int bytes_per_sample = 1;
|
||||
if ( dataType == STK_SINT16 )
|
||||
bytes_per_sample = 2;
|
||||
else if ( dataType == STK_SINT32 || dataType == STK_FLOAT32 )
|
||||
else if ( dataType == STK_SINT32 || dataType == MY_FLOAT32 )
|
||||
bytes_per_sample = 4;
|
||||
else if ( dataType == STK_FLOAT64 )
|
||||
else if ( dataType == MY_FLOAT64 )
|
||||
bytes_per_sample = 8;
|
||||
|
||||
unsigned long bytes = totalCount * bytes_per_sample * channels + 46;
|
||||
if ( dataType == STK_FLOAT32 || dataType == STK_FLOAT64 ) bytes += 6;
|
||||
if ( dataType == MY_FLOAT32 || dataType == MY_FLOAT64 ) bytes += 6;
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
swap32((unsigned char *)&bytes);
|
||||
#endif
|
||||
@@ -514,11 +514,11 @@ void WvOut :: closeAifFile( void )
|
||||
fwrite(&bytes, 4, 1, fd);
|
||||
|
||||
bytes = totalCount * bytes_per_sample * channels + 8;
|
||||
if ( dataType == STK_FLOAT32 || dataType == STK_FLOAT64 ) bytes += 6;
|
||||
if ( dataType == MY_FLOAT32 || dataType == MY_FLOAT64 ) bytes += 6;
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
swap32((unsigned char *)&bytes);
|
||||
#endif
|
||||
if ( dataType == STK_FLOAT32 || dataType == STK_FLOAT64 )
|
||||
if ( dataType == MY_FLOAT32 || dataType == MY_FLOAT64 )
|
||||
fseek(fd, 48, SEEK_SET); // jump to "SSND" chunk size
|
||||
else
|
||||
fseek(fd, 42, SEEK_SET); // jump to "SSND" chunk size
|
||||
@@ -538,8 +538,8 @@ bool WvOut :: setMatFile( const char *fileName )
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( dataType != STK_FLOAT64 ) {
|
||||
dataType = STK_FLOAT64;
|
||||
if ( dataType != MY_FLOAT64 ) {
|
||||
dataType = MY_FLOAT64;
|
||||
sprintf(msg, "WvOut: Using 64-bit floating-point data format for file %s", name);
|
||||
handleError(msg, StkError::WARNING);
|
||||
}
|
||||
@@ -665,11 +665,20 @@ MY_FLOAT WvOut :: getTime( void ) const
|
||||
void WvOut :: writeData( unsigned long frames )
|
||||
{
|
||||
if ( dataType == STK_SINT8 ) {
|
||||
signed char sample;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
sample = (signed char) (data[k] * 127.0 );
|
||||
//sample = ((signed char) (( data[k] + 1.0 ) * 127.5 + 0.5)) - 128;
|
||||
if ( fwrite(&sample, 1, 1, fd) != 1 ) goto error;
|
||||
if ( fileType == WVOUT_WAV ) { // 8-bit WAV data is unsigned!
|
||||
unsigned char sample;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
sample = (unsigned char) (data[k] * 127.0 + 128.0);
|
||||
if ( fwrite(&sample, 1, 1, fd) != 1 ) goto error;
|
||||
}
|
||||
}
|
||||
else {
|
||||
signed char sample;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
sample = (signed char) (data[k] * 127.0);
|
||||
//sample = ((signed char) (( data[k] + 1.0 ) * 127.5 + 0.5)) - 128;
|
||||
if ( fwrite(&sample, 1, 1, fd) != 1 ) goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_SINT16 ) {
|
||||
@@ -690,7 +699,7 @@ void WvOut :: writeData( unsigned long frames )
|
||||
if ( fwrite(&sample, 4, 1, fd) != 1 ) goto error;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT32 ) {
|
||||
else if ( dataType == MY_FLOAT32 ) {
|
||||
FLOAT32 sample;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
sample = (FLOAT32) (data[k]);
|
||||
@@ -698,7 +707,7 @@ void WvOut :: writeData( unsigned long frames )
|
||||
if ( fwrite(&sample, 4, 1, fd) != 1 ) goto error;
|
||||
}
|
||||
}
|
||||
else if ( dataType == STK_FLOAT64 ) {
|
||||
else if ( dataType == MY_FLOAT64 ) {
|
||||
FLOAT64 sample;
|
||||
for ( unsigned long k=0; k<frames*channels; k++ ) {
|
||||
sample = (FLOAT64) (data[k]);
|
||||
|
||||
Reference in New Issue
Block a user