簡體   English   中英

Jack2 服務器未正確啟動 -self-connect-mode 為“不限制自連接請求”

[英]Jack2 server doesn't start approppriately -self-connect-mode is “Don't restrict self connect requests”

我開始使用 jackaudio 的 api 在 windows 10 中使用 C++ 開發一個簡單的吉他 Looper。 我不確定是否應該使用 API 函數來實現啟動和關閉服務器,但由於我發現使用單個命令啟動服務器和設置參數都很方便,因此我為其編寫了一個腳本。

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 也無法解決問題。

日志 window 消息如下……

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 秒后(有些人不會——如果永遠凍結在那里。)它會打印:

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 通知 window 出現以下消息:

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 弄臟我的手命令而不是搜索即用型腳本解決方案。 但是,現在首先要調試服務器。

所以如果有人知道我應該如何讓傑克服務器再次正常運行,那就太好了!

編輯發布問題 10 分鍾后,我設法調試了這個,但是我讓帖子保持打開狀態,以幫助其他面臨類似問題的人。 對我有用的解決方案是運行以下由 server_control 示例修改的 C++ 代碼:

#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;
}

您的 windows 音頻比特率可能需要與插孔請求的匹配。 否則,某些東西會以獨占模式消耗您的界面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM