首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jack2服务器不启动自连接模式是“不要限制自连接请求”

Jack2服务器不启动自连接模式是“不要限制自连接请求”
EN

Stack Overflow用户
提问于 2021-02-08 11:24:45
回答 1查看 934关注 0票数 0

我开始在windows 10中使用C++开发一个简单的吉他活套。我并不确定是否应该使用API函数来实现服务器的启动和关闭,但是由于我发现启动服务器和使用单个命令设置参数都很方便,所以我为它创建了一个脚本。

代码语言:javascript
运行
复制
ECHO HELLO JACK!
cd C:\Program Files\JACK2
jackd.exe -S -X winmme -v -r -t10000 -dportaudio -d"ASIO::ASIO4ALL v2" -r44100 -p512
:: /jackd.exe -S -X winmme -v -t10000 -dportaudio -d"ASIO::Komplete Audio 6" -r44100 -p512  this is for when audio interface is selected. Not used in this script.
PAUSE

在开发过程中,测试我的代码的方法是编译它,在开始运行它之前,我必须先启动服务器,在大多数情况下,我更喜欢使用qjackctl来完成它。但是,这种方式很容易出错,因为已经发生了许多问题,特别是当“关闭服务器的适当方法”出现时。例如,通过qjackctl停止服务器强制我的运行程序退出正常,但是关闭我的运行程序而没有停止服务器会破坏千斤顶音频行为,即。有时qjackctl挂起,崩溃,即使我重新启动计算机,或者重新安装jack也解决不了问题。

日志窗口消息是以下…

代码语言:javascript
运行
复制
12:19:37.459 JACK was started with PID=8044.
jackdmp 1.9.17
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2021 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
Drivers/internals found in : C:\Program Files\JACK2
Drivers/internals found in : C:\Program Files\JACK2
JACK server starting in realtime mode with priority 10
self-connect-mode is "Don't restrict self connect requests"

…然后它就会停留在那里,有时在20~30秒之后(有些则不会--如果永远在那里结冰)。它打印:

