• 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
40struct kMidData kMid;
41
42int 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
78int KMidSimpleAPI::kMidLoad(const char *filename)
79{
80 if (kMidDevices()==0) return 0;
81 return kMid.player->loadSong(filename);
82}
83
84int 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
123int 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
138void 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
149int KMidSimpleAPI::kMidIsPlaying(void)
150{
151 return kMid.pctl->playing;
152}
153
154int KMidSimpleAPI::kMidDevices(void)
155{
156 return kMid.midi->midiPorts()+kMid.midi->synthDevices();
157}
158
159const char * KMidSimpleAPI::kMidName(int i)
160{
161 return kMid.midi->name(i);
162}
163
164const char * KMidSimpleAPI::kMidType(int i)
165{
166 return kMid.midi->type(i);
167}
168
169void KMidSimpleAPI::kMidSetDevice(int i)
170{
171 kMid.midi->setDefaultDevice(i);
172}
173
174void 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
182const char *KMidSimpleAPI::kMidVersion(void)
183{
184 return "0.9.5";
185}
186
187const 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
199int kMidInit(void)
200{
201 return KMidSimpleAPI::kMidInit();
202}
203
204int kMidLoad(const char *filename)
205{
206 return KMidSimpleAPI::kMidLoad(filename);
207}
208
209int kMidPlay(void)
210{
211 return KMidSimpleAPI::kMidPlay();
212}
213
214int kMidStop(void)
215{
216 return KMidSimpleAPI::kMidStop();
217}
218
219void kMidDestruct(void)
220{
221 KMidSimpleAPI::kMidDestruct();
222}
223
224int kMidIsPlaying(void)
225{
226 return KMidSimpleAPI::kMidIsPlaying();
227}
228
229int kMidDevices(void)
230{
231 return KMidSimpleAPI::kMidDevices();
232}
233
234const char *kMidName(int i)
235{
236 return KMidSimpleAPI::kMidName(i);
237}
238
239const char *kMidType(int i)
240{
241 return KMidSimpleAPI::kMidType(i);
242}
243
244void kMidSetDevice(int i)
245{
246 KMidSimpleAPI::kMidSetDevice(i);
247}
248
249void kMidSetMidiMapper(const char *mapfilename)
250{
251 KMidSimpleAPI::kMidSetMidiMapper(mapfilename);
252}
253
254const char *kMidVersion(void)
255{
256 return KMidSimpleAPI::kMidVersion();
257}
258
259const 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.4
This website is maintained by Timothy Pearson.