OSDN Git Service

qq
[shooting3/shootinggame.git] / ShootingGame / Sequencer.h
1 #pragma once
2 #include "WaveTableSynth.h"
3
4 namespace sf {
5   enum struct SequenceCommand {
6     Note
7   };
8
9   struct SequenceData 
10   {
11     SequenceData () : step(0.0f),pitch(0.0f),velocity(0.0f),gateTime(0.0f){};
12     SequenceData(SequenceCommand c,int s,float p,float v,int g )
13       : cmd(c),step(s),pitch(p),velocity(v),gateTime(g) {};
14     SequenceData(SequenceData& src)
15       : cmd(src.cmd),step(src.step),pitch(src.pitch),velocity(src.velocity),gateTime(src.gateTime) {}
16
17     SequenceData(SequenceData&& src)
18       : cmd(std::move(src.cmd)),step(std::move(src.step)),pitch(std::move(src.pitch)),velocity(std::move(src.velocity)),gateTime(std::move(src.gateTime)) {}
19
20     SequenceData& operator=(SequenceData& src)
21     {
22       if(this != &src)
23       {
24         cmd = src.cmd;
25         step = src.step;
26         pitch = src.pitch;
27         velocity = src.velocity;
28         gateTime = src.gateTime;
29       }
30       return *this;
31     }
32
33     SequenceData& operator=(SequenceData&& src)
34     {
35       if(this != &src)
36       {
37         cmd = std::move(src.cmd);
38         step = std::move(src.step);
39         pitch = std::move(src.pitch);
40         velocity = std::move(src.velocity);
41         gateTime = std::move(src.gateTime);
42       }
43       return *this;
44     }
45
46     SequenceCommand cmd;
47     int step;
48     float pitch;
49     float velocity;
50     int gateTime;
51   };
52
53   typedef std::vector<SequenceData> SequenceDatasType;
54   typedef std::vector<SequenceDatasType> SequenceTracksType;
55
56
57   struct Sequencer
58   {
59     enum struct Status
60     {
61       Play,Stop,Pause
62     };
63
64     Sequencer(Synthesizer& synth,WAVEFORMATEXTENSIBLE& format);
65     void Process();
66     ~Sequencer();
67
68     float TimeBase() const;
69     void TimeBase(float v); 
70
71     float Tempo() const;
72     void Tempo(float v);
73
74     void Play();
75     void Pause();
76     void Stop();
77     SequenceTracksType& SequenceTracks();
78   private:
79     struct impl;
80     std::unique_ptr<impl> impl_;
81   };
82 }