remove lpc format

dev
xufulong 3 years ago
parent 2e856071d0
commit 78d239abec
  1. 1
      app/src/main/cpp/sox/CmakeLists.txt
  2. 96
      app/src/main/cpp/sox/libsox.sym
  3. 225
      app/src/main/cpp/sox/lpc10.c

@ -113,7 +113,6 @@ set(formats_srcs
ima_rw.h
ima_rw.c
la-fmt.c
# lpc10.c
lu-fmt.c
maud.c
nulfile.c

@ -1,96 +0,0 @@
lsx_calloc
lsx_check_read_params
lsx_close_dllibrary
lsx_debug_impl
lsx_debug_more_impl
lsx_debug_most_impl
lsx_eof
lsx_error
lsx_fail_errno
lsx_fail_impl
lsx_filelength
lsx_find_enum_text
lsx_find_enum_value
lsx_find_file_extension
lsx_flush
lsx_getopt
lsx_getopt_init
lsx_id3_read_tag
lsx_lpc10_create_decoder_state
lsx_lpc10_create_encoder_state
lsx_lpc10_decode
lsx_lpc10_encode
lsx_malloc
lsx_open_dllibrary
lsx_rawread
lsx_rawwrite
lsx_read_b_buf
lsx_readbuf
lsx_readchars
lsx_realloc
lsx_realloc_array
lsx_report_impl
lsx_rewind
lsx_seeki
lsx_sigfigs3
lsx_sigfigs3p
lsx_strcasecmp
lsx_strdup
lsx_tell
lsx_unreadb
lsx_warn_impl
lsx_write_b_buf
lsx_writeb
lsx_writebuf
lsx_writes
sox_add_effect
sox_append_comment
sox_append_comments
sox_basename
sox_close
sox_copy_comments
sox_create_effect
sox_create_effects_chain
sox_delete_comments
sox_delete_effect
sox_delete_effect_last
sox_delete_effects
sox_delete_effects_chain
sox_effect_options
sox_effects_clips
sox_find_comment
sox_find_effect
sox_find_format
sox_flow_effects
sox_format_init
sox_format_quit
sox_format_supports_encoding
sox_get_effect_fns
sox_get_effects_globals
sox_get_encodings_info
sox_get_format_fns
sox_get_globals
sox_init
sox_init_encodinginfo
sox_is_playlist
sox_num_comments
sox_open_mem_read
sox_open_mem_write
sox_open_memstream_write
sox_open_read
sox_open_write
sox_parse_playlist
sox_pop_effect_last
sox_precision
sox_push_effect_last
sox_quit
sox_read
sox_seek
sox_stop_effect
sox_strerror
sox_trim_clear_start
sox_trim_get_start
sox_version
sox_version_info
sox_write
sox_write_handler

@ -1,225 +0,0 @@
/* libSoX lpc-10 format.
*
* Copyright 2007 Reuben Thomas <rrt@sc3d.org>
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or (at
* your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "sox_i.h"
#include <lpc10.h>
/* Private data */
typedef struct {
struct lpc10_encoder_state *encst;
float speech[LPC10_SAMPLES_PER_FRAME];
unsigned samples;
struct lpc10_decoder_state *decst;
} priv_t;
/*
Write the bits in bits[0] through bits[len-1] to file f, in "packed"
format.
bits is expected to be an array of len integer values, where each
integer is 0 to represent a 0 bit, and any other value represents a
1 bit. This bit string is written to the file f in the form of
several 8 bit characters. If len is not a multiple of 8, then the
last character is padded with 0 bits -- the padding is in the least
significant bits of the last byte. The 8 bit characters are "filled"
in order from most significant bit to least significant.
*/
static void write_bits(sox_format_t * ft, INT32 *bits, int len)
{
int i;
uint8_t mask; /* The next bit position within the variable "data" to
place the next bit. */
uint8_t data; /* The contents of the next byte to place in the
output. */
/* Fill in the array bits.
* The first compressed output bit will be the most significant
* bit of the byte, so initialize mask to 0x80. The next byte of
* compressed data is initially 0, and the desired bits will be
* turned on below.
*/
mask = 0x80;
data = 0;
for (i = 0; i < len; i++) {
/* Turn on the next bit of output data, if necessary. */
if (bits[i]) {
data |= mask;
}
/*
* If the byte data is full, determined by mask becoming 0,
* then write the byte to the output file, and reinitialize
* data and mask for the next output byte. Also add the byte
* if (i == len-1), because if len is not a multiple of 8,
* then mask won't yet be 0. */
mask >>= 1;
if ((mask == 0) || (i == len-1)) {
lsx_writeb(ft, data);
data = 0;
mask = 0x80;
}
}
}
/*
Read bits from file f into bits[0] through bits[len-1], in "packed"
format.
Read ceiling(len/8) characters from file f, if that many are
available to read, otherwise read to the end of the file. The first
character's 8 bits, in order from MSB to LSB, are used to fill
bits[0] through bits[7]. The second character's bits are used to
fill bits[8] through bits[15], and so on. If ceiling(len/8)
characters are available to read, and len is not a multiple of 8,
then some of the least significant bits of the last character read
are completely ignored. Every entry of bits[] that is modified is
changed to either a 0 or a 1.
The number of bits successfully read is returned, and is always in
the range 0 to len, inclusive. If it is less than len, it will
always be a multiple of 8.
*/
static int read_bits(sox_format_t * ft, INT32 *bits, int len)
{
int i;
uint8_t c = 0;
/* Unpack the array bits into coded_frame. */
for (i = 0; i < len; i++) {
if (i % 8 == 0) {
lsx_read_b_buf(ft, &c, (size_t) 1);
if (lsx_eof(ft)) {
return (i);
}
}
if (c & (0x80 >> (i & 7))) {
bits[i] = 1;
} else {
bits[i] = 0;
}
}
return (len);
}
static int startread(sox_format_t * ft)
{
priv_t * lpc = (priv_t *)ft->priv;
if ((lpc->decst = create_lpc10_decoder_state()) == NULL) {
fprintf(stderr, "lpc10 could not allocate decoder state");
return SOX_EOF;
}
lpc->samples = LPC10_SAMPLES_PER_FRAME;
return lsx_check_read_params(ft, 1, 8000., SOX_ENCODING_LPC10, 0, (uint64_t)0, sox_false);
}
static int startwrite(sox_format_t * ft)
{
priv_t * lpc = (priv_t *)ft->priv;
if ((lpc->encst = create_lpc10_encoder_state()) == NULL) {
fprintf(stderr, "lpc10 could not allocate encoder state");
return SOX_EOF;
}
lpc->samples = 0;
return SOX_SUCCESS;
}
static size_t read_samples(sox_format_t * ft, sox_sample_t *buf, size_t len)
{
priv_t * lpc = (priv_t *)ft->priv;
size_t nread = 0;
while (nread < len) {
SOX_SAMPLE_LOCALS;
/* Read more data if buffer is empty */
if (lpc->samples == LPC10_SAMPLES_PER_FRAME) {
INT32 bits[LPC10_BITS_IN_COMPRESSED_FRAME];
if (read_bits(ft, bits, LPC10_BITS_IN_COMPRESSED_FRAME) !=
LPC10_BITS_IN_COMPRESSED_FRAME)
break;
lpc10_decode(bits, lpc->speech, lpc->decst);
lpc->samples = 0;
}
while (nread < len && lpc->samples < LPC10_SAMPLES_PER_FRAME)
buf[nread++] = SOX_FLOAT_32BIT_TO_SAMPLE(lpc->speech[lpc->samples++], ft->clips);
}
return nread;
}
static size_t write_samples(sox_format_t * ft, const sox_sample_t *buf, size_t len)
{
priv_t * lpc = (priv_t *)ft->priv;
size_t nwritten = 0;
while (len > 0) {
while (len > 0 && lpc->samples < LPC10_SAMPLES_PER_FRAME) {
SOX_SAMPLE_LOCALS;
lpc->speech[lpc->samples++] = SOX_SAMPLE_TO_FLOAT_32BIT(buf[nwritten++], ft->clips);
len--;
}
if (lpc->samples == LPC10_SAMPLES_PER_FRAME) {
INT32 bits[LPC10_BITS_IN_COMPRESSED_FRAME];
lpc10_encode(lpc->speech, bits, lpc->encst);
write_bits(ft, bits, LPC10_BITS_IN_COMPRESSED_FRAME);
lpc->samples = 0;
}
}
return nwritten;
}
static int stopread(sox_format_t * ft)
{
priv_t * lpc = (priv_t *)ft->priv;
free(lpc->decst);
return SOX_SUCCESS;
}
static int stopwrite(sox_format_t * ft)
{
priv_t * lpc = (priv_t *)ft->priv;
free(lpc->encst);
return SOX_SUCCESS;
}
LSX_FORMAT_HANDLER(lpc10)
{
static char const * const names[] = {"lpc10", "lpc", NULL};
static sox_rate_t const write_rates[] = {8000, 0};
static unsigned const write_encodings[] = {SOX_ENCODING_LPC10, 0, 0};
static sox_format_handler_t handler = {SOX_LIB_VERSION_CODE,
"Low bandwidth, robotic sounding speech compression", names, SOX_FILE_MONO,
startread, read_samples, stopread,
startwrite, write_samples, stopwrite,
NULL, write_encodings, write_rates, sizeof(priv_t)
};
return &handler;
}
Loading…
Cancel
Save