-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathAudioInput.h
76 lines (69 loc) · 2.11 KB
/
AudioInput.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma once
#include "DataBuffer.h"
#include "RtAudio.h"
#include "AudioHeader.h"
#include "SdrberryTypeDefs.h"
#include "Settings.h"
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
enum audioTone
{
NoTone = 0,
SingleTone = 1,
TwoTone = 2,
FourTone = 4
} ;
class AudioInput : public RtAudio
{
private:
RtAudio::StreamParameters parameters;
RtAudio::DeviceInfo info;
unsigned int sampleRate;
unsigned int bufferFrames;
double volume, digitalvolume;
string error;
long asteps;
bool stereo;
double Nexttone();
double NextTwotone();
audioTone tune_tone;
int gaindb;
int bufferFramesSend;
std::atomic<bool> digitalmode, bufferempty;
std::vector<float> digitalmodesignal;
DataBuffer<Sample> databuffer;
int AudioIn_class(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status);
public:
AudioInput(unsigned int pcmrate, unsigned int bufferFrames, bool stereo, RtAudio::Api api = UNSPECIFIED);
static bool createAudioInputDevice(int Samplerate, unsigned int bufferFrames);
static constexpr auto AudioIn = AudioCallbackHandler<AudioInput, &AudioInput::AudioIn_class>::staticCallbackHandler;
bool open(std::string device);
void adjust_gain(SampleVector &samples);
bool read(SampleVector &samples);
void close();
~AudioInput();
double get_volume() { return volume; }
void set_volume(int vol);
void set_digital_volume(int vol);
void ToneBuffer();
bool get_stereo() { return stereo; };
int queued_samples();
int getDevices(std::string device);
void listDevices(std::vector<std::string> &devices);
void set_tone(audioTone tone) { tune_tone = tone; }
audioTone get_tone() { return tune_tone; }
operator bool() const { return error.empty(); }
void clear() { databuffer.clear(); }
std::vector<RtAudio::Api> listApis();
void set_gain(int g) { gaindb = g; }
unsigned int get_samplerate() { return sampleRate; }
bool IsdigitalMode();
bool IsBufferEmpty();
void doDigitalMode();
void StartDigitalMode(vector<float> &signal);
void StopDigitalMode();
int getbufferFrames() { return bufferFrames; }
};
extern AudioInput *audio_input;