summaryrefslogtreecommitdiff
path: root/audio/mxv/patches/patch-aa
diff options
context:
space:
mode:
Diffstat (limited to 'audio/mxv/patches/patch-aa')
-rw-r--r--audio/mxv/patches/patch-aa801
1 files changed, 801 insertions, 0 deletions
diff --git a/audio/mxv/patches/patch-aa b/audio/mxv/patches/patch-aa
new file mode 100644
index 00000000000..79eb90aefe9
--- /dev/null
+++ b/audio/mxv/patches/patch-aa
@@ -0,0 +1,801 @@
+***************
+Sun Aug 25 10:17:47 PDT 1996
+***************
+diff -c -r old/channelview.C ./channelview.C
+*** old/channelview.C Mon Aug 14 14:42:15 1995
+--- ./channelview.C Sun Jul 14 20:31:15 1996
+***************
+*** 323,331 ****
+ framesVisible.set(point - margin, point + margin);
+ setVisibleFrameRange(framesVisible);
+ }
+! if(!chansVisible.includes(chansToSelect) && scroll == true) {
+! Range displayChans = chansToSelect;
+! displayChans.expandBy(1);
+ setChannelRange(displayChans);
+ }
+ struct InsertSetter : public ChannelRangeBlock {
+--- 323,344 ----
+ framesVisible.set(point - margin, point + margin);
+ setVisibleFrameRange(framesVisible);
+ }
+! if(scroll && !chansVisible.includes(chansToSelect)) {
+! Range displayChans;
+! if(chansVisible.spread() >= chansToSelect.spread()) {
+! // keep same number of visible channels, but shift up
+! displayChans = chansVisible;
+! int shift = chansToSelect.intMax() -
+! chansVisible.intMax();
+! displayChans += shift;
+! // make sure range is non-negative
+! while(displayChans.includes(-1)) displayChans += 1;
+! }
+! else {
+! // use requested channels plus one on each side
+! displayChans = chansToSelect;
+! displayChans.expandBy(1);
+! }
+ setChannelRange(displayChans);
+ }
+ struct InsertSetter : public ChannelRangeBlock {
+diff -c -r old/dataview.C ./dataview.C
+*** old/dataview.C Mon Aug 14 14:42:16 1995
+--- ./dataview.C Sat Jul 13 22:43:40 1996
+***************
+*** 434,439 ****
+--- 434,441 ----
+ DataView::addGraph(Graph *graph) {
+ if(graphsShown == maxGraphs)
+ expandGraphArray();
++ if(graphsShown == maxGraphs)
++ return; // failed to expand!
+ graphs[graphsShown] = graph; // add to array
+ Scale *vscale = new VScale(
+ graph->verticalScaleLabel(),
+***************
+*** 452,465 ****
+ DataView::expandGraphArray() {
+ int newMax = maxGraphs + 4;
+ Graph **newGraphs = new Graph *[newMax + 1]; // plus 1 for EOA
+! int i;
+! for(i=0; i < maxGraphs; i++)
+! newGraphs[i] = graphs[i]; // copy existing graphs if any
+! for(i = maxGraphs; i <= newMax; i++)
+! newGraphs[i] = nil;
+! delete [] graphs;
+! graphs = newGraphs;
+! maxGraphs = newMax;
+ }
+
+ // remove one graph and its associated scale from frame
+--- 454,469 ----
+ DataView::expandGraphArray() {
+ int newMax = maxGraphs + 4;
+ Graph **newGraphs = new Graph *[newMax + 1]; // plus 1 for EOA
+! if(newGraphs) {
+! int i;
+! for(i=0; i < maxGraphs; i++)
+! newGraphs[i] = graphs[i]; // copy existing graphs if any
+! for(i = maxGraphs; i <= newMax; i++)
+! newGraphs[i] = nil;
+! delete [] graphs;
+! graphs = newGraphs;
+! maxGraphs = newMax;
+! }
+ }
+
+ // remove one graph and its associated scale from frame
+diff -c -r old/edit_menus.C ./edit_menus.C
+*** old/edit_menus.C Sun Mar 24 19:14:18 1996
+--- ./edit_menus.C Sun Jul 14 20:37:12 1996
+***************
+*** 61,68 ****
+ { "Channel Display", "", 0L, false, channelSubmenu },
+ { "display copy buffer", "I", XK_I },
+ { "close current view", "W", XK_W },
+- { "show program version", " ", XK_yen },
+- { "quit program", "Q", XK_Q },
+ { nil }
+ };
+
+--- 61,66 ----
+***************
+*** 86,91 ****
+--- 84,91 ----
+ { "change file comment...", "\"", XK_quotedbl },
+ { "file information...", "?", XK_question },
+ { "data dump of selection...", "}", XK_braceright },
++ { "show program version", " ", XK_yen },
++ { "quit program", "Q", XK_Q },
+ { nil }
+ };
+
+***************
+*** 124,129 ****
+--- 124,137 ----
+ { nil }
+ };
+
++ static MenuInfo analysisMenu[] = {
++ { "locate next zero crossing", "0", XK_0 },
++ { "find slope change", "1", XK_1 },
++ { "show maxamp sample location","2", XK_2 },
++ { "extract amplitude envelope", "3", XK_3 },
++ { nil }
++ };
++
+ static MenuInfo styleSubmenu[] = {
+ { "line", "%", XK_percent },
+ { "bar", "^", XK_asciicircum },
+***************
+*** 241,262 ****
+ // And now the structs containing the various menu templates
+
+ static MenuBarInfo defaultChannelMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Display ", channelDisplayMenu },
+ { nil }
+ };
+
+ static MenuBarInfo soundMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Modify ", soundModifyMenu },
+! { " Sound ", soundSpecialMenu },
+! { " Analysis ", soundAnalysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+--- 249,271 ----
+ // And now the structs containing the various menu templates
+
+ static MenuBarInfo defaultChannelMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Analysis ", analysisMenu },
+! { " Display ", channelDisplayMenu },
+ { nil }
+ };
+
+ static MenuBarInfo soundMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Modify ", soundModifyMenu },
+! { " Sound ", soundSpecialMenu },
+! { " Analysis ", soundAnalysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+***************
+*** 273,285 ****
+ };
+
+ static MenuBarInfo lpcMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+ { " LPC ", lpcSpecialMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+--- 282,295 ----
+ };
+
+ static MenuBarInfo lpcMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+ { " LPC ", lpcSpecialMenu },
+! { " Analysis ", analysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+***************
+*** 293,305 ****
+ };
+
+ static MenuBarInfo envelopeMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+! { " Envelope ", envelopeSpecialMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+--- 303,316 ----
+ };
+
+ static MenuBarInfo envelopeMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+! { " Envelope ", envelopeSpecialMenu },
+! { " Analysis ", analysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+***************
+*** 310,322 ****
+ };
+
+ static MenuBarInfo pitchMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+! { " Pitch ", pitchSpecialMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+--- 321,334 ----
+ };
+
+ static MenuBarInfo pitchMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+! { " Pitch ", pitchSpecialMenu },
+! { " Analysis ", analysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+***************
+*** 339,354 ****
+ };
+
+ static MenuBarInfo defaultFrameMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+! { " Display ", frameDisplayMenu },
+ { nil }
+ };
+
+ static MenuInfo pvocSpecialMenu[] = {
+! { "harmonically shift spectrum", "0", XK_0 },
+! { "stretch/shrink shift spectrum", "1", XK_1 },
+! { "expand/compress spectrum", "2", XK_2, Inactive },
+ { "change file length...", "l", XK_l },
+ { "pvoc options...", " ", XK_degree, Inactive },
+ { nil }
+--- 351,366 ----
+ };
+
+ static MenuBarInfo defaultFrameMenuBar[] = {
+ { " File ", fileMenu },
+! { " View ", viewMenu },
+! { " Display ", frameDisplayMenu },
+ { nil }
+ };
+
+ static MenuInfo pvocSpecialMenu[] = {
+! { "harmonically shift spectrum", "t", XK_t },
+! { "stretch/shrink shift spectrum", "T", XK_T },
+! { "expand/compress spectrum", "X", XK_X, Inactive },
+ { "change file length...", "l", XK_l },
+ { "pvoc options...", " ", XK_degree, Inactive },
+ { nil }
+***************
+*** 355,367 ****
+ };
+
+ static MenuBarInfo pvocMenuBar[] = {
+- { " View ", viewMenu },
+ { " File ", fileMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+ { " PVoc ", pvocSpecialMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+--- 367,380 ----
+ };
+
+ static MenuBarInfo pvocMenuBar[] = {
+ { " File ", fileMenu },
++ { " View ", viewMenu },
+ { " Edit ", editMenu },
+! { " Modify ", modifyMenu },
+ { " PVoc ", pvocSpecialMenu },
+! { " Analysis ", analysisMenu },
+! { " Display ", channelDisplayMenu },
+! { " Options ", optionsMenu },
+ { nil }
+ };
+
+diff -c -r old/editor.C ./editor.C
+*** old/editor.C Sat May 11 21:38:27 1996
+--- ./editor.C Sat Jul 13 15:38:38 1996
+***************
+*** 861,867 ****
+ int peakchan, peakloc;
+ data->maxValue(&peakchan, &peakloc);
+ Range chan(peakchan, peakchan);
+! controller->showInsertPoint(peakloc, chan);
+ return Succeed;
+ }
+
+--- 861,867 ----
+ int peakchan, peakloc;
+ data->maxValue(&peakchan, &peakloc);
+ Range chan(peakchan, peakchan);
+! controller->showInsertPoint(peakloc, chan, true);
+ return Succeed;
+ }
+
+***************
+*** 1001,1007 ****
+ PulseGenerator pgen(pulses, pulseFrameSize/pulsePerFrame);
+ pgen.apply();
+ FormantFilter filter(pulses, pulses, selected, 1.0);
+! filter.apply();
+ Envelope* amplitudes = new Envelope(lpcLen * pulsePerFrame);
+ amplitudes->setFrameRangeLabel("LPC Analysis Frames");
+ amplitudes->setRangeFactor(1.0/pulsePerFrame);
+--- 1001,1008 ----
+ PulseGenerator pgen(pulses, pulseFrameSize/pulsePerFrame);
+ pgen.apply();
+ FormantFilter filter(pulses, pulses, selected, 1.0);
+! if(!filter.apply())
+! return Fail;
+ Envelope* amplitudes = new Envelope(lpcLen * pulsePerFrame);
+ amplitudes->setFrameRangeLabel("LPC Analysis Frames");
+ amplitudes->setRangeFactor(1.0/pulsePerFrame);
+***************
+*** 1026,1032 ****
+ Application::inform("Creating test pattern...");
+ pgen.apply();
+ FormantFilter filter(pulses, pulses, selected, 1.0);
+! filter.apply();
+ Application::inform("Analyzing formants...");
+ // fft size depends on npoles
+ FFT_Function analyzer(
+--- 1027,1034 ----
+ Application::inform("Creating test pattern...");
+ pgen.apply();
+ FormantFilter filter(pulses, pulses, selected, 1.0);
+! if(!filter.apply())
+! return Fail;
+ Application::inform("Analyzing formants...");
+ // fft size depends on npoles
+ FFT_Function analyzer(
+diff -c -r old/filecommand.C ./filecommand.C
+*** old/filecommand.C Sun Mar 10 13:35:00 1996
+--- ./filecommand.C Mon Aug 5 23:45:29 1996
+***************
+*** 132,138 ****
+ request->appendValue("Duration (seconds):", &client->duration,
+ PositiveIntegers);
+ request->appendValue("Sample rate:", &client->sampleRate, PositiveIntegers);
+! request->appendChoice("Channels:", "|1|2|4|", &client->channels, true);
+ FormatRequester::configureRequest(request);
+ }
+
+--- 132,138 ----
+ request->appendValue("Duration (seconds):", &client->duration,
+ PositiveIntegers);
+ request->appendValue("Sample rate:", &client->sampleRate, PositiveIntegers);
+! request->appendValue("Channels:", &client->channels, PositiveIntegers);
+ FormatRequester::configureRequest(request);
+ }
+
+diff -c -r old/header.h ./header.h
+*** old/header.h Tue Mar 5 09:53:28 1996
+--- ./header.h Mon Aug 5 23:43:58 1996
+***************
+*** 110,116 ****
+ int data_offset;
+ int data_size;
+ unsigned short data_type;
+! unsigned short nchans;
+ Comment *comment;
+ private:
+ boolean forceSwapped; // used to override header default during raw read
+--- 110,116 ----
+ int data_offset;
+ int data_size;
+ unsigned short data_type;
+! int nchans;
+ Comment *comment;
+ private:
+ boolean forceSwapped; // used to override header default during raw read
+diff -c -r old/header_config.C ./header_config.C
+*** old/header_config.C Sat Jun 8 14:49:21 1996
+--- ./header_config.C Mon Aug 5 23:42:51 1996
+***************
+*** 94,102 ****
+ void
+ SoundHeader::SoundConfigRequester::configureRequest(Request* request) {
+ SoundHeader* sh = (SoundHeader *) myHeader;
+! request->appendValue("Sample rate:", &sh->samprate,
+! PositiveIntegers);
+! request->appendChoice("Channels:", "|1|2|4|", &sh->nchans, true);
+ FormatRequester::configureRequest(request);
+ ConfigRequester::configureRequest(request);
+ }
+--- 94,101 ----
+ void
+ SoundHeader::SoundConfigRequester::configureRequest(Request* request) {
+ SoundHeader* sh = (SoundHeader *) myHeader;
+! request->appendValue("Sample rate:", &sh->samprate, PositiveIntegers);
+! request->appendValue("Channels:", &sh->nchans, PositiveIntegers);
+ FormatRequester::configureRequest(request);
+ ConfigRequester::configureRequest(request);
+ }
+diff -c -r old/pvoceditor.C ./pvoceditor.C
+*** old/pvoceditor.C Sun Mar 24 19:14:47 1996
+--- ./pvoceditor.C Sat Jul 13 15:00:58 1996
+***************
+*** 40,49 ****
+ PvocEditor::keyCommand(unsigned long sym) {
+ boolean interested = true;
+ switch (sym) {
+! case XK_0:
+ harmonicShift();
+ break;
+! case XK_1:
+ stretchShift();
+ break;
+ default:
+--- 40,49 ----
+ PvocEditor::keyCommand(unsigned long sym) {
+ boolean interested = true;
+ switch (sym) {
+! case XK_t:
+ harmonicShift();
+ break;
+! case XK_T:
+ stretchShift();
+ break;
+ default:
+diff -c -r old/soundheader.C ./soundheader.C
+*** old/soundheader.C Tue Apr 30 20:29:59 1996
+--- ./soundheader.C Mon Aug 5 23:05:47 1996
+***************
+*** 122,129 ****
+ char msg[64];
+ msg[0] = '\0'; // null for later check
+ int retcode = 0;
+! if(nchans != 1 && nchans != 2 && nchans != 4)
+! sprintf(msg, "%d-channel sounds not supported", nchans);
+ else if(samprate < 1000 || samprate > 128000)
+ sprintf(msg, "Invalid sound samp rate (%d)", samprate);
+ else if(data_type == NoData)
+--- 122,130 ----
+ char msg[64];
+ msg[0] = '\0'; // null for later check
+ int retcode = 0;
+! if(!isRaw() && !validChannels(nchans))
+! sprintf(msg, "Illegal channel count for this header type: %d",
+! nchans);
+ else if(samprate < 1000 || samprate > 128000)
+ sprintf(msg, "Invalid sound samp rate (%d)", samprate);
+ else if(data_type == NoData)
+diff -c -r old/soundheader.h ./soundheader.h
+*** old/soundheader.h Tue Apr 30 20:29:11 1996
+--- ./soundheader.h Mon Aug 5 23:02:26 1996
+***************
+*** 71,76 ****
+--- 71,77 ----
+ redefined int secondsToBytes(double);
+ redefined int checkHeader();
+ virtual boolean isValid(DataType)=0;
++ virtual boolean validChannels(int chans) { return chans > 0; }
+ SoundHeader(DataType, int rate, int chans, double peak, int magic);
+ class SoundConfigRequester
+ : public Header::ConfigRequester, public FormatRequester {
+***************
+*** 198,203 ****
+--- 199,207 ----
+ redefined boolean isMagic();
+ redefined boolean isValid(DataType t) {
+ return (t == ShortData || t == FloatData);
++ }
++ redefined boolean validChannels(int chans) {
++ return chans == 1 || chans == 2 || chans == 4;
+ }
+ redefined int writeInfo(DataFile *);
+ };
+diff -c -r old/version.C ./version.C
+*** old/version.C Fri Dec 22 23:22:26 1995
+--- ./version.C Sun Aug 25 10:17:39 1996
+***************
+*** 24,27 ****
+
+ #include "version.h"
+
+! const char MXV_version_string[] = "MiXViews (mxv) version 1.1 pl 00";
+--- 24,27 ----
+
+ #include "version.h"
+
+! const char MXV_version_string[] = "MiXViews (mxv) version 1.1 pl 01";
+diff -c -r old/viewchanger.C ./viewchanger.C
+*** old/viewchanger.C Tue Mar 19 21:26:41 1996
+--- ./viewchanger.C Sat Jul 13 23:23:15 1996
+***************
+*** 41,48 ****
+ class MinMaxRequester : public TitledRequester {
+ public:
+ MinMaxRequester(const char* title,
+! const char* minlabel, T& minval, const Range &,
+! const char* maxlabel, T& maxval, const Range &);
+ protected:
+ redefined void configureRequest(Request *);
+ protected:
+--- 41,48 ----
+ class MinMaxRequester : public TitledRequester {
+ public:
+ MinMaxRequester(const char* title,
+! const char* minlabel, T& minval, const Range,
+! const char* maxlabel, T& maxval, const Range);
+ protected:
+ redefined void configureRequest(Request *);
+ protected:
+***************
+*** 50,63 ****
+ const char* maxLabel;
+ T &minVal;
+ T &maxVal;
+! const Range &minRange;
+! const Range &maxRange;
+ };
+
+ template <class T>
+ MinMaxRequester<T>::MinMaxRequester(const char* title,
+! const char* minlabel, T& minval, const Range& minrange,
+! const char* maxlabel, T& maxval, const Range& maxrange)
+ : TitledRequester(title), minLabel(minlabel), maxLabel(maxlabel),
+ minVal(minval), maxVal(maxval),
+ minRange(minrange), maxRange(maxrange) {}
+--- 50,63 ----
+ const char* maxLabel;
+ T &minVal;
+ T &maxVal;
+! const Range minRange;
+! const Range maxRange;
+ };
+
+ template <class T>
+ MinMaxRequester<T>::MinMaxRequester(const char* title,
+! const char* minlabel, T& minval, const Range minrange,
+! const char* maxlabel, T& maxval, const Range maxrange)
+ : TitledRequester(title), minLabel(minlabel), maxLabel(maxlabel),
+ minVal(minval), maxVal(maxval),
+ minRange(minrange), maxRange(maxrange) {}
+***************
+*** 248,254 ****
+
+ class EditFramesRequester : public MinMaxRequester<int> {
+ public:
+! EditFramesRequester(int&, int&, int&, int&, const Range&);
+ protected:
+ redefined void configureRequest(Request *);
+ private:
+--- 248,254 ----
+
+ class EditFramesRequester : public MinMaxRequester<int> {
+ public:
+! EditFramesRequester(int&, int&, int&, int&, const Range);
+ protected:
+ redefined void configureRequest(Request *);
+ private:
+***************
+*** 258,264 ****
+
+ EditFramesRequester::EditFramesRequester(int& minframe, int& maxframe,
+ int& startchan, int& endchan,
+! const Range& channelRange)
+ : MinMaxRequester<int>(
+ "Set Edit Region:",
+ "Start Channel:", startchan, channelRange,
+--- 258,264 ----
+
+ EditFramesRequester::EditFramesRequester(int& minframe, int& maxframe,
+ int& startchan, int& endchan,
+! const Range channelRange)
+ : MinMaxRequester<int>(
+ "Set Edit Region:",
+ "Start Channel:", startchan, channelRange,
+***************
+*** 274,280 ****
+
+ class EditTimeRequester : public MinMaxRequester<int> {
+ public:
+! EditTimeRequester(double&, double&, int&, int&, const Range &);
+ protected:
+ redefined void configureRequest(Request *);
+ private:
+--- 274,280 ----
+
+ class EditTimeRequester : public MinMaxRequester<int> {
+ public:
+! EditTimeRequester(double&, double&, int&, int&, const Range);
+ protected:
+ redefined void configureRequest(Request *);
+ private:
+***************
+*** 285,291 ****
+ EditTimeRequester::EditTimeRequester(
+ double& mintime, double& maxtime,
+ int& startchan, int& endchan,
+! const Range& channelRange)
+ : MinMaxRequester<int>(
+ "Set Edit Region:",
+ "Start Channel:", startchan, channelRange,
+--- 285,291 ----
+ EditTimeRequester::EditTimeRequester(
+ double& mintime, double& maxtime,
+ int& startchan, int& endchan,
+! const Range channelRange)
+ : MinMaxRequester<int>(
+ "Set Edit Region:",
+ "Start Channel:", startchan, channelRange,
+diff -c -r old/vw_converter.C ./vw_converter.C
+*** old/vw_converter.C Sun Jan 28 20:26:05 1996
+--- ./vw_converter.C Mon Aug 5 22:44:36 1996
+***************
+*** 43,49 ****
+
+ boolean
+ VW_Converter::isPlayableFormat(DataType type) {
+! return (type < FloatData && type != SignedCharData);
+ }
+
+ // what is best format to play (if given choice)
+--- 45,51 ----
+
+ boolean
+ VW_Converter::isPlayableFormat(DataType type) {
+! return (type < IntData && type != SignedCharData);
+ }
+
+ // what is best format to play (if given choice)
+***************
+*** 60,70 ****
+ return false;
+ }
+
+- // add any specific code needed to stop play or record
+-
+ int
+ VW_Converter::stop() {
+! return Super::stop();
+ }
+
+ int
+--- 62,70 ----
+ return false;
+ }
+
+ int
+ VW_Converter::stop() {
+! return ioctl(SNDCTL_DSP_RESET, 0) && Super::stop();
+ }
+
+ int
+***************
+*** 87,92 ****
+--- 87,93 ----
+ int sampleFormat = 0;
+ switch(dataType()) {
+ case UnsignedCharData: sampleFormat = AFMT_U8; break;
++ case SignedCharData: sampleFormat = AFMT_S8; break;
+ // case ALawData: sampleFormat = AFMT_A_LAW; break;
+ case MuLawData: sampleFormat = AFMT_MU_LAW; break;
+ case ShortData: sampleFormat = AFMT_S16_LE; break;
+***************
+*** 93,119 ****
+ default: break;
+ };
+ int confirmedFormat = sampleFormat;
+! if (!ioctl (SNDCTL_DSP_SPEED, (char *) &dsp_speed))
+! error("Unable to set converter sample rate.");
+ else if (!ioctl(SNDCTL_DSP_STEREO, (char *) &dsp_stereo))
+! error("Unable to set converter channel attribute.");
+! else if (!ioctl(SNDCTL_DSP_SETFMT, (char *) &confirmedFormat)
+! || confirmedFormat != sampleFormat)
+! error("Unable to set sample size.");
+ else if(!ioctl(SNDCTL_DSP_GETBLKSIZE, (char *) &audioBufferSize))
+ error("Unable to get audio buffer size.");
+- else if(audioBufferSize < 1024 || audioBufferSize > (2*65536)) {
+- char msg[128];
+- sprintf(msg, "Invalid audio buffer size %d", audioBufferSize);
+- error(msg);
+- }
+ else status = true;
+ }
+ return status;
+ }
+
+ // return size of buffer, in bytes, to be written to the device during play
+- // this can either be computed or just a static value
+
+ int
+ VW_Converter::writeSize() {
+--- 94,141 ----
+ default: break;
+ };
+ int confirmedFormat = sampleFormat;
+!
+! int sizeCode = 0x1;
+! // desired buffer size is 1/10 of a second's worth of sound
+! int bufferSize = type_to_sampsize(dataType()) *
+! round(float(channels()) * sampleRate() / 10.0);
+! #ifdef DEBUG
+! fprintf(stderr, "requesting buffer size %d\n", bufferSize);
+! #endif
+! while(pow(double(2.0), long(sizeCode)) < double(bufferSize))
+! sizeCode <<= 1;
+!
+! sizeCode >>= 1; // back out by one
+! sizeCode |= 2 << 16;
+!
+! // sizeCode = 0x0002XXXX where XXXX is (int) log2(bufsize)
+! // and 0002 is 2 max number of fragments
+!
+! #ifdef DEBUG
+! fprintf(stderr, "setting frag size code to 0x%x\n", sizeCode);
+! #endif
+!
+! if (!ioctl (SNDCTL_DSP_SETFRAGMENT, (char *) &sizeCode))
+! error("Unable to set fragment size.");
+! else if (!ioctl(SNDCTL_DSP_SETFMT, (char *) &confirmedFormat))
+! error("Unable to set sample format.");
+! else if(confirmedFormat != sampleFormat)
+! error("This sample format not supported by hardware.");
+ else if (!ioctl(SNDCTL_DSP_STEREO, (char *) &dsp_stereo))
+! error("Unable to set channel attribute.");
+! else if (!ioctl (SNDCTL_DSP_SPEED, (char *) &dsp_speed))
+! error("Unable to set sample rate.");
+ else if(!ioctl(SNDCTL_DSP_GETBLKSIZE, (char *) &audioBufferSize))
+ error("Unable to get audio buffer size.");
+ else status = true;
++ #ifdef DEBUG
++ fprintf(stderr, "audio buffer size is %d\n", audioBufferSize);
++ #endif
+ }
+ return status;
+ }
+
+ // return size of buffer, in bytes, to be written to the device during play
+
+ int
+ VW_Converter::writeSize() {
+***************
+*** 121,127 ****
+ }
+
+ // return size of buffer, in bytes, to be read from the device during record
+- // this can either be computed or just a static value
+
+ int
+ VW_Converter::readSize() {
+--- 143,148 ----