AudioOutput.h 2.83 KB
Newer Older
jcaceres's avatar
jcaceres committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
  JackTrip: A Multimachine System for High-Quality Audio 
  Network Performance over the Internet

  Copyright (c) 2008 Chris Chafe, Juan-Pablo Caceres,
  SoundWIRE group at CCRMA.
  
  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation
  files (the "Software"), to deal in the Software without
  restriction, including without limitation the rights to use,
  copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the
  Software is furnished to do so, subject to the following
  conditions:
  
  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.
  
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  OTHER DEALINGS IN THE SOFTWARE.
*/

/*
 * audio_output.h
jcaceres's avatar
jcaceres committed
32
33
34
35
36
 */

#ifndef	_AUDIO_OUTPUT_H
#define	_AUDIO_OUTPUT_H

jcaceres's avatar
jcaceres committed
37
38
#include "OutputStreamPlugin.h"
#include "AudioDevice.h"
jcaceres's avatar
jcaceres committed
39
40
41
42
43
44
45
46
#include "audioInfo.h"

class AmbisonicsDecoder;

/**
 * @brief Sends audio buffers from a Stream to the RtAudio (sound) device.
 */

jcaceres's avatar
jcaceres committed
47
class AudioOutput:public OutputStreamPlugin
jcaceres's avatar
jcaceres committed
48
{
jcaceres's avatar
jcaceres committed
49
50
51
private:
  AudioDevice * audioDevice;
  AudioInfoT audioInfo;
jcaceres's avatar
jcaceres committed
52

jcaceres's avatar
jcaceres committed
53
54
55
  bool harp;		//!< True: Netharp     False; Audio streaming.
  bool _running;		//!< True while the current thread is running.
  AmbisonicsDecoder *decoder;	//!< Ambisonics decoder NOT IMPLEMENTED
jcaceres's avatar
jcaceres committed
56

jcaceres's avatar
jcaceres committed
57
public:
jcaceres's avatar
jcaceres committed
58

jcaceres's avatar
jcaceres committed
59
60
  AudioOutput (AudioDevice * audioDevice,
	       AudioInfoT audioInfo);
jcaceres's avatar
jcaceres committed
61

jcaceres's avatar
jcaceres committed
62
  ~AudioOutput ();
jcaceres's avatar
jcaceres committed
63

jcaceres's avatar
jcaceres committed
64
65
66
67
68
69
70
71
72
  /**
   * @brief Sends a sample buffer to the audio device.
   *
   * @param buf is the buffer to be sent.
   * @param le is the size of the buffer (in bytes).
   * If \a inChans!=\aoutChans then the channels will be distributed
   * as evenly as possible across the output channels.
   */
  void xfrTo (void *buf);
jcaceres's avatar
jcaceres committed
73

jcaceres's avatar
jcaceres committed
74
  int send (char *buf);
jcaceres's avatar
jcaceres committed
75

jcaceres's avatar
jcaceres committed
76
77
78
79
80
81
82
  /**
   * @brief Add an Ambisonics decoder.
   *
   * Runs the input stream through an Ambisonics decoder
   * before sending it to the audio output.
   * @param bfd is the AmbisonicsDecoder to add.
   */
jcaceres's avatar
jcaceres committed
83

jcaceres's avatar
jcaceres committed
84
85
86
87
  void addDecoder (AmbisonicsDecoder * bfd)
  {
    decoder = bfd;
  }
jcaceres's avatar
jcaceres committed
88
89


jcaceres's avatar
jcaceres committed
90
91
92
  /**
   * Bind the rtBuffer pointer to the RtAudio device buffer.
   */
jcaceres's avatar
jcaceres committed
93

jcaceres's avatar
jcaceres committed
94
  void Prepare ();
jcaceres's avatar
jcaceres committed
95

jcaceres's avatar
jcaceres committed
96
97
98
99
  /**
   * Read buffers from the input stream and send them to the audio device
   * until _running is false.
   */
jcaceres's avatar
jcaceres committed
100

jcaceres's avatar
jcaceres committed
101
  void run ();
jcaceres's avatar
jcaceres committed
102

jcaceres's avatar
jcaceres committed
103
104
105
  /**
   * Free memory.
   */
jcaceres's avatar
jcaceres committed
106

jcaceres's avatar
jcaceres committed
107
  void stop ();
108
  //void plotVal (double v);
jcaceres's avatar
jcaceres committed
109
110
111
112
113
114
115
};

/** NEWVERSION in other file */



#endif