aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Attorney_Online.pro2
-rw-r--r--include/aoblipplayer.h1
-rw-r--r--include/aomusicplayer.h1
-rw-r--r--include/aosfxplayer.h1
-rw-r--r--include/bassopus.h52
-rw-r--r--src/aoblipplayer.cpp7
-rw-r--r--src/aomusicplayer.cpp6
-rw-r--r--src/aosfxplayer.cpp5
8 files changed, 70 insertions, 5 deletions
diff --git a/Attorney_Online.pro b/Attorney_Online.pro
index 6061cd95..ab61a55b 100644
--- a/Attorney_Online.pro
+++ b/Attorney_Online.pro
@@ -13,7 +13,6 @@ MOC_DIR = $$PWD/build
SOURCES += $$files($$PWD/src/*.cpp)
HEADERS += $$files($$PWD/include/*.h)
-
LIBS += -L$$PWD/lib
DEFINES += DISCORD
@@ -26,6 +25,7 @@ DEFINES += BASSAUDIO
contains(DEFINES, BASSAUDIO) {
LIBS += -lbass
+LIBS += -lbassopus
}
#DEFINES += QTAUDIO
diff --git a/include/aoblipplayer.h b/include/aoblipplayer.h
index 9a428371..a848e806 100644
--- a/include/aoblipplayer.h
+++ b/include/aoblipplayer.h
@@ -3,6 +3,7 @@
#if defined(BASSAUDIO)
#include "bass.h"
+#include "bassopus.h"
#elif defined(QTAUDIO)
#include <QSoundEffect>
#endif
diff --git a/include/aomusicplayer.h b/include/aomusicplayer.h
index 52c97c3e..1a535828 100644
--- a/include/aomusicplayer.h
+++ b/include/aomusicplayer.h
@@ -4,6 +4,7 @@
#if defined(BASSAUDIO)
#include "bass.h"
+#include "bassopus.h"
#elif defined(QTAUDIO)
#include <QMediaPlayer>
#endif
diff --git a/include/aosfxplayer.h b/include/aosfxplayer.h
index 112e3ec6..3ae8bdf1 100644
--- a/include/aosfxplayer.h
+++ b/include/aosfxplayer.h
@@ -3,6 +3,7 @@
#if defined(BASSAUDIO)
#include "bass.h"
+#include "bassopus.h"
#elif defined(QTAUDIO)
#include <QSoundEffect>
#endif
diff --git a/include/bassopus.h b/include/bassopus.h
new file mode 100644
index 00000000..4e48124f
--- /dev/null
+++ b/include/bassopus.h
@@ -0,0 +1,52 @@
+/*
+ BASSOPUS 2.4 C/C++ header file
+ Copyright (c) 2012-2015 Un4seen Developments Ltd.
+
+ See the BASSOPUS.CHM file for more detailed documentation
+*/
+
+#ifndef BASSOPUS_H
+#define BASSOPUS_H
+
+#include "bass.h"
+
+#if BASSVERSION!=0x204
+#error conflicting BASS and BASSOPUS versions
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef BASSOPUSDEF
+#define BASSOPUSDEF(f) WINAPI f
+#endif
+
+// BASS_CHANNELINFO type
+#define BASS_CTYPE_STREAM_OPUS 0x11200
+
+// Additional attributes
+#define BASS_ATTRIB_OPUS_ORIGFREQ 0x13000
+#define BASS_ATTRIB_OPUS_GAIN 0x13001
+
+HSTREAM BASSOPUSDEF(BASS_OPUS_StreamCreateFile)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags);
+HSTREAM BASSOPUSDEF(BASS_OPUS_StreamCreateURL)(const char *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user);
+HSTREAM BASSOPUSDEF(BASS_OPUS_StreamCreateFileUser)(DWORD system, DWORD flags, const BASS_FILEPROCS *procs, void *user);
+
+#ifdef __cplusplus
+}
+
+#if defined(_WIN32) && !defined(NOBASSOVERLOADS)
+static inline HSTREAM BASS_OPUS_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags)
+{
+ return BASS_OPUS_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE);
+}
+
+static inline HSTREAM BASS_OPUS_StreamCreateURL(const WCHAR *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user)
+{
+ return BASS_OPUS_StreamCreateURL((const char*)url, offset, flags|BASS_UNICODE, proc, user);
+}
+#endif
+#endif
+
+#endif
diff --git a/src/aoblipplayer.cpp b/src/aoblipplayer.cpp
index 5f4dc6cc..4c7bf7b0 100644
--- a/src/aoblipplayer.cpp
+++ b/src/aoblipplayer.cpp
@@ -15,7 +15,10 @@ void AOBlipPlayer::set_blips(QString p_sfx)
{
BASS_StreamFree(m_stream_list[n_stream]);
- m_stream_list[n_stream] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_UNICODE | BASS_ASYNCFILE);
+ if (f_path.endsWith(".opus"))
+ m_stream_list[n_stream] = BASS_OPUS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_UNICODE | BASS_ASYNCFILE);
+ else
+ m_stream_list[n_stream] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_UNICODE | BASS_ASYNCFILE);
}
set_volume_internal(m_volume);
@@ -46,7 +49,7 @@ void AOBlipPlayer::set_volume(qreal p_value)
void AOBlipPlayer::set_volume_internal(qreal p_value)
{
- float volume = p_value;
+ float volume = static_cast<float>(p_value);
for (int n_stream = 0 ; n_stream < 5 ; ++n_stream)
{
diff --git a/src/aomusicplayer.cpp b/src/aomusicplayer.cpp
index 49cf089c..9a96b3eb 100644
--- a/src/aomusicplayer.cpp
+++ b/src/aomusicplayer.cpp
@@ -26,7 +26,11 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop, int effect_flag
if (loop)
flags |= BASS_SAMPLE_LOOP;
- DWORD newstream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, flags);
+ DWORD newstream;
+ if (f_path.endsWith(".opus"))
+ newstream = BASS_OPUS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, flags);
+ else
+ newstream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, flags);
if (ao_app->get_audio_output_device() != "default")
BASS_ChannelSetDevice(m_stream_list[channel], BASS_GetDevice());
diff --git a/src/aosfxplayer.cpp b/src/aosfxplayer.cpp
index cc019725..98496eaa 100644
--- a/src/aosfxplayer.cpp
+++ b/src/aosfxplayer.cpp
@@ -59,7 +59,10 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout, int channel
if (!file_exists(f_path))
f_path = ao_app->get_sfx_suffix(f_path); //If we're not given a sound file with .wav/.ogg/.opus already there, let's do this thing
- m_stream_list[channel] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE);
+ if (f_path.endsWith(".opus"))
+ m_stream_list[channel] = BASS_OPUS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE);
+ else
+ m_stream_list[channel] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE);
set_volume_internal(m_volume);