aboutsummaryrefslogtreecommitdiff
path: root/audio/mxv
diff options
context:
space:
mode:
authorDavid Nugent <davidn@FreeBSD.org>1997-04-17 07:05:40 +0000
committerDavid Nugent <davidn@FreeBSD.org>1997-04-17 07:05:40 +0000
commitb63958f2e9f5d0d696eaef941d1a75beb0c9a6a9 (patch)
tree2a0d6fccc6c33cebc18a68f5dd9a238f44228da7 /audio/mxv
parent476add97263f64cc20813bdc6868eddb8b3d7132 (diff)
downloadports-b63958f2e9f5d0d696eaef941d1a75beb0c9a6a9.tar.gz
ports-b63958f2e9f5d0d696eaef941d1a75beb0c9a6a9.zip
MiXViews audio file editor/player/recorder.
Notes
Notes: svn path=/head/; revision=6225
Diffstat (limited to 'audio/mxv')
-rw-r--r--audio/mxv/Makefile32
-rw-r--r--audio/mxv/distinfo2
-rw-r--r--audio/mxv/files/patch-aa801
-rw-r--r--audio/mxv/files/patch-ab40
-rw-r--r--audio/mxv/files/patch-ac30
-rw-r--r--audio/mxv/files/patch-ad19
-rw-r--r--audio/mxv/files/patch-ae33
-rw-r--r--audio/mxv/files/patch-af40
-rw-r--r--audio/mxv/files/patch-ag16
-rw-r--r--audio/mxv/files/patch-ah16
-rw-r--r--audio/mxv/files/patch-ai37
-rw-r--r--audio/mxv/pkg-comment1
-rw-r--r--audio/mxv/pkg-descr6
-rw-r--r--audio/mxv/pkg-plist2
14 files changed, 1075 insertions, 0 deletions
diff --git a/audio/mxv/Makefile b/audio/mxv/Makefile
new file mode 100644
index 000000000000..b19f36ad64a3
--- /dev/null
+++ b/audio/mxv/Makefile
@@ -0,0 +1,32 @@
+# New ports collection makefile for: mxv
+# Version required: 1.10
+# Date created: 17 March 1997
+# Whom: davidn@blaze.net.au
+#
+# $Id$
+#
+
+DISTNAME= mxv-v1.10-source
+PKGNAME= mxv-1.10
+CATEGORIES= audio
+MASTER_SITES= ftp://ftp.ccmrc.ucsb.edu/pub/MixViews/source/
+
+#PATCH_SITES= ftp://ftp.ccmrc.ucsb.edu/pub/MixViews/source/
+#PATCHFILES= mxv-v1.10-patch01
+#Unfortunately, the above vendor patch does not apply cleanly,
+#and and a hand-edited version is supplied in the patches subdir
+
+MAINTAINER= davidn@blaze.net.au
+#From InterViews 3.1
+BUILD_DEPENDS= ivmkmf
+
+USE_IMAKE= yes
+WRKSRC= $(WRKDIR)
+#ivmkmf -a (with makedepend) not recommended by documentation
+XMKMF= env CPU=FREEBSD ivmkmf;make Makefiles
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/FREEBSD/mxv ${PREFIX}/bin
+ ${INSTALL_DATA} ${WRKSRC}/MiXViews.res ${PREFIX}/lib/X11/app-defaults/MiXViews
+
+.include <bsd.port.mk>
diff --git a/audio/mxv/distinfo b/audio/mxv/distinfo
new file mode 100644
index 000000000000..64e98dccf4ba
--- /dev/null
+++ b/audio/mxv/distinfo
@@ -0,0 +1,2 @@
+MD5 (mxv-v1.10-source.tar.gz) = 77096555999e83008146f0f2e19eec14
+#MD5 (mxv-v1.10-patch01) = 2fee3ffc776103a72817676564880a74
diff --git a/audio/mxv/files/patch-aa b/audio/mxv/files/patch-aa
new file mode 100644
index 000000000000..79eb90aefe94
--- /dev/null
+++ b/audio/mxv/files/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 ----
diff --git a/audio/mxv/files/patch-ab b/audio/mxv/files/patch-ab
new file mode 100644
index 000000000000..ff04b54ed639
--- /dev/null
+++ b/audio/mxv/files/patch-ab
@@ -0,0 +1,40 @@
+*** Imakefile.orig Wed Feb 28 16:16:02 1996
+--- Imakefile Thu Apr 17 15:14:45 1997
+***************
+*** 139,144 ****
+--- 139,159 ----
+ ARCH_OBJS = utils.o
+ #endif
+
++ #if defined(FreeBSDArchitecture)
++ XCOMM Extra defines, include directories, loading flags, and libraries needed
++ XCOMM for the FreeBSD version. The assumption is that you are using Gnu gcc/g++
++
++ ARCH_CCDEFINES = -DVOXWARE_DACS -DXDisplay=_XDisplay
++ ARCH_CCFLAGS =
++ ARCH_CCINCLUDES =
++ ARCH_CCLDFLAGS =
++ ARCH_CCLDLIBS = $(APP_FORTLIBS) -lm
++ DEBUG_CCFLAGS = -Ddebug
++
++ DAC_OBJS = conv_config.o conv_device.o vw_converter.o
++ ARCH_OBJS = utils.o
++ #endif
++
+ #if defined(i386SVR4Architecture)
+ XCOMM This assumes you have the SoundBlaster card on your machine
+ ARCH_CCDEFINES = -DSOUNDBLASTER
+***************
+*** 253,258 ****
+--- 268,278 ----
+ MakeObjectFromSrcFlags(sgi_dac, $(OPTIMIZE_CCFLAGS))
+ #endif
+ #if defined(LinuxArchitecture)
++ MakeObjectFromSrcFlags(utils, $(OPTIMIZE_CCFLAGS))
++ MakeObjectFromSrcFlags(conv_device, $(OPTIMIZE_CCFLAGS))
++ MakeObjectFromSrcFlags(vw_converter, $(OPTIMIZE_CCFLAGS))
++ #endif
++ #if defined(FreeBSDArchitecture)
+ MakeObjectFromSrcFlags(utils, $(OPTIMIZE_CCFLAGS))
+ MakeObjectFromSrcFlags(conv_device, $(OPTIMIZE_CCFLAGS))
+ MakeObjectFromSrcFlags(vw_converter, $(OPTIMIZE_CCFLAGS))
diff --git a/audio/mxv/files/patch-ac b/audio/mxv/files/patch-ac
new file mode 100644
index 000000000000..cb048d9a8028
--- /dev/null
+++ b/audio/mxv/files/patch-ac
@@ -0,0 +1,30 @@
+*** application.C.orig Thu Apr 17 15:23:34 1997
+--- application.C Thu Apr 17 15:26:03 1997
+***************
+*** 41,47 ****
+ #include <iostream.h>
+ #include "localdefs.h"
+
+! #ifndef NeXT
+ #include <errno.h>
+ extern char *sys_errlist[];
+ char *strerror(int errn) {
+--- 41,48 ----
+ #include <iostream.h>
+ #include "localdefs.h"
+
+! #if !defined(__FreeBSD__)
+! #if !defined(NeXT)
+ #include <errno.h>
+ extern char *sys_errlist[];
+ char *strerror(int errn) {
+***************
+*** 53,58 ****
+--- 54,60 ----
+ int sleep(unsigned);
+ }
+ #endif /* NeXT */
++ #endif
+
+ class GlobalResourceList {
+ friend Application;
diff --git a/audio/mxv/files/patch-ad b/audio/mxv/files/patch-ad
new file mode 100644
index 000000000000..8e113a9090d4
--- /dev/null
+++ b/audio/mxv/files/patch-ad
@@ -0,0 +1,19 @@
+*** device.h.orig Thu Apr 17 14:53:39 1997
+--- device.h Thu Apr 17 14:57:57 1997
+***************
+*** 33,39 ****
+ #include "InterViews/resource.h"
+ #include "localdefs.h"
+
+! #ifndef sgi
+ extern "C" int ioctl(int, unsigned long, char*);
+ #endif
+
+--- 33,39 ----
+ #include "InterViews/resource.h"
+ #include "localdefs.h"
+
+! #if !defined( sgi ) && !defined( __FreeBSD__ )
+ extern "C" int ioctl(int, unsigned long, char*);
+ #endif
+
diff --git a/audio/mxv/files/patch-ae b/audio/mxv/files/patch-ae
new file mode 100644
index 000000000000..b2d7aeb502a2
--- /dev/null
+++ b/audio/mxv/files/patch-ae
@@ -0,0 +1,33 @@
+*** diskfile.C.orig Thu Apr 17 14:57:15 1997
+--- diskfile.C Thu Apr 17 15:06:28 1997
+***************
+*** 50,56 ****
+ #if defined(linux)
+ extern "C" void setbuffer(FILE*, char*, int);
+ #else
+! #if !defined( sgi ) && !defined( sun )
+ extern "C" int setbuffer(FILE*, char*, int);
+ #endif
+ #endif
+--- 50,56 ----
+ #if defined(linux)
+ extern "C" void setbuffer(FILE*, char*, int);
+ #else
+! #if !defined( sgi ) && !defined( sun ) && !defined( __FreeBSD__ )
+ extern "C" int setbuffer(FILE*, char*, int);
+ #endif
+ #endif
+***************
+*** 193,198 ****
+--- 193,203 ----
+ rw &= ~01;
+ if (fp->_flags & _IO_NO_WRITES)
+ rw &= ~02;
++ #elif defined(__FreeBSD__)
++ if (fp->_flags & (__SRD|__SRW))
++ rw |= 01;
++ if (fp->_flags & (__SWR|__SRW|__SAPP))
++ rw |= 02;
+ #else
+ if (fp->_flag & (_IOREAD|_IORW))
+ rw |= 01;
diff --git a/audio/mxv/files/patch-af b/audio/mxv/files/patch-af
new file mode 100644
index 000000000000..0edbba9c4815
--- /dev/null
+++ b/audio/mxv/files/patch-af
@@ -0,0 +1,40 @@
+*** settergetter.h.orig Thu Apr 17 15:07:13 1997
+--- settergetter.h Thu Apr 17 15:17:30 1997
+***************
+*** 64,69 ****
+--- 64,70 ----
+ Status (Object::*setfunc)(Type),
+ Type (Object::*getfunc)() const)
+ : obj(objptr), setter(setfunc), getter(getfunc) {}
++ ~MethodSetterGetter() {}
+ redefined boolean set(Type value) {
+ return boolean((obj->*setter)(value));
+ }
+***************
+*** 82,94 ****
+ return new MethodSetterGetter<Object, Status, Type>(objptr, setfunc, getfunc);
+ }
+
+- //********
+-
+ template <class Status, class Type>
+ class FunctionSetterGetter : public SetterGetter<Type> {
+ public:
+ FunctionSetterGetter(Status (*setfunc)(Type), Type (*getfunc)())
+ : setter(setfunc), getter(getfunc) {}
+ redefined boolean set(Type value) { (*setter)(value); return true; }
+ redefined Type get() const { return (*getter)(); }
+ private:
+--- 83,94 ----
+ return new MethodSetterGetter<Object, Status, Type>(objptr, setfunc, getfunc);
+ }
+
+ template <class Status, class Type>
+ class FunctionSetterGetter : public SetterGetter<Type> {
+ public:
+ FunctionSetterGetter(Status (*setfunc)(Type), Type (*getfunc)())
+ : setter(setfunc), getter(getfunc) {}
++ ~FunctionSetterGetter() {}
+ redefined boolean set(Type value) { (*setter)(value); return true; }
+ redefined Type get() const { return (*getter)(); }
+ private:
diff --git a/audio/mxv/files/patch-ag b/audio/mxv/files/patch-ag
new file mode 100644
index 000000000000..4454c809a56d
--- /dev/null
+++ b/audio/mxv/files/patch-ag
@@ -0,0 +1,16 @@
+*** smartmem.C.orig Thu Apr 17 15:32:03 1997
+--- smartmem.C Thu Apr 17 15:33:41 1997
+***************
+*** 64,70 ****
+--- 64,74 ----
+ void
+ SmartMemory::free(void* ptr, unsigned size) {
+ if(ptr) {
++ #ifdef __FreeBSD__
++ ::free(ptr);
++ #else
+ ::cfree(ptr);
++ #endif
+ totalBytes_Allocated -= size;
+ }
+ }
diff --git a/audio/mxv/files/patch-ah b/audio/mxv/files/patch-ah
new file mode 100644
index 000000000000..24754efa97f6
--- /dev/null
+++ b/audio/mxv/files/patch-ah
@@ -0,0 +1,16 @@
+*** vw_converter.C.orig Thu Apr 17 14:49:48 1997
+--- vw_converter.C Thu Apr 17 14:50:17 1997
+***************
+*** 27,33 ****
+--- 27,37 ----
+ #pragma implementation
+ #endif
+
++ #ifdef __FreeBSD__
++ #include <machine/soundcard.h>
++ #else
+ #include <sys/soundcard.h>
++ #endif
+ #include "localdefs.h"
+ #include "application.h"
+ #include "vw_converter.h"
diff --git a/audio/mxv/files/patch-ai b/audio/mxv/files/patch-ai
new file mode 100644
index 000000000000..14e1b53e89b6
--- /dev/null
+++ b/audio/mxv/files/patch-ai
@@ -0,0 +1,37 @@
+*** /dev/null Thu Apr 17 15:41:53 1997
+--- MiXViews.res Thu Apr 17 16:08:47 1997
+***************
+*** 0 ****
+--- 1,32 ----
++ ! This file must be renamed "MiXViews", and installed either in your home
++ ! directory (if you are the only one using mxv) or in the X res dir
++ ! (/usr/lib/X11/app-defaults) or in the InterViews res dir
++ ! (<installed InterViews dir>/lib/app-defaults).
++
++ MiXViews*font: -*-times-medium-r-normal--14-*
++ MiXViews*PulldownCommandMenu*background: light blue
++ MiXViews*Command*background: lightskyblue2
++ MiXViews*PullrightCommandMenu*background: lightskyblue
++ MiXViews*MenuBar*font: -*-helvetica-bold-r-normal--17-*
++ MiXViews*MenuItem*font: -*-helvetica-medium-r-normal--14-*
++ MiXViews*PullrightMenu*font: -*-helvetica-medium-r-normal--14-*
++ MiXViews*DialogBox*Title*font: -*-helvetica-bold-r-normal--14-*
++ MiXViews*DialogBox*Subtitle*font: -*-helvetica-medium-r-normal--12-*
++ MiXViews*Alert*Title*foreground: Red
++ MiXViews*InputDialog*FileSelector*font: -*-times-medium-r-normal--14-*
++ MiXViews*PushButton*font: -*-helvetica-medium-r-normal--14-*
++ MiXViews*HorizontalScale*font: -*-helvetica-medium-r-normal--8-*
++ MiXViews*VerticalScale*font: -*-helvetica-medium-r-normal--8-*
++ MiXViews*StatusBar*font: -*-helvetica-medium-r-normal--12-*
++ MiXViews*FrameGraph*font: -*-helvetica-medium-r-normal--8-*
++ MiXViews*HorizontalScaleLabel*foreground: White
++ MiXViews*HorizontalScaleLabel*background: Black
++ MiXViews*VerticalScaleLabel*foreground: White
++ MiXViews*VerticalScaleLabel*background: Black
++ MiXViews*LPCWindowDisplayChannels: 4
++ MiXViews*FFTWindowDisplayChannels: 4
++ MiXViews*FFTWindow*PlotStyle: Line
++ MiXViews*PvocWindowDisplayChannels: 4
++ MiXViews*PvocWindow*VerticalScaleLabel*font: -*-helvetica-medium-r-normal--10-*
++ MiXViews*malloc_debug: off
++
diff --git a/audio/mxv/pkg-comment b/audio/mxv/pkg-comment
new file mode 100644
index 000000000000..e25cacb75dba
--- /dev/null
+++ b/audio/mxv/pkg-comment
@@ -0,0 +1 @@
+Sound file editor/player/recorder/converter for X Window System.
diff --git a/audio/mxv/pkg-descr b/audio/mxv/pkg-descr
new file mode 100644
index 000000000000..2935d50f6d28
--- /dev/null
+++ b/audio/mxv/pkg-descr
@@ -0,0 +1,6 @@
+This is the MiXViews sound file editor/recorder/player that supports
+FreeBSD's voxware sound drivers written by doug@ccmrc.ucsb.edu.
+It supports the following sound file formats: IRCAM, SND/AU, Hybrid (CMIX),
+AIF-C, WAVE, and raw (headerless)
+
+Version 1.10.
diff --git a/audio/mxv/pkg-plist b/audio/mxv/pkg-plist
new file mode 100644
index 000000000000..efe061fd454f
--- /dev/null
+++ b/audio/mxv/pkg-plist
@@ -0,0 +1,2 @@
+bin/mxv
+lib/X11/app-defaults/MiXViews