[Amis-vcs] SF.net SVN: amis: [2189] branches/amis3
Brought to you by:
julienq,
marisademeglio
From: <dan...@us...> - 2007-10-13 23:51:06
|
Revision: 2189 http://amis.svn.sourceforge.net/amis/?rev=2189&view=rev Author: daniel_weck Date: 2007-10-13 16:51:05 -0700 (Sat, 13 Oct 2007) Log Message: ----------- - Daniel WECK * Added new AmisAudio module (the solution will be updated in a minute, to include this new project, and exclude the old "Audio" folder) Added Paths: ----------- branches/amis3/AmisAudio/ branches/amis3/AmisAudio/AmisAudio.cpp branches/amis3/AmisAudio/AmisAudio.dsp branches/amis3/AmisAudio/AmisAudio.dsw branches/amis3/AmisAudio/AmisAudio.h branches/amis3/AmisAudio/AmisAudio.sln branches/amis3/AmisAudio/AmisAudio.vcproj branches/amis3/AmisAudio/ReadMe.txt branches/amis3/AmisAudio/StdAfx.cpp branches/amis3/AmisAudio/StdAfx.h branches/amis3/AmisAudio/TPBReader2/ branches/amis3/AmisAudio/TPBReader2/RegOcx.cpp branches/amis3/AmisAudio/TPBReader2/RegOcx.h branches/amis3/AmisAudio/TPBReader2/dmp/ branches/amis3/AmisAudio/TPBReader2/dmp/DmpCtl.cpp branches/amis3/AmisAudio/TPBReader2/dmp/DmpCtl.h branches/amis3/AmisAudio/TPBReader2/dmp/DmpPpg.cpp branches/amis3/AmisAudio/TPBReader2/dmp/DmpPpg.h branches/amis3/AmisAudio/TPBReader2/dmp/Resource.h branches/amis3/AmisAudio/TPBReader2/dmp/StdAfx.cpp branches/amis3/AmisAudio/TPBReader2/dmp/StdAfxFIX.h branches/amis3/AmisAudio/TPBReader2/dmp/TransformSample.h branches/amis3/AmisAudio/TPBReader2/dmp/Vupp1.h branches/amis3/AmisAudio/TPBReader2/dmp/VuppInterface.h branches/amis3/AmisAudio/TPBReader2/dmp/VuppSample.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/ branches/amis3/AmisAudio/TPBReader2/dmp/directx/amextra.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/amfilter.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/cache.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/combase.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/cprop.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/ctlutil.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/ddmm.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/dllsetup.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/dsschedule.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/fourcc.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/measure.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/msgthrd.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/mtype.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/outputq.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/pstream.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/pullpin.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/refclock.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/reftime.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/renbase.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/schedule.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/seekpt.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/source.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/streams.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/strmctl.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/sysclock.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/transfrm.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/transip.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/videoctl.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/vtrans.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/winctrl.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/winutil.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/wxdebug.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/wxlist.h branches/amis3/AmisAudio/TPBReader2/dmp/directx/wxutil.h branches/amis3/AmisAudio/TPBReader2/dmp/dmp.cpp branches/amis3/AmisAudio/TPBReader2/dmp/dmp.h branches/amis3/AmisAudio/TPBReader2/dmp/iTPBTS.h branches/amis3/AmisAudio/TPBReader2/dmp/intvec.h Added: branches/amis3/AmisAudio/AmisAudio.cpp =================================================================== --- branches/amis3/AmisAudio/AmisAudio.cpp (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.cpp 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,630 @@ +/* +AmisAudio + +Copyright (C) 2005 DAISY for All Project + +Licensing note: This file is released as LGPL; however, its module relies upon GPL code in third party libraries. Any reuse of this library in a closed source environment must contact the GPL license holders to negotiate terms for use with an altered license. GPL code referenced from this module includes, but may not be limited to, libfftw, WSOLA code by Matt Flax, and stlib. + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +// AmisAudio.cpp : Defines the entry point for the DLL application. + +//#include "StdAfx.h" +//#include "TPBReader2\dmp\StdAfxFIX.h" + + + +#include <stdlib.h> +#include <iostream> +#include <string> +#include "AmisAudio.h" + +#include <process.h> + +#include "win32Fix.H" + +//#include "../AmisGuiMFC/Brain/Preferences.h" + +/* +BOOL APIENTRY DllMain( HANDLE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} +*/ + + +AmisAudio* AmisAudio::pinstance = 0; + +AmisAudio* AmisAudio::Instance() +{ + if (pinstance == 0) // is it the first call? + { + pinstance = new AmisAudio; // create sole instance + } + return pinstance; // address of sole instance +} + + + +/*AmisAudio::AmisAudio(HWND parentWindow) +{ + mState=NOTACTIVE; + mVolume=100; + mWsolaSource=NULL; + + parentWnd=parentWindow; +}*/ + +AmisAudio::AmisAudio() +{ + //pDmpApp = 0; + pDmpCtrl = 0; + mTau=1.0; + mState=NOTACTIVE; + mVolume=100; + + mbAudioPlaybackEnabled = true; + + pDmpCtrl = new CDmpCtrl(); +} + +/****************************************************************** +AmisAudio destructor Function +******************************************************************/ + + +AmisAudio::~AmisAudio() +{ + if (pDmpCtrl) delete pDmpCtrl; + + /*clean up code goes here*/ +} + +void AmisAudio::DestroyInstance() +{ + if (pinstance) delete pinstance; +} + +void AmisAudio::setStatePause() { + mState = PAUSE; + +} + + +/*-------------------------------------------------------------------------------------------------------------------------- +This function enables Audio plugin, initializes rate to 1.0 and volume to 100 +----------------------------------------------------------------------------------------------------------------------------*/ +void AmisAudio::enable() +{ + if (pDmpCtrl) { + mState=PAUSE; //ACTIVE + mTau=1.0; + mVolume = 100; + return; + } + switch(mState) + { + case NOTACTIVE: + { + + mState=PAUSE; //ACTIVE + // mRate = 1.0; + mTau=1.0; + mVolume = 100; + return; + } + default: + return; + //return"Audio Plugin is already enabled"; + } +} + +/*-------------------------------------------------------------------------------------------------------------------------- +This function disables Audio plugin +----------------------------------------------------------------------------------------------------------------------------*/ +void AmisAudio::disable() +{ + switch(mState) + { + //case ACTIVE: + case PLAYING: + case PAUSE: + //if(mState==PLAYING) + { + stop(); + ShowStatePrompt(); + mState=NOTACTIVE; + ShowStatePrompt(); + mState=NOTACTIVE; + return; + //return"Audio plugin has been disabled!!"; + } + case NOTACTIVE: + return; + //return"Audio plugin is not enabled."; + + } + +} + + +/**************************************************************** +play(char *filename,char* clipBegin,char* clipEnd) function +****************************************************************/ + +void AmisAudio::play(const char *filename,char* clipBegin,char* clipEnd){ + + + if (mbAudioPlaybackEnabled == false) + { + + return; + } + + mFileName.assign(filename); + int channel; + + //Format the beg and end from string to timeCode + SmilTimeCode startStop(clipBegin, clipBegin, clipEnd); + + unsigned long begin,end; + + ShowStatePrompt(); + + + + + switch(mState) + { + + case NOTACTIVE: + { + return; + //return "Audio plugin is not enabled.\n"; + break; + } + //case ACTIVE: + case PAUSE: + case PLAYING: + { + if (pDmpCtrl) { + + if (mbAudioPlaybackEnabled == false) + { + return; + } + //stop(); + if (!pDmpCtrl->fileName(filename)) { + + pDmpCtrl->destroyFilterGraph(); + return; + } + pDmpCtrl->insertVupp(); + + begin=startStop.getStart(); + end=startStop.getEnd(); + if (! (begin == 0 && end == 0)) { + + if (begin >= 0 && begin < pDmpCtrl->getDuration()) { + pDmpCtrl->setPosition(begin); + } + + if (end >= 0 && end > begin && end < pDmpCtrl->getDuration()) { + pDmpCtrl->setStopPosition(end); + } + } + + //long volume = mVolume/10; + //pDmpCtrl->setVolume(volume); + pDmpCtrl->play(); + mState = PLAYING; + return; + } + + //return "now playing\n" ; + } + } + +} // end method + + + +/**************************************************************** +stop() function +****************************************************************/ + +void AmisAudio::stop() +{ + switch(mState) + { + + case NOTACTIVE: + { + return; + //return "Audio plugin is not enabled.\n"; + } + + /*case ACTIVE: + { + return; + //return"No file is playing"; + }*/ + + case PLAYING : + { + mState = PAUSE; //ACTIVE + + + if (pDmpCtrl) { + pDmpCtrl->stop(); + //pDmpCtrl->pause(); + return; + } + + + return; + //return"The playing file has been stopped"; + } + + case PAUSE : + { + mState = PAUSE; //ACTIVE + + + + return; + //return"The playing file has been stopped"; + + } + } +} + + + + +/**************************************************************** +pause() function +****************************************************************/ + +void AmisAudio::pause(){ + + + switch(mState) + { + + case NOTACTIVE: + { + return; + //return "Audio plugin is not enabled.\n"; + + } + + /* case ACTIVE : + { + return; + //return "The plugin is already stopped."; + } */ + case PLAYING : + { + mState=PAUSE; + + if (pDmpCtrl) { + //pDmpCtrl->stop(); + pDmpCtrl->pause(); + return; + } + + return; + //return"The plugin is paused"; + } + + + + case PAUSE : + { + return; + //return "The plugin is already paused."; + } + + } +} + + +/**************************************************************** +resume() function +****************************************************************/ + +int AmisAudio::resume(){ + + + switch(mState) + { + + case NOTACTIVE: + { + return -1; + //return "Audio plugin is not enabled.\n"; + + } + + //case ACTIVE : + case PAUSE : + { + + + if (pDmpCtrl) { + + pDmpCtrl->play(); + mState=PLAYING; + return 0; + } + + //return"The plugin is resumed"; + + } + + case PLAYING : + { + return 0; + //return"The plugin is not in paused state"; + } + + + } + +} + +/**************************************************************** +getVolume() function +****************************************************************/ + +unsigned AmisAudio::getVolume() +{ + + return mVolume; +} + + +/**************************************************************** +setVolume(char * value) function +****************************************************************/ +void AmisAudio::setVolume(unsigned int value) +{ + + + switch(mState) + { + + case NOTACTIVE: + { + return; + //return "Audio plugin is not enabled.\n"; + + } + + //case ACTIVE : + case PAUSE : + case PLAYING : + { + if(value>=0 && value<=100) + { + mVolume=value; + + + if (pDmpCtrl) { + + pDmpCtrl->setVolume((long)((double)value/10.0)); + + return ; + } + + return; + //return returnMessage; + } + else + { + return; + //return"Volume out of range"; + } + } + } +} + +//adjustment is positive or negative (louder or softer) +void AmisAudio::adjustVolume(int adjustment) +{ + int value; + + value = mVolume + adjustment; + + setVolume(value); +} + + +void AmisAudio::adjustRate(double adjustment) +{ + if (pDmpCtrl) { + if (adjustment < 0) {adjustment = 2;} else {adjustment = -2;} + double value = mTau + adjustment; + setRate(value); + return; + } + double value = mTau + adjustment; + + setRate(value); +} + + +/**************************************************************** +getRate() function +****************************************************************/ + +double AmisAudio::getRate() +{ + return mTau; +} + +/**************************************************************** +setRate() function +****************************************************************/ + +void AmisAudio::setRate(double value){ + + + switch(mState) + { + + case NOTACTIVE: + { + return; + //return "Audio plugin is not enabled.\n"; + + } + + //case ACTIVE : + case PAUSE : + case PLAYING : + { + if (pDmpCtrl) { + + mTau=value; + + TRACE(_T("\n####################\n")); + TRACE(_T("\n#################### RATE BEFORE %lf\n", mTau)); + + + if (mTau > 1.0) { + double offset = mTau - 1.0; + /* int n = offset / 0.2; + offset *= 6; + offset = n * 0.5; */ + //mTau = 1 - offset; + } + if (mTau < 1.0) { + double offset = 1.0 - mTau; + /* int n = offset / 0.2; + offset *= 6; + offset = n * 0.5; */ + //mTau = 1 + offset; + } + //if (mTau > 3) mTau = 3; + //if (mTau < 1) mTau = 1; + + //mTau=value; + + TRACE(_T("\n#################### RATE AFTER %lf\n", mTau)); + TRACE(_T("\n####################\n")); + pDmpCtrl->setRate(mTau); + return; + } + + + } + + + + } + + +} // end method + + + + +/**************************************************************** + isPlaying() function +****************************************************************/ + +bool AmisAudio::isPlaying() +{ + + if(mState==PLAYING) + { + return true; + } + else + { + return false; + } + + +} + +bool AmisAudio::isActive() +{ + + return (mState==PAUSE || mState==PLAYING); + +} + /**************************************************************** + ShowStatePropmt() function + ****************************************************************/ + + + void AmisAudio::ShowStatePrompt(){ + + switch(mState){ + + case NOTACTIVE: { + std::cout<<"Not Active"<<endl; + break; + } + + /* case ACTIVE: { + std::cout<<" Active"<<endl; + break; + } */ + + case PAUSE: { + std::cout<<" Pause"<<endl; + break; + } + + case PLAYING: { + std::cout<<" Playing"<<endl; + } + + + } + + } + + + void AmisAudio::enableAudioPlayback() + { + mbAudioPlaybackEnabled = true; + } + + void AmisAudio::disableAudioPlayback() + { + mbAudioPlaybackEnabled = false; + } + + bool AmisAudio::isAudioPlaybackEnabled() + { + return mbAudioPlaybackEnabled; + } + Added: branches/amis3/AmisAudio/AmisAudio.dsp =================================================================== --- branches/amis3/AmisAudio/AmisAudio.dsp (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.dsp 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="AmisAudio" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=AmisAudio - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "AmisAudio.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "AmisAudio.mak" CFG="AmisAudio - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "AmisAudio - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "AmisAudio - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/AmisAudio", QAAAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "AmisAudio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 1 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../bin" +# PROP Intermediate_Dir "tmp" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AMISAUDIO_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "audiere\audiere-1.9.3-win32\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AMISAUDIO_EXPORTS" /D "_WINDLL" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 fftw3.lib audiere.lib user32.lib stlib.lib libmad.lib vorbis_static.lib ogg_static.lib vorbisfile_static.lib vorbisenc_static.lib /nologo /dll /machine:I386 /nodefaultlib:"libcd.lib" /libpath:"audiere\audiere-1.9.3-win32\lib" +# SUBTRACT LINK32 /incremental:yes + +!ELSEIF "$(CFG)" == "AmisAudio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 1 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../bin" +# PROP Intermediate_Dir "tmp" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AMISAUDIO_EXPORTS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\sdk\audio\audiere\audiere-1.9.3-win32\include" /I ".\timeCode.1.4" /I ".\MFFM_FFTW" /I ".\MFFM_FFTW\MFFM_FFTw_Wrapper-v1.4" /I ".\mffm-libsndfilew-1.2" /I ".\libsndfile-1.0.11\Win32" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AMISAUDIO_EXPORTS" /D "_WINDLL" /FR /Yu"stdafx.h" /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 fftw3.lib audiere.lib kernel32.lib gdi32.lib user32.lib stlib.lib libmad.lib vorbis_static.lib ogg_static.lib vorbisfile_static.lib vorbisenc_static.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libcd.lib" /out:"../bin/AmisAudioD.dll" /pdbtype:sept /libpath:"audiere\audiere-1.9.3-win32\lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "AmisAudio - Win32 Release" +# Name "AmisAudio - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\AmisAudio.cpp +# End Source File +# Begin Source File + +SOURCE=..\3rdPartyAudio\complexFFT.cpp +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\AmisAudio.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\ReadMe.txt +# End Source File +# End Target +# End Project Added: branches/amis3/AmisAudio/AmisAudio.dsw =================================================================== --- branches/amis3/AmisAudio/AmisAudio.dsw (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.dsw 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,41 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "AmisAudio"=.\AmisAudio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "AmisAudioTestApp"=.\AmisAudioTest\AmisAudioTestApp\AmisAudioTestApp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + Added: branches/amis3/AmisAudio/AmisAudio.h =================================================================== --- branches/amis3/AmisAudio/AmisAudio.h (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.h 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,142 @@ +/* +AmisAudio + +Copyright (C) 2005 DAISY for All Project + +Licensing note: This file is released as LGPL; however, its module relies upon GPL code in third party libraries. Any reuse of this library in a closed source environment must contact the GPL license holders to negotiate terms for use with an altered license. GPL code referenced from this module includes, but may not be limited to, libfftw, WSOLA code by Matt Flax, and stlib. + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#ifndef AMISAUDIO_H +#define AMISAUDIO_H +/** The following ifdef block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the AMISAUDIO_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// AMISAUDIO_API functions as being imported from a DLL, wheras this DLL sees symbols +// defined with this macro as being exported. +*/ + +#ifdef AMISAUDIO_EXPORTS +#define AMISAUDIO_API __declspec(dllexport) +#else +#define AMISAUDIO_API __declspec(dllimport) +#endif + +///This gets rid of some warnings +#pragma warning(disable : 4786) + + +#include "TPBReader2\dmp\DmpCtl.h" +#include "TPBReader2\dmp\Dmp.h" + + +//#include "StdAfx.h" +#include <windows.h> + +#include "smilTimeCode.H" + +//for message sending ... +typedef void (*sendMessageCallbackFn)(void *); + +//using namespace std; + +enum State{NOTACTIVE,PAUSE,PLAYING}; //ACTIVE + + +#ifdef _MSC_VER +#pragma warning(disable : 4251) +#endif + +/** This class is exported from the AmisAudio.dll*/ + +class AMISAUDIO_API AmisAudio +{ +protected: + ///Constructor which is used to ensure callbacks are executed once a stream is played + //AmisAudio(HWND parentWindow); + ///Constructor which executes no callback once a stream is played + AmisAudio(); + +public: + + //Two instances are used because AMIS should have two audio tracks - the book and the UI + static AmisAudio* Instance(); + + ///Deconstructor + ~AmisAudio (); + + + static void DestroyInstance(); + + + void setStatePause(); + + + //functions related to enabling/disabling audio + //these were added so that screen readers could ask AMIS to be quiet + void enableAudioPlayback(); + void disableAudioPlayback(); + bool isAudioPlaybackEnabled(); + +private: + + //private member functions + //Look in the cpp source for comments on what these functions do. + +public: + void enable(); + void disable(); + void play(const char *filename,char* clipBegin,char* clipEnd); + + + +public: + void stop(); + void pause(); + int resume(); + unsigned int getVolume(); + void setVolume (unsigned int); + double getRate(); + void setRate(double); + bool isPlaying(); + bool isActive(); + + void adjustVolume(int); + void adjustRate(double); + +private: + void ShowStatePrompt(); + + //member variables + std::string mFileName; //The file name being played + unsigned int mVolume; //The volume of the stream + + State mState; //The state of the player + double mTau; //This is the playback speed + + //is the audio playback enabled? + bool mbAudioPlaybackEnabled; + +private: + static AmisAudio* pinstance; + + + CDmpCtrl* pDmpCtrl; + //CDmpApp* pDmpApp; +}; + + +#endif \ No newline at end of file Added: branches/amis3/AmisAudio/AmisAudio.sln =================================================================== --- branches/amis3/AmisAudio/AmisAudio.sln (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.sln 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AmisAudio", "AmisAudio.vcproj", "{FA42A65E-7A79-431A-A474-0A7B367BFDEB}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AmisAudioTestApp", "testAmisAudio\AmisAudioTestApp.vcproj", "{1BF5F8C6-814F-4607-86EC-6CB93D468F62}" + ProjectSection(ProjectDependencies) = postProject + {FA42A65E-7A79-431A-A474-0A7B367BFDEB} = {FA42A65E-7A79-431A-A474-0A7B367BFDEB} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {FA42A65E-7A79-431A-A474-0A7B367BFDEB}.Debug.ActiveCfg = Debug|Win32 + {FA42A65E-7A79-431A-A474-0A7B367BFDEB}.Debug.Build.0 = Debug|Win32 + {FA42A65E-7A79-431A-A474-0A7B367BFDEB}.Release.ActiveCfg = Release|Win32 + {FA42A65E-7A79-431A-A474-0A7B367BFDEB}.Release.Build.0 = Release|Win32 + {1BF5F8C6-814F-4607-86EC-6CB93D468F62}.Debug.ActiveCfg = Debug|Win32 + {1BF5F8C6-814F-4607-86EC-6CB93D468F62}.Debug.Build.0 = Debug|Win32 + {1BF5F8C6-814F-4607-86EC-6CB93D468F62}.Release.ActiveCfg = Release|Win32 + {1BF5F8C6-814F-4607-86EC-6CB93D468F62}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal Added: branches/amis3/AmisAudio/AmisAudio.vcproj =================================================================== --- branches/amis3/AmisAudio/AmisAudio.vcproj (rev 0) +++ branches/amis3/AmisAudio/AmisAudio.vcproj 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,356 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="AmisAudio" + ProjectGUID="{62575239-B3F3-4020-A275-7ADF0EA18799}" + SccProjectName=""$/AmisAudio", QAAAAAAA" + SccLocalPath="." + Keyword="MFCProj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\../bin" + IntermediateDirectory=".\tmp" + ConfigurationType="2" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="1"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""../AmisGuiMFC2/include/";"../AmisCore/include/";"../3rdPartyAudio"; "../mffmTimeCode"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS;_USRDLL;AMISAUDIO_EXPORTS" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + PrecompiledHeaderThrough="StdAfx.h" + PrecompiledHeaderFile=".\tmp/AmisAudio.pch" + AssemblerListingLocation=".\tmp/" + ObjectFile=".\tmp/" + ProgramDataBaseFileName=".\tmp/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="2"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalOptions="/FORCE:MULTIPLE" + AdditionalDependencies="Strmiids.lib TransformSample.lib stlib.lib kernel32.lib gdi32.lib user32.lib ../lib/AmisCoreD.lib" + ShowProgress="2" + OutputFile="../bin/AmisAudioD.dll" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="../lib" + IgnoreDefaultLibraryNames="libc.lib" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="./tmp/AmisAudioD.pdb" + ImportLibrary="../lib/AmisAudioD.lib" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG" + MkTypLibCompatible="TRUE" + SuppressStartupBanner="TRUE" + TargetEnvironment="1" + TypeLibraryName=".\../bin/AmisAudio.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\../bin" + IntermediateDirectory=".\tmp" + ConfigurationType="2" + UseOfMFC="2" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="1"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories=""../3rdPartyAudio"; "../mffmTimeCode"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;AMISAUDIO_EXPORTS" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + UsePrecompiledHeader="0" + PrecompiledHeaderThrough="stdafx.h" + PrecompiledHeaderFile=".\tmp/AmisAudio.pch" + AssemblerListingLocation=".\tmp/" + ObjectFile=".\tmp/" + ProgramDataBaseFileName=".\tmp/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Strmiids.lib stlib.lib kernel32.lib gdi32.lib user32.lib AmisCommon.lib" + OutputFile=".\../bin/AmisAudio.dll" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="../lib" + IgnoreDefaultLibraryNames="libc.lib" + ProgramDatabaseFile="./tmp/AmisAudio.pdb" + ImportLibrary="../lib/AmisAudio.lib" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="NDEBUG" + MkTypLibCompatible="TRUE" + SuppressStartupBanner="TRUE" + TargetEnvironment="1" + TypeLibraryName=".\../bin/AmisAudio.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="AmisAudio.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + UsePrecompiledHeader="0" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath="..\3rdPartyAudio\complexFFT.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath=".\TPBReader2\dmp\dmp.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath=".\TPBReader2\dmp\DmpCtl.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0" + PrecompiledHeaderThrough="StdAfxFIX.h"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath=".\TPBReader2\dmp\DmpPpg.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0" + PrecompiledHeaderThrough="StdAfxFIX.h"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath=".\TPBReader2\RegOcx.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="0"/> + </FileConfiguration> + </File> + <File + RelativePath="StdAfx.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + UsePrecompiledHeader="1" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + UsePrecompiledHeader="1"/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath="AmisAudio.h"> + </File> + <File + RelativePath="..\mffmTimeCode\counter.H"> + </File> + <File + RelativePath=".\TPBReader2\dmp\dmp.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\DmpCtl.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\DmpPpg.h"> + </File> + <File + RelativePath="..\mffmTimeCode\field.H"> + </File> + <File + RelativePath=".\TPBReader2\dmp\iTPBTS.h"> + </File> + <File + RelativePath="..\mffmTimeCode\masterCounter.H"> + </File> + <File + RelativePath="..\mffmTimeCode\masterCounterArray.H"> + </File> + <File + RelativePath=".\TPBReader2\RegOcx.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\Resource.h"> + </File> + <File + RelativePath="..\mffmTimeCode\SmilTimeCode.H"> + </File> + <File + RelativePath="StdAfx.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\StdAfxFIX.h"> + </File> + <File + RelativePath="..\mffmTimeCode\timeCode.H"> + </File> + <File + RelativePath=".\TPBReader2\dmp\TransformSample.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\Vupp1.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\VuppInterface.h"> + </File> + <File + RelativePath=".\TPBReader2\dmp\VuppSample.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + <File + RelativePath="ReadMe.txt"> + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Added: branches/amis3/AmisAudio/ReadMe.txt =================================================================== --- branches/amis3/AmisAudio/ReadMe.txt (rev 0) +++ branches/amis3/AmisAudio/ReadMe.txt 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,74 @@ +Amis Audio is an audio library which can play audio files of various formats. Technicly the formats required are specified in +the following document : +http://www.niso.org/standards/resources/Z39-86-2002.html#Audio +Supported formats are implemented by the Audiere library: +http://audiere.sourceforge.net/features.php + +The time scale modification is implemented in the WSOLA algorithm (Author : Matt Flax <flatmax@>) which is available here : +http://sourceforge.net/projects/mffmtimescale/ + +The interpretation of time code signals is implemented using the MFFM TimeCode library which is available here : +http://mffmtimecode.sourceforge.net/ + +Amis audio combines Audiere, WSOLA and the TimeCode library to implement the standard. + +AmisAudio embodies the following commands : + +1. play + plays a file. +2. pause() + pause playback +2. resume() + resume playback +3. stop() + stop playback +4. setRate + set the speed of play (0.5 = double speed, 1.0 = normal speed and 2.0 = half speed) +5. setVolume + set the volume +8. isPlaying + returns whether the audio is playing or not +9. When the playback of an audio clip is done, a signal is raised by posting a message to the windows message queue. + +Commands sent to the player are of the following form and input as text : + +First the audio engine must be enabled : +audio://enable + +Next you may specify one of many commands ... some examples are : + +To play a file starting at a particular point and ending at a particular point; +audio://play?filename=amis3.mp3&clipBegin=0.0s&clipEnd=0:3.5s + +To change the playback speed : +Audio://setRate?value=2 + +To change the volume (%100 =full ): +Audio://setVolume?value=100 + +To pause the play : +Audio://pause + +To stop the play : +Audio://stop + +To get the speed of play : +Audio://getRate + + +Compilation : + +Various libraries and headers are required to complile AmisAudio. They are implemented in C or C++. +These include : +Audiere ... http://audiere.sourceforge.net +WSOLA ... http://sourceforge.net/projects/mffmtimescale/ +TimeCode ... http://mffmtimecode.sourceforge.net/ +FFTW ... http://www.fftw.org +An FFTW wrapper ... http://mffmfftwrapper.sourceforge.net/ + +An example integration environment is given by Marissa D. in the CVS of the module AmisAudio +http://cvs.sourceforge.net/viewcvs.py/amis +http://cvs.sourceforge.net/viewcvs.py/amis/AmisAudio + +This code has been written initally by someone other then me (flatmax) ... I have plug and played +their original source code ... it need a thourough workove to clean it up a bit.... Added: branches/amis3/AmisAudio/StdAfx.cpp =================================================================== --- branches/amis3/AmisAudio/StdAfx.cpp (rev 0) +++ branches/amis3/AmisAudio/StdAfx.cpp 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// AmisAudio.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file Added: branches/amis3/AmisAudio/StdAfx.h =================================================================== --- branches/amis3/AmisAudio/StdAfx.h (rev 0) +++ branches/amis3/AmisAudio/StdAfx.h 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,113 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#if !defined(AFX_STDAFX_H__AE5780CC_1107_4F64_ADC7_F4BACF658CC2__INCLUDED_) +#define AFX_STDAFX_H__AE5780CC_1107_4F64_ADC7_F4BACF658CC2__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +/* +#ifndef _AFX_NOFORCE_LIBS + +///////////////////////////////////////////////////////////////////////////// +// Win32 libraries + +#ifndef _AFXDLL + #ifndef _UNICODE + #ifdef _DEBUG + #pragma comment(lib, "nafxcwd.lib") + #else + #pragma comment(lib, "nafxcw.lib") + #endif + #else + #ifdef _DEBUG + #pragma comment(lib, "uafxcwd.lib") + #else + #pragma comment(lib, "uafxcw.lib") + #endif + #endif +#else + #ifndef _UNICODE + #ifdef _DEBUG + #pragma comment(lib, "mfc71d.lib") + #pragma comment(lib, "mfcs71d.lib") + #else + #pragma comment(lib, "mfc71.lib") + #pragma comment(lib, "mfcs71.lib") + #endif + #else + #ifdef _DEBUG + #pragma comment(lib, "mfc71ud.lib") + #pragma comment(lib, "mfcs71ud.lib") + #else + #pragma comment(lib, "mfc71u.lib") + #pragma comment(lib, "mfcs71u.lib") + #endif + #endif +#endif + +#ifdef _DLL + #if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG) + #pragma comment(lib, "msvcrtd.lib") + #else + #pragma comment(lib, "msvcrt.lib") + #endif +#else +#ifdef _MT + #if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG) + #pragma comment(lib, "libcmtd.lib") + #else + #pragma comment(lib, "libcmt.lib") + #endif +#else + #if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG) + #pragma comment(lib, "libcd.lib") + #else + #pragma comment(lib, "libc.lib") + #endif +#endif +#endif + +#pragma comment(lib, "kernel32.lib") +#pragma comment(lib, "user32.lib") +#pragma comment(lib, "gdi32.lib") +#pragma comment(lib, "msimg32.lib") +#pragma comment(lib, "comdlg32.lib") +#pragma comment(lib, "winspool.lib") +#pragma comment(lib, "advapi32.lib") +#pragma comment(lib, "shell32.lib") +#pragma comment(lib, "comctl32.lib") +#pragma comment(lib, "shlwapi.lib") + +// force inclusion of NOLIB.OBJ for /disallowlib directives +#pragma comment(linker, "/include:__afxForceEXCLUDE") + +// force inclusion of DLLMODUL.OBJ for _USRDLL +#ifdef _USRDLL +#pragma comment(linker, "/include:__afxForceUSRDLL") +#endif + +// force inclusion of STDAFX.OBJ for precompiled types +#ifdef _AFXDLL +#pragma comment(linker, "/include:__afxForceSTDAFX") +#endif + +#endif //!_AFX_NOFORCE_LIBS + +*/ + +// Insert your headers here +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include <windows.h> + +// TODO: reference additional headers your program requires here + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__AE5780CC_1107_4F64_ADC7_F4BACF658CC2__INCLUDED_) Added: branches/amis3/AmisAudio/TPBReader2/RegOcx.cpp =================================================================== --- branches/amis3/AmisAudio/TPBReader2/RegOcx.cpp (rev 0) +++ branches/amis3/AmisAudio/TPBReader2/RegOcx.cpp 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,152 @@ +// RegOcx.cpp : Defines the entry point for the DLL application. +// +//#include "../../AmisGuiMFC/Brain/AmisBrain.h" + +//#include "StdAfx.h" + +#include "windows.h" +#include "malloc.h" +#include <string> + +using namespace std; + +typedef HRESULT (*DllRegisterServer) (void); +typedef HRESULT (*DllUnregisterServer) (void); +//typedef long (*DllRegisterServer) (void); + +/* +BOOL APIENTRY DllMain( HANDLE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + //LoadLibrary( + return TRUE; +} +*/ + +BOOL RunDllReg(LPTSTR lpFileName) { + LPTSTR lpSysDir = (LPTSTR) malloc(255); + GetSystemDirectory(lpSysDir, 255); + + + + //USES_CONVERSION; + + TCHAR szBuffer[256]; + GetModuleFileName(NULL, szBuffer, 256); + //CString cstr_app_path = szBuffer; + std::wstring strDir(szBuffer); + int pos = strDir.find_last_of('\\'); //ReverseFind + + if (pos >= 0) + { + strDir = strDir.substr(0, pos); //Mid + } + + //strDir = AmisBrain::Instance()->getAppPath(); + + + std::wstring strFullPath = strDir.append(lpFileName); + + /*for (int i=0; i<255; i++) { + if ((char) lpSysDir[i] == 0) { + memcpy((lpSysDir + i), lpFileName, 27); + lpSysDir[i + 27] = 0; + break; + } + }*/ + + bool bResult = false; + HMODULE hModule; + + try { + hModule = LoadLibrary(strFullPath.c_str()); + if (hModule == 0) { + + std::wstring strMessage(L"ActiveX library is missing, DirectX audio will play only at normal speed.\n\n"); + strMessage.append(strFullPath); + + + MessageBox(NULL, strMessage.c_str(), L"ActiveX Library not found", MB_OK); + + throw(1); + } + DllRegisterServer DllReg = (DllRegisterServer) GetProcAddress(hModule, "DllRegisterServer"); + if (DllReg == 0) throw(2); + HRESULT hResult = DllReg(); + if (hResult != S_OK) throw(3); + + bResult = true; + } catch (...) { + } + + FreeLibrary(hModule); + free(lpSysDir); + + return bResult; +} + +BOOL RunDllUnreg(LPTSTR lpFileName) { + LPTSTR lpSysDir = (LPTSTR) malloc(255); + GetSystemDirectory(lpSysDir, 255); + + std::wstring strDir(lpSysDir); + std::wstring strFullPath = strDir.append(lpFileName); + /* + for (int i=0; i<255; i++) { + if ((char) lpSysDir[i] == 0) { + memcpy((lpSysDir + i), lpFileName, 27); + lpSysDir[i + 27] = 0; + break; + } + } + */ + + bool bResult = false; + HMODULE hModule; + + try { + hModule = LoadLibrary(strFullPath.c_str()); + if (hModule == 0) { + + //std::wstring strMessage(L"ActiveX library is missing, DirectX audio will play only at normal speed.\n\n"); + //strMessage.append(strFullPath); + + + //MessageBox(NULL, strMessage.c_str(), L"ActiveX Library not found", MB_OK); + + throw(1); + } + DllRegisterServer DllReg = (DllUnregisterServer) GetProcAddress(hModule, "DllUnregisterServer"); + if (DllReg == 0) throw(2); + HRESULT hResult = DllReg(); + if (hResult != S_OK) throw(3); + + bResult = true; + } catch (...) { + } + + FreeLibrary(hModule); + free(lpSysDir); + + return bResult; +} + +BOOL RegisterOCX() { + //if (!RunDllReg("\\DirectShowAudioHandler.ocx")) return false; + if (!RunDllReg(L"\\TransformSample.ax")) return false; + //if (!RunDllReg("\\IppDecryptor.dll")) return false; + //if (!RunDllReg("\\ComDlg32.ocx")) return false; + + return true; +} + +BOOL UnregisterOCX() { + //if (!RunDllUnreg("\\DirectShowAudioHandler.ocx")) return false; + if (!RunDllUnreg(L"\\TransformSample.ax")) return false; + //if (!RunDllUnreg("\\IppDecryptor.dll")) return false; + //if (!RunDllUnreg("\\ComDlg32.ocx")) return false; + + return true; +} \ No newline at end of file Added: branches/amis3/AmisAudio/TPBReader2/RegOcx.h =================================================================== --- branches/amis3/AmisAudio/TPBReader2/RegOcx.h (rev 0) +++ branches/amis3/AmisAudio/TPBReader2/RegOcx.h 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,18 @@ +// RegOcx.cpp : Defines the entry point for the DLL application. +// + +/* +BOOL APIENTRY DllMain( HANDLE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + //LoadLibrary( + return TRUE; +} +*/ + +BOOL RunDllReg(LPTSTR lpFileName); +BOOL RunDllUnreg(LPTSTR lpFileName); +BOOL RegisterOCX(); +BOOL UnregisterOCX(); \ No newline at end of file Added: branches/amis3/AmisAudio/TPBReader2/dmp/DmpCtl.cpp =================================================================== --- branches/amis3/AmisAudio/TPBReader2/dmp/DmpCtl.cpp (rev 0) +++ branches/amis3/AmisAudio/TPBReader2/dmp/DmpCtl.cpp 2007-10-13 23:51:05 UTC (rev 2189) @@ -0,0 +1,1245 @@ +// DmpCtl.cpp : Implementation of the CDmpCtrl ActiveX Control class. + + +#include "StdAfxFIX.h" + +#include "DmpCtl.h" + +#include "DmpPpg.h" + +#include <string> +using namespace std; + +#include "resource.h" + +#include <assert.h> + +//#include <dshow.h> + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + + +#include "../RegOcx.h" + +/* +const GUID CDECL BASED_CODE _tlid = + { 0xd825129b, 0xb483, 0x46bc, { 0xb9, 0x4f, 0x6, 0xc1, 0xfd, 0x5a, 0xeb, 0xb1 } }; +const WORD _wVerMajor = 1; +const WORD _wVerMinor = 0; +*/ + +//NO_ACTIVEX IMPLEMENT_DYNCREATE(CDmpCtrl, COleControl) + + +///////////////////////////////////////////////////////////////////////////// +// Message map + +//NO_ACTIVEX +/* +zBEGIN_MESSAGE_MAP(CDmpCtrl, COleControl) + //{{zAFX_MSG_MAP(CDmpCtrl) + //}}zAFX_MSG_MAP + zON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties) +zEND_MESSAGE_MAP() +*/ + +///////////////////////////////////////////////////////////////////////////// +// Dispatch map + +//NO_ACTIVEX +/* +zBEGIN_DISPATCH_MAP(CDmpCtrl, COleControl) + //{{zAFX_DISPATCH_MAP(CDmpCtrl) + DISP_PROPERTY_EX(CDmpCtrl, "EndOfStream", GetEndOfStream, SetEndOfStream, VT_BOOL) + DISP_FUNCTION(CDmpCtrl, "fileName", fileName, VT_BOOL, VTS_BSTR) + DISP_FUNCTION(CDmpCtrl, "play", play, VT_BOOL, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "stop", stop, VT_BOOL, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "getPosition", getPosition, VT_I4, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "setPosition", setPosition, VT_BOOL, VTS_I4) + DISP_FUNCTION(CDmpCtrl, "setRate", setRate, VT_BOOL, VTS_R8) + DISP_FUNCTION(CDmpCtrl, "getRate", getRate, VT_R8, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "getDuration", getDuration, VT_I4, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "setStopPosition", setStopPosition, VT_BOOL, VTS_I4) + DISP_FUNCTION(CDmpCtrl, "insertVupp", insertVupp, VT_BOOL, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "getState", getState, VT_I4, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "pause", pause, VT_BOOL, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "setVuppProperties", setVuppProperties, VT_BOOL, VTS_R8 VTS_I2 VTS_I2 VTS_I2 VTS_I2 VTS_I2) + DISP_FUNCTION(CDmpCtrl, "setVolume", setVolume, VT_BOOL, VTS_I4) + DISP_FUNCTION(CDmpCtrl, "getVolume", getVolume, VT_I4, VTS_NONE) + DISP_FUNCTION(CDmpCtrl, "stopDmpThread", stopDmpThread, VT_EMPTY, VTS_NONE) + //}}zAFX_DISPATCH_MAP +zEND_DISPATCH_MAP() +*/ + +///////////////////////////////////////////////////////////////////////////// +// Event map + +//NO_ACTIVEX +/* +zBEGIN_EVENT_MAP(CDmpCtrl, COleControl) + //{{zAFX_EVENT_MAP(CDmpCtrl) + zEVENT_CUSTOM("newTime", FireNewTime, VTS_I4) + zEVENT_CUSTOM("endOfStream", FireEndOfStream, VTS_NONE) + zEVENT_CUSTOM_ID("error", DISPID_ERROREVENT, FireError, VTS_I4) + //}}zAFX_EVENT_MAP +zEND_EVENT_MAP() +*/ + +///////////////////////////////////////////////////////////////////////////// +// Property pages + +// TODO: Add more property pages as needed. Remember to increase the count! +//NO_ACTIVEX +/* +BEGIN_PROPPAGEIDS(CDmpCtrl, 1) + PROPPAGEID(CDmpPropPage::guid) +END_PROPPAGEIDS(CDmpCtrl) +*/ + +///////////////////////////////////////////////////////////////////////////// +// Initialize class factory and guid + +//NO_ACTIVEX +/* +IMPLEMENT_OLECREATE_EX(CDmpCtrl, "DMP.DmpCtrl.1", + 0xef821ae, 0x89ee, 0x41c5, 0x87, 0xd0, 0xff, 0xb, 0x33, 0xba, 0x4b, 0xa6) +*/ + +///////////////////////////////////////////////////////////////////////////// +// Type library ID and version + +//NO_ACTIVEX +/* +IMPLEMENT_OLETYPELIB(CDmpCtrl, _tlid, _wVerMajor, _wVerMinor) +*/ + +///////////////////////////////////////////////////////////////////////////// + +// Interface IDs + +//NO_ACTIVEX +/* +const IID BASED_CODE IID_DDmp = + { 0x12d87155, 0xaf68, 0x4b5d, { 0xac, 0x74, 0x72, 0xa1, 0x69, 0x21, 0xc8, 0xbd } }; + +const IID BASED_CODE IID_DDmpEvents = + { 0x2257ed6e, 0xced8, 0x4f21, { 0x95, 0x1c, 0x76, 0x22, 0xec, 0x21, 0x3, 0x16 } }; +*/ + +///////////////////////////////////////////////////////////////////////////// +// Control type information + +//NO_ACTIVEX +/* +static const DWORD BASED_CODE _dwDmpOleMisc = + OLEMISC_INVISIBLEATRUNTIME | + OLEMISC_SETCLIENTSITEFIRST | + OLEMISC_INSIDEOUT | + OLEMISC_CANTLINKINSIDE | + OLEMISC_RECOMPOSEONRESIZE; + +IMPLEMENT_OLECTLTYPE(CDmpCtrl, IDS_DMP, _dwDmpOleMisc) +*/ + +///////////////////////////////////////////////////////////////////////////// +// CDmpCtrl::CDmpCtrlFactory::UpdateRegistry - +// Adds or removes system registry entries for CDmpCtrl + +//NO_ACTIVEX +/* +BOOL CDmpCtrl::CDmpCtrlFactory::UpdateRegistry(BOOL bRegister) +{ + // TODO: Verify that your control follows apartment-model threading rules. + // Refer to MFC TechNote 64 for more information. + // If your control does not conform to the apartment-model rules, then + // you must modify the code below, changing the 6th parameter from + // afxRegApartmentThreading to 0. + + if (bRegister) {} + return AfxOleRegisterControlClass( + AfxGetInstanceHandle(), + m_clsid, + m_lpszProgID, + IDS_DMP, + IDB_DMP, + afxRegApartmentThreading, + _dwDmpOleMisc, + _tlid, + _wVerMajor, + _wVerMinor); + else + return AfxOleUnregisterClass(m_clsid, m_lpszProgID); +} +*/ + +/* + Code starts here. +*/ + +EXTERN_GUID(WMFORMAT_WaveFormatEx, +0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a); + +// Interface and class id declarations, these are IDs of interfaces and classes +// that we use. + +/* +const IID CLSID_MPEG3Decoder = + { 951988224, 56308, 4560, { 134,14,0,160,36,207,239,109 } }; + +const IID IID_IVuppInterface = + { 0xa33e626e, 0xd6c4, 0x4559, { 0xa1, 0xd6, 0x9f, 0x1d, 0x95, 0xf0, 0xd8, 0xe2 } }; + +const IID CLSID_TPBVupp10 = + { 0x66172967, 0x56c5, 0x4b89,{ 0xaa, 0x92, 0xc9, 0xef, 0xec, 0x56, 0x46, 0x7b } }; + +const IID IID_ITPBTS = { + 0x5dd2d89b, 0x6925, 0x4ceb, 0x9c, 0x20, 0xad, 0x79, 0xf, 0x76, 0xe6, 0x38}; + +const IID CLSID_TPBTSFilter = { + 0xb9b0860, 0xf562, 0x43da, 0x8e, 0xd4, 0xfd, 0x3f, 0xdb, 0xcd, 0x99, 0x6}; +*/ + + +///////////////////////////////////////////////////////////////////////////// +// CDmpCtrl::CDmpCtrl - Constructor + +CDmpCtrl::CDmpCtrl() +{ + // Initialize COM engine for use by this thread + //CoInitialize(NULL); + //CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + CoInitializeEx(NULL, COINIT_MULTITHREADED); + + RegisterOCX(); + + //NO_ACTIVEX InitializeIIDs(&IID_DDmp, &IID_DDmpEvents); + + static int instanceCount = 0; + thisInstanceNumber = instanceCount; + instanceCount++; + + + bInitialized = false; + bFileLoaded = false; + bUseVupp = false; + //bEndOfStream = false; + bCatchEvents = false; + + hEventHandler = NULL; +// pITPBTs = NULL; + pIVuppInterface = NULL; + pIGB = NULL; + + startPosition = 0; + stopPosition = 0; + + bProcessEvents = true; + + hThread = GetCurrentThread(); + + logSession("Construct"); + mRate = 1.0; +} + +///////////////////////////////////////////////////////////////////////////// +// CDmpCtrl::~CDmpCtrl - Destructor + +CDmpCtrl::~CDmpCtrl() +{ + destroyFilterGraph(); + bFileLoaded = false; + bInitialized = false; + + logSession("Destruct"); + + CoUninitialize(); + + UnregisterOCX(); +} + +BOOL CDmpCtrl::createFilterGraph() { + + logSession("Create filtergraph"); + + if (pIGB != NULL) { + destroyFilterGraph(); + } + + bInitialized = FALSE; + bFileLoaded = FALSE; + + // Here we start creating a FilterGraph object and derivate several + // interfaces from the object. + + if (CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, + IID_IGraphBuilder, (void **) &pIGB) != S_OK) { + + //NO_ACTIVEX FireError(lError); + destroyFilterGraph(); + return false; + } + + bCatchEvents = true; + //LPDWORD lpdwThreadID; + unsigned long lpdwThreadID; + bProcessEvents = true; + hEventHandler = CreateThread(NULL, 0, eventHandler, this, 0, &lpdwThreadID); + + + + startPosition = 0; + bInitialized = TRUE; + + return true; +} + +BOOL CDmpCtrl::destroyFilterGraph() { + + logSession("Destroy filtergraph"); + stop(); + + if (hEventHandler) { + + bCatchEvents = true; + bProcessEvents = true; + + IMediaEventSink *pIMES = NULL; + pIGB->QueryInterface(IID_IMediaEventSink, (void**) &pIMES); + pIMES->Notify(EC_USER + 4, 0, 0); + pIMES->Release(); + pIMES = NULL; + + +// bCatchEvents = false; +// threadSuspended = true; + + //SuspendThread(hEventHandler); + if (WaitForSingleObject(hEventHandler, INFINITE) != WAIT_OBJECT_0) { + return false; + } + + } + +/* if (pITPBTs != NULL) { + pITPBTs->StopEventEngine(); + pITPBTs->Release(); + pITPBTs = NULL; + } +*/ + + if (pIGB != NULL) { + //pIGB->Release(); + pIGB = NULL; + } + + if (pIVuppInterface != NULL) { + int f =pIVuppInterface->Release(); + pIVuppInterface = NULL; + } + return true; +} + + +// This function inserts a AsyncReader source filter into the FilterGraph filter +// chain and sets the filename property on the source filter. +BOOL CDmpCtrl::insertSource(WCHAR *wFileName) +{ + IBaseFilter *pAsyncFilter = NULL; + IPin *pPin = NULL; + IEnumPins *pEPins = NULL; + + + // Create a AsyncReader object and derivate the BaseFilter interface + if (CoCreateInstance(CLSID_AsyncReader, NULL, CLSCTX_INPROC_SERVER, + IID_IBaseFilter, (void **) &pAsyncFilter) != S_OK) { + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + return false; + } + + // Add the AsyncReader filter to the filtergraph + if (pIGB->AddSourceFilter(wFileName, wFileName, &pAsyncFilter) != S_OK) { + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + return false; + } + + // Enumerate the pins on the AsyncReader object, find the first pin and let + // the FilterGraph render the whole filter chain from the pin. + if (pAsyncFilter->EnumPins(&pEPins) != S_OK) { + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + + if (pEPins != NULL) pEPins->Release(); + return false; + } + if (pEPins->Next(1, &pPin, NULL) != S_OK) { + + if (pPin != NULL) pPin->Release(); + if (pEPins != NULL) pEPins->Release(); + + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + return false; + } + if (pIGB->Render(pPin) != S_OK) { + + if (pPin != NULL) pPin->Release(); + if (pEPins != NULL) pEPins->Release(); + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + + return false; + } + + if (pPin != NULL) pPin->Release(); + if (pEPins != NULL) pEPins->Release(); + if (pAsyncFilter != NULL) pAsyncFilter->Release(); + return true; +} + +BOOL CD... [truncated message content] |