1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 6 #include <QTime> 7 #include <QTimer> 8 9 #include "tinyalsasoundlib.h" 10 #include "iwidget.h" 11 12 QT_BEGIN_NAMESPACE 13 namespace Ui { class Widget; } 14 QT_END_NAMESPACE 15 16 #define ID_RIFF 0x46464952 17 #define ID_WAVE 0x45564157 18 #define ID_FMT 0x20746d66 19 #define ID_DATA 0x61746164 20 21 #define FORMAT_PCM 1 22 23 class Widget : public IWidget 24 { 25 Q_OBJECT 26 27 Q_PLUGIN_METADATA(IID PLUGIN_INTERFACE_iid FILE "audiorecoreder.json") 28 29 public: 30 struct wav_header { 31 uint32_t riff_id; 32 uint32_t riff_sz; 33 uint32_t riff_fmt; 34 uint32_t fmt_id; 35 uint32_t fmt_sz; 36 uint16_t audio_format; 37 uint16_t num_channels; 38 uint32_t sample_rate; 39 uint32_t byte_rate; 40 uint16_t block_align; 41 uint16_t bits_per_sample; 42 uint32_t data_id; 43 uint32_t data_sz; 44 }; 45 Widget(QWidget *parent = nullptr); 46 ~Widget(); 47 virtual QString id() override; 48 49 private slots: 50 void on_pushButton_clicked(); 51 52 void on_startBtn_clicked(); 53 54 void on_stopBtn_clicked(); 55 56 private: 57 void record_init(); 58 59 unsigned int capture_sample(); 60 61 unsigned int capture_size; 62 63 FILE *file; 64 struct wav_header header; 65 unsigned int card = 0; 66 unsigned int device = 0; 67 unsigned int ahub_card = 0; 68 unsigned int ahub_device = 0; 69 unsigned int channels = 2; 70 unsigned int seconds = 0; 71 unsigned int rate = 44100; 72 unsigned int bits = 16; 73 unsigned int frames; 74 unsigned int period_size = 1024; 75 unsigned int period_count = 4; 76 enum pcm_format format; 77 78 bool capturing; 79 80 QDateTime startTime; 81 QTimer timer; 82 Ui::Widget *ui; 83 }; 84 #endif // WIDGET_H 85