From bf547e41ec3bb76006e3669360571cb9b333cd77 Mon Sep 17 00:00:00 2001 From: Niv Kaminer Date: Thu, 4 Mar 2021 15:24:40 +0200 Subject: [PATCH 1/4] add dependency on sfml-audio --- MandelbrotMusic.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MandelbrotMusic.vcxproj b/MandelbrotMusic.vcxproj index 581158e..4ee7601 100644 --- a/MandelbrotMusic.vcxproj +++ b/MandelbrotMusic.vcxproj @@ -88,7 +88,7 @@ C:\Program Files\SFML\lib;%(AdditionalLibraryDirectories) - sfml-graphics-s-d.lib;sfml-system-s-d.lib;sfml-window-s-d.lib;opengl32.lib;winmm.lib;gdi32.lib;glu32.lib;freetype.lib;%(AdditionalDependencies) + sfml-graphics-s-d.lib;sfml-audio-d.lib;sfml-system-s-d.lib;sfml-window-s-d.lib;opengl32.lib;winmm.lib;gdi32.lib;glu32.lib;freetype.lib;%(AdditionalDependencies) Windows @@ -120,7 +120,7 @@ true true C:\Program Files\SFML\lib;%(AdditionalLibraryDirectories) - sfml-graphics-s.lib;sfml-system-s.lib;sfml-window-s.lib;opengl32.lib;winmm.lib;gdi32.lib;glu32.lib;freetype.lib;%(AdditionalDependencies) + sfml-graphics-s.lib;sfml-audio-d.lib;sfml-system-s.lib;sfml-window-s.lib;opengl32.lib;winmm.lib;gdi32.lib;glu32.lib;freetype.lib;%(AdditionalDependencies) From 2c941e52c11628e702c55ffc78e6fce8f115b177 Mon Sep 17 00:00:00 2001 From: Niv Kaminer Date: Mon, 1 Mar 2021 02:38:34 +0200 Subject: [PATCH 2/4] replace WinAudio with sfml::SoundStream --- Main.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Main.cpp b/Main.cpp index c453cfe..66beae3 100644 --- a/Main.cpp +++ b/Main.cpp @@ -1,12 +1,13 @@ #define _USE_MATH_DEFINES #define _CRT_SECURE_NO_WARNINGS -#include "WinAudio.h" #include #include +#include #include #include #include #include +#include //Constants static const int target_fps = 60; @@ -125,9 +126,10 @@ static const Fractal all_fractals[] = { chirikov, }; -//Synthesizer class to inherit Windows Audio. -class Synth : public WinAudio { +//Synthesizer class to inherit SoundStream. +class Synth : public sf::SoundStream { public: + static const int AUDIO_BUFF_SIZE = 4096; bool audio_reset; bool audio_pause; double volume; @@ -136,7 +138,7 @@ class Synth : public WinAudio { double play_nx, play_ny; double play_px, play_py; - Synth(HWND hwnd) : WinAudio(hwnd, sample_rate) { + Synth(unsigned long int /*unused*/) { audio_reset = true; audio_pause = false; volume = 8000.0; @@ -148,6 +150,9 @@ class Synth : public WinAudio { play_ny = 0.0; play_px = 0.0; play_py = 0.0; + + initialize(2, sample_rate); + setLoop(true); } void SetPoint(double x, double y) { @@ -157,6 +162,8 @@ class Synth : public WinAudio { audio_pause = false; } + virtual void onSeek(sf::Time /*unused*/) override {} + virtual bool onGetData(Chunk& data) override { //Setup the chunk info data.samples = m_samples; From 63fc52bc6129e250bb28c05e846cd2c973770ba8 Mon Sep 17 00:00:00 2001 From: Niv Kaminer Date: Thu, 4 Mar 2021 15:28:44 +0200 Subject: [PATCH 3/4] remove WinAudio from build system --- MandelbrotMusic.vcxproj | 4 ---- MandelbrotMusic.vcxproj.filters | 8 -------- 2 files changed, 12 deletions(-) diff --git a/MandelbrotMusic.vcxproj b/MandelbrotMusic.vcxproj index 4ee7601..6b458b4 100644 --- a/MandelbrotMusic.vcxproj +++ b/MandelbrotMusic.vcxproj @@ -125,15 +125,11 @@ - - - - diff --git a/MandelbrotMusic.vcxproj.filters b/MandelbrotMusic.vcxproj.filters index 193eba9..3f9d3d8 100644 --- a/MandelbrotMusic.vcxproj.filters +++ b/MandelbrotMusic.vcxproj.filters @@ -18,9 +18,6 @@ Source Files - - Source Files - @@ -30,9 +27,4 @@ Header Files - - - Header Files - - \ No newline at end of file From 13c31f814de4fc37f38ee1bbc52cfd9acb630b5d Mon Sep 17 00:00:00 2001 From: Niv Kaminer Date: Thu, 4 Mar 2021 15:29:09 +0200 Subject: [PATCH 4/4] remove WinAudio files --- WinAudio.cpp | 128 --------------------------------------------------- WinAudio.h | 40 ---------------- 2 files changed, 168 deletions(-) delete mode 100644 WinAudio.cpp delete mode 100644 WinAudio.h diff --git a/WinAudio.cpp b/WinAudio.cpp deleted file mode 100644 index 98de17a..0000000 --- a/WinAudio.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include "WinAudio.h" -#include -#include -#include - -WinAudio* WinAudio::WIN_AUDIO = NULL; - -WinAudio::WinAudio(HWND hwnd, int sample_rate) { - //Initialize variables - m_CurWaveOut = 0; - m_SampleRate = sample_rate; - m_IsReleasing = false; - - //Specify output parameters - m_Format.wFormatTag = WAVE_FORMAT_PCM; // simple, uncompressed format - m_Format.nChannels = 2; // 1=mono, 2=stereo - m_Format.nSamplesPerSec = sample_rate; // sample rate - m_Format.nAvgBytesPerSec = sample_rate * 2; // nSamplesPerSec * n.Channels * wBitsPerSample/8 - m_Format.nBlockAlign = 4; // n.Channels * wBitsPerSample/8 - m_Format.wBitsPerSample = 16; // 16 for high quality, 8 for telephone-grade - m_Format.cbSize = 0; // must be set to zero - - //Set handle - assert(WIN_AUDIO == NULL); - WIN_AUDIO = this; -} - -WinAudio::~WinAudio() { - stop(); -} - -bool WinAudio::play() { - MMRESULT result; - CHAR fault[256]; - - //Create a mutex - m_Mutex = CreateMutex(NULL, FALSE, NULL); - if (m_Mutex == NULL) { - std::cout << "Mutex failed."; - return false; - } - - //Open the audio driver - m_IsReleasing = false; - result = waveOutOpen(&m_HWaveOut, WAVE_MAPPER, &m_Format, (DWORD_PTR)Callback, NULL, CALLBACK_FUNCTION); - if (result != MMSYSERR_NOERROR) { - waveInGetErrorText(result, fault, 256); - std::cout << fault << std::endl; - return false; - } - - // Set up and prepare header for output - for (int i = 0; i < NUM_AUDIO_BUFFS; i++) { - memset(m_WaveOut[i], 0, AUDIO_BUFF_SIZE * sizeof(int16_t)); - memset(&m_WaveOutHdr[i], 0, sizeof(WAVEHDR)); - m_WaveOutHdr[i].lpData = (LPSTR)m_WaveOut[i]; - m_WaveOutHdr[i].dwBufferLength = AUDIO_BUFF_SIZE * sizeof(int16_t); - result = waveOutPrepareHeader(m_HWaveOut, &m_WaveOutHdr[i], sizeof(WAVEHDR)); - if (result != MMSYSERR_NOERROR) { - waveInGetErrorText(result, fault, 256); - std::cout << fault << std::endl; - } - } - - SubmitBuffer(); - SubmitBuffer(); - return true; -} - -bool WinAudio::stop() { - MMRESULT result; - CHAR fault[256]; - if (m_IsReleasing) { - return true; - } - WaitForSingleObject(m_Mutex, INFINITE); - m_IsReleasing = true; - for (int i = 0; i < NUM_AUDIO_BUFFS; i++) { - result = waveOutReset(m_HWaveOut); - if (result != MMSYSERR_NOERROR) { - waveInGetErrorText(result, fault, 256); - std::cout << fault << std::endl; - return false; - } - result = waveOutUnprepareHeader(m_HWaveOut, &m_WaveOutHdr[i], sizeof(WAVEHDR)); - if (result != MMSYSERR_NOERROR) { - waveInGetErrorText(result, fault, 256); - std::cout << fault << std::endl; - return false; - } - } - waveOutClose(m_HWaveOut); - ReleaseMutex(m_Mutex); - return true; -} - -void WinAudio::SubmitBuffer() { - MMRESULT result; - CHAR fault[256]; - - //Reject if releasing - if (m_IsReleasing) { return; } - - //Write the audio to the sound card - WaitForSingleObject(m_Mutex, INFINITE); - result = waveOutWrite(m_HWaveOut, &m_WaveOutHdr[m_CurWaveOut], sizeof(WAVEHDR)); - - //Check for errors - if (result != MMSYSERR_NOERROR) { - waveInGetErrorText(result, fault, 256); - std::cout << fault << std::endl; - } - m_CurWaveOut = (m_CurWaveOut + 1) % NUM_AUDIO_BUFFS; - - //Generate next music - Chunk chunk; - onGetData(chunk); - memcpy(m_WaveOut[m_CurWaveOut], chunk.samples, chunk.sampleCount * sizeof(int16_t)); - - //Release the lock - ReleaseMutex(m_Mutex); -} - -void CALLBACK WinAudio::Callback(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) { - // Only listen for end of block messages. - if (uMsg != WOM_DONE) { return; } - WIN_AUDIO->SubmitBuffer(); -} diff --git a/WinAudio.h b/WinAudio.h deleted file mode 100644 index 9b8f981..0000000 --- a/WinAudio.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once -#define WIN32_LEAN_AND_MEAN //Reduce compile time of windows.h -#include -#include -#include -#undef min -#undef max - -class WinAudio { -public: - static const int NUM_AUDIO_BUFFS = 5; - static const int AUDIO_BUFF_SIZE = 4096; - static WinAudio* WIN_AUDIO; - - struct Chunk { - int16_t* samples; - size_t sampleCount; - }; - - WinAudio(HWND handle, int sample_rate); - ~WinAudio(); - - bool play(); - bool stop(); - virtual bool onGetData(Chunk& data)=0; - -protected: - static void CALLBACK Callback(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); - void SubmitBuffer(); - - //Wave properties - HWAVEOUT m_HWaveOut; - HANDLE m_Mutex; - WAVEFORMATEX m_Format; - WAVEHDR m_WaveOutHdr[NUM_AUDIO_BUFFS]; - int16_t m_WaveOut[NUM_AUDIO_BUFFS][AUDIO_BUFF_SIZE]; - int m_CurWaveOut; - int m_SampleRate; - bool m_IsReleasing; -}; \ No newline at end of file