summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeldakatze <coffee@zeldakatze.de>2025-08-07 14:10:00 +0200
committerzeldakatze <coffee@zeldakatze.de>2025-08-07 14:10:00 +0200
commit313f7f4c88500b4ae7c4dd765e18392bea0a2ba2 (patch)
tree712deb3fee7e14412e24e15155e9addb04ebb85b
parent0fce665f5da7119809b2d5ce13eb763a6c2eb4c6 (diff)
downloadabaddon-portaudio-313f7f4c88500b4ae7c4dd765e18392bea0a2ba2.tar.gz
abaddon-portaudio-313f7f4c88500b4ae7c4dd765e18392bea0a2ba2.zip
make portaudio actually work
-rw-r--r--src/audio/miniaudioManager.cpp (renamed from src/audio/manager.cpp)0
-rw-r--r--src/audio/portaudioManager.cpp25
-rw-r--r--src/discord/voiceclient.hpp10
3 files changed, 19 insertions, 16 deletions
diff --git a/src/audio/manager.cpp b/src/audio/miniaudioManager.cpp
index 3a155fc..3a155fc 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/miniaudioManager.cpp
diff --git a/src/audio/portaudioManager.cpp b/src/audio/portaudioManager.cpp
index fda0988..bcd1254 100644
--- a/src/audio/portaudioManager.cpp
+++ b/src/audio/portaudioManager.cpp
@@ -1,3 +1,4 @@
+#ifdef WITH_VOICE
#ifdef USE_PORTAUDIO
#include "manager.hpp"
@@ -16,14 +17,15 @@ int playCallback(const void *pInput, void *pOutput,
void *userData ) {
AudioManager *mgr = reinterpret_cast<AudioManager *>(userData);
if (mgr == nullptr) {printf("NULL\n");return paContinue;};
- printf("PlayCallback(): %d\n", frameCount);
std::lock_guard<std::mutex> _(mgr->m_mutex);
- auto *pOutputF32 = static_cast<float *>(pOutput);
-
- for(int i = 0; i<frameCount; i++)
- pOutputF32[i] = 0.0f;
+ auto *pOutputF32 = static_cast<int16_t *>(pOutput);
+ /* clear the output buffer */
+ for(int i = 0; i<frameCount * 2; i++)
+ pOutputF32[i] = 0;
+
+ /* write every SSRC into the output stream */
for (auto &[ssrc, pair] : mgr->m_sources) {
double volume = 1.0;
if (const auto vol_it = mgr->m_volume_ssrc.find(ssrc); vol_it != mgr->m_volume_ssrc.end()) {
@@ -31,9 +33,9 @@ int playCallback(const void *pInput, void *pOutput,
}
auto &buf = pair.first;
const size_t n = std::min(static_cast<size_t>(buf.size()), static_cast<size_t>(frameCount * 2ULL));
- printf("Size: %d Buf%d frameCount %d\n", n, buf.size(), frameCount);
for (size_t i = 0; i < n; i++) {
- pOutputF32[i] += volume * buf[i] / 32768.F;
+ pOutputF32[i] += (int16_t) (volume * buf[i]);
+ //pOutputF32[i] += volume * buf[i] / 32768.F;
}
buf.erase(buf.begin(), buf.begin() + n);
}
@@ -46,9 +48,9 @@ int recordCallback(const void *pInput, void *pOutput,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData ) {
- printf("recordCallback() %d\n", frameCount);
auto *mgr = reinterpret_cast<AudioManager *>(userData);
if (mgr == nullptr) return paContinue;
+
mgr->OnCapturedPCM(static_cast<const int16_t *>(pInput), frameCount);
/*
@@ -96,13 +98,13 @@ AudioManager::AudioManager(const Glib::ustring &backends_string)
Enumerate();
/* create the configurations for capture and playback */
- m_playback_config.sampleFormat = paFloat32;
+ m_playback_config.sampleFormat = paInt16;
m_playback_config.channelCount = 2;
m_playback_config.suggestedLatency = Pa_GetDeviceInfo( m_capture_config.device )->defaultLowInputLatency;
m_playback_config.hostApiSpecificStreamInfo = NULL;
m_playback_config.device = Pa_GetDefaultOutputDevice();
- m_capture_config.sampleFormat = paFloat32;
+ m_capture_config.sampleFormat = paInt16;
m_capture_config.channelCount = 2;
m_capture_config.suggestedLatency = Pa_GetDeviceInfo( m_capture_config.device )->defaultLowInputLatency;
m_capture_config.hostApiSpecificStreamInfo = NULL;
@@ -175,7 +177,7 @@ void AudioManager::SetOpusBuffer(uint8_t *ptr) {
}
void AudioManager::FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data) {
- if (!m_should_playback || Pa_IsStreamActive(&pa_playback_device) != 1) return;
+ if (!m_should_playback || Pa_IsStreamActive(pa_playback_device) != 1) return;
std::lock_guard<std::mutex> _(m_mutex);
if (m_muted_ssrcs.find(ssrc) != m_muted_ssrcs.end()) return;
@@ -596,3 +598,4 @@ AudioManager::type_signal_opus_packet AudioManager::signal_opus_packet() {
}
#endif /* USE_PORTAUDIO */
+#endif /* WITH_VOICE */
diff --git a/src/discord/voiceclient.hpp b/src/discord/voiceclient.hpp
index 0868c79..aa1014c 100644
--- a/src/discord/voiceclient.hpp
+++ b/src/discord/voiceclient.hpp
@@ -31,7 +31,7 @@ enum class VoiceGatewayCloseCode : uint16_t {
UnknownEncryption = 4016,
};
-enum class VoiceGatewayOp : uint32_t {
+enum class VoiceGatewayOp : int {
Identify = 0,
SelectProtocol = 1,
Ready = 2,
@@ -70,7 +70,7 @@ struct VoiceGatewayMessage {
};
struct VoiceHelloData {
- uint32_t HeartbeatInterval;
+ int HeartbeatInterval;
friend void from_json(const nlohmann::json &j, VoiceHelloData &m);
};
@@ -95,10 +95,10 @@ struct VoiceIdentifyMessage {
struct VoiceReadyData {
struct VoiceStream {
bool IsActive;
- uint32_t Quality;
+ int Quality;
std::string RID;
- uint32_t RTXSSRC;
- uint32_t SSRC;
+ int RTXSSRC;
+ int SSRC;
std::string Type;
friend void from_json(const nlohmann::json &j, VoiceStream &m);