⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfamidi.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
字号:
/******************************************************************
 * SEAL 2.0                                                       *
 * Copyright (c) 1999-2002 SEAL Developers. All Rights Reserved.  *
 *                                                                *
 * Web site: http://sealsystem.sourceforge.net/                   *
 * E-mail (current maintainer): orudge@users.sourceforge.net      *
 ******************************************************************/

/*
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/* OCR (16/09/2001): Updated new_soundformat_item call */
/* OCR (04/10/2001): Added about box */
/* OCR (02/04/2002): Made timer pause if MIDI is paused */
/* OCR (05/04/2002): Added send_custom_message function */

#include <seal.h>
#include <sound.h>
#include <dialogs.h>

#define TXT_MIDIINFO     INI_TEXT(" ")

signed int mid_pause = false;
l_int old_zeit = 0;
l_text filename = 0;
MIDI *midi_sample = 0;
volatile int zeit = 0;

l_bool midi_init_driver(p_soundformat_item o)
{
   return(TRUE);
}

l_bool midi_init_file (p_soundformat_item o, l_text file, l_bool play)
{
   if (filename)
      _free(filename);
         
   filename = _strdup(file);

   midi_sample = load_midi(filename);

   if (!midi_sample)
      return(FALSE);
   
   if (play == TRUE)
   {
      play_midi(midi_sample, FALSE);
      zeit = 0;
   }

   return(TRUE);
}

l_bool midi_play_file (p_soundformat_item o)
{
   play_midi(midi_sample, FALSE);
   zeit = 0;

   return(TRUE);
}
         

l_bool midi_poll_file(p_soundformat_item o)
{
   if (midi_pos < 0)
      return(FALSE);
   else
      return(TRUE);
}

l_bool midi_stop_file(p_soundformat_item o)
{
   stop_midi();
   return(TRUE);
}

l_bool midi_pause_file(p_soundformat_item o)
{
   switch (mid_pause)
   {
      case FALSE:                            // pause
         mid_pause = TRUE;
         old_zeit = zeit;
         midi_pause();
         break;
      case TRUE:                             //plays after pause
         midi_resume();
         zeit = old_zeit;
         mid_pause = FALSE;
         break;
   }
         
   return(mid_pause);
}

l_bool midi_forward_file(p_soundformat_item o, l_int relpos)     // TODO: Fix
{
//   midi_seek(midi_pos+relpos);
   return(TRUE);
}

l_bool midi_rewind_file(p_soundformat_item o, l_int relpos)     // TODO: Fix
{
//   midi_seek(midi_pos-relpos);
   return(TRUE);
}

l_bool midi_set_pos(p_soundformat_item o, l_int pos)     // TODO: Fix
{
//   midi_seek(pos);
   return(TRUE);
}

l_int midi_get_pos(p_soundformat_item o)
{
   return(zeit);
}

l_int midi_get_len_file(p_soundformat_item o)
{
   return(0); //midi_loop_end - midi_loop_start);
}

l_bool midi_is_stereo(p_soundformat_item o)
{
   return(TRUE);
}

l_bool midi_get_file_info(p_soundformat_item o, SFAINFO *inf)
{
   inf->freq = 0;
   inf->bits = 0;
   inf->channels = 0;
   inf->bitrate = 0;

   inf->title[0] = NULL;
   inf->album[0] = NULL;
   inf->author[0] = NULL;
   inf->comment[0] = NULL;
   inf->genre[0] = NULL;

   return(TRUE);
}

l_text midi_get_friendly_name(p_soundformat_item o)
{
   return(_strdup(filename));
}

l_bool midi_config_driver(p_soundformat_item o)
{
   return(midi_display_about(o));
}

l_bool midi_display_about(p_soundformat_item o)
{
   msgbox(MW_INFO, MB_OK, "MIDI Driver for SFA\n\nCopyright (c) Florian Xaver 2000\nCopyright (c) Owen Rudge 2001-2002");
   return(TRUE);
}

l_bool midi_close_file(p_soundformat_item o)
{
   destroy_midi(midi_sample);
   return(TRUE);
}

l_bool midi_terminate_driver(p_soundformat_item o)
{
   return(TRUE);
}

l_bool midi_send_custom_message(p_soundformat_item o, l_int msg, void *extra)
{
   return(FALSE);
}

void time_process()
{
   if (mid_pause == false)
      zeit++;
}

END_OF_FUNCTION(time_process);

//lib_exportable;
#include "sfamidi.exp"

SetInfoAppName("MIDI Driver");
SetInfoDesciption("MIDI Driver for SFA");
SetInfoCopyright("Copyright (c) Florian Xaver 2000, Owen Rudge 2001-2002");
SetInfoManufacturer("Florian Xaver, Owen Rudge");


lib_begin (void)
{
   if (ap_process == AP_ALLOC)
   {
      AP_EXPORTLIB();
   }

   if (ap_process == AP_INIT)
   {
      p_soundformat_item k = 0;

      AP_EXPORTLIB();

      install_int_ex(time_process, SECS_TO_TIMER(1));
      LOCK_VARIABLE(zeit);

      //init sound format list!!
      k = new_soundformat_item(                      ("mid"),
                                                     ("MIDI files"),
                                                     ("Copyright (c) Florian Xaver 2000, Owen Rudge 2001-2002"),
                                                     &midi_init_driver,
                                                     &midi_init_file,
                                                     &midi_play_file,
                                                     &midi_poll_file,
                                                     &midi_stop_file,
                                                     &midi_pause_file,
                                                     &midi_forward_file,
                                                     &midi_rewind_file,
                                                     &midi_set_pos,
                                                     &midi_get_pos,
                                                     &midi_get_len_file,
                                                     &midi_get_file_info,
                                                     &midi_get_friendly_name,
                                                     &midi_config_driver,
                                                     &midi_display_about,
                                                     &midi_close_file,
                                                     &midi_terminate_driver,
                                                     &midi_send_custom_message
                                                     );




      if (k) sound_format_list->insert(sound_format_list, k);
   }

   if (ap_process == AP_DONE)
   {

   }

   if (ap_process == AP_FREE)
   {

   }
} lib_end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -