Skip to content

Commit 4c5851d

Browse files
authored
Merge pull request #209 from OpenShot/juce5
Upgrade to JUCE 5 (thanks @ferdnyc)
2 parents d04a71e + 85a1029 commit 4c5851d

16 files changed

+125
-119
lines changed

.gitlab-ci.yml

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -56,61 +56,61 @@ mac-builder:
5656
tags:
5757
- mac
5858

59-
windows-builder-x86:
59+
windows-builder-x64:
6060
stage: build-libopenshot
6161
artifacts:
6262
expire_in: 6 months
6363
paths:
64-
- build\install-x86\*
64+
- build\install-x64\*
6565
script:
66-
- try { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=windows-builder-x86" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" } catch { $_.Exception.Response.StatusCode.Value__ }
67-
- if (-not (Test-Path "artifacts.zip")) { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/develop/download?job=windows-builder-x86" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" }
66+
- try { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=windows-builder-x64" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" } catch { $_.Exception.Response.StatusCode.Value__ }
67+
- if (-not (Test-Path "artifacts.zip")) { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/develop/download?job=windows-builder-x64" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" }
6868
- Expand-Archive -Path artifacts.zip -DestinationPath .
69-
- $env:LIBOPENSHOT_AUDIO_DIR = "$CI_PROJECT_DIR\build\install-x86"
70-
- $env:UNITTEST_DIR = "C:\msys32\usr"
71-
- $env:RESVGDIR = "C:\msys32\usr\local"
72-
- $env:ZMQDIR = "C:\msys32\usr"
73-
- $env:Path = "C:\msys32\mingw32\bin;C:\msys32\mingw32\lib;C:\msys32\usr\lib\cmake\UnitTest++;C:\msys32\home\jonathan\depot_tools;C:\msys32\usr;C:\msys32\usr\lib;" + $env:Path;
69+
- $env:LIBOPENSHOT_AUDIO_DIR = "$CI_PROJECT_DIR\build\install-x64"
70+
- $env:UNITTEST_DIR = "C:\msys64\usr"
71+
- $env:ZMQDIR = "C:\msys64\usr"
72+
- $env:Path = "C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\usr\lib\cmake\UnitTest++;C:\msys64\home\jonathan\depot_tools;C:\msys64\usr;C:\msys64\usr\lib;" + $env:Path;
7473
- New-Item -ItemType Directory -Force -Path build
75-
- New-Item -ItemType Directory -Force -Path build\install-x86\python
74+
- New-Item -ItemType Directory -Force -Path build\install-x64\python
7675
- cd build
77-
- cmake -D"CMAKE_INSTALL_PREFIX:PATH=$CI_PROJECT_DIR\build\install-x86" -G "MinGW Makefiles" -D"CMAKE_BUILD_TYPE:STRING=Release" -D"CMAKE_CXX_FLAGS=-m32" -D"CMAKE_EXE_LINKER_FLAGS=-Wl,--large-address-aware" -D"CMAKE_C_FLAGS=-m32" ../
76+
- cmake -D"CMAKE_INSTALL_PREFIX:PATH=$CI_PROJECT_DIR\build\install-x64" -G "MinGW Makefiles" -D"CMAKE_BUILD_TYPE:STRING=Release" ../
7877
- mingw32-make install
79-
- Move-Item -Force -path "C:\msys32\mingw32\lib\python3.6\site-packages\*openshot*" -destination "install-x86\python\"
80-
- cp src\libopenshot.dll install-x86\lib
81-
- New-Item -path "install-x86/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force
78+
- Move-Item -Force -path "C:\msys64\mingw64\lib\python3.6\site-packages\*openshot*" -destination "install-x64\python\"
79+
- cp src\libopenshot.dll install-x64\lib
80+
- New-Item -path "install-x64/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force
8281
- $PREV_GIT_LABEL=(git describe --tags --abbrev=0)
83-
- git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x86/share/$CI_PROJECT_NAME.log"
82+
- git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log"
8483
when: always
8584
except:
8685
- tags
8786
tags:
8887
- windows
8988

90-
windows-builder-x64:
89+
windows-builder-x86:
9190
stage: build-libopenshot
9291
artifacts:
9392
expire_in: 6 months
9493
paths:
95-
- build\install-x64\*
94+
- build\install-x86\*
9695
script:
97-
- try { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=windows-builder-x64" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" } catch { $_.Exception.Response.StatusCode.Value__ }
98-
- if (-not (Test-Path "artifacts.zip")) { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/develop/download?job=windows-builder-x64" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" }
96+
- try { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=windows-builder-x86" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" } catch { $_.Exception.Response.StatusCode.Value__ }
97+
- if (-not (Test-Path "artifacts.zip")) { Invoke-WebRequest -Uri "http://gitlab.openshot.org/OpenShot/libopenshot-audio/-/jobs/artifacts/develop/download?job=windows-builder-x86" -Headers @{"PRIVATE-TOKEN"="$ACCESS_TOKEN"} -OutFile "artifacts.zip" }
9998
- Expand-Archive -Path artifacts.zip -DestinationPath .
100-
- $env:LIBOPENSHOT_AUDIO_DIR = "$CI_PROJECT_DIR\build\install-x64"
101-
- $env:UNITTEST_DIR = "C:\msys64\usr"
102-
- $env:ZMQDIR = "C:\msys64\usr"
103-
- $env:Path = "C:\msys64\mingw64\bin;C:\msys64\mingw64\lib;C:\msys64\usr\lib\cmake\UnitTest++;C:\msys64\home\jonathan\depot_tools;C:\msys64\usr;C:\msys64\usr\lib;" + $env:Path;
99+
- $env:LIBOPENSHOT_AUDIO_DIR = "$CI_PROJECT_DIR\build\install-x86"
100+
- $env:UNITTEST_DIR = "C:\msys32\usr"
101+
- $env:RESVGDIR = "C:\msys32\usr\local"
102+
- $env:ZMQDIR = "C:\msys32\usr"
103+
- $env:Path = "C:\msys32\mingw32\bin;C:\msys32\mingw32\lib;C:\msys32\usr\lib\cmake\UnitTest++;C:\msys32\home\jonathan\depot_tools;C:\msys32\usr;C:\msys32\usr\lib;" + $env:Path;
104104
- New-Item -ItemType Directory -Force -Path build
105-
- New-Item -ItemType Directory -Force -Path build\install-x64\python
105+
- New-Item -ItemType Directory -Force -Path build\install-x86\python
106106
- cd build
107-
- cmake -D"CMAKE_INSTALL_PREFIX:PATH=$CI_PROJECT_DIR\build\install-x64" -G "MinGW Makefiles" -D"CMAKE_BUILD_TYPE:STRING=Release" ../
107+
- cmake -D"CMAKE_INSTALL_PREFIX:PATH=$CI_PROJECT_DIR\build\install-x86" -G "MinGW Makefiles" -D"CMAKE_BUILD_TYPE:STRING=Release" -D"CMAKE_CXX_FLAGS=-m32" -D"CMAKE_EXE_LINKER_FLAGS=-Wl,--large-address-aware" -D"CMAKE_C_FLAGS=-m32" ../
108108
- mingw32-make install
109-
- Move-Item -Force -path "C:\msys64\mingw64\lib\python3.6\site-packages\*openshot*" -destination "install-x64\python\"
110-
- cp src\libopenshot.dll install-x64\lib
111-
- New-Item -path "install-x64/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force
109+
- Move-Item -Force -path "C:\msys32\mingw32\lib\python3.6\site-packages\*openshot*" -destination "install-x86\python\"
110+
- cp src\libopenshot.dll install-x86\lib
111+
- New-Item -path "install-x86/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force
112112
- $PREV_GIT_LABEL=(git describe --tags --abbrev=0)
113-
- git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log"
113+
- git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x86/share/$CI_PROJECT_NAME.log"
114114
when: always
115115
except:
116116
- tags

