annotate audio/AudioRecordTarget.h @ 562:3c846b06c518 3.0-integration

When returning the frame that we have filled to, avoid accidentally reducing the frame number (making it appear we are less filled than we really are) when we had intended to round it up to the full requested amount. Fixes some unexpected double-playback in non-looping play-selection mode.
author Chris Cannam
date Wed, 14 Dec 2016 11:55:47 +0000
parents 7b115a6505b8
children
rev   line source
Chris@476 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@476 2
Chris@476 3 /*
Chris@476 4 Sonic Visualiser
Chris@476 5 An audio file viewer and annotation editor.
Chris@476 6 Centre for Digital Music, Queen Mary, University of London.
Chris@476 7
Chris@476 8 This program is free software; you can redistribute it and/or
Chris@476 9 modify it under the terms of the GNU General Public License as
Chris@476 10 published by the Free Software Foundation; either version 2 of the
Chris@476 11 License, or (at your option) any later version. See the file
Chris@476 12 COPYING included with this distribution for more information.
Chris@476 13 */
Chris@476 14
Chris@476 15 #ifndef AUDIO_RECORD_TARGET_H
Chris@476 16 #define AUDIO_RECORD_TARGET_H
Chris@476 17
Chris@476 18 #include <bqaudioio/ApplicationRecordTarget.h>
Chris@476 19
Chris@476 20 #include <string>
Chris@476 21
Chris@476 22 #include <QObject>
Chris@476 23 #include <QMutex>
Chris@476 24
Chris@476 25 #include "base/BaseTypes.h"
Chris@476 26
Chris@476 27 class ViewManagerBase;
Chris@477 28 class WritableWaveFileModel;
Chris@476 29
Chris@476 30 class AudioRecordTarget : public QObject,
Chris@476 31 public breakfastquay::ApplicationRecordTarget
Chris@476 32 {
Chris@476 33 Q_OBJECT
Chris@476 34
Chris@476 35 public:
Chris@476 36 AudioRecordTarget(ViewManagerBase *, QString clientName);
Chris@476 37 virtual ~AudioRecordTarget();
Chris@476 38
Chris@559 39 virtual std::string getClientName() const override { return m_clientName; }
Chris@476 40
Chris@559 41 virtual int getApplicationSampleRate() const override;
Chris@559 42 virtual int getApplicationChannelCount() const override;
Chris@476 43
Chris@559 44 virtual void setSystemRecordBlockSize(int) override;
Chris@559 45 virtual void setSystemRecordSampleRate(int) override;
Chris@559 46 virtual void setSystemRecordLatency(int) override;
Chris@559 47 virtual void setSystemRecordChannelCount(int) override;
Chris@476 48
Chris@559 49 virtual void putSamples(const float *const *samples, int nchannels, int nframes) override;
Chris@476 50
Chris@559 51 virtual void setInputLevels(float peakLeft, float peakRight) override;
Chris@476 52
Chris@559 53 virtual void audioProcessingOverload() override { }
Chris@476 54
Chris@508 55 QString getRecordContainerFolder();
Chris@483 56 QString getRecordFolder();
Chris@483 57
Chris@477 58 bool isRecording() const { return m_recording; }
Chris@477 59 WritableWaveFileModel *startRecording(); // caller takes ownership
Chris@476 60 void stopRecording();
Chris@477 61
Chris@477 62 signals:
Chris@477 63 void recordStatusChanged(bool recording);
Chris@485 64 void recordDurationChanged(sv_frame_t, sv_samplerate_t); // emitted occasionally
Chris@497 65 void recordCompleted();
Chris@477 66
Chris@477 67 protected slots:
Chris@477 68 void modelAboutToBeDeleted();
Chris@476 69
Chris@476 70 private:
Chris@476 71 ViewManagerBase *m_viewManager;
Chris@476 72 std::string m_clientName;
Chris@476 73 bool m_recording;
Chris@476 74 sv_samplerate_t m_recordSampleRate;
Chris@546 75 int m_recordChannelCount;
Chris@485 76 sv_frame_t m_frameCount;
Chris@476 77 QString m_audioFileName;
Chris@477 78 WritableWaveFileModel *m_model;
Chris@476 79 QMutex m_mutex;
Chris@476 80 };
Chris@476 81
Chris@476 82 #endif