drumstick  2.5.1
qwrk.h
Go to the documentation of this file.
1 /*
2  WRK File component
3  Copyright (C) 2010-2022, Pedro Lopez-Cabanillas <plcl@users.sf.net>
4 
5  This library is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 3 of the License, or
8  (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #ifndef DRUMSTICK_QWRK_H
20 #define DRUMSTICK_QWRK_H
21 
22 #include "macros.h"
23 #include <QObject>
24 #include <QScopedPointer>
25 
26 class QTextCodec;
27 class QDataStream;
28 
34 namespace drumstick { namespace File {
35 
46  VARS_CHUNK = 3,
57  NTEMPO_CHUNK = 15,
58  THRU_CHUNK = 16,
59  LYRICS_CHUNK = 18,
60  TRKVOL_CHUNK = 19,
61  SYSEX2_CHUNK = 20,
63  STRTAB_CHUNK = 22,
69  NTRACK_CHUNK = 36,
70  NSYSEX_CHUNK = 44,
72  SGMNT_CHUNK = 49,
74  END_CHUNK = 255
75 };
76 
85 class DRUMSTICK_EXPORT QWrk : public QObject
86 {
87  Q_OBJECT
88  Q_ENUM(WrkChunkType)
89 public:
90  explicit QWrk(QObject * parent = nullptr);
91  virtual ~QWrk();
92 
93  void readFromStream(QDataStream *stream);
94  void readFromFile(const QString& fileName);
95  Q_DECL_DEPRECATED QTextCodec* getTextCodec();
96  Q_DECL_DEPRECATED void setTextCodec(QTextCodec *codec);
97  long getFilePos();
98 
99  int getNow() const;
100  int getFrom() const;
101  int getThru() const;
102  int getKeySig() const;
103  int getClock() const;
104  int getAutoSave() const;
105  int getPlayDelay() const;
106  bool getZeroCtrls() const;
107  bool getSendSPP() const;
108  bool getSendCont() const;
109  bool getPatchSearch() const;
110  bool getAutoStop() const;
111  unsigned int getStopTime() const;
112  bool getAutoRewind() const;
113  int getRewindTime() const;
114  bool getMetroPlay() const;
115  bool getMetroRecord() const;
116  bool getMetroAccent() const;
117  int getCountIn() const;
118  bool getThruOn() const;
119  bool getAutoRestart() const;
120  int getCurTempoOfs() const;
121  int getTempoOfs1() const;
122  int getTempoOfs2() const;
123  int getTempoOfs3() const;
124  bool getPunchEnabled() const;
125  int getPunchInTime() const;
126  int getPunchOutTime() const;
127  int getEndAllTime() const;
128 
129  QByteArray getLastChunkRawData() const;
130  double getRealTime(long ticks) const;
131 
135  static const QByteArray HEADER;
136 
137 Q_SIGNALS:
138 
144  void signalWRKError(const QString& errorStr);
145 
152  void signalWRKUnknownChunk(int type, const QByteArray& data);
153 
160  void signalWRKHeader(int verh, int verl);
161 
165  void signalWRKEnd();
166 
171  void signalWRKStreamEnd(long time);
172 
183  void signalWRKNote(int track, long time, int chan, int pitch, int vol, int dur);
184 
194  void signalWRKKeyPress(int track, long time, int chan, int pitch, int press);
195 
205  void signalWRKCtlChange(int track, long time, int chan, int ctl, int value);
206 
215  void signalWRKPitchBend(int track, long time, int chan, int value);
216 
225  void signalWRKProgram(int track, long time, int chan, int patch);
226 
235  void signalWRKChanPress(int track, long time, int chan, int press);
236 
244  void signalWRKSysexEvent(int track, long time, int bank);
245 
255  void signalWRKSysex(int bank, const QString& name, bool autosend, int port, const QByteArray& data);
256 
267  Q_DECL_DEPRECATED void signalWRKText(int track, long time, int type, const QString& data);
268 
276  void signalWRKTimeSig(int bar, int num, int den);
277 
284  void signalWRKKeySig(int bar, int alt);
285 
295  void signalWRKTempo(long time, int tempo);
296 
313  Q_DECL_DEPRECATED
314  void signalWRKTrack(const QString& name1,
315  const QString& name2,
316  int trackno, int channel, int pitch,
317  int velocity, int port,
318  bool selected, bool muted, bool loop );
319 
325  void signalWRKTimeBase(int timebase);
326 
336 
351  void signalWRKThru(int mode, int port, int channel, int keyPlus, int velPlus, int localPort);
352 
359  void signalWRKTrackOffset(int track, int offset);
360 
367  void signalWRKTrackReps(int track, int reps);
368 
375  void signalWRKTrackPatch(int track, int patch);
376 
383  void signalWRKTrackBank(int track, int bank);
384 
391  void signalWRKTimeFormat(int frames, int offset);
392 
400  Q_DECL_DEPRECATED void signalWRKComments(const QString& data);
401 
409  void signalWRKVariableRecord(const QString& name, const QByteArray& data);
410 
417  void signalWRKTrackVol(int track, int vol);
418 
434  Q_DECL_DEPRECATED
435  void signalWRKNewTrack( const QString& name,
436  int trackno, int channel, int pitch,
437  int velocity, int port,
438  bool selected, bool muted, bool loop );
439 
445  void signalWRKSoftVer(const QString& version);
446 
455  Q_DECL_DEPRECATED void signalWRKTrackName(int track, const QString& name);
456 
464  Q_DECL_DEPRECATED void signalWRKStringTable(const QStringList& strs);
465 
475  Q_DECL_DEPRECATED void signalWRKSegment(int track, long time, const QString& name);
476 
485  void signalWRKChord(int track, long time, const QString& name, const QByteArray& data);
486 
497  Q_DECL_DEPRECATED void signalWRKExpression(int track, long time, int code, const QString& text);
498 
507  void signalWRKHairpin(int track, long time, int code, int dur);
508 
518  void signalWRKText2(int track, long time, int type, const QByteArray& data);
519 
535  void signalWRKTrack2(const QByteArray& name1,
536  const QByteArray& name2,
537  int trackno, int channel, int pitch,
538  int velocity, int port,
539  bool selected, bool muted, bool loop );
540 
547  void signalWRKComments2(const QByteArray& data);
548 
563  void signalWRKNewTrack2(const QByteArray& name,
564  int trackno, int channel, int pitch,
565  int velocity, int port,
566  bool selected, bool muted, bool loop );
574  void signalWRKTrackName2(int track, const QByteArray& name);
575 
582  void signalWRKStringTable2(const QList<QByteArray>& strs);
583 
592  void signalWRKSegment2(int track, long time, const QByteArray& name);
593 
603  void signalWRKExpression2(int track, long time, int code, const QByteArray& text);
604 
616  Q_DECL_DEPRECATED void signalWRKMarker(long time, int type, const QString& data);
617 
626  void signalWRKMarker2(long time, int type, const QByteArray& data);
627 
628 private:
629  quint8 readByte();
630  quint16 to16bit(quint8 c1, quint8 c2);
631  quint32 to32bit(quint8 c1, quint8 c2, quint8 c3, quint8 c4);
632  quint16 read16bit();
633  quint32 read24bit();
634  quint32 read32bit();
635  QString readString(int len);
636  QString readVarString();
637  void readRawData(int size);
638  void readGap(int size);
639  bool atEnd();
640  void seek(qint64 pos);
641 
642  int readChunk();
643  void processTrackChunk();
644  void processVarsChunk();
645  void processTimebaseChunk();
646  void processNoteArray(int track, int events);
647  void processStreamChunk();
648  void processMeterChunk();
649  void processTempoChunk(int factor = 1);
650  void processSysexChunk();
651  void processSysex2Chunk();
652  void processNewSysexChunk();
653  void processThruChunk();
654  void processTrackOffset();
655  void processTrackReps();
656  void processTrackPatch();
657  void processTrackBank();
658  void processTimeFormat();
659  void processComments();
660  void processVariableRecord(int max);
661  void processNewTrack();
662  void processSoftVer();
663  void processTrackName();
664  void processStringTable();
665  void processLyricsStream();
666  void processTrackVol();
667  void processNewTrackOffset();
668  void processMeterKeyChunk();
669  void processSegmentChunk();
670  void processNewStream();
671  void processUnknown(int id);
672  void processEndChunk();
673  void wrkRead();
674  QByteArray readByteArray(int len);
675  QByteArray readVarByteArray();
676  void processMarkers();
677 
678  struct RecTempo {
679  long time;
680  double tempo;
681  double seconds;
682  };
683 
684  class QWrkPrivate;
685  QScopedPointer<QWrkPrivate> d;
686 };
687 
690 }} // namespace drumstick::File
691 
692 #endif // DRUMSTICK_QWRK_H
The QObject class is the base class of all Qt objects.
Cakewalk WRK file format (input only)
Definition: qwrk.h:86
void signalWRKTrackPatch(int track, int patch)
Emitted after reading a track patch chunk.
Q_DECL_DEPRECATED void signalWRKSegment(int track, long time, const QString &name)
Emitted after reading a segment prefix chunk.
void signalWRKProgram(int track, long time, int chan, int patch)
Emitted after reading a Program change message.
void signalWRKChord(int track, long time, const QString &name, const QByteArray &data)
Emitted after reading a chord diagram chunk.
static const QByteArray HEADER
Cakewalk WRK file format header string id.
Definition: qwrk.h:135
void signalWRKHeader(int verh, int verl)
Emitted after reading a WRK header.
void signalWRKSysexEvent(int track, long time, int bank)
Emitted after reading a System Exclusive event.
void signalWRKMarker2(long time, int type, const QByteArray &data)
Emitted after reading a text marker This signal is emitted when getTextCodec() is nullptr.
void signalWRKGlobalVars()
Emitted after reading the global variables chunk.
void signalWRKSoftVer(const QString &version)
Emitted after reading a software version chunk.
void signalWRKSegment2(int track, long time, const QByteArray &name)
Emitted after reading a segment prefix chunk.
void signalWRKTrackOffset(int track, int offset)
Emitted after reading a track offset chunk.
void signalWRKChanPress(int track, long time, int chan, int press)
Emitted after reading a Channel Aftertouch message.
void signalWRKStreamEnd(long time)
Emitted after reading the last event of a event stream.
void signalWRKText2(int track, long time, int type, const QByteArray &data)
Emitted after reading a text message This signal is emitted when getTextCodec() is nullptr.
void signalWRKKeyPress(int track, long time, int chan, int pitch, int press)
Emitted after reading a Polyphonic Aftertouch message.
void signalWRKVariableRecord(const QString &name, const QByteArray &data)
Emitted after reading a variable chunk.
void signalWRKTrackVol(int track, int vol)
Emitted after reading a track volume chunk.
void signalWRKExpression2(int track, long time, int code, const QByteArray &text)
Emitted after reading an expression indication (notation) chunk.
void signalWRKTrackName2(int track, const QByteArray &name)
Emitted after reading a track name chunk.
Q_DECL_DEPRECATED void signalWRKNewTrack(const QString &name, int trackno, int channel, int pitch, int velocity, int port, bool selected, bool muted, bool loop)
Emitted after reading a new track prefix.
void signalWRKTrack2(const QByteArray &name1, const QByteArray &name2, int trackno, int channel, int pitch, int velocity, int port, bool selected, bool muted, bool loop)
Emitted after reading a track prefix chunk This signal is emitted when getTextCodec() is nullptr.
void signalWRKError(const QString &errorStr)
Emitted for a WRK file read error.
void signalWRKTempo(long time, int tempo)
Emitted after reading a Tempo Change message.
void signalWRKTimeSig(int bar, int num, int den)
Emitted after reading a WRK Time signature.
void signalWRKHairpin(int track, long time, int code, int dur)
Emitted after reading a hairpin symbol (notation) chunk.
void signalWRKPitchBend(int track, long time, int chan, int value)
Emitted after reading a Bender message.
void signalWRKEnd()
Emitted after reading the last chunk of a WRK file.
Q_DECL_DEPRECATED void signalWRKTrackName(int track, const QString &name)
Emitted after reading a track name chunk.
void signalWRKNewTrack2(const QByteArray &name, int trackno, int channel, int pitch, int velocity, int port, bool selected, bool muted, bool loop)
Emitted after reading a new track prefix This signal is emitted when getTextCodec() is nullptr.
void signalWRKThru(int mode, int port, int channel, int keyPlus, int velPlus, int localPort)
Emitted after reading an Extended Thru parameters chunk.
void signalWRKNote(int track, long time, int chan, int pitch, int vol, int dur)
Emitted after reading a Note message.
Q_DECL_DEPRECATED void signalWRKStringTable(const QStringList &strs)
Emitted after reading a string event types chunk.
void signalWRKUnknownChunk(int type, const QByteArray &data)
Emitted after reading an unknown chunk.
void signalWRKTrackBank(int track, int bank)
Emitted after reading a track bank chunk.
void signalWRKComments2(const QByteArray &data)
Emitted after reading a comments chunk This signal is emitted when getTextCodec() is nullptr.
void signalWRKTimeBase(int timebase)
Emitted after reading the timebase chunk.
Q_DECL_DEPRECATED void signalWRKExpression(int track, long time, int code, const QString &text)
Emitted after reading an expression indication (notation) chunk.
Q_DECL_DEPRECATED void signalWRKText(int track, long time, int type, const QString &data)
Emitted after reading a text message.
void signalWRKTimeFormat(int frames, int offset)
Emitted after reading a SMPTE time format chunk.
void signalWRKSysex(int bank, const QString &name, bool autosend, int port, const QByteArray &data)
Emitted after reading a System Exclusive Bank.
Q_DECL_DEPRECATED void signalWRKComments(const QString &data)
Emitted after reading a comments chunk.
void signalWRKCtlChange(int track, long time, int chan, int ctl, int value)
Emitted after reading a Control Change message.
void signalWRKTrackReps(int track, int reps)
Emitted after reading a track offset chunk.
void signalWRKKeySig(int bar, int alt)
Emitted after reading a WRK Key Signature.
Q_DECL_DEPRECATED void signalWRKTrack(const QString &name1, const QString &name2, int trackno, int channel, int pitch, int velocity, int port, bool selected, bool muted, bool loop)
Emitted after reading a track prefix chunk.
Q_DECL_DEPRECATED void signalWRKMarker(long time, int type, const QString &data)
Emitted after reading a text marker This is deprecated because the class QTextCodec was removed from ...
void signalWRKStringTable2(const QList< QByteArray > &strs)
Emitted after reading a string event types chunk.
WrkChunkType
Record types within a WRK file.
Definition: qwrk.h:43
@ NTRKOFS_CHUNK
Track offset.
Definition: qwrk.h:67
@ NTRACK_CHUNK
Track prefix.
Definition: qwrk.h:69
@ TRKPATCH_CHUNK
Track patch.
Definition: qwrk.h:56
@ MARKERS_CHUNK
Markers.
Definition: qwrk.h:62
@ STRTAB_CHUNK
Table of text event types.
Definition: qwrk.h:63
@ NTEMPO_CHUNK
New Tempo map.
Definition: qwrk.h:57
@ VARS_CHUNK
Global variables.
Definition: qwrk.h:46
@ TRKBANK_CHUNK
Track bank.
Definition: qwrk.h:68
@ COMMENTS_CHUNK
Comments.
Definition: qwrk.h:51
@ SGMNT_CHUNK
Segment prefix.
Definition: qwrk.h:72
@ SOFTVER_CHUNK
Software version which saved the file.
Definition: qwrk.h:73
@ TRKNAME_CHUNK
Track name.
Definition: qwrk.h:65
@ TIMEFMT_CHUNK
SMPTE time format.
Definition: qwrk.h:54
@ END_CHUNK
Last chunk, end of file.
Definition: qwrk.h:74
@ STREAM_CHUNK
Events stream.
Definition: qwrk.h:45
@ TRACK_CHUNK
Track prefix.
Definition: qwrk.h:44
@ TIMEBASE_CHUNK
Timebase. If present is the first chunk in the file.
Definition: qwrk.h:53
@ TRKOFFS_CHUNK
Track offset.
Definition: qwrk.h:52
@ NSYSEX_CHUNK
System exclusive bank.
Definition: qwrk.h:70
@ THRU_CHUNK
Extended thru parameters.
Definition: qwrk.h:58
@ SYSEX2_CHUNK
System exclusive bank.
Definition: qwrk.h:61
@ NSTREAM_CHUNK
Events stream.
Definition: qwrk.h:71
@ TEMPO_CHUNK
Tempo map.
Definition: qwrk.h:47
@ VARIABLE_CHUNK
Variable record chunk.
Definition: qwrk.h:66
@ METER_CHUNK
Meter map.
Definition: qwrk.h:48
@ METERKEY_CHUNK
Meter/Key map.
Definition: qwrk.h:64
@ MEMRGN_CHUNK
Memory region.
Definition: qwrk.h:50
@ TRKREPS_CHUNK
Track repetitions.
Definition: qwrk.h:55
@ TRKVOL_CHUNK
Track volume.
Definition: qwrk.h:60
@ SYSEX_CHUNK
System exclusive bank.
Definition: qwrk.h:49
@ LYRICS_CHUNK
Events stream with lyrics.
Definition: qwrk.h:59
Drumstick visibility macros.
Drumstick common.
Definition: alsaclient.cpp:68