1 /*MIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDI
4 (/dev/umixiX.Y Direct MIDI Player)
6 Copyright(C) 2014 Koine Yuusuke(koinec). All rights reserved.
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
11 1. Redistributions of source code must retain the above copyright notice,
12 this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
29 MIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDIMIDI*/
31 #define PLAYUMIDI_SRC_MAIN
45 char *gpstr_mididev[MAX_UMIDI_PORT];
46 char *gpstr_lang_smf[30];
47 char *gpstr_lang_terminal[30];
50 /* ===================================================================*/
59 /* ===================================================================*/
67 char str_default_devname[6] = DEFAULT_DEV_NAME;
71 if( NULL == gpstr_devname )
72 { gpstr_devname = str_default_devname; }
73 i_err = MidiDevice_Init( gpstr_devname, gpstr_mididev );
74 if( 0x00 != i_err ) { return i_err; }
76 t_sigerr = signal( SIGINT, (void (*))Signal_Int );
77 if( SIG_ERR == t_sigerr ) {
79 fprintf(stderr, "Error!!: Can't Set Signal(SIGINT) (%d)\n", errno);
80 goto goto_Play_SMF_TermDevice;
83 i_err = PlayEvent_Initialize();
86 goto goto_Play_SMF_TermDevice;
89 i_err = ReadSMF( gpstr_smfname );
92 goto goto_Play_SMF_TermPlayEvnet;
95 i_err = pthread_create( &t_thread, NULL,
96 (void *)PlayEvent_Play, (void *)NULL );
99 fprintf(stderr, "Error!!: Can't Create Player-Thread (%d)\n", errno);
102 pthread_join( t_thread, NULL );
105 MidiEvent_FreeMidiVarData();
106 MidiEvent_FreeMidiEvnetInfo();
108 goto_Play_SMF_TermPlayEvnet:
111 goto_Play_SMF_TermDevice:
118 /* ===================================================================*/
123 fputs( "playumidi: Simple MIDI-File Player for RAW-MIDI Interface(USB MIDI). "
124 STRING_VERSION "\n", stderr );
125 fputs( " Copyright(C) 2014- Koine Yuusuke(koinec@users.sourceforge.jp).\n",
127 fputs( " This software presented by 2-clause FreeBSD License.\n\n", stderr );
133 /* ===================================================================*/
138 fputs( "usage: playumidi [option] MIDIfile(.mid)\n", stderr );
139 fputs( " -d device_name Use RAW-MIDI device /dev/[device_name]X.Y"
140 " (X & Y is auto-serarch)\n", stderr );
141 fputs( " -0 device_fullname Use Port-0 RAW-MIDI device /dev/[device_fullname]\n", stderr );
142 fputs( " -1 device_fullname Use Port-1 RAW-MIDI device /dev/[device_fullname]\n", stderr );
143 fputs( " -2 device_fullname Use Port-2 RAW-MIDI device /dev/[device_fullname]\n", stderr );
144 fputs( " -3 device_fullname Use Port-3 RAW-MIDI device /dev/[device_fullname]\n", stderr );
145 fputs( " -r Not auto-append XG/GS/GM REST code\n", stderr );
146 fputs( " -q Quiet mode (No output Meta-Event Text for console)\n", stderr );
147 fputs( " -v Verbose mode\n", stderr );
148 #ifdef SUPPORT_JAPANESE
149 fputs( " -l MIDI file Language-Code (sjis/euc/utf8 only)\n", stderr );
150 fputs( " -t Output Text Language-Code (sjis/euc/utf8 only)\n", stderr );
152 fputs( " -h Help (This Message)\n", stderr );
158 /* ===================================================================*/
170 gpstr_devname = NULL;
171 gpstr_mididev[0] = NULL;
172 gpstr_mididev[1] = NULL;
173 gpstr_mididev[2] = NULL;
174 gpstr_mididev[3] = NULL;
175 gb_mode = MODE_DEFAULT;
177 while( -1 != (i_ch = getopt( argc, argv, "d:0:1:2:3:vqrh"))) {
179 { gpstr_devname = optarg; }
180 else if( '0' == i_ch )
181 { gpstr_mididev[0] = optarg; }
182 else if( '1' == i_ch )
183 { gpstr_mididev[1] = optarg; }
184 else if( '2' == i_ch )
185 { gpstr_mididev[2] = optarg; }
186 else if( '3' == i_ch )
187 { gpstr_mididev[3] = optarg; }
188 else if( 'v' == i_ch )
189 { gb_mode |= MODE_VERBOSE; }
190 else if( 'q' == i_ch )
191 { gb_mode |= MODE_QUIET; }
192 else if( 'r' == i_ch )
193 { gb_mode |= MODE_NORESET; }
194 else if( 'h' == i_ch ) {
210 gpstr_smfname = argv[0];
212 { printf( " [MIDI File ]: %s\n", gpstr_smfname ); }
214 #ifdef SUPPORT_JAPANESE
215 gt_iconv = iconv_open( DEFAULT_TERM_LANGCODE, DEFAULT_SMF_LANGCODE );
216 if( (iconv_t)(-1) == gt_iconv ) {
217 fprintf(stderr, "Error!!: Can't Initialize libiconv (%d)\n", errno);
224 #ifdef SUPPORT_JAPANESE
225 iconv_close( gt_iconv );
232 /* EOF of main.c ******************************************************/