.travis.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
dist: trusty
1+
dist: xenial
2+
sudo: required
23

34
matrix:
45
include:
56
- language: cpp
67
name: "FFmpeg 2"
78
before_script:
89
- sudo add-apt-repository ppa:openshot.developers/libopenshot-daily -y
9-
- sudo add-apt-repository ppa:beineri/opt-qt58-trusty -y
10+
- sudo add-apt-repository ppa:beineri/opt-qt-5.10.0-xenial -y
1011
- sudo apt-get update -qq
1112
- sudo apt-get install gcc-4.8 cmake libavcodec-dev libavformat-dev libswscale-dev libavresample-dev libavutil-dev libopenshot-audio-dev libopenshot-dev libfdk-aac-dev libfdk-aac-dev libjsoncpp-dev libmagick++-dev libopenshot-audio-dev libunittest++-dev libzmq3-dev pkg-config python3-dev qtbase5-dev qtmultimedia5-dev swig -y
1213
- sudo apt autoremove -y
@@ -20,7 +21,7 @@ matrix:
2021
name: "FFmpeg 3"
2122
before_script:
2223
- sudo add-apt-repository ppa:openshot.developers/libopenshot-daily -y
23-
- sudo add-apt-repository ppa:beineri/opt-qt58-trusty -y
24+
- sudo add-apt-repository ppa:beineri/opt-qt-5.10.0-xenial -y
2425
- sudo add-apt-repository ppa:jonathonf/ffmpeg-3 -y
2526
- sudo apt-get update -qq
2627
- sudo apt-get install gcc-4.8 cmake libavcodec-dev libavformat-dev libswscale-dev libavresample-dev libavutil-dev libopenshot-audio-dev libopenshot-dev libfdk-aac-dev libfdk-aac-dev libjsoncpp-dev libmagick++-dev libopenshot-audio-dev libunittest++-dev libzmq3-dev pkg-config python3-dev qtbase5-dev qtmultimedia5-dev swig -y
@@ -35,7 +36,7 @@ matrix:
3536
name: "FFmpeg 4"
3637
before_script:
3738
- sudo add-apt-repository ppa:openshot.developers/libopenshot-daily -y
38-
- sudo add-apt-repository ppa:beineri/opt-qt58-trusty -y
39+
- sudo add-apt-repository ppa:beineri/opt-qt-5.10.0-xenial -y
3940
- sudo add-apt-repository ppa:jonathonf/ffmpeg -y
4041
- sudo add-apt-repository ppa:jonathonf/ffmpeg-4 -y
4142
- sudo add-apt-repository ppa:jonathonf/backports -y

cmake/Modules/FindOpenShotAudio.cmake

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,12 @@
77

88
message("$ENV{LIBOPENSHOT_AUDIO_DIR}")
99

