Created
April 26, 2012 14:59
-
-
Save bartolsthoorn/2500178 to your computer and use it in GitHub Desktop.
How?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// MULTIPLE SIGNAL GENERATOR! | |
__block float *phases = nil; | |
[audioManager setOutputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels) | |
{ | |
float samplingRate = audioManager.samplingRate; | |
NSUInteger activeSignalCount = [tones count]; | |
// Initialize phases | |
if (phases == nil) { | |
phases = new float[10]; | |
for(int z = 0; z <= 10; z++) { | |
phases[z] = 0.0; | |
} | |
} | |
// Multiple signals | |
NSEnumerator * enumerator = [tones objectEnumerator]; | |
id frequency; | |
UInt32 c = 0; | |
while(frequency = [enumerator nextObject]) | |
{ | |
for (int i=0; i < numFrames; ++i) | |
{ | |
for (int iChannel = 0; iChannel < numChannels; ++iChannel) | |
{ | |
float theta = phases[c] * M_PI * 2; | |
if (c == 0) { | |
data[i*numChannels + iChannel] = sin(theta); | |
} else { | |
data[i*numChannels + iChannel] = data[i*numChannels + iChannel] + sin(theta); | |
} | |
} | |
phases[c] += 1.0 / (samplingRate / [frequency floatValue]); | |
if (phases[c] > 1.0) phases[c] = -1; | |
} | |
c++; | |
} | |
// Normalize data with active signal count | |
float signalMulti = 1.0 / (float(activeSignalCount) * (sqrt(2.0))); | |
vDSP_vsmul(data, 1, &signalMulti, data, 1, numFrames*numChannels); | |
// Apply master volume | |
float volume = masterVolumeSlider.value; | |
vDSP_vsmul(data, 1, &volume, data, 1, numFrames*numChannels); | |
if (fxSwitch.isOn) { | |
// FILTER | |
// 10 bands EQ | |
// vDSP_deq22(<#float *__vDSP_A#>, <#vDSP_Stride __vDSP_I#>, <#float *__vDSP_B#>, <#float *__vDSP_C#>, <#vDSP_Stride __vDSP_K#>, <#vDSP_Length __vDSP_N#>) | |
} | |
// Measure dB | |
[self measureDB:data:numFrames:numChannels]; | |
}]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment