ChatServerVoice

This commit is contained in:
2025-05-08 22:21:18 -05:00
parent 421bf37b75
commit 101fcf4781
3 changed files with 62 additions and 27 deletions

View File

@@ -27,8 +27,8 @@ ChatClientVoice::~ChatClientVoice() {
im->releaseContext(ImGui::GetCurrentContext());
if(buf)
delete [] buf;
//if(buf)
// delete [] buf;
}
}
@@ -59,7 +59,7 @@ void ChatClientVoice::onLoad() {
SDL_GetAudioStreamFormat(mic, &spec, NULL);
speaker = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &spec, NULL, NULL);
buf = new unsigned char[len];
//buf = new unsigned char[len];
}
@@ -67,6 +67,8 @@ void ChatClientVoice::run() {
static ClientModule* cm; { cm = (ClientModule*) moduleInstances[ClientModule()]; }
static unsigned char buf[10 * 1024];
if(!cm) {
std::cout << "No ClientModule for ChatClientVoice!\n";
std::abort();
@@ -99,10 +101,17 @@ void ChatClientVoice::run() {
ImGui::InputText("Message: ", &s);
if(cm->isConnected()) {
ImGui::SameLine();
if(ImGui::Button("send")) {
s.insert(s.begin(), 'o');
s.insert(s.begin(), ' ');
s.insert(s.begin(), '0');
s.insert(s.begin(), 'a');
cm->sendReliable(s.c_str(), (uint32) s.length());
s.clear();
}
}
static float micVol = 1.0f;
@@ -118,6 +127,7 @@ void ChatClientVoice::run() {
if(!SDL_AudioStreamDevicePaused(mic)) {
SDL_SetAudioStreamGain(mic, micVol);
} else if(micTest) {
SDL_ClearAudioStream(mic);
SDL_ResumeAudioStreamDevice(mic);
SDL_SetAudioStreamGain(mic, micVol);
} else if(!cm->isConnected()) {
@@ -127,24 +137,28 @@ void ChatClientVoice::run() {
if(!SDL_AudioStreamDevicePaused(speaker)) {
SDL_SetAudioStreamGain(speaker, speakerVol);
} else if(micTest) {
SDL_ClearAudioStream(speaker);
SDL_ResumeAudioStreamDevice(speaker);
SDL_SetAudioStreamGain(speaker, speakerVol);
} else if(!cm->isConnected()) {
SDL_PauseAudioStreamDevice(speaker);
}
if(micTest) {
static int avail = 0;
if(micTest) {
avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic));
avail = SDL_GetAudioStreamData(mic, buf, avail);
SDL_PutAudioStreamData(speaker, buf, avail);
} else {
} else if(cm->isConnected()){
// if not testing, send to server.
avail = SDL_min(len, SDL_GetAudioStreamAvailable(mic));
avail = SDL_GetAudioStreamData(mic, buf, avail);
//cm->sendReliable(buf, avail);
}
@@ -167,11 +181,19 @@ bool ChatClientVoice::onEvent(const Archimedes::Event& event) {
Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event;
static std::string s; s = std::string((const char*)e.msg->m_pData, e.msg->m_cbSize);
static std::string s;
std::cerr << "Client Recieved: " << s << std::endl;
if(((char*)e.msg->m_pData)[0] == 'a' && ((char*)e.msg->m_pData)[1] == '0' && ((char*)e.msg->m_pData)[2] == ' ' && ((char*)e.msg->m_pData)[3] == 'o') {
s = std::string((const char*)e.msg->m_pData + 4, e.msg->m_cbSize - 4);
messages += "\n\n" + s;
} else {
s = "audio data";
SDL_PutAudioStreamData(speaker, e.msg->m_pData, e.msg->m_cbSize);
}
std::cerr << "Client Recieved: " << s << std::endl;
return true;
} else if(type == app->getEventType("ConnectionStatusChangedEvent")) {
@@ -201,6 +223,8 @@ bool ChatClientVoice::onEvent(const Archimedes::Event& event) {
case k_ESteamNetworkingConnectionState_Connected:
//OnConnect
SDL_ClearAudioStream(mic);
SDL_ClearAudioStream(speaker);
SDL_ResumeAudioStreamDevice(mic);
SDL_ResumeAudioStreamDevice(speaker);

View File

@@ -27,8 +27,7 @@ class ChatClientVoice : public Archimedes::Module {
SDL_AudioSpec spec;
SDL_AudioStream *mic, *speaker;
const int len = 1024;
unsigned char* buf;
const int len = 10 * 1024;
};
#ifdef CHATCLIENTVOICE_DYNAMIC

View File

@@ -23,8 +23,10 @@ bool ChatServerVoice::onEvent(const Archimedes::Event& event) {
static ServerModule* sm; { sm = (ServerModule*) moduleInstances[ServerModule()]; }
Archimedes::DataRecievedEvent& e = (Archimedes::DataRecievedEvent&) event;
static std::string s;
static std::string s; s = std::string((const char*)e.msg->m_pData, e.msg->m_cbSize);
if(((char*)e.msg->m_pData)[0] == 'a' && ((char*)e.msg->m_pData)[1] == '0' && ((char*)e.msg->m_pData)[2] == ' ' && ((char*)e.msg->m_pData)[3] == 'o') {
s = std::string((const char*)e.msg->m_pData + 4, e.msg->m_cbSize - 4);
if(s == "/quit") {
sm->disconnectClient(e.msg->m_conn);
@@ -33,14 +35,24 @@ bool ChatServerVoice::onEvent(const Archimedes::Event& event) {
app->end();
}
std::cerr << "Server Recieved: " << s << std::endl;
for(auto& it : sm->getClients()) {
if(it.first != e.msg->m_conn)
sm->sendReliable(it.first, e.msg->m_pData, e.msg->m_cbSize);
else
sm->sendReliable(e.msg->m_conn, "a0 o\nMessage sent\n", strlen("a0 o\nMessage sent\n"));
}
} else {
s = "audio data";
for(auto& it : sm->getClients()) {
if(it.first != e.msg->m_conn)
sm->sendReliable(it.first, s.c_str(), s.length());
else
sm->sendReliable(e.msg->m_conn, "\nMessage sent\n", strlen("\nMessage sent\n"));
sm->sendReliable(it.first, e.msg->m_pData, e.msg->m_cbSize);
}
}
std::cerr << "Server Recieved: " << s << std::endl;
return true;