X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5fde6fcc9b551340a194ae4c726db5ab64b5c594..bf60426831535738b1b784629f08e9dd00bf9ecc:/src/mac/carbon/wave.cpp diff --git a/src/mac/carbon/wave.cpp b/src/mac/carbon/wave.cpp index f0891a6546..499d5ab28b 100644 --- a/src/mac/carbon/wave.cpp +++ b/src/mac/carbon/wave.cpp @@ -17,6 +17,15 @@ #include "wx/string.h" #include "wx/wave.h" +#if wxUSE_WAVE + +#ifdef __WXMAC__ +#include "wx/mac/private.h" +#ifndef __DARWIN__ +#include +#endif +#endif + wxWave::wxWave() : m_sndChan(0), m_hSnd(NULL), m_waveLength(0), m_isResource(true) { @@ -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,8 +137,8 @@ bool wxWave::Play(bool async, bool looped) const { char lpSnd[32]; bool ret = false; - - if (m_isResource) + + if (m_isResource) { #if TARGET_CARBON c2pstrcpy((unsigned char *)lpSnd, m_sndname); @@ -133,21 +147,21 @@ bool wxWave::Play(bool async, bool looped) const c2pstr((char *) lpSnd); #endif SndListHandle hSnd; - + hSnd = (SndListHandle) GetNamedResource('snd ',(const unsigned char *) lpSnd); - if ((hSnd != NULL) && (SndPlay(m_sndChan, hSnd, async) == noErr)) + 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(); @@ -155,9 +169,9 @@ bool wxWave::Free() } else { - //TODO, + //TODO, } - + return ret; } @@ -176,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'; @@ -208,7 +222,7 @@ bool wxWave::Free() void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { - if(!sndChan) + if(!sndChan) { KillTimer(0,timerID); return; @@ -231,3 +245,4 @@ void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) }*/ +#endif