drumstick 2.3.1
qwrk.h
Go to the documentation of this file.
1/*
2 WRK File component
3 Copyright (C) 2010-2021, 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#include <QTextCodec>
26
27class QDataStream;
28
34namespace drumstick { namespace File {
35
73 END_CHUNK = 255
74};
75
82class DRUMSTICK_EXPORT QWrk : public QObject
83{
84 Q_OBJECT
85 Q_ENUM(WrkChunkType)
86public:
87 explicit QWrk(QObject * parent = nullptr);
88 virtual ~QWrk();
89
90 void readFromStream(QDataStream *stream);
91 void readFromFile(const QString& fileName);
92 QTextCodec* getTextCodec();
93 void setTextCodec(QTextCodec *codec);
94 long getFilePos();
95
96 int getNow() const;
97 int getFrom() const;
98 int getThru() const;
99 int getKeySig() const;
100 int getClock() const;
101 int getAutoSave() const;
102 int getPlayDelay() const;
103 bool getZeroCtrls() const;
104 bool getSendSPP() const;
105 bool getSendCont() const;
106 bool getPatchSearch() const;
107 bool getAutoStop() const;
108 unsigned int getStopTime() const;
109 bool getAutoRewind() const;
110 int getRewindTime() const;
111 bool getMetroPlay() const;
112 bool getMetroRecord() const;
113 bool getMetroAccent() const;
114 int getCountIn() const;
115 bool getThruOn() const;
116 bool getAutoRestart() const;
117 int getCurTempoOfs() const;
118 int getTempoOfs1() const;
119 int getTempoOfs2() const;
120 int getTempoOfs3() const;
121 bool getPunchEnabled() const;
122 int getPunchInTime() const;
123 int getPunchOutTime() const;
124 int getEndAllTime() const;
125
126 QByteArray getLastChunkRawData() const;
127 double getRealTime(long ticks) const;
128
132 static const QByteArray HEADER;
133
134Q_SIGNALS:
135
141 void signalWRKError(const QString& errorStr);
142
149 void signalWRKUnknownChunk(int type, const QByteArray& data);
150
157 void signalWRKHeader(int verh, int verl);
158
163
168 void signalWRKStreamEnd(long time);
169
180 void signalWRKNote(int track, long time, int chan, int pitch, int vol, int dur);
181
191 void signalWRKKeyPress(int track, long time, int chan, int pitch, int press);
192
202 void signalWRKCtlChange(int track, long time, int chan, int ctl, int value);
203
212 void signalWRKPitchBend(int track, long time, int chan, int value);
213
222 void signalWRKProgram(int track, long time, int chan, int patch);
223
232 void signalWRKChanPress(int track, long time, int chan, int press);
233
241 void signalWRKSysexEvent(int track, long time, int bank);
242
252 void signalWRKSysex(int bank, const QString& name, bool autosend, int port, const QByteArray& data);
253
262 void signalWRKText(int track, long time, int type, const QString& data);
263
271 void signalWRKTimeSig(int bar, int num, int den);
272
279 void signalWRKKeySig(int bar, int alt);
280
290 void signalWRKTempo(long time, int tempo);
291
306 void signalWRKTrack(const QString& name1,
307 const QString& name2,
308 int trackno, int channel, int pitch,
309 int velocity, int port,
310 bool selected, bool muted, bool loop );
311
317 void signalWRKTimeBase(int timebase);
318
328
343 void signalWRKThru(int mode, int port, int channel, int keyPlus, int velPlus, int localPort);
344
351 void signalWRKTrackOffset(int track, int offset);
352
359 void signalWRKTrackReps(int track, int reps);
360
367 void signalWRKTrackPatch(int track, int patch);
368
375 void signalWRKTrackBank(int track, int bank);
376
383 void signalWRKTimeFormat(int frames, int offset);
384
390 void signalWRKComments(const QString& data);
391
399 void signalWRKVariableRecord(const QString& name, const QByteArray& data);
400
407 void signalWRKTrackVol(int track, int vol);
408
422 void signalWRKNewTrack( const QString& name,
423 int trackno, int channel, int pitch,
424 int velocity, int port,
425 bool selected, bool muted, bool loop );
426
432 void signalWRKSoftVer(const QString& version);
433
440 void signalWRKTrackName(int track, const QString& name);
441
447 void signalWRKStringTable(const QStringList& strs);
448
456 void signalWRKSegment(int track, long time, const QString& name);
457
466 void signalWRKChord(int track, long time, const QString& name, const QByteArray& data);
467
476 void signalWRKExpression(int track, long time, int code, const QString& text);
477
486 void signalWRKHairpin(int track, long time, int code, int dur);
487
497 void signalWRKText2(int track, long time, int type, const QByteArray& data);
498
514 void signalWRKTrack2(const QByteArray& name1,
515 const QByteArray& name2,
516 int trackno, int channel, int pitch,
517 int velocity, int port,
518 bool selected, bool muted, bool loop );
519
526 void signalWRKComments2(const QByteArray& data);
527
542 void signalWRKNewTrack2(const QByteArray& name,
543 int trackno, int channel, int pitch,
544 int velocity, int port,
545 bool selected, bool muted, bool loop );
553 void signalWRKTrackName2(int track, const QByteArray& name);
554
561 void signalWRKStringTable2(const QList<QByteArray>& strs);
562
571 void signalWRKSegment2(int track, long time, const QByteArray& name);
572
582 void signalWRKExpression2(int track, long time, int code, const QByteArray& text);
583
584private:
585 quint8 readByte();
586 quint16 to16bit(quint8 c1, quint8 c2);
587 quint32 to32bit(quint8 c1, quint8 c2, quint8 c3, quint8 c4);
588 quint16 read16bit();
589 quint32 read24bit();
590 quint32 read32bit();
591 QString readString(int len);
592 QString readVarString();
593 void readRawData(int size);
594 void readGap(int size);
595 bool atEnd();
596 void seek(qint64 pos);
597
598 int readChunk();
599 void processTrackChunk();
600 void processVarsChunk();
601 void processTimebaseChunk();
602 void processNoteArray(int track, int events);
603 void processStreamChunk();
604 void processMeterChunk();
605 void processTempoChunk(int factor = 1);
606 void processSysexChunk();
607 void processSysex2Chunk();
608 void processNewSysexChunk();
609 void processThruChunk();
610 void processTrackOffset();
611 void processTrackReps();
612 void processTrackPatch();
613 void processTrackBank();
614 void processTimeFormat();
615 void processComments();
616 void processVariableRecord(int max);
617 void processNewTrack();
618 void processSoftVer();
619 void processTrackName();
620 void processStringTable();
621 void processLyricsStream();
622 void processTrackVol();
623 void processNewTrackOffset();
624 void processMeterKeyChunk();
625 void processSegmentChunk();
626 void processNewStream();
627 void processUnknown(int id);
628 void processEndChunk();
629 void wrkRead();
630 QByteArray readByteArray(int len);
631 QByteArray readVarByteArray();
632
633 struct RecTempo {
634 long time;
635 double tempo;
636 double seconds;
637 };
638
639 class QWrkPrivate;
640 QScopedPointer<QWrkPrivate> d;
641};
642
645}} // namespace drumstick::File
646
647#endif // DRUMSTICK_QWRK_H
The QObject class is the base class of all Qt objects.
Cakewalk WRK file format (input only)
Definition: qwrk.h:83
void signalWRKTrackPatch(int track, int patch)
Emitted after reading a track patch chunk.
void signalWRKText(int track, long time, int type, const QString &data)
Emitted after reading a text message.
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.
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:132
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 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 signalWRKComments(const QString &data)
Emitted after reading a comments 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.
void signalWRKStringTable(const QStringList &strs)
Emitted after reading a string event types chunk.
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 signalWRKSegment(int track, long time, const QString &name)
Emitted after reading a segment prefix chunk.
void signalWRKTempo(long time, int tempo)
Emitted after reading a Tempo Change message.
void signalWRKExpression(int track, long time, int code, const QString &text)
Emitted after reading an expression indication (notation) chunk.
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.
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.
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 signalWRKTrackName(int track, const QString &name)
Emitted after reading a track name 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.
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.
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 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 signalWRKKeySig(int bar, int alt)
Emitted after reading a WRK Key Signature.
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:66
@ NTRACK_CHUNK
Track prefix.
Definition: qwrk.h:68
@ TRKPATCH_CHUNK
Track patch.
Definition: qwrk.h:56
@ STRTAB_CHUNK
Table of text event types.
Definition: qwrk.h:62
@ NTEMPO_CHUNK
New Tempo map.
Definition: qwrk.h:57
@ VARS_CHUNK
Global variables.
Definition: qwrk.h:46
@ TRKBANK_CHUNK
Track bank.
Definition: qwrk.h:67
@ COMMENTS_CHUNK
Comments.
Definition: qwrk.h:51
@ SGMNT_CHUNK
Segment prefix.
Definition: qwrk.h:71
@ SOFTVER_CHUNK
Software version which saved the file.
Definition: qwrk.h:72
@ TRKNAME_CHUNK
Track name.
Definition: qwrk.h:64
@ TIMEFMT_CHUNK
SMPTE time format.
Definition: qwrk.h:54
@ END_CHUNK
Last chunk, end of file.
Definition: qwrk.h:73
@ 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:69
@ 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:70
@ TEMPO_CHUNK
Tempo map.
Definition: qwrk.h:47
@ VARIABLE_CHUNK
Variable record chunk.
Definition: qwrk.h:65
@ METER_CHUNK
Meter map.
Definition: qwrk.h:48
@ METERKEY_CHUNK
Meter/Key map.
Definition: qwrk.h:63
@ 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