簡體   English   中英

8步音序器功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM