gpt4 book ai didi

c - 8步音序器中的功能

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:47 25 4
gpt4 key购买 nike

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 吗?谢谢

最佳答案

这个:

oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;

oscdata = noteToOsc(notedata[sequenceposition]);

没有任何意义。您不能分配给数组,但您也不想“想要”。它应该是这样的:

oscdata[sequenceposition] = noteToOsc(notedata[sequenceposition]);

关于c - 8步音序器中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com