#include <WavJoin.h>
Public Methods | |
| WavJoin () | |
| virtual void | initServer () |
| virtual void | processServer () |
| int | get_exit_value () const |
| void | set_exit_value (int v_) |
Private Types | |
| typedef vector< string > | List_t |
Private Methods | |
| virtual void | pos_arg (const char *arg_) |
| int | open_out_file (void) |
| void | close_out_file (bool terminated_) |
| int | join_file (const string &fname_) |
Private Attributes | |
| AFfilesetup | m_out_file_setup |
| AFfilehandle | m_out_file |
| string | m_out_fname |
| string | m_out_temp_fname |
| List_t | m_fnames_list |
| u_int | m_pos_arg_count |
| int | m_exit_value |
| bool | m_percent |
Static Private Attributes | |
| const unsigned short int | FRAME_BUFFER_SIZE = USHRT_MAX |
|
|
|
|
|
Definition at line 40 of file WavJoin.cpp. References m_out_fname, and m_percent.
00040 : 00041 m_out_file_setup (AF_NULL_FILESETUP), 00042 m_out_file (AF_NULL_FILEHANDLE), 00043 m_pos_arg_count (0), 00044 m_exit_value (0), 00045 m_percent (false) 00046 { 00047 // ---Configuration--- 00048 rm_opt ('f', "config-file" ); 00049 rm_opt ('n', "instance" ); 00050 rm_opt ('p', "port" ); 00051 00052 // ---Process bookkeeping--- 00053 rm_opt ('b', "daemon" ); 00054 rm_opt ('l', "pidfile" ); 00055 rm_opt ('L', "ommit-pidfile"); 00056 00057 add_opt ('o', "output", &m_out_fname); 00058 add_flag_opt (0, "percent", &m_percent); 00059 00060 /*--- 00061 * Disable all debugging by default 00062 *---*/ 00063 m_debug_mask = 0x0; 00064 m_log_file = "/dev/null"; 00065 } |
|
|
Definition at line 222 of file WavJoin.cpp. References m_out_file, m_out_fname, m_out_temp_fname, and set_exit_value. Referenced by processServer.
00223 {
00224 trace("WavJoin::close_out_file");
00225
00226 afCloseFile (m_out_file);
00227
00228 if (completed_ == false) {
00229 DL((APP,"Executing termination sequence ...\n"));
00230 DL((APP,"Unlinking \"%s\"\n", m_out_temp_fname.c_str ()));
00231 unlink (m_out_temp_fname.c_str ());
00232 set_exit_value (1);
00233 }
00234 else {
00235 unlink (m_out_fname.c_str ());
00236
00237 if (rename (m_out_temp_fname.c_str (), m_out_fname.c_str ()) < 0) {
00238 EL((ERROR,"Failed to rename file \"%s\" to \"%s\"\n",
00239 m_out_temp_fname.c_str (), m_out_fname.c_str ()));
00240 unlink (m_out_temp_fname.c_str ());
00241 set_exit_value (1);
00242 }
00243 }
00244 }
|
|
|
Definition at line 40 of file WavJoin.h. References m_exit_value. Referenced by main.
00040 { return m_exit_value; }
|
|
|
Definition at line 78 of file WavJoin.cpp. References m_fnames_list, m_out_fname, m_out_temp_fname, m_pos_arg_count, and set_exit_value. Referenced by main.
00079 {
00080 trace("WavJoin::initServer");
00081
00082 if (m_pos_arg_count == 0 ||
00083 (m_pos_arg_count == 1 && m_out_fname.size () == 0))
00084 {
00085 std::cerr << "WavPause: mismatch arguments\n"
00086 << "Try `WavPause --help` for more information.\n";
00087 set_exit_value (1);
00088 return;
00089 }
00090
00091 if (m_out_fname.size () == 0) {
00092 m_out_fname = m_fnames_list [0];
00093 }
00094 ostringstream temp;
00095 temp << "WavJoin_tmp." << getpid () << ".wav";
00096 m_out_temp_fname = temp.str ();
00097
00098 DL((APP,"Destination file: \"%s\"\n", m_out_fname.c_str ()));
00099 DL((APP,"Temp file: \"%s\"\n", m_out_temp_fname.c_str ()));
00100 DL((APP,"Files to process: %d\n", m_fnames_list.size ()));
00101 DL((APP,"===================\n"));
00102 List_t::const_iterator i = m_fnames_list.begin ();
00103 uint cnt = 0;
00104 while (i != m_fnames_list.end ()) {
00105 DL((APP,"[%02d] \"%s\"\n",cnt, (*i).c_str ()));
00106 cnt++;
00107 i++;
00108 }
00109 DL((APP,"=== End-Of-List ===\n"));
00110 DL((APP,"Service has been initialized\n"));
00111 }
|
|
|
Definition at line 249 of file WavJoin.cpp. References FRAME_BUFFER_SIZE, m_out_file, and m_out_temp_fname. Referenced by processServer.
00250 {
00251 trace("WavJoin::join_file");
00252
00253 AFfilehandle in_file = AF_NULL_FILEHANDLE;
00254
00255 in_file = afOpenFile (fname_.c_str (), "r", NULL);
00256 if (in_file == AF_NULL_FILEHANDLE) {
00257 return -1;
00258 }
00259
00260 if (m_percent) {
00261 std::cout << fname_ << '\n';
00262 }
00263 AFframecount total_frames = 0; // off_t (offset) = long int
00264 int frame_size = 0;
00265
00266 total_frames = afGetFrameCount (in_file, AF_DEFAULT_TRACK);
00267 frame_size = int(afGetVirtualFrameSize (in_file, AF_DEFAULT_TRACK, 1));
00268
00269 DL((APP,"total_frames: %d\n", total_frames));
00270 DL((APP,"frame_size: %d\n", frame_size));
00271
00272 char* frame_buffer = new char [frame_size * FRAME_BUFFER_SIZE];
00273 memset (frame_buffer, 0, frame_size * FRAME_BUFFER_SIZE);
00274
00275 AFframecount total_frames_written = 0;
00276 AFframecount frames_to_read = FRAME_BUFFER_SIZE;
00277 AFframecount frames_read, frames_written;
00278
00279 bool done = false;
00280 bool ok = true;
00281
00282 while (done == false) {
00283 frames_read = frames_written = 0;
00284 if (stopServer ()) {
00285 DL((APP,"Prematurely terminated!"));
00286 return -1;
00287 }
00288 frames_read = afReadFrames (in_file, AF_DEFAULT_TRACK,
00289 frame_buffer, frames_to_read);
00290 if (frames_read < 0) {
00291 EL((ERROR,"Bad read of audio track data from \"%s\"\n",
00292 fname_.c_str ()));
00293 ok = false;
00294 done = true;
00295 }
00296 frames_written = afWriteFrames (m_out_file, AF_DEFAULT_TRACK,
00297 frame_buffer, frames_read);
00298 if (frames_written < 0) {
00299 EL((ERROR,"Bad write of audio track data to \"%s\"\n",
00300 m_out_temp_fname.c_str ()));
00301 ok = false;
00302 done = true;
00303 }
00304 else {
00305 total_frames_written += frames_written;
00306 DL((APP,"total_frames_written = %d\n", total_frames_written));
00307 }
00308
00309 if (m_percent) {
00310 std::cout << long (total_frames_written * 100.0 / total_frames)
00311 << '\n';
00312 }
00313 if (total_frames_written == total_frames) {
00314 done = true;
00315 }
00316 }
00317 if (m_percent) {
00318 std::cout << std::flush;
00319 }
00320 delete [] frame_buffer;
00321
00322 if (!ok) {
00323 DL((APP,"Copying file \"%s\" failed\n", fname_.c_str ()));
00324 return -1;
00325 }
00326
00327 afCloseFile (in_file);
00328 return 0;
00329 }
|
|
|
Definition at line 151 of file WavJoin.cpp. References m_fnames_list, m_out_file, m_out_file_setup, and m_out_temp_fname. Referenced by processServer.
00152 {
00153 trace("WavJoin::open_out_file");
00154
00155 // Open first file on the list and get file parameters
00156
00157 int file_format = -1;
00158 int version;
00159 int sample_format;
00160 int sample_width;
00161 int channel_count;
00162 int frame_size;
00163 double sample_rate = 0;
00164 AFframecount total_frames;
00165
00166 version = sample_format = sample_width = channel_count = 0;
00167 frame_size = total_frames = 0;
00168
00169 AFfilehandle sample_file = AF_NULL_FILEHANDLE;
00170
00171 sample_file = afOpenFile (m_fnames_list[0].c_str (), "r", NULL);
00172 if (sample_file == AF_NULL_FILEHANDLE) {
00173 return -1;
00174 }
00175
00176 afGetSampleFormat (sample_file, AF_DEFAULT_TRACK,
00177 &sample_format, &sample_width);
00178
00179 file_format = afGetFileFormat (sample_file, &version);
00180 channel_count = afGetChannels (sample_file, AF_DEFAULT_TRACK);
00181 sample_rate = afGetRate (sample_file, AF_DEFAULT_TRACK);
00182 total_frames = afGetFrameCount (sample_file, AF_DEFAULT_TRACK);
00183
00184 frame_size =
00185 (int) afGetVirtualFrameSize (sample_file, AF_DEFAULT_TRACK, 1);
00186
00187 afCloseFile (sample_file);
00188
00189 // Create virtual setup for temp file
00190
00191 m_out_file_setup = afNewFileSetup ();
00192 afInitFileFormat (m_out_file_setup, file_format);
00193 afInitSampleFormat (m_out_file_setup, AF_DEFAULT_TRACK,
00194 sample_format, sample_width);
00195 afInitChannels (m_out_file_setup, AF_DEFAULT_TRACK, channel_count);
00196 afInitRate (m_out_file_setup, AF_DEFAULT_TRACK, sample_rate);
00197
00198 // Open temp file
00199
00200 DL((APP,"Open temporary file \"%s\"\n", m_out_temp_fname.c_str ()));
00201
00202 unlink (m_out_temp_fname.c_str ());
00203
00204 m_out_file = afOpenFile (m_out_temp_fname.c_str (), "w", m_out_file_setup);
00205 if (m_out_file == AF_NULL_FILEHANDLE) {
00206 return -1;
00207 }
00208
00209 // Set the output file's virtual audion format parameters
00210
00211 afSetVirtualChannels (m_out_file, AF_DEFAULT_TRACK, channel_count);
00212 afSetVirtualSampleFormat (m_out_file, AF_DEFAULT_TRACK,
00213 sample_format, sample_width);
00214 afFreeFileSetup (m_out_file_setup);
00215
00216 return 0;
00217 }
|
|
|
Definition at line 68 of file WavJoin.cpp. References m_fnames_list, and m_pos_arg_count.
00069 {
00070 trace("WavJoin::pos_arg");
00071 DL((APP,"Adding file \"%s\"\n",arg_));
00072
00073 m_fnames_list.push_back (arg_);
00074 m_pos_arg_count++;
00075 }
|
|
|
Definition at line 114 of file WavJoin.cpp. References close_out_file, join_file, m_fnames_list, open_out_file, and set_exit_value. Referenced by main.
00115 {
00116 trace("WavJoin::processServer");
00117
00118 if (open_out_file () < 0) {
00119 DL((APP,"Failed to open output file\n"));
00120 set_exit_value (1);
00121 return;
00122 }
00123 bool completed = true;
00124 List_t::const_iterator i = m_fnames_list.begin ();
00125
00126 while (i != m_fnames_list.end ()) {
00127 if (stopServer ()) {
00128 DL((APP,"Data processing prematurely terminated\n"));
00129 set_exit_value (1);
00130 completed = false;
00131 break;
00132 }
00133 DL((APP,"Process WAV file \"%s\"\n", (*i).c_str ()));
00134
00135 if (join_file ((*i)) < 0) {
00136 DL((APP,"Failed to join file \"%s\"\n", (*i).c_str ()));
00137 set_exit_value (1);
00138 completed = false;
00139 break;
00140 }
00141 i++;
00142 }
00143 close_out_file (completed);
00144 m_reactor.stopReactor ();
00145 DL((APP,"Service stopped!\n"));
00146 }
|
|
|
Definition at line 41 of file WavJoin.h. References m_exit_value. Referenced by close_out_file, initServer, and processServer.
00041 { m_exit_value = v_; }
|
|
|
Definition at line 38 of file WavJoin.cpp. Referenced by join_file. |
|
|
Definition at line 62 of file WavJoin.h. Referenced by get_exit_value, and set_exit_value. |
|
|
Definition at line 60 of file WavJoin.h. Referenced by initServer, open_out_file, pos_arg, and processServer. |
|
|
Definition at line 56 of file WavJoin.h. Referenced by close_out_file, join_file, and open_out_file. |
|
|
Definition at line 55 of file WavJoin.h. Referenced by open_out_file. |
|
|
Definition at line 57 of file WavJoin.h. Referenced by close_out_file, initServer, and WavJoin. |
|
|
Definition at line 58 of file WavJoin.h. Referenced by close_out_file, initServer, join_file, and open_out_file. |
|
|
Definition at line 63 of file WavJoin.h. Referenced by WavJoin. |
|
|
Definition at line 61 of file WavJoin.h. Referenced by initServer, and pos_arg. |
1.2.14 written by Dimitri van Heesch,
© 1997-2002