1 #include "audio.hpp" 2 #include "playback_stream_impl.hpp" 3 4 using namespace RHVoice::audio; 5 6 error(const std::string & msg)7error::error(const std::string& msg): 8 exception(msg) 9 { 10 } 11 disallowed_sample_rate()12disallowed_sample_rate::disallowed_sample_rate(): 13 error("This sample rate is unsupported") 14 { 15 } 16 initialization_error()17initialization_error::initialization_error(): 18 error("Audio library initialization failed") 19 { 20 } 21 is_initialized_error()22is_initialized_error::is_initialized_error(): 23 error("The playback stream is already initialized") 24 { 25 } 26 opening_error()27opening_error::opening_error(): 28 error("Unable to open a playback stream") 29 { 30 } 31 is_open_error()32is_open_error::is_open_error(): 33 error("The playback stream is already open") 34 { 35 } 36 is_not_open_error()37is_not_open_error::is_not_open_error(): 38 error("The playback stream is not open") 39 { 40 } 41 42 playback_error()43playback_error::playback_error(): 44 error("Unable to write to a playback stream") 45 { 46 } 47 backend_error()48backend_error::backend_error(): 49 error("Unsupported audio backend") 50 { 51 } 52 library_error()53library_error::library_error(): 54 error("Unsupported audio library") 55 { 56 } 57 58 playback_stream(const playback_params & params_)59playback_stream::playback_stream(const playback_params& params_): 60 params(params_), 61 impl(nullptr) 62 { 63 } 64 ~playback_stream()65playback_stream::~playback_stream() 66 { 67 if(is_open()) 68 close(); 69 } 70 playback_params()71playback_params::playback_params(): 72 lib(lib_default), 73 backend(backend_default), 74 sample_rate(24000), 75 buffer_size(0) 76 { 77 } 78 is_initialized() const79bool playback_stream::is_initialized() const 80 { 81 return (impl.get()!=0); 82 } 83 set_lib(lib_id lib)84void 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)92void 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)100void 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)108void 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)116void 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() const124unsigned int playback_stream::get_buffer_size() const 125 { 126 return params.buffer_size; 127 } 128 set_buffer_size(unsigned int buffer_size)129void 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() const137int playback_stream::get_sample_rate() const 138 { 139 return params.sample_rate; 140 } 141 reset_params()142void playback_stream::reset_params() 143 { 144 if(is_initialized()) 145 throw is_initialized_error(); 146 else 147 params=playback_params(); 148 } 149