Commit 96a5d888 authored by Josh Coalson's avatar Josh Coalson
Browse files

add monkeys audio utils

parent c9f12de8
......@@ -85,6 +85,7 @@
<LI><A HREF="#plugins">plugins</A> - documentation for the various input plugins.</LI>
<LI><A HREF="#libflac">libFLAC API</A> - for developers who want to add FLAC support to their programs.</LI>
<LI><A HREF="#bugs">bugs</A> - known bugs.</LI>
<LI><A HREF="#monkey">How to add FLAC support to the Monkey's Audio GUI</A></LI>
</UL>
</P>
<P>
......@@ -945,6 +946,41 @@
</TABLE>
<TABLE WIDTH="100%" CELLPADDING="5" CELLSPACING="5" BORDER="0">
<TR><TD>
<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"><TR BGCOLOR="#000000"><TD><IMG SRC="images/1x1.gif" WIDTH="1" HEIGHT="1" ALT=""></TD></TR></TABLE>
<TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#D3D4C5">
<TR><TD><FONT FACE="Lucida,Verdana,Helvetica,Arial">
<A NAME="monkey"><B><FONT SIZE="+2">monkey</FONT></B>
</FONT></TD></TR>
</TABLE>
<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"><TR BGCOLOR="#000000"><TD><IMG SRC="images/1x1.gif" WIDTH="1" HEIGHT="1" ALT=""></TD></TR></TABLE>
<TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#EEEED4">
<TR><TD><FONT FACE="Lucida,Verdana,Helvetica,Arial">
<P>
Monkey's Audio comes with a nice GUI that many people are familiar with. It supports some external encoders, but not FLAC. However, the FLAC Windows distribution comes with a utility that allows you to replace one the of the supported lossless external codecs with FLAC. Here's how:
<UL>
<LI>Copy <B><TT>flac.exe</TT></B> and <B><TT>flac_ren.exe</TT></B> to the <B><TT>External/</TT></B> directory of the Monkey's Audio installation.</LI>
<LI>
Choose a supported encoder to replace:
<UL>
<LI>Shorten - copy <B><TT>flac_mac.exe</TT></B> on top of <B><TT>External/shortn32.exe</TT></B></LI>
<LI>WavPack - copy <B><TT>flac_mac.exe</TT></B> on top of both <B><TT>External/wavpack.exe</TT></B> and <B><TT>External/wvunpack.exe</TT></B></LI>
<LI>RKAU - copy <B><TT>flac_mac.exe</TT></B> on top of <B><TT>External/rkau.exe</TT></B></LI>
</UL>
If you choose WavPack you will also be able to use the WavPack Configuration menu to add flac options.
</LI>
<LI>Now you can encode FLAC files as if you were using the replaced encoder. The renamed <B><TT>flac_mac.exe</TT></B> utility will call <B><TT>flac.exe</TT></B> and afterwards, <B><TT>flac_ren.exe</TT></B> will rename the resulting file to have the .flac extension.</LI>
</UL>
</P>
</FONT>
</TD></TR>
</TABLE>
<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"><TR BGCOLOR="#000000"><TD><IMG SRC="images/1x1.gif" WIDTH="1" HEIGHT="1" ALT=""></TD></TR></TABLE>
</TD></TR>
</TABLE>
</CENTER>
<P>&nbsp;Copyright (c) 2000,2001 Josh Coalson</P>
......
# FLAC - Free Lossless Audio Codec
# Copyright (C) 2001 Josh Coalson
#
# This program is part of FLAC; 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
SUBDIRS = flacmac flacren
# flac_mac - wedge utility to add FLAC support to Monkey's Audio
# Copyright (C) 2001 Josh Coalson
#
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
EXTRA_DIST = \
Makefile.vc \
main.c
!include <win32.mak>
.c.obj:
$(cc) $(cdebug) $(cflags) -DSTRICT -YX /O2 -DNODEBUG $<
C_FILES= \
main.c
OBJS= $(C_FILES:.c=.obj)
all: flac_mac.exe
flac_mac.exe: $(OBJS)
link.exe $(OBJS) -out:$*.exe
clean:
-del *.obj *.pch
-del flac_mac.exe
/* flac_mac - wedge utility to add FLAC support to Monkey's Audio
* Copyright (C) 2000,2001 Josh Coalson
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* This program can be used to allow FLAC to masquerade as one of the other
* supported lossless codecs in Monkey's Audio. See the documentation for
* how to do this.
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<wtypes.h>
#include<process.h>
#include<winbase.h>
static int execit(char *prog, char *args);
static int forkit(char *prog, char *args);
int main(int argc, char *argv[])
{
int flac_return_val = 0, opt_arg = 1, from_arg = -1, to_arg = -1, flac_level = 5, i;
char prog[MAX_PATH], cmdline[MAX_PATH*2], from[MAX_PATH], to[MAX_PATH], macdir[MAX_PATH], options[256], *p;
enum { WAVPACK, RKAU, SHORTEN } codec;
/* get the directory where MAC external codecs reside */
if(0 != (p = strrchr(argv[0],'\\'))) {
strcpy(macdir, argv[0]);
*(strrchr(macdir,'\\')+1) = '\0';
}
else {
strcpy(macdir, "");
}
/* determine which codec we were called as and parse the options */
if(p == 0)
p = argv[0];
else
p++;
if(0 == strnicmp(p, "short", 5)) {
codec = SHORTEN;
}
else if(0 == strnicmp(p, "rkau", 4)) {
codec = RKAU;
if(argv[1][0] == '-' && argv[1][1] == 'l') {
opt_arg = 2;
switch(argv[1][2]) {
case '1': flac_level = 1; break;
case '2': flac_level = 5; break;
case '3': flac_level = 8; break;
}
}
}
else if(0 == strnicmp(p, "wavpack", 7)) {
codec = WAVPACK;
if(argv[1][0] == '-') {
opt_arg = 2;
switch(argv[1][1]) {
case 'f': flac_level = 1; break;
case 'h': flac_level = 8; break;
default: opt_arg = 1;
}
}
}
else {
return -5;
}
/* figure out which arguments are the source and destination files */
for(i = 1; i < argc; i++)
if(argv[i][0] != '-') {
from_arg = i++;
break;
}
for( ; i < argc; i++)
if(argv[i][0] != '-') {
to_arg = i++;
break;
}
if(to_arg < 0)
return -4;
/* build the command to call flac with */
sprintf(prog, "%sflac.exe", macdir);
sprintf(options, "-%d", flac_level);
for(i = opt_arg; i < argc; i++)
if(argv[i][0] == '-') {
strcat(options, " ");
strcat(options, argv[i]);
}
sprintf(cmdline, "\"%s\" %s -o \"%s\" \"%s\"", prog, options, argv[to_arg], argv[from_arg]);
flac_return_val = execit(prog, cmdline);
/*
* Now that flac has finished, we need to fork a process that will rename
* the resulting file with the correct extension once MAC has moved it to
* it's final resting place.
*/
if(0 == flac_return_val) {
/* get the destination directory, if any */
if(0 != (p = strchr(argv[to_arg],'\\'))) {
strcpy(from, argv[to_arg]);
*(strrchr(from,'\\')+1) = '\0';
}
else {
strcpy(from, "");
}
/* for the full 'from' and 'to' paths for the renamer process */
p = strrchr(argv[from_arg],'\\');
strcat(from, p? p+1 : argv[from_arg]);
strcpy(to, from);
if(0 == strchr(from,'.'))
return -3;
switch(codec) {
case SHORTEN: strcpy(strrchr(from,'.'), ".shn"); break;
case WAVPACK: strcpy(strrchr(from,'.'), ".wv"); break;
case RKAU: strcpy(strrchr(from,'.'), ".rka"); break;
}
strcpy(strrchr(to,'.'), ".flac");
sprintf(prog, "%sflac_ren.exe", macdir);
sprintf(cmdline, "\"%s\" \"%s\" \"%s\"", prog, from, to);
flac_return_val = forkit(prog, cmdline);
}
return flac_return_val;
}
int execit(char *prog, char *args)
{
BOOL ok;
STARTUPINFO startup_info;
PROCESS_INFORMATION proc_info;
GetStartupInfo(&startup_info);
ok = CreateProcess(
prog,
args,
0, /*process security attributes*/
0, /*thread security attributes*/
FALSE,
0, /*dwCreationFlags*/
0, /*environment*/
0, /*lpCurrentDirectory*/
&startup_info,
&proc_info
);
if(ok) {
DWORD dw;
dw = WaitForSingleObject(proc_info.hProcess, INFINITE);
ok = (dw != 0xFFFFFFFF);
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
}
return ok? 0 : -1;
}
int forkit(char *prog, char *args)
{
BOOL ok;
STARTUPINFO startup_info;
PROCESS_INFORMATION proc_info;
GetStartupInfo(&startup_info);
ok = CreateProcess(
prog,
args,
0, /*process security attributes*/
0, /*thread security attributes*/
FALSE,
DETACHED_PROCESS, /*dwCreationFlags*/
0, /*environment*/
0, /*lpCurrentDirectory*/
&startup_info,
&proc_info
);
if(ok) {
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
}
return ok? 0 : -2;
}
# flac_ren - renamer part of utility to add FLAC support to Monkey's Audio
# Copyright (C) 2001 Josh Coalson
#
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
EXTRA_DIST = \
Makefile.vc \
main.c
!include <win32.mak>
.c.obj:
$(cc) $(cdebug) $(cflags) /I "..\..\include" /I ".\include" -DSTRICT -YX /O2 -DNODEBUG $<
C_FILES= \
main.c
OBJS= $(C_FILES:.c=.obj)
all: flac_ren.exe
flac_ren.exe: $(OBJS)
link.exe $(OBJS) -out:$*.exe
clean:
-del *.obj *.pch
-del flac_ren.exe
/* flac_ren - renamer part of utility to add FLAC support to Monkey's Audio
* Copyright (C) 2000,2001 Josh Coalson
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include<io.h>
#include<sys/stat.h>
#include<wtypes.h>
#include<winbase.h>
int main(int argc, char *argv[])
{
struct stat s;
/* wait till the 'from' file has reached its final destination */
do {
Sleep(2000);
} while(stat(argv[1], &s) < 0);
/* now rename it */
return rename(argv[1], argv[2]);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment