Rumba C++ SDK
Waveform.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2018
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 #pragma once
16 
17 #include <Maquina/UserData.h>
18 #include <gsl/span>
19 #include <cmath>
20 
21 namespace maquina
22 {
23 
25 class Waveform : public UserData
26 {
27 public:
28 
30  virtual StringView type_name() const;
31  Waveform(float seconds);
32  Waveform(std::vector<int16_t>&& buffer);
33  Waveform() = default;
34 
36  gsl::span<const int16_t> buffer() const;
37 
39  int samples() const;
40 
42  static const int sample_rate = 44100;
43 
45  static const int channels = 2;
46 
47 private:
48  std::vector<int16_t> _buffer;
49 };
50 
52 {
53  return "Waveform";
54 }
55 
56 inline Waveform::Waveform(float seconds) : _buffer(int(std::ceil(seconds*float(sample_rate)))*channels, 0) {}
57 
58 inline Waveform::Waveform(std::vector<int16_t>&& buffer) : _buffer{std::move(buffer)} {}
59 
60 inline gsl::span<const int16_t> Waveform::buffer() const { return _buffer; }
61 
62 inline int Waveform::samples() const { return int(_buffer.size())/channels; }
63 
64 }
static const int channels
The channel count.
Definition: Waveform.h:45
An Audio waveform, always 16 bits stereo 44.1 khz.
Definition: Waveform.h:25
Definition: Plug.h:527
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
gsl::span< const int16_t > buffer() const
Returns the stream buffer, size is samples*channels.
Definition: Waveform.h:60
static const int sample_rate
The sample rate.
Definition: Waveform.h:42
int samples() const
Return the number of samples.
Definition: Waveform.h:62
Waveform()=default
virtual StringView type_name() const
From UserData.
Definition: Waveform.h:51
int ceil(T x)
Definition: ImathFun.h:156
Definition: UserData.h:28