mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 12:15:34 +08:00
Use speaker as audio input
This commit is contained in:
@@ -217,6 +217,40 @@ int Render::Run() {
|
|||||||
screen_width_ = DM.w;
|
screen_width_ = DM.w;
|
||||||
screen_height_ = DM.h;
|
screen_height_ = DM.h;
|
||||||
|
|
||||||
|
// Audio
|
||||||
|
SDL_AudioSpec want_in, have_in, want_out, have_out;
|
||||||
|
SDL_zero(want_in);
|
||||||
|
want_in.freq = 48000;
|
||||||
|
want_in.format = AUDIO_S16LSB;
|
||||||
|
want_in.channels = 1;
|
||||||
|
want_in.samples = 480;
|
||||||
|
want_in.callback = SdlCaptureAudioIn;
|
||||||
|
want_in.userdata = this;
|
||||||
|
|
||||||
|
input_dev_ = SDL_OpenAudioDevice(NULL, 1, &want_in, &have_in, 0);
|
||||||
|
if (input_dev_ == 0) {
|
||||||
|
SDL_Log("Failed to open input: %s", SDL_GetError());
|
||||||
|
// return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_zero(want_out);
|
||||||
|
want_out.freq = 48000;
|
||||||
|
want_out.format = AUDIO_S16LSB;
|
||||||
|
want_out.channels = 1;
|
||||||
|
// want_out.silence = 0;
|
||||||
|
want_out.samples = 480;
|
||||||
|
want_out.callback = SdlCaptureAudioOut;
|
||||||
|
want_out.userdata = this;
|
||||||
|
|
||||||
|
output_dev_ = SDL_OpenAudioDevice(NULL, 0, &want_out, &have_out, 0);
|
||||||
|
if (output_dev_ == 0) {
|
||||||
|
SDL_Log("Failed to open input: %s", SDL_GetError());
|
||||||
|
// return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_PauseAudioDevice(input_dev_, 0);
|
||||||
|
SDL_PauseAudioDevice(output_dev_, 0);
|
||||||
|
|
||||||
// Setup Dear ImGui context
|
// Setup Dear ImGui context
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
|
|||||||
@@ -61,8 +61,9 @@ class Render {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int ProcessMouseKeyEven(SDL_Event &ev);
|
int ProcessMouseKeyEven(SDL_Event &ev);
|
||||||
void SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len);
|
|
||||||
void SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len);
|
static void SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len);
|
||||||
|
static void SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int SaveSettingsIntoCacheFile();
|
int SaveSettingsIntoCacheFile();
|
||||||
|
|||||||
@@ -78,34 +78,40 @@ int Render::ProcessMouseKeyEven(SDL_Event &ev) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Render::SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len) {
|
void Render::SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len) {
|
||||||
if (1) {
|
// Render *render = (Render *)userdata;
|
||||||
if ("Connected" == connection_status_str_) {
|
// if (1) {
|
||||||
SendData(peer_, DATA_TYPE::AUDIO, (const char *)stream, len);
|
// if ("Connected" == render->connection_status_str_) {
|
||||||
}
|
// SendData(render->peer_, DATA_TYPE::AUDIO, (const char *)stream, len);
|
||||||
} else {
|
// }
|
||||||
memcpy(audio_buffer_, stream, len);
|
// } else {
|
||||||
audio_len_ = len;
|
// memcpy(render->audio_buffer_, stream, len);
|
||||||
SDL_Delay(10);
|
// render->audio_len_ = len;
|
||||||
audio_buffer_fresh_ = true;
|
// SDL_Delay(10);
|
||||||
}
|
// render->audio_buffer_fresh_ = true;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void Render::SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len) {
|
void Render::SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len) {
|
||||||
if (!audio_buffer_fresh_) {
|
Render *render = (Render *)userdata;
|
||||||
return;
|
if ("Connected" == render->connection_status_str_) {
|
||||||
|
SendData(render->peer_, DATA_TYPE::AUDIO, (const char *)stream, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_memset(stream, 0, len);
|
// if (!render->audio_buffer_fresh_) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
if (audio_len_ == 0) {
|
// SDL_memset(stream, 0, len);
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
|
|
||||||
len = (len > audio_len_ ? audio_len_ : len);
|
// if (render->audio_len_ == 0) {
|
||||||
SDL_MixAudioFormat(stream, audio_buffer_, AUDIO_S16LSB, len,
|
// return;
|
||||||
SDL_MIX_MAXVOLUME);
|
// } else {
|
||||||
audio_buffer_fresh_ = false;
|
// }
|
||||||
|
|
||||||
|
// len = (len > render->audio_len_ ? render->audio_len_ : len);
|
||||||
|
// SDL_MixAudioFormat(stream, render->audio_buffer_, AUDIO_S16LSB, len,
|
||||||
|
// SDL_MIX_MAXVOLUME);
|
||||||
|
// render->audio_buffer_fresh_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Render::OnReceiveVideoBufferCb(const char *data, size_t size,
|
void Render::OnReceiveVideoBufferCb(const char *data, size_t size,
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ target("remote_desk")
|
|||||||
set_kind("binary")
|
set_kind("binary")
|
||||||
add_deps("rd_log", "common", "single_window")
|
add_deps("rd_log", "common", "single_window")
|
||||||
if is_os("windows") then
|
if is_os("windows") then
|
||||||
add_files("icon/app_icon.ico")
|
add_files("icon/app.rc")
|
||||||
elseif is_os("macosx") then
|
elseif is_os("macosx") then
|
||||||
add_packages("ffmpeg")
|
add_packages("ffmpeg")
|
||||||
elseif is_os("linux") then
|
elseif is_os("linux") then
|
||||||
|
|||||||
Reference in New Issue
Block a user