This is synthesis_filter.h in view mode; [Download] [Up]
/* * @(#) synthesis_filter.h 1.8, last edit: 6/15/94 16:52:00 * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de) * @(#) Berlin University of Technology * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef SYNTHESIS_FILTER_H #define SYNTHESIS_FILTER_H #include <iostream.h> #include "all.h" #include "obuffer.h" // A class for the synthesis filter bank: // This class does a fast downsampling from 32, 44.1 or 48 kHz to 8 kHz, if ULAW is defined. // Frequencies above 4 kHz are removed by ignoring higher subbands. class SynthesisFilter { static const real d[512]; real v1[512], v2[512]; real *actual_v; // v1 or v2 uint32 actual_write_pos; // 0-15 #ifdef ULAW uint32 offset1, offset2; // number of samples to skip uint32 remaining_offset; // number of samples still to skip when entering // compute_pcm_samples() next time uint32 highest_subband; // highest subband to use, e.g. 7 for 32 kHz to 8 kHz conversion #endif real samples[32]; // 32 new subband samples uint32 channel; real scalefactor; uint32 range_violations; real max_violation; uint32 written_samples; void compute_new_v (void); void compute_pcm_samples (Obuffer *); public: #ifdef ULAW SynthesisFilter (uint32 channelnumber, e_sample_frequency frequency, real scalefactor = 32768.0); // frequency specifies the sample rate of the stream. #else SynthesisFilter (uint32 channelnumber, real scalefactor = 32768.0); #endif // the scalefactor scales the calculated float pcm samples to short values // (raw pcm samples are in [-1.0, 1.0], if no violations occur) void input_sample (real sample, uint32 subbandnumber) { #ifdef DEBUG if (subbandnumber > 31) { cerr << "SynthesisFilter::input_sample(): illegal subbandnumber!\n"; exit (1); } #endif #ifdef ULAW if (subbandnumber <= highest_subband) samples[subbandnumber] = sample; #else samples[subbandnumber] = sample; #endif }; void calculate_pcm_samples (Obuffer *); // calculate 32 PCM samples and put the into the Obuffer-object uint32 violations (void) { return range_violations; } real hardest_violation (void) { return max_violation; } uint32 recommended_scalefactor (void) { return (uint32)(32768.0 / max_violation); } real seconds_played (uint32 frequency) { return (real)written_samples / (real)frequency; } }; #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.