10-
# Find the base directory of juce includes
11-
find_path(LIBOPENSHOT_AUDIO_BASE_DIR JuceHeader.h
10+
# Find the libopenshot-audio header files
11+
find_path(LIBOPENSHOT_AUDIO_INCLUDE_DIR JuceHeader.h
1212
PATHS $ENV{LIBOPENSHOT_AUDIO_DIR}/include/libopenshot-audio/
1313
/usr/include/libopenshot-audio/
1414
/usr/local/include/libopenshot-audio/ )
1515

16-
# Get a list of all header file paths
17-
FILE(GLOB_RECURSE JUCE_HEADER_FILES
18-
${LIBOPENSHOT_AUDIO_BASE_DIR}/*.h
19-
)
20-
21-
# Loop through each header file
22-
FOREACH(HEADER_PATH ${JUCE_HEADER_FILES})
23-
# Get the directory of each header file
24-
get_filename_component(HEADER_DIRECTORY ${HEADER_PATH}
25-
PATH
26-
)
27-
28-
# Append each directory into the HEADER_DIRECTORIES list
29-
LIST(APPEND HEADER_DIRECTORIES ${HEADER_DIRECTORY})
30-
ENDFOREACH(HEADER_PATH)
31-
32-
# Remove duplicates from the header directories list
33-
LIST(REMOVE_DUPLICATES HEADER_DIRECTORIES)
34-
3516
# Find the libopenshot-audio.so (check env var first)
3617
find_library(LIBOPENSHOT_AUDIO_LIBRARY
3718
NAMES libopenshot-audio openshot-audio
@@ -48,9 +29,7 @@ find_library(LIBOPENSHOT_AUDIO_LIBRARY
4829
set(LIBOPENSHOT_AUDIO_LIBRARIES ${LIBOPENSHOT_AUDIO_LIBRARY})
4930
set(LIBOPENSHOT_AUDIO_LIBRARY ${LIBOPENSHOT_AUDIO_LIBRARIES})
5031

51-
# Seems to work fine with just the base dir (rather than all the actual include folders)
52-
set(LIBOPENSHOT_AUDIO_INCLUDE_DIR ${LIBOPENSHOT_AUDIO_BASE_DIR} )
53-
set(LIBOPENSHOT_AUDIO_INCLUDE_DIRS ${LIBOPENSHOT_AUDIO_BASE_DIR} )
32+
set(LIBOPENSHOT_AUDIO_INCLUDE_DIRS ${LIBOPENSHOT_AUDIO_INCLUDE_DIR} )
5433

5534
include(FindPackageHandleStandardArgs)
5635
# handle the QUIETLY and REQUIRED arguments and set LIBOPENSHOT_AUDIO_FOUND to TRUE

include/AudioBufferSource.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
#endif
3838

3939
#include <iomanip>
40-
#include "JuceLibraryCode/JuceHeader.h"
40+
#include "JuceHeader.h"
4141

4242
using namespace std;
4343

include/AudioReaderSource.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
#endif
3838

3939
#include <iomanip>
40-
#include "JuceLibraryCode/JuceHeader.h"
4140
#include "ReaderBase.h"
41+
#include "JuceHeader.h"
4242

4343
using namespace std;
4444

include/AudioResampler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
#define _NDEBUG
3939
#endif
4040

41-
#include "JuceLibraryCode/JuceHeader.h"
4241
#include "AudioBufferSource.h"
4342
#include "Exceptions.h"
43+
#include "JuceHeader.h"
4444

4545
namespace openshot {
4646

include/Clip.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#include <memory>
3737
#include <string>
3838
#include <QtGui/QImage>
39-
#include "JuceLibraryCode/JuceHeader.h"
4039
#include "AudioResampler.h"
4140
#include "ClipBase.h"
4241
#include "Color.h"
@@ -47,6 +46,7 @@
4746
#include "Fraction.h"
4847
#include "KeyFrame.h"
4948
#include "ReaderBase.h"
49+
#include "JuceHeader.h"
5050

5151
using namespace std;
5252
using namespace openshot;

include/EffectBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
#include <iomanip>
3333
#include <memory>
3434
#include "ClipBase.h"
35-
#include "Frame.h"
3635
#include "Json.h"
36+
#include "Frame.h"
3737

3838
using namespace std;
3939

include/Frame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@
5656
#ifdef USE_IMAGEMAGICK
5757
#include "Magick++.h"
5858
#endif
59-
#include "JuceLibraryCode/JuceHeader.h"
6059
#include "ChannelLayouts.h"
6160
#include "AudioBufferSource.h"
6261
#include "AudioResampler.h"
6362
#include "Fraction.h"
63+
#include "JuceHeader.h"
6464

6565
#pragma SWIG nowarn=362
6666
using namespace std;

include/Qt/AudioPlaybackThread.h

Lines changed: 53 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,15 @@ namespace openshot
5757
class AudioDeviceManagerSingleton {
5858
private:
5959
/// Default constructor (Don't allow user to create an instance of this singleton)
60-
AudioDeviceManagerSingleton(){};
60+
AudioDeviceManagerSingleton(){ initialise_error=""; };
6161

6262
/// Private variable to keep track of singleton instance
6363
static AudioDeviceManagerSingleton * m_pInstance;
6464

6565
public:
66+
/// Error found during JUCE initialise method
67+
string initialise_error;
68+
6669
/// Create or get an instance of this singleton (invoke the class with this method)
6770
static AudioDeviceManagerSingleton * Instance(int numChannels);
6871

@@ -78,52 +81,55 @@ namespace openshot
7881
*/
7982
class AudioPlaybackThread : Thread
8083
{
81-
AudioSourcePlayer player;
82-
AudioTransportSource transport;
83-
MixerAudioSource mixer;
84-
AudioReaderSource *source;
85-
double sampleRate;
86-
int numChannels;
87-
WaitableEvent play;
88-
WaitableEvent played;
89-
int buffer_size;
90-
bool is_playing;
91-
SafeTimeSliceThread time_thread;
92-
93-
/// Constructor
94-
AudioPlaybackThread();
95-
/// Destructor
96-
~AudioPlaybackThread();
97-
98-
/// Set the current thread's reader
99-
void Reader(ReaderBase *reader);
100-
101-
/// Get the current frame object (which is filling the buffer)
102-
std::shared_ptr<Frame> getFrame();
103-
104-
/// Get the current frame number being played
105-
int64_t getCurrentFramePosition();
106-
107-
/// Play the audio
108-
void Play();
109-
110-
/// Seek the audio thread
111-
void Seek(int64_t new_position);
112-
113-
/// Stop the audio playback
114-
void Stop();
115-
116-
/// Start thread
117-
void run();
118-
119-
/// Set Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster, -1=rewind, etc...)
120-
void setSpeed(int new_speed) { if (source) source->setSpeed(new_speed); }
121-
122-
/// Get Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster, -1=rewind, etc...)
123-
int getSpeed() const { if (source) return source->getSpeed(); else return 1; }
124-
125-
friend class PlayerPrivate;
126-
friend class QtPlayer;
84+
AudioSourcePlayer player;
85+
AudioTransportSource transport;
86+
MixerAudioSource mixer;
87+
AudioReaderSource *source;
88+
double sampleRate;
89+
int numChannels;
90+
WaitableEvent play;
91+
WaitableEvent played;
92+
int buffer_size;
93+
bool is_playing;
94+
SafeTimeSliceThread time_thread;
95+
96+
/// Constructor
97+
AudioPlaybackThread();
98+
/// Destructor
99+
~AudioPlaybackThread();
100+
101+
/// Set the current thread's reader
102+
void Reader(ReaderBase *reader);
103+
104+
/// Get the current frame object (which is filling the buffer)
105+
std::shared_ptr<Frame> getFrame();
106+
107+
/// Get the current frame number being played
108+
int64_t getCurrentFramePosition();
109+
110+
/// Play the audio
111+
void Play();
112+
113+
/// Seek the audio thread
114+
void Seek(int64_t new_position);
115+
116+
/// Stop the audio playback
117+
void Stop();
118+
119+
/// Start thread
120+
void run();
121+
122+
/// Set Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster, -1=rewind, etc...)
123+
void setSpeed(int new_speed) { if (source) source->setSpeed(new_speed); }
124+
125+
/// Get Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster, -1=rewind, etc...)
126+
int getSpeed() const { if (source) return source->getSpeed(); else return 1; }
127+
128+
/// Get Audio Error (if any)
129+
string getError() { return AudioDeviceManagerSingleton::Instance(numChannels)->initialise_error; }
130+
131+
friend class PlayerPrivate;
132+
friend class QtPlayer;
127133
};
128134

129135
}

0 commit comments

Comments
 (0)