我目前正在尝试构建一个非常简单的音频工具,它需要在运行时在pavucontrol和qjackctl中更改其名称。当应用程序生成音频时,其名称显示在pavucontrol中。例如,如果我使用firefox,它将显示为"Firefox“。我尝试了最常见的解决方案:编辑argv和使用prctl都没有成功。
我还搜索了pipewire文档,但没有发现任何有用的东西(但也许我只是瞎了眼)。
有可能吗?pipewire从哪里获得应用程序的名称?
下面是用SDL2编写的C语言中的一个小测试脚本:
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <SDL2/SDL.h>
Uint8* audio_buffer = NULL;
Uint32 audio_length = 0;
void audio_callback(void* userdata, Uint8* stream, int n) {
memset(stream, 0, n);
}
int main(int argc, char** argv) {
SDL_Event evt;
SDL_AudioSpec desired;
SDL_Init(SDL_INIT_AUDIO|SDL_INIT_EVENTS);
SDL_LoadWAV("suil.wav", &desired, &audio_buffer, &audio_length);
desired.callback = audio_callback;
SDL_OpenAudio(&desired, NULL);
SDL_PauseAudio(0);
while (1) {
while (SDL_PollEvent(&evt)) {
switch (evt.type) {
case SDL_QUIT:
exit(EXIT_SUCCESS);
}
}
}
}还有一张我希望在运行时改变的图片:

(注:“测试”将是讨论中的名称。)
免责声明:我不确定这是否可能是sdl-2特定的,所以我添加了SDL标签.
发布于 2022-09-19 13:50:57
SDL管道后端获取此块中的应用程序名称。
/* Get the hints for the application name, stream name and role */
app_name = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_APP_NAME);
if (!app_name || *app_name == '\0') {
app_name = SDL_GetHint(SDL_HINT_APP_NAME);
if (!app_name || *app_name == '\0') {
app_name = "SDL Application";
}
}...via the 提示系统
SDL_HINT_APP_NAME:
/** *\简要指定应用程序名称。**此提示允许您在需要时指定发送到操作系统的应用程序名称。例如,这通常出现在*音频流的音量控制小程序中,以及抑制*屏幕保护程序的应用程序列表中。您应该使用一个字符串来描述您的程序(“我的游戏* 2:复仇”)**将其设置为"“或将其未设置为SDL将使SDL使用合理的*默认值:如果SDL*没有任何更好的信息,则应用程序的名称或"SDL应用程序”。**注意,对于音频流,这可以用* SDL_HINT_AUDIO_DEVICE_APP_NAME覆盖。**对于不支持此提示的目标,此提示没有任何作用。*/ #定义SDL_HINT_APP_NAME "SDL_APP_NAME“SDL_HINT_AUDIO_DEVICE_APP_NAME:
/** *\简要指定音频设备的应用程序名称。**一些音频后端(如PulseAudio)允许您描述您的音频*流。除其他外,这种描述可能会出现在一个system *控制面板中,它允许用户在特定的音频*流上调整音量,而不是使用一个巨大的主音量滑块。**此提示允许您将该信息传输到操作系统。*此提示的内容在打开音频设备时使用。您应该使用一个字符串*来描述您的程序(“我的游戏2:复仇”)**将其设置为"“,或者不设置它将使SDL使用一个合理的*默认设置:如果这个提示是* set,这将是带有SDL_HINT_APP_NAME的名称集。否则,如果SDL没有更好的信息,它可能会使用应用程序的名称或"SDL应用程序“*。**对于不支持此提示的目标,此提示没有任何作用。*/ #定义SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME“然后,...and使用PW_KEY_APP_NAME,这里将应用程序名称传递给Pipewire。
PIPEWIRE_pw_properties_set(props, PW_KEY_APP_NAME, app_name);...where SDL的PIPEWIRE_pw_properties_set()只是指向Pipewire的pw_properties_set()的指针。
https://stackoverflow.com/questions/73771450
复制相似问题