HARDT - The Ham Radio DSP Toolkit
hsoundcardreader.h
1 #ifndef __HSOUNDCARDREADER_H
2 #define __HSOUNDCARDREADER_H
3 
4 #include "hprobe.h"
5 
6 #include <mutex>
7 #include <condition_variable>
8 
9 #include "hardt.h"
10 
11 #define NUMBER_OF_BUFFERS 4
12 #define DEFAULT_BLOCKSIZE 1024
13 
17 template <class T>
18 class HSoundcardReader : public HReader<T>
19 {
20  private:
21 
22  // Data accessed by the (static) callback function
23  struct CallbackData
24  {
25  int channels;
26  int framesize;
27  int wrloc;
28  int rdloc;
29  T* buffer;
30  std::mutex mtx;
31  std::condition_variable lock;
32  } _cbd;
33 
34  // The sample stream from the soundcard
35  PaStream *_stream;
36  bool _isStarted;
37 
38  // Housekeeping
39  bool _isInitialized;
40 
41  // A probe
42  HProbe<T>* _probe;
43 
47  bool Start();
48 
52  bool Stop();
53 
54  public:
55 
66  HSoundcardReader(int device, H_SAMPLE_RATE rate, int channels, H_SAMPLE_FORMAT format, int blocksize = DEFAULT_BLOCKSIZE, HProbe<T>* probe = nullptr);
67 
72 
79  int Read(T* dest, size_t blocksize);
80 
91  static int callback( const void *inputBuffer, void *outputBuffer,
92  unsigned long blocksize,
93  const PaStreamCallbackTimeInfo* timeInfo,
94  PaStreamCallbackFlags statusFlags,
95  void *userData );
96 
102  bool Command(HCommand* command) {
103  // No further propagation of commands
104  return true;
105  }
106 };
107 
108 #endif
HSoundcardReader::~HSoundcardReader
~HSoundcardReader()
Definition: hsoundcardreader.cpp:68
HSoundcardReader::Read
int Read(T *dest, size_t blocksize)
Definition: hsoundcardreader.cpp:96
HReader
Definition: hreader.h:24
HProbe
Definition: hprobe.h:10
HSoundcardReader::Command
bool Command(HCommand *command)
Definition: hsoundcardreader.h:102
HCommand
Definition: hcommand.h:81
HSoundcardReader::HSoundcardReader
HSoundcardReader(int device, H_SAMPLE_RATE rate, int channels, H_SAMPLE_FORMAT format, int blocksize=DEFAULT_BLOCKSIZE, HProbe< T > *probe=nullptr)
Definition: hsoundcardreader.cpp:11
HSoundcardReader
Definition: hsoundcardreader.h:18
HSoundcardReader::callback
static int callback(const void *inputBuffer, void *outputBuffer, unsigned long blocksize, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
Definition: hsoundcardreader.cpp:150