• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • libtdemid
 

libtdemid

  • libtdemid
libtdemid.cpp
1 /**************************************************************************
2 
3  libtdemid.cpp - class KMidSimpleAPI that makes it easy to use libtdemid
4  and a C wrapper.
5  This file is part of LibKMid 0.9.5
6  Copyright (C) 2000 Antonio Larrosa Jimenez
7  LibKMid's homepage : http://www.arrakis.es/~rlarrosa/libtdemid.html
8 
9  This library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU Library General Public
11  License as published by the Free Software Foundation; either
12  version 2 of the License, or (at your option) any later version.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Library General Public License for more details.
18 
19  You should have received a copy of the GNU Library General Public License
20  along with this library; see the file COPYING.LIB. If not, write to
21  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  Boston, MA 02110-1301, USA.
23 
24  Send comments and bug fixes to Antonio Larrosa <larrosa@kde.org>
25 
26 ***************************************************************************/
27 
28 #include "libtdemid.h"
29 #include <stdlib.h>
30 #include <unistd.h>
31 #include <signal.h>
32 #include <sys/types.h>
33 #include <sys/wait.h>
34 #include <sys/shm.h>
35 
36 #include "deviceman.h"
37 #include "player.h"
38 #include "midimapper.h"
39 
40 struct kMidData kMid;
41 
42 int KMidSimpleAPI::kMidInit(void)
43 {
44  kMid.midi = new DeviceManager();
45  if ( kMid.midi == 0L ) return 1;
46  kMid.midi->initManager();
47  if (!kMid.midi->ok()) return 1;
48 
49  kMid.pctlsmID=shmget(getpid(),sizeof(PlayerController),0600 | IPC_CREAT);
50  if (kMid.pctlsmID==-1) return 1;
51  kMid.pctl=(PlayerController *)shmat(kMid.pctlsmID,NULL,0);
52  if (kMid.pctl==NULL) return 1;
53 
54  kMid.player=new MidiPlayer(kMid.midi,kMid.pctl);
55  if ( kMid.player == 0L )
56  {
57  delete kMid.midi;
58  return 1;
59  }
60 
61  kMid.player->setParseSong(false);
62 
63  kMid.pctl->message=0;
64  kMid.pctl->gm=1;
65  kMid.pctl->error=0;
66  kMid.pctl->ratioTempo=1.0;
67  kMid.pctl->tempo=500000;
68  kMid.pctl->volumepercentage=100;
69  for (int i=0;i<16;i++)
70  {
71  kMid.pctl->forcepgm[i]=0;
72  kMid.pctl->pgm[i]=0;
73  }
74 
75  return 0;
76 }
77 
78 int KMidSimpleAPI::kMidLoad(const char *filename)
79 {
80  if (kMidDevices()==0) return 0;
81  return kMid.player->loadSong(filename);
82 }
83 
84 int KMidSimpleAPI::kMidPlay(int loop)
85 {
86  if (kMidDevices()==0) return 4;
87  if (!kMid.player->isSongLoaded()) return 1;
88  if (kMid.pctl->playing==1) return 2;
89  if (kMid.midi->checkInit()==-1) return 3;
90  kMid.pctl->message=0;
91  kMid.pctl->playing=0;
92  kMid.pctl->finished=0;
93  kMid.pctl->error=0;
94  kMid.pctl->SPEVplayed=0;
95  kMid.pctl->SPEVprocessed=0;
96  kMid.pctl->millisecsPlayed=0;
97  if ((kMid.pid=fork())==0)
98  {
99  if (loop)
100  {
101  while (1)
102  {
103  kMid.player->play();
104  if (kMid.pctl->error) return 5;
105  kMid.pctl->message=0;
106  kMid.pctl->playing=0;
107  kMid.pctl->finished=0;
108  kMid.pctl->error=0;
109  kMid.pctl->SPEVplayed=0;
110  kMid.pctl->SPEVprocessed=0;
111  kMid.pctl->millisecsPlayed=0;
112  }
113 
114  } else {
115  kMid.player->play();
116  if (kMid.pctl->error) return 5;
117  }
118  _exit(0);
119  } else return 4;
120  return 0;
121 }
122 
123 int KMidSimpleAPI::kMidStop(void)
124 {
125  if (kMidDevices()==0) return 4;
126  if (kMid.pctl->playing==0) return 1;
127  if (kMid.pid!=0)
128  {
129  kill(kMid.pid,SIGTERM);
130  waitpid(kMid.pid, NULL, 0);
131  kMid.pid=0;
132  } else return 2;
133 
134  kMid.pctl->playing=0;
135  return 0;
136 }
137 
138 void KMidSimpleAPI::kMidDestruct(void)
139 {
140  delete kMid.midi;
141  kMid.midi=0L;
142  delete kMid.player;
143  kMid.player=0L;
144  delete kMid.map;
145  shmdt((char *)kMid.pctl);
146  shmctl(kMid.pctlsmID, IPC_RMID, 0L);
147 }
148 
149 int KMidSimpleAPI::kMidIsPlaying(void)
150 {
151  return kMid.pctl->playing;
152 }
153 
154 int KMidSimpleAPI::kMidDevices(void)
155 {
156  return kMid.midi->midiPorts()+kMid.midi->synthDevices();
157 }
158 
159 const char * KMidSimpleAPI::kMidName(int i)
160 {
161  return kMid.midi->name(i);
162 }
163 
164 const char * KMidSimpleAPI::kMidType(int i)
165 {
166  return kMid.midi->type(i);
167 }
168 
169 void KMidSimpleAPI::kMidSetDevice(int i)
170 {
171  kMid.midi->setDefaultDevice(i);
172 }
173 
174 void KMidSimpleAPI::kMidSetMidiMapper(const char *mapfilename)
175 {
176  if (kMidDevices()==0) return;
177  kMid.map=new MidiMapper(mapfilename);
178  if ((kMid.map->ok() == 0L)||(!kMid.map->ok())) return;
179  kMid.midi->setMidiMap(kMid.map);
180 }
181 
182 const char *KMidSimpleAPI::kMidVersion(void)
183 {
184  return "0.9.5";
185 }
186 
187 const char *KMidSimpleAPI::kMidCopyright(void)
188 {
189  return "LibKMid 0.9.5 (C)1997-2000 Antonio Larrosa Jimenez <larrosa@kde.org>.Malaga(es)";
190 }
191 
192 /* * * * * *
193 
194  Under this line (------) there's only a C wrapper for the KMidSimpleAPI class
195 
196 * * * * * */
197 
198 
199 int kMidInit(void)
200 {
201  return KMidSimpleAPI::kMidInit();
202 }
203 
204 int kMidLoad(const char *filename)
205 {
206  return KMidSimpleAPI::kMidLoad(filename);
207 }
208 
209 int kMidPlay(void)
210 {
211  return KMidSimpleAPI::kMidPlay();
212 }
213 
214 int kMidStop(void)
215 {
216  return KMidSimpleAPI::kMidStop();
217 }
218 
219 void kMidDestruct(void)
220 {
221  KMidSimpleAPI::kMidDestruct();
222 }
223 
224 int kMidIsPlaying(void)
225 {
226  return KMidSimpleAPI::kMidIsPlaying();
227 }
228 
229 int kMidDevices(void)
230 {
231  return KMidSimpleAPI::kMidDevices();
232 }
233 
234 const char *kMidName(int i)
235 {
236  return KMidSimpleAPI::kMidName(i);
237 }
238 
239 const char *kMidType(int i)
240 {
241  return KMidSimpleAPI::kMidType(i);
242 }
243 
244 void kMidSetDevice(int i)
245 {
246  KMidSimpleAPI::kMidSetDevice(i);
247 }
248 
249 void kMidSetMidiMapper(const char *mapfilename)
250 {
251  KMidSimpleAPI::kMidSetMidiMapper(mapfilename);
252 }
253 
254 const char *kMidVersion(void)
255 {
256  return KMidSimpleAPI::kMidVersion();
257 }
258 
259 const char *kMidCopyright(void)
260 {
261  return KMidSimpleAPI::kMidCopyright();
262 }
263 
DeviceManager
MIDI Device Manager class .
Definition: deviceman.h:48
MidiMapper
A Midi Mapper class which defines the way MIDI events are translated (or "mapped") to different ones.
Definition: midimapper.h:60
MidiPlayer
MIDI file player routines .
Definition: player.h:261
PlayerController
PlayerController is a struct that is used by the MidiPlayer object to tell other parts of the applica...
Definition: player.h:139

libtdemid

Skip menu "libtdemid"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

libtdemid

Skip menu "libtdemid"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for libtdemid by doxygen 1.9.1
This website is maintained by Timothy Pearson.