首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改管道/脉冲音频应用程序名称

更改管道/脉冲音频应用程序名称
EN

Stack Overflow用户
提问于 2022-09-19 09:41:37
回答 1查看 72关注 0票数 2

我目前正在尝试构建一个非常简单的音频工具,它需要在运行时在pavucontrolqjackctl中更改其名称。当应用程序生成音频时,其名称显示在pavucontrol中。例如,如果我使用firefox,它将显示为"Firefox“。我尝试了最常见的解决方案:编辑argv和使用prctl都没有成功。

我还搜索了pipewire文档,但没有发现任何有用的东西(但也许我只是瞎了眼)。

有可能吗?pipewire从哪里获得应用程序的名称?

下面是用SDL2编写的C语言中的一个小测试脚本:

代码语言:javascript
复制
#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标签.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 13:50:57

SDL管道后端获取此块中的应用程序名称。

代码语言:javascript
复制
/* 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。

代码语言:javascript
复制
PIPEWIRE_pw_properties_set(props, PW_KEY_APP_NAME, app_name);

...where SDL的PIPEWIRE_pw_properties_set()只是指向Pipewire的pw_properties_set()的指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73771450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档