1 #include "audio.hpp"
2 #include "playback_stream_impl.hpp"
3 
4 using namespace RHVoice::audio;
5 
6 
error(const std::string & msg)7 error::error(const std::string& msg):
8   exception(msg)
9 {
10 }
11 
disallowed_sample_rate()12 disallowed_sample_rate::disallowed_sample_rate():
13   error("This sample rate is unsupported")
14 {
15 }
16 
initialization_error()17 initialization_error::initialization_error():
18   error("Audio library initialization failed")
19 {
20 }
21 
is_initialized_error()22 is_initialized_error::is_initialized_error():
23   error("The playback stream is already initialized")
24 {
25 }
26 
opening_error()27 opening_error::opening_error():
28   error("Unable to open a playback stream")
29 {
30 }
31 
is_open_error()32 is_open_error::is_open_error():
33   error("The playback stream is already open")
34 {
35 }
36 
is_not_open_error()37 is_not_open_error::is_not_open_error():
38   error("The playback stream is not open")
39 {
40 }
41 
42 
playback_error()43 playback_error::playback_error():
44   error("Unable to write to a playback stream")
45 {
46 }
47 
backend_error()48 backend_error::backend_error():
49   error("Unsupported audio backend")
50 {
51 }
52 
library_error()53 library_error::library_error():
54   error("Unsupported audio library")
55 {
56 }
57 
58 
playback_stream(const playback_params & params_)59 playback_stream::playback_stream(const playback_params& params_):
60   params(params_),
61   impl(nullptr)
62 {
63 }
64 
~playback_stream()65 playback_stream::~playback_stream()
66 {
67   if(is_open())
68     close();
69 }
70 
playback_params()71 playback_params::playback_params():
72   lib(lib_default),
73   backend(backend_default),
74   sample_rate(24000),
75   buffer_size(0)
76 {
77 }
78 
is_initialized() const79 bool playback_stream::is_initialized() const
80 {
81   return (impl.get()!=0);
82 }
83 
set_lib(lib_id lib)84 void playback_stream::set_lib(lib_id lib)
85 {
86   if(is_initialized())
87     throw is_initialized_error();
88   else
89     params.lib=lib;
90 }
91 
set_backend(backend_id backend)92 void playback_stream::set_backend(backend_id backend)
93 {
94   if(is_initialized())
95     throw is_initialized_error();
96   else
97     params.backend=backend;
98 }
99 
set_device(const std::string & device)100 void playback_stream::set_device(const std::string& device)
101 {
102   if(is_initialized())
103     throw is_initialized_error();
104   else
105     params.device=device;
106 }
107 
set_server(const std::string & server)108 void playback_stream::set_server(const std::string& server)
109 {
110   if(is_initialized())
111     throw is_initialized_error();
112   else
113     params.server=server;
114 }
115 
set_client_name(const std::string & client_name)116 void playback_stream::set_client_name(const std::string& client_name)
117 {
118   if(is_initialized())
119     throw is_initialized_error();
120   else
121     params.client_name=client_name;
122 }
123 
get_buffer_size() const124 unsigned int playback_stream::get_buffer_size() const
125 {
126   return params.buffer_size;
127 }
128 
set_buffer_size(unsigned int buffer_size)129 void playback_stream::set_buffer_size(unsigned int buffer_size)
130 {
131   if(is_initialized())
132     throw is_initialized_error();
133   else
134     params.buffer_size=buffer_size;
135 }
136 
get_sample_rate() const137 int playback_stream::get_sample_rate() const
138 {
139   return params.sample_rate;
140 }
141 
reset_params()142 void playback_stream::reset_params()
143 {
144   if(is_initialized())
145     throw is_initialized_error();
146   else
147     params=playback_params();
148 }
149