/** * Speech::Swift - Swift Text-To-Speech for PERL * * Copyright (c) 2011, Mike Pultz . * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Mike Pultz nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @author Mike Pultz * @copyright 2011 Mike Pultz * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @version SVN $id$ * */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include #include #include #include "swift.h" typedef struct cst_wave_struct { const char *type; int sample_rate; int num_samples; int num_channels; short *samples; } cst_wave; MODULE = Speech::Swift PACKAGE = Speech::Swift int swift_failed(_res) swift_result_t _res CODE: RETVAL = SWIFT_FAILED(_res) ? 1 : 0; OUTPUT: RETVAL const char* swift_strerror(_res) swift_result_t _res # # engine functions # swift_engine* swift_engine_open(_params) swift_params *_params void swift_engine_close(_engine) swift_engine *_engine void swift_engine_set_voice_retention_policy(_engine, _policy) swift_engine *_engine swift_voice_retention_policy_t _policy swift_voice_retention_policy_t swift_engine_get_voice_retention_policy(_engine) swift_engine *_engine # # port functions # swift_port* swift_port_open(_engine, _params) swift_engine *_engine swift_params *_params swift_result_t swift_port_done_on_thread(_port) swift_port *_port void swift_port_close(_port) swift_port *_port const char* swift_port_language_encoding(_port) swift_port *_port swift_result_t swift_port_load_sfx(_port, _file) swift_port *_port const char *_file # # event functions # const char* swift_event_type_get_name(_type) swift_event_t _type swift_event_t swift_event_name_get_type(_name) const char *_name # # param functions # swift_params* swift_params_new() CODE: RETVAL = swift_params_new(NULL); OUTPUT: RETVAL void swift_params_set_string(_params, _name, _value) swift_params *_params char *_name char *_value void swift_params_set_int(_params, _name, _value) swift_params *_params char *_name int _value # # voice functions # swift_voice* swift_port_find_first_voice(_port, _search_criteria, _order_criteria) swift_port *_port const char *_search_criteria const char *_order_criteria swift_voice* swift_port_find_next_voice(_port) swift_port *_port swift_voice* swift_port_rewind_voices(_port) swift_port *_port swift_result_t swift_port_set_voice(_port, _voice) swift_port *_port swift_voice *_voice swift_voice* swift_port_set_voice_by_name(_port, _voice) swift_port *_port const char *_voice swift_voice* swift_port_set_voice_from_dir(_port, _dir) swift_port *_port const char *_dir swift_voice* swift_port_get_current_voice(_port) swift_port *_port const char* swift_voice_get_attribute(_voice, _name) swift_voice *_voice char *_name swift_result_t swift_voice_get_attributes(_voice, _params) swift_voice *_voice swift_params *_params swift_result_t swift_voice_load_lexicon(_voice, _file) swift_voice *_voice const char *_file # # wave file functions # swift_waveform* swift_port_get_wave(_port, _text) swift_port *_port const void *_text CODE: RETVAL = swift_port_get_wave(_port, _text, strlen(_text), NULL, 0, NULL); OUTPUT: RETVAL swift_waveform* swift_waveform_new() swift_result_t swift_waveform_save(_wave, _filename, _format) swift_waveform *_wave const char *_filename const char *_format int swift_waveform_get_sps(_wave) swift_waveform *_wave const char* swift_waveform_get_encoding(_wave) swift_waveform *_wave int swift_waveform_get_channels(_wave) swift_waveform *_wave CODE: RETVAL = _wave->num_channels; OUTPUT: RETVAL swift_result_t swift_waveform_resample(_wave, _new_sps) swift_waveform *_wave int _new_sps swift_result_t swift_waveform_convert(_wave, _encoding) swift_waveform *_wave const char *_encoding swift_result_t swift_waveform_set_channels(_wave, _channels) swift_waveform *_wave int _channels void swift_waveform_close(_wave) swift_waveform *_wave void swift_waveform_get_samples(_wave) swift_waveform *_wave INIT: int16_t *buffer = NULL; int samples = 0; int bytes_per_sample = 0; int i = 0; PPCODE: if (SWIFT_FAILED(swift_waveform_get_samples(_wave, (const void**)&buffer, &samples, &bytes_per_sample))) { croak("failed to get samples from waveform object"); } if ( (samples > 0) && (bytes_per_sample > 0) ) { for(i=0; i