Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
frmContactEditor: Audio device closes on window close
authorSteve Brokenshire <sbrokenshire@xestia.co.uk>
Sun, 12 Feb 2017 23:19:57 +0000 (23:19 +0000)
committerSteve Brokenshire <sbrokenshire@xestia.co.uk>
Sun, 12 Feb 2017 23:19:57 +0000 (23:19 +0000)
Audio device is closed when frmContactEditor is closed.

source/contacteditor/frmContactEditor-Sound.cpp
source/contacteditor/frmContactEditor.cpp
source/contacteditor/frmContactEditor.h

index ba1a0c9..7d9fcde 100644 (file)
 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
 
 #include "frmContactEditor.h"
-#include "frmContactEditorSound.h"
-#include "../common/base64.h"
-#include <SFML/Audio.hpp>
-#include <thread>
 
 void frmContactEditor::AddSound( wxCommandEvent& event )
 {
@@ -107,7 +103,7 @@ void frmContactEditor::PlaySoundDetach()
     
        // Play the sound and detach.
        
-       if (!AudioStreamPlayback.openFromMemory(base64dec.c_str(), base64declen)){
+       if (!AudioStreamPlaybackPointer->openFromMemory(base64dec.c_str(), base64declen)){
         
                // Can't load file. We must flee...
                // Also show an error message too.
@@ -120,17 +116,18 @@ void frmContactEditor::PlaySoundDetach()
     
        btnStop->Enable();
 
-       AudioStreamPlayback.play();
+       AudioStreamPlaybackPointer->play();
     
-       while (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
+       while (AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){
         
                // We poll this every 100ms in order to conserve CPU usage.
         
-               SleepFor(100000000);
+               SleepFor(10000000);
         
        }
-    
+       
        btnStop->Disable();
+       btnPlay->Enable();
     
 }
 
@@ -142,11 +139,17 @@ void frmContactEditor::PlaySound( wxCommandEvent& event )
        long longSelected = -1;
        int intSelectedData = 0;
     
+       if (AudioStreamPlaybackPointer == nullptr){
+               
+               AudioStreamPlaybackPointer = new AudioStream;
+               
+       }
+       
        // Check if sound is still being played and if it is, stop it.
     
-       if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
+       if (AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){
         
-               AudioStreamPlayback.stop();
+               AudioStreamPlaybackPointer->stop();
         
        }
     
@@ -155,7 +158,9 @@ void frmContactEditor::PlaySound( wxCommandEvent& event )
                &intSelectedData)){
                return;
        }
-    
+
+       btnPlay->Disable();
+       
        std::map<int, std::string>::iterator initier;
     
        initier = ContactEditorData.SoundsList.find(intSelectedData);
@@ -174,14 +179,15 @@ void frmContactEditor::StopSound( wxCommandEvent& event )
 {
        
        // Stop the sound.
-    
-       if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
-        
-               AudioStreamPlayback.stop();
+       
+       if (AudioStreamPlaybackPointer != nullptr && AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){
         
+               AudioStreamPlaybackPointer->stop();
+               
        }
     
        btnStop->Disable();
+       btnPlay->Enable();
 
        return;
     
index b5ef96e..444b748 100644 (file)
@@ -105,6 +105,19 @@ frmContactEditorADT( parent )
     
 }
 
+frmContactEditor::~frmContactEditor()
+{
+       
+       if (AudioStreamPlaybackPointer != nullptr)
+       {
+               
+               delete AudioStreamPlaybackPointer;
+               AudioStreamPlaybackPointer = nullptr;
+               
+       }
+       
+}
+
 void frmContactEditor::CloseContact( wxCommandEvent& event )
 {
     
index fabe5cb..49dd826 100644 (file)
@@ -39,6 +39,7 @@ Subclass of frmContactEditorADT, which is generated by wxFormBuilder.
 
 #include "../actmgr/frmActivityMgr.h"
 #include "../frmMain.h"
+#include "frmContactEditorSound.h"
 
 #include "cdo/ContactDataObject.h"
 
@@ -311,6 +312,7 @@ class frmContactEditor : public frmContactEditorADT
        public:
                /** Constructor */
                frmContactEditor( wxWindow* parent );
+               ~frmContactEditor();
                void SetupHeaders();
                void SetupContact(wxString AccountName);
                void SetupAccountData(bool UnsupportedAccount);
@@ -751,9 +753,7 @@ class frmContactEditor : public frmContactEditorADT
                
                size_t base64declen;
                std::string base64dec;
-               sf::Music AudioPlayback;
-               AudioStream AudioStreamPlayback;
-               sf::SoundBuffer AudioBuffer;
+               AudioStream *AudioStreamPlaybackPointer = nullptr;
                
                wxBitmap PictureImage;
                wxBitmap LogoImage;
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy