[英]Function in 8 step sequencer
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;
}
}
這是一個8步音序器的代碼,它掃描來自Midi鍵盤的8個音符的輸入。 main中調用的函數應該將音符編號轉換為頻率,將速度轉換為幅度,但是會出現錯誤“數組類型'OscData [2]無法分配”我是否應該在Oscdata上放置其他內容? 謝謝
在C中
數組不可分配。
你在這里做
oscdata = noteToOsc(notedata[sequenceposition]);
oscdata
是一個數組,而oscdata[sequenceposition]
是該數組的一個元素,因此您可以將值分配給一個元素
這個:
oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;
oscdata = noteToOsc(notedata[sequenceposition]);
沒有任何意義。 您不能分配給數組,但是您也不希望“分配”給任何一個。 它應該像這樣:
oscdata[sequenceposition] = noteToOsc(notedata[sequenceposition]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.