首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8步排序器的功能

8步排序器的功能
EN

Stack Overflow用户
提问于 2015-02-25 14:26:30
回答 1查看 166关注 0票数 2
代码语言:javascript
复制
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中调用的函数应该是将音符数转换为频率和速度到振幅,但是存在一个错误的‘数组类型'OscData2是不可分配的’,我是不是应该用其他东西来代替振荡数据呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 14:40:23

这是:

代码语言:javascript
复制
oscdata[0].frequency = frequency;
oscdata[1].amplitude = amplitude;

oscdata = noteToOsc(notedata[sequenceposition]);

一点道理都没有。不能将数组分配给数组,但两者都“不需要”。应该是这样的:

代码语言:javascript
复制
oscdata[sequenceposition] = noteToOsc(notedata[sequenceposition]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28721526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档