示例#1
0
// ------------------------------------------------------
// Save the data to a pattern file
void Save_Pattern_Data(int (*Write_Function)(void *, int ,int, FILE *),
                      int (*Write_Function_Swap)(void *, int ,int, FILE *),
                      FILE *in)
{
    int Cur_Position = Get_Song_Position();

    int Old_Curr_Buff_Block = Curr_Buff_Block;

    Copy_Buff(NBR_COPY_BLOCKS - 1, Curr_Buff_Block);
    Curr_Buff_Block = NBR_COPY_BLOCKS - 1;
    Copy_Selection_To_Buffer(Cur_Position);

    Calc_selection();

    Write_Function(Buff_MultiNotes[Curr_Buff_Block], sizeof(char), MAX_TRACKS, in);
    Write_Function(Buff_Effects[Curr_Buff_Block], sizeof(char), MAX_TRACKS, in);
    Write_Function_Swap(&b_buff_xsize[Curr_Buff_Block], sizeof(int), 1, in);
    Write_Function_Swap(&b_buff_ysize[Curr_Buff_Block], sizeof(int), 1, in);
    Write_Function_Swap(&start_buff_nibble[Curr_Buff_Block], sizeof(int), 1, in);
    int Block_Len = PATTERN_LEN;

    unsigned char *Final_Mem_Out = Pack_Data(BuffBlock[Curr_Buff_Block], &Block_Len);
    if(Final_Mem_Out)
    {
        Write_Function_Swap(&Block_Len, sizeof(int), 1, in);
        Write_Function(Final_Mem_Out, sizeof(char), Block_Len, in);
        free(Final_Mem_Out);
    }
    Curr_Buff_Block = Old_Curr_Buff_Block;
    Actupated(0);
}
示例#2
0
// ------------------------------------------------------
// Set pattern row (EDIT)
void Midi_Edit_Set_Row(int Data)
{
    if(!is_recording && !Songplaying)
    {
        int Pos = Get_Song_Position();
        int Rows = patternLines[pSequence[Pos]];
        float factor = ((float) Rows / 127.0f);

        Pattern_Line = (int) (Data * factor);
        if(Pattern_Line < 0) Pattern_Line = 0;
        if(Pattern_Line >= Rows) Pattern_Line = Rows - 1;
        gui_action = GUI_CMD_UPDATE_PATTERN;
    }
}
示例#3
0
// ------------------------------------------------------
// Load the data from a pattern file
void Load_Pattern_Data(int (*Read_Function)(void *, int ,int, FILE *),
                      int (*Read_Function_Swap)(void *, int ,int, FILE *),
                      FILE *in,
                      int version)
{
    int Cur_Position = Get_Song_Position();

    int Old_Curr_Buff_Block = Curr_Buff_Block;
    Curr_Buff_Block = NBR_COPY_BLOCKS - 1;

    Read_Function(Buff_MultiNotes[Curr_Buff_Block], sizeof(char), MAX_TRACKS, in);
    if(version == 2)
    {
        Read_Function(Buff_Effects[Curr_Buff_Block], sizeof(char), MAX_TRACKS, in);
    }
    Read_Function_Swap(&b_buff_xsize[Curr_Buff_Block], sizeof(int), 1, in);
    Read_Function_Swap(&b_buff_ysize[Curr_Buff_Block], sizeof(int), 1, in);
    Read_Function_Swap(&start_buff_nibble[Curr_Buff_Block], sizeof(int), 1, in);

    int Size_In;
    int Size_Out = PATTERN_LEN;
    Read_Function_Swap(&Size_In, sizeof(int), 1, in);

    unsigned char *Pack_Mem = (unsigned char *) malloc(Size_In);
    if(Pack_Mem)
    {
        Read_Function(Pack_Mem, sizeof(char), Size_In, in);
        unsigned char *Final_Mem_Out = Depack_Data(Pack_Mem, Size_In, Size_Out);
        if(Final_Mem_Out)
        {
            Buff_Full[Curr_Buff_Block] = TRUE;
            memcpy(BuffBlock[Curr_Buff_Block], Final_Mem_Out, Size_Out);
            Paste_Block(Cur_Position, Paste_Across, FALSE);
            free(Final_Mem_Out);
        }
        free(Pack_Mem);
    }
    Curr_Buff_Block = Old_Curr_Buff_Block;
    Actupated(0);
}
示例#4
0
// ------------------------------------------------------
// Switch track on/off (LIVE)
void Midi_Edit_Track_On_Off(int Data)
{
    Ext_Pos_Switch = Get_Song_Position();
    Ext_Track_Switch = Track_Under_Caret;
    gui_action = GUI_CMD_SWITCH_TRACK_STATUS;
}