typedef struct
{
float frequency;
float amplitude;
} OscData;
typedef struct
{
int notenumber;
int velocity;
} NoteData;
OscData noteToOsc (NoteData note);
int main()
{
/*declare integer to store midi note value*/
int note;
int velo;
NoteData notedata[8];
int sequenceposition;
float frequency, x, y;
float amplitude;
OscData oscdata[2];
/*get user to input a midi value*/
printf("press 8 keys on the Axion MIDI keyboard to create a loop\n");
/*recording starts here*/
sequenceposition = 0;
do
{
note = aserveGetNote();
velo = aserveGetVelocity();
if (velo != 0)
{
notedata[sequenceposition].notenumber = note;
notedata[sequenceposition].velocity = velo;
printf("note number = %d\n", notedata[sequenceposition].notenumber);
printf("velocity = %d\n", notedata[sequenceposition].velocity);
sequenceposition++;
}
}
while (sequenceposition < 8);
/*recording ends here*/
while(true)
{
/*playback starts here*/
for(sequenceposition = 0; sequenceposition < 8; sequenceposition++)
{
oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;
oscdata = noteToOsc(notedata[sequenceposition]);
/*display frequency*/
printf("Starting oscillator at %5.2fHz\n", oscdata[0].frequency);
printf("Amplitude = %f\n", oscdata[1].amplitude);
/*start oscillator*/
aserveOscillator(0, oscdata[0].frequency, oscdata[1].amplitude, 0);
aserveSleep(200);
}
}
return 0;
/*end*/
OscData noteToOsc (NoteData note);
{
float frequency, x, y, amplitude;
oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;
/*convert midi value to frequency and velocity to amplitude*/
x = 2;
y = (notedata[sequenceposition].notenumber-69.0)/12.0;
oscdata[0].frequency = 440 * pow(x, y);
amplitude = notedata[sequenceposition].velocity / 127.0;
}
}
This is code for an 8 step sequencer that scans for the input of 8 notes from a midi keyboard. The function called in main is supposed to do the conversion of note number to frequency and velocity to amplitude but there is an error 'Array type 'OscData[2] is not assignable' Am I supposed to be putting something else in place of Oscdata? Thanks
In C
Arrays are not assignable .
You are doing this here
oscdata = noteToOsc(notedata[sequenceposition]);
oscdata
is an array and oscdata[sequenceposition]
is an element of the array so you can assign value to an element
This:
oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;
oscdata = noteToOsc(notedata[sequenceposition]);
doesn't make any sense. You can't assign to arrays, but you don't "want" to either. It should just be something like:
oscdata[sequenceposition] = noteToOsc(notedata[sequenceposition]);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.