Olive
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
audio.h
Go to the documentation of this file.
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef AUDIO_H
22 #define AUDIO_H
23 
24 #include <QVector>
25 #include <QThread>
26 #include <QWaitCondition>
27 #include <QMutex>
28 #include <QIODevice>
29 #include <QAudioOutput>
30 #include <QComboBox>
31 
32 #include "timeline/sequence.h"
33 
34 class AudioSenderThread : public QThread {
35  Q_OBJECT
36 public:
38  void run();
39  void stop();
40  QWaitCondition cond;
41  bool close;
42  QMutex lock;
43 public slots:
44  void notifyReceiver();
45 private:
46  QVector<qint16> samples;
47  int send_audio_to_output(qint64 offset, int max);
48 };
49 
50 double log_volume(double linear);
51 
52 extern QAudioOutput* audio_output;
53 extern QIODevice* audio_io_device;
55 extern QMutex audio_write_lock;
56 
57 #define audio_ibuffer_size 192000
58 extern qint8 audio_ibuffer[audio_ibuffer_size];
59 extern qint64 audio_ibuffer_read;
60 extern long audio_ibuffer_frame;
61 extern double audio_ibuffer_timecode;
62 extern bool audio_scrub;
63 extern bool recording;
64 extern bool audio_rendering;
65 extern int audio_rendering_rate;
66 void clear_audio_ibuffer();
67 
68 QObject *GetAudioWakeObject();
69 void SetAudioWakeObject(QObject* o);
70 void WakeAudioWakeObject();
71 
72 int current_audio_freq();
73 
74 bool is_audio_device_set();
75 
76 void init_audio();
77 void stop_audio();
78 qint64 get_buffer_offset_from_frame(double framerate, long frame);
79 
80 bool start_recording();
81 void stop_recording();
83 
84 void combobox_audio_sample_rates(QComboBox* combobox);
85 
86 #endif // AUDIO_H
long audio_ibuffer_frame
Definition: audio.cpp:60
void stop_audio()
Definition: audio.cpp:137
bool close
Definition: audio.h:41
void init_audio()
Definition: audio.cpp:98
int current_audio_freq()
Definition: audio.cpp:156
double log_volume(double linear)
Definition: audio.cpp:246
QWaitCondition cond
Definition: audio.h:40
bool start_recording()
Definition: audio.cpp:327
#define audio_ibuffer_size
Definition: audio.h:57
qint64 audio_ibuffer_read
Definition: audio.cpp:59
QIODevice * audio_io_device
Definition: audio.cpp:47
bool is_audio_device_set()
Definition: audio.cpp:65
QVector< qint16 > samples
Definition: audio.h:46
qint8 audio_ibuffer[audio_ibuffer_size]
Definition: audio.cpp:58
void notifyReceiver()
Definition: audio.cpp:180
void combobox_audio_sample_rates(QComboBox *combobox)
Definition: audio.cpp:395
int audio_rendering_rate
Definition: audio.cpp:56
void run()
Definition: audio.cpp:184
bool audio_scrub
Definition: audio.cpp:49
QMutex audio_write_lock
Definition: audio.cpp:50
int send_audio_to_output(qint64 offset, int max)
Definition: audio.cpp:211
Definition: audio.h:34
double audio_ibuffer_timecode
Definition: audio.cpp:61
QAudioOutput * audio_output
Definition: audio.cpp:46
void SetAudioWakeObject(QObject *o)
Definition: audio.cpp:420
QObject * GetAudioWakeObject()
Definition: audio.cpp:408
AudioSenderThread * audio_thread
Definition: audio.cpp:63
bool audio_rendering
Definition: audio.cpp:55
AudioSenderThread()
Definition: audio.cpp:170
void stop()
Definition: audio.cpp:174
QString get_recorded_audio_filename()
Definition: audio.cpp:391
QMutex lock
Definition: audio.h:42
qint64 get_buffer_offset_from_frame(double framerate, long frame)
Definition: audio.cpp:160
void clear_audio_ibuffer()
Definition: audio.cpp:147
bool recording
Definition: audio.cpp:53
void stop_recording()
Definition: audio.cpp:377
void WakeAudioWakeObject()
Definition: audio.cpp:427