examples/multimedia/audiooutput/audiooutput.h
changeset 18 2f34d5167611
parent 0 1918ee327afb
child 30 5dc02b23752f
equal deleted inserted replaced
3:41300fa6a67c 18:2f34d5167611
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the examples of the Qt Toolkit.
     7 ** This file is part of the examples of the Qt Toolkit.
     8 **
     8 **
    39 **
    39 **
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 
    41 
    42 #include <math.h>
    42 #include <math.h>
    43 
    43 
    44 #define BUFFER_SIZE 32768
       
    45 
       
    46 #include <QObject>
    44 #include <QObject>
    47 #include <QMainWindow>
    45 #include <QMainWindow>
    48 #include <QIODevice>
    46 #include <QIODevice>
    49 #include <QTimer>
    47 #include <QTimer>
    50 #include <QPushButton>
    48 #include <QPushButton>
    51 #include <QComboBox>
    49 #include <QComboBox>
       
    50 #include <QByteArray>
    52 
    51 
    53 #include <QAudioOutput>
    52 #include <QAudioOutput>
    54 
    53 
    55 class Generator : public QIODevice
    54 class Generator : public QIODevice
    56 {
    55 {
    57     Q_OBJECT
    56     Q_OBJECT
    58 public:
    57 public:
    59     Generator(QObject *parent);
    58     Generator(const QAudioFormat &format, qint64 durationUs, int frequency, QObject *parent);
    60     ~Generator();
    59     ~Generator();
    61 
    60 
    62     void start();
    61     void start();
    63     void stop();
    62     void stop();
    64 
    63 
    65     char *t;
       
    66     int  len;
       
    67     int  pos;
       
    68     int  total;
       
    69     char *buffer;
       
    70     bool finished;
       
    71     int  chunk_size;
       
    72 
       
    73     qint64 readData(char *data, qint64 maxlen);
    64     qint64 readData(char *data, qint64 maxlen);
    74     qint64 writeData(const char *data, qint64 len);
    65     qint64 writeData(const char *data, qint64 len);
       
    66     qint64 bytesAvailable() const;
    75 
    67 
    76 private:
    68 private:
    77     int putShort(char *t, unsigned int value);
    69     void generateData(const QAudioFormat &format, qint64 durationUs, int frequency);
    78     int fillData(char *start, int frequency, int seconds);
    70 
       
    71 private:
       
    72     qint64 m_pos;
       
    73     QByteArray m_buffer;
    79 };
    74 };
    80 
    75 
    81 class AudioTest : public QMainWindow
    76 class AudioTest : public QMainWindow
    82 {
    77 {
    83     Q_OBJECT
    78     Q_OBJECT
    84 public:
    79 public:
    85     AudioTest();
    80     AudioTest();
    86     ~AudioTest();
    81     ~AudioTest();
    87 
    82 
    88     QAudioDeviceInfo  device;
    83 private:
    89     Generator*        gen;
    84     void initializeWindow();
    90     QAudioOutput*     audioOutput;
    85     void initializeAudio();
    91     QIODevice*        output;
    86     void createAudioOutput();
    92     QTimer*           timer;
       
    93     QAudioFormat      settings;
       
    94 
    87 
    95     bool              pullMode;
    88 private:
    96     char*             buffer;
    89     QTimer*          m_pullTimer;
    97 
    90 
    98     QPushButton*      button;
    91     // Owned by layout
    99     QPushButton*      button2;
    92     QPushButton*     m_modeButton;
   100     QComboBox*     deviceBox;
    93     QPushButton*     m_suspendResumeButton;
       
    94     QComboBox*       m_deviceBox;
       
    95 
       
    96     QAudioDeviceInfo m_device;
       
    97     Generator*       m_generator;
       
    98     QAudioOutput*    m_audioOutput;
       
    99     QIODevice*       m_output; // not owned
       
   100     QAudioFormat     m_format;
       
   101 
       
   102     bool             m_pullMode;
       
   103     QByteArray       m_buffer;
       
   104 
       
   105     static const QString PushModeLabel;
       
   106     static const QString PullModeLabel;
       
   107     static const QString SuspendLabel;
       
   108     static const QString ResumeLabel;
   101 
   109 
   102 private slots:
   110 private slots:
   103     void status();
   111     void notified();
   104     void writeMore();
   112     void pullTimerExpired();
   105     void toggle();
   113     void toggleMode();
   106     void togglePlay();
   114     void toggleSuspendResume();
   107     void state(QAudio::State s);
   115     void stateChanged(QAudio::State state);
   108     void deviceChanged(int idx);
   116     void deviceChanged(int index);
   109 };
   117 };
   110 
   118