X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5b781a6729859abc77e6ca5b1f81cbaad974a78f..bf60426831535738b1b784629f08e9dd00bf9ecc:/src/mac/carbon/wave.cpp diff --git a/src/mac/carbon/wave.cpp b/src/mac/carbon/wave.cpp index 5df346f825..499d5ab28b 100644 --- a/src/mac/carbon/wave.cpp +++ b/src/mac/carbon/wave.cpp @@ -15,15 +15,24 @@ #include "wx/object.h" #include "wx/string.h" -#include "wx/mac/wave.h" +#include "wx/wave.h" + +#if wxUSE_WAVE + +#ifdef __WXMAC__ +#include "wx/mac/private.h" +#ifndef __DARWIN__ +#include +#endif +#endif wxWave::wxWave() - : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0) + : m_sndChan(0), m_hSnd(NULL), m_waveLength(0), m_isResource(true) { } wxWave::wxWave(const wxString& sFileName, bool isResource) - : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0) + : m_sndChan(0), m_hSnd(NULL), m_waveLength(0), m_isResource(true) { Create(sFileName, isResource); } @@ -31,9 +40,14 @@ wxWave::wxWave(const wxString& sFileName, bool isResource) wxWave::~wxWave() { - Free(); + FreeData(); } +wxWave::wxWave(int size, const wxByte* data) + : m_sndChan(0), m_hSnd(NULL), m_waveLength(0), m_isResource(false) +{ + //TODO convert data +} bool wxWave::Create(const wxString& fileName, bool isResource) { @@ -45,7 +59,7 @@ bool wxWave::Create(const wxString& fileName, bool isResource) ret = true; else { /* - if (sndChan) + if (sndChan) { // we're playing FSClose(SndRefNum); SndRefNum = 0; @@ -54,7 +68,7 @@ bool wxWave::Create(const wxString& fileName, bool isResource) sndChan = 0; KillTimer(0,timerID); } - + if (!lpSnd) return true; @@ -69,14 +83,14 @@ bool wxWave::Create(const wxString& fileName, bool isResource) sndChan->qLength = 128; - if (noErr != SndNewChannel (&sndChan, sampledSynth, initMono | initNoInterp, 0)) + if (noErr != SndNewChannel (&sndChan, sampledSynth, initMono | initNoInterp, 0)) { free(sndChan); sndChan = 0; return false; } - if (!(SndRefNum = MacOpenSndFile ((char *)lpSnd))) + if (!(SndRefNum = MacOpenSndFile ((char *)lpSnd))) { SndDisposeChannel(sndChan, TRUE); free(sndChan); @@ -90,7 +104,7 @@ bool wxWave::Create(const wxString& fileName, bool isResource) if (fdwSound & SND_ASYNC) async = true; - if (SndStartFilePlay(sndChan, SndRefNum, 0, 81920, 0, 0, 0, async) != noErr) + if (SndStartFilePlay(sndChan, SndRefNum, 0, 81920, 0, 0, 0, async) != noErr) { FSClose (SndRefNum); SndRefNum = 0; @@ -100,11 +114,11 @@ bool wxWave::Create(const wxString& fileName, bool isResource) return false; } - if (async) + if (async) { // haven't finish yet timerID = SetTimer(0, 0, 250, TimerCallBack); - } - else + } + else { FSClose (SndRefNum); SndRefNum = 0; @@ -113,7 +127,7 @@ bool wxWave::Create(const wxString& fileName, bool isResource) sndChan = 0; }*/ } - + return ret; } @@ -123,27 +137,31 @@ bool wxWave::Play(bool async, bool looped) const { char lpSnd[32]; bool ret = false; - - if (m_isResource) + + if (m_isResource) { - strcpy(lpSnd, m_sndname); - c2pstr((char *) lpSnd); - SndListHandle hSnd; - - hSnd = (SndListHandle) GetNamedResource('snd ',(const unsigned char *) lpSnd); - - if ((hSnd != NULL) && (SndPlay(m_sndChan, hSnd, async) == noErr)) - ret = true; - } - +#if TARGET_CARBON + c2pstrcpy((unsigned char *)lpSnd, m_sndname); +#else + strcpy(lpSnd, m_sndname); + c2pstr((char *) lpSnd); +#endif + SndListHandle hSnd; + + hSnd = (SndListHandle) GetNamedResource('snd ',(const unsigned char *) lpSnd); + + if ((hSnd != NULL) && (SndPlay((SndChannelPtr)m_sndChan, (SndListHandle) hSnd, async) == noErr)) + ret = true; + } + return ret; } -bool wxWave::Free() +bool wxWave::FreeData() { bool ret = false; - + if (m_isResource) { m_sndname.Empty(); @@ -151,9 +169,9 @@ bool wxWave::Free() } else { - //TODO, + //TODO, } - + return ret; } @@ -172,7 +190,7 @@ bool wxWave::Free() // first, get the volume reference number for the file. Start by // making a Pstring with just the volume name strcpy ((char *) name, path); - if (c = strchr ((char *) name, ':')) + if (c = strchr ((char *) name, ':')) { c++; *c = '\0'; @@ -204,7 +222,7 @@ bool wxWave::Free() void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { - if(!sndChan) + if(!sndChan) { KillTimer(0,timerID); return; @@ -227,3 +245,4 @@ void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) }*/ +#endif