代码语言:javascript
运行
复制
BDB1546 unable to join the environment
cannot open DB environment: Resource temporarily unavailable
Jack: JackWinThread::StartImp : create non RT thread
Jack: JackWinThread::ThreadHandler : start
Jack: Initializing PortAudio...
BDB1546 unable to join the environment
cannot open DB environment: Resource temporarily unavailable
Cannot connect to named pipe after wait = \\.\pipe\server_jack_default_0 err = 2
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
jack_deactivate called with a NULL client
jack_deactivate called with a NULL client
jack_client_close called with a NULL client
Jack: JackPortAudioDriver::Open nframes = 512 in = 0 out = 0 capture name = ASIO::ASIO4ALL v2 playback name = ASIO::ASIO4ALL v2 samplerate = 44100
Jack: JackDriver::Open capture_driver_name = ASIO::ASIO4ALL v2
Jack: JackDriver::Open playback_driver_name = ASIO::ASIO4ALL v2
Jack: Check protocol client = 8 server = 8
Jack: JackEngine::ClientInternalOpen: name = system
Jack: JackEngine::AllocateRefNum ref = 0
Jack: JackWinSemaphore::Allocate name = jack_pipe.default_system val = 0
Jack: JackEngine::NotifyAddClient: name = system
Jack: JackGraphManager::SetBufferSize size = 512
Jack: JackConnectionManager::DirectConnect first: ref1 = 0 ref2 = 0
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 0 ref2 = 0
Jack: JackDriver::SetupDriverSync driver sem in normal mode
Jack: JackPortAudioDriver::Open fInputDevice = 8, fOutputDevice 8
Jack: JackPortAudioDriver::Open setup max in channels = 2
Jack: JackPortAudioDriver::Open setup max out channels = 2
Jack: JackPortAudioDriver::OpenStream buffer_size = 512
Jack: JackWinNamedPipeServerChannel::Open
Jack: JackWinNamedPipeServer::BindAux : fName \\.\pipe\server_jack_default_0
Jack: JackEngine::Open
Jack: JackWinNamedPipeClient::ConnectAux : fName \\.\pipe\server_jack_default_0
Jack: JackEngine::ClientInternalOpen: name = freewheel
Jack: JackEngine::AllocateRefNum ref = 1
Jack: JackWinSemaphore::Allocate name = jack_pipe.default_freewheel val = 0
Jack: JackEngine::NotifyAddClient: name = freewheel
Jack: JackDriver::ClientNotify ref = 1 driver = system name = freewheel notify = 0
Jack: JackDriver::ClientNotify ref = 0 driver = freewheel name = system notify = 0
Jack: JackConnectionManager::DirectConnect first: ref1 = 1 ref2 = 1
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 1 ref2 = 1
Jack: JackDriver::SetupDriverSync driver sem in normal mode
Jack: JackAudioDriver::Attach fBufferSize = 512 fSampleRate = 44100
Jack: JackEngine::PortRegister ref = 0 name = system:capture_1 type = 32 bit float mono audio flags = 22 buffer_size = 512
Jack: JackGraphManager::AllocatePortAux port_index = 1 name = system:capture_1 type = 32 bit float mono audio
Jack: JackConnectionManager::AddOutputPort ref = 0 port = 1
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackAudioDriver::Attach fCapturePortList[i] port_index = 1
Jack: JackEngine::PortRegister ref = 0 name = system:capture_2 type = 32 bit float mono audio flags = 22 buffer_size = 512
Jack: JackGraphManager::AllocatePortAux port_index = 2 name = system:capture_2 type = 32 bit float mono audio
Jack: JackConnectionManager::AddOutputPort ref = 0 port = 2
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackAudioDriver::Attach fCapturePortList[i] port_index = 2
Jack: JackEngine::PortRegister ref = 0 name = system:playback_1 type = 32 bit float mono audio flags = 21 buffer_size = 512
Jack: JackGraphManager::AllocatePortAux port_index = 3 name = system:playback_1 type = 32 bit float mono audio
Jack: JackConnectionManager::AddInputPort ref = 0 port = 3
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackAudioDriver::Attach fPlaybackPortList[i] port_index = 3
Jack: JackEngine::PortRegister ref = 0 name = system:playback_2 type = 32 bit float mono audio flags = 21 buffer_size = 512
Jack: JackGraphManager::AllocatePortAux port_index = 4 name = system:playback_2 type = 32 bit float mono audio
Jack: JackConnectionManager::AddInputPort ref = 0 port = 4
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackEngine::ClientNotify: no callback for notification = 9
Jack: JackAudioDriver::Attach fPlaybackPortList[i] port_index = 4
Jack: InitTime : multimedia timer resolution set to 1 milliseconds
Jack: JackServer::IsRunning
Jack: JackWinMMEDriver::Open - num_potential_inputs 0
Jack: JackWinMMEDriver::Open - num_potential_outputs 1
Jack: JackWinMMEDriver::Open - multimedia timer resolution set to 1 milliseconds.
JackWinMMEDriver::Open - while creating output port: Undefined external error. | winmme, system_midi, out
Jack: JackWinMMEDriver::Open - input_count 0
Jack: JackWinMMEDriver::Open - output_count 0
Jack: JackDriver::Open capture_driver_name = in
Jack: JackDriver::Open playback_driver_name = out
Jack: Check protocol client = 8 server = 8
Jack: JackEngine::ClientInternalOpen: name = system_midi
Jack: JackEngine::AllocateRefNum ref = 2
Jack: JackWinSemaphore::Allocate name = jack_pipe.default_system_midi val = 0
Jack: JackEngine::NotifyAddClient: name = system_midi
Jack: JackDriver::ClientNotify ref = 2 driver = system name = system_midi notify = 0
Jack: JackDriver::ClientNotify ref = 0 driver = system_midi name = system notify = 0
Jack: JackDriver::ClientNotify ref = 2 driver = freewheel name = system_midi notify = 0
Jack: JackDriver::ClientNotify ref = 1 driver = system_midi name = freewheel notify = 0
Jack: JackGraphManager::SetBufferSize size = 512
Jack: JackConnectionManager::DirectConnect first: ref1 = 2 ref2 = 2
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 2 ref2 = 2
Jack: JackDriver::SetupDriverSync driver sem in normal mode
Jack: JackWinMMEDriver::Attach - fCaptureChannels 0
Jack: JackWinMMEDriver::Attach - fPlaybackChannels 0
Jack: JackServer::Start
Jack: JackPortAudioDriver::Start
Jack: JackWinMMEDriver::Start - Starting driver.
Jack: JackWinMMEDriver::Start - Enabling input ports.
Jack: JackWinMMEDriver::Start - Enabling output ports.
Jack: JackWinMMEDriver::Start - Driver started.
Jack: JackWinThread::StartImp : create non RT thread
Jack: JackWinThread::ThreadHandler : start
Jack: JackWinNamedPipeServerChannel::Init
Jack: JackWinNamedPipeServerChannel::ClientAdd size 0
Jack: JackWinThread::StartImp : create non RT thread
Jack: JackWinNamedPipeServer::BindAux : fName \\.\pipe\server_jack_default_0
Jack: JackWinThread::ThreadHandler : start
Jack: JackClientPipeThread::Execute 2c272f0
Jack: JackRequest::Notification
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name = freewheel notify = 18
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name = freewheel notify = 18
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name = freewheel notify = 18
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name = freewheel notify = 18
Jack: JackEngine::ClientNotify: no callback for notification = 4
Jack: JackEngine::ClientNotify: no callback for notification = 4
Jack: JackEngine::ClientNotify: no callback for notification = 4
Jack: JackClientPipeThread::Execute 2c272f0

尽管它似乎已经启动,但会出现一个qjackctl通知窗口,其中包含以下消息:

代码语言:javascript
运行
复制
Could not connect to Jack server as client.
-Overall operation failed.
-Unable to connect to server.
Please check the messages window for more info.

在不按“取消”的情况下,我每两次就能运行一次程序,就像服务器正常工作一样,而按下“取消”会使服务器停止运行。但在两次反复的尝试中只有一次。至于代码,我还测试了jack音频文档中的现成示例,以检查是否会注意到任何差异,但没有发现任何差异。

我真的不知道如何调试它,因为在互联网上找到的大多数解决方案都是关于Linux环境的,除此之外,我发现我的实现实践是很传统的,而且我非常肯定,我可能不得不使用API命令,而不是搜索现成的脚本解决方案。但是,现在首先要调试服务器。

因此,如果有人知道我应该如何使jack服务器再次正常运行,那就太好了!

编辑在发布问题10分钟后,我成功地调试了这个问题,但是我将帖子保留在打开状态,以帮助其他面临类似问题的人。对我有效的解决方案是运行由C++示例修改的以下server_control代码:

代码语言:javascript
运行
复制
#include <iostream>
#include <jack/jack.h>
#include <jack/types.h>
#include <jack/control.h>

static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name)
{
    const JSList * node_ptr = jackctl_server_get_drivers_list(server);

    while (node_ptr) {
        if (strcmp(jackctl_driver_get_name((jackctl_driver_t *)node_ptr->data), driver_name) == 0) {
            return (jackctl_driver_t *)node_ptr->data;
        }
        node_ptr = jack_slist_next(node_ptr);
    }

    return NULL;
}

int main(int argc, char *argv[])
{
    jackctl_server_t * server;
    const char* driver_name = "portaudio";//You could probably change the driver name accordingly 


    server = jackctl_server_create2(NULL, NULL, NULL);

    jackctl_server_open(server, jackctl_server_get_driver(server, driver_name));
    jackctl_server_start(server);

    jackctl_server_stop(server);
    jackctl_server_close(server);
    jackctl_server_destroy(server);
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2021-06-09 21:45:40

您的窗口音频比特率可能需要匹配的杰克是什么要求。否则,某些东西会在独占模式下消耗您的界面。

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

https://stackoverflow.com/questions/66100695

复制
相关文章

相似问题

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