From e3a0a9fe1ba4e907d07e3c128adc75b89b743eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sun, 2 Dec 2018 13:44:59 +0100 Subject: [PATCH] Play Audio in Qt client --- gui/CMakeLists.txt | 12 ++++++++++-- gui/{main.c => main.cpp} | 39 ++++++++++++++++++++++++++++++++++--- lib/include/chiaki/common.h | 2 +- 3 files changed, 47 insertions(+), 6 deletions(-) rename gui/{main.c => main.cpp} (62%) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 49efc4a..206c540 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,3 +1,11 @@ -add_executable(chiaki main.c) -target_link_libraries(chiaki chiaki-lib) \ No newline at end of file +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) +find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Multimedia) + +add_executable(chiaki main.cpp) +target_link_libraries(chiaki chiaki-lib) + +target_link_libraries(chiaki Qt5::Core Qt5::Widgets Qt5::Gui Qt5::Multimedia) \ No newline at end of file diff --git a/gui/main.c b/gui/main.cpp similarity index 62% rename from gui/main.c rename to gui/main.cpp index 127c309..06583b5 100644 --- a/gui/main.c +++ b/gui/main.cpp @@ -1,15 +1,25 @@ + #include #include #include #include -void audio_frame_cb(int8_t *buf, size_t samples_count, void *user) +#include +#include +#include + + +QAudioOutput *audio_out; +QIODevice *audio_io; + + +void audio_frame_cb(int16_t *buf, size_t samples_count, void *user) { - printf("AUDIO FRAME CB %lu\n", samples_count); + audio_io->write((const char *)buf, static_cast(samples_count * 2 * 2)); } -int main(int argc, const char *argv[]) +int main(int argc, char *argv[]) { if(argc != 7) { @@ -45,11 +55,34 @@ int main(int argc, const char *argv[]) return 1; } + argc = 1; + QApplication app(argc, argv); + + QAudioFormat audio_format; + audio_format.setSampleRate(48000); + audio_format.setChannelCount(2); + audio_format.setSampleSize(16); + audio_format.setCodec("audio/pcm"); + audio_format.setSampleType(QAudioFormat::SignedInt); + + QAudioDeviceInfo audio_device_info(QAudioDeviceInfo::defaultOutputDevice()); + if(!audio_device_info.isFormatSupported(audio_format)) + { + printf("audio output format not supported\n"); + } + + audio_out = new QAudioOutput(audio_format); + audio_io = audio_out->start(); + + ChiakiSession session; chiaki_session_init(&session, &connect_info); chiaki_session_set_audio_frame_cb(&session, audio_frame_cb, NULL); chiaki_session_start(&session); chiaki_session_join(&session); chiaki_session_fini(&session); + + delete audio_out; + return 0; } \ No newline at end of file diff --git a/lib/include/chiaki/common.h b/lib/include/chiaki/common.h index f94c424..31e9017 100644 --- a/lib/include/chiaki/common.h +++ b/lib/include/chiaki/common.h @@ -24,7 +24,7 @@ extern "C" { #define CHIAKI_EXPORT -#define CHIAKI_NEW(t) (malloc(sizeof(t))) +#define CHIAKI_NEW(t) ((t*)malloc(sizeof(t))) typedef enum {