C#中的音频描述符MFCC
我正在做原始的语音识别,需要对我的音频信号进行简单的描述. 现在,我只有我的音频信号中的FFT,但是在那之后我不知道该怎么办.当我尝试使用隐藏的马尔可夫模型时,只有我的训练信号中的FFT,它给了我错误的答案. 您能告诉我任何C#库,这可以帮助我将FFT信号更改为MFCC(MEL频率Cepstrum系数)? 解决方案 我不知道C#的此类库,但是我可以向您展示我从大量具有16 kHz样品频率的Wav-File振幅中提取20 MFCC的实现. 您必须使用MatNet.Numerics和MathNet.Filtering libraries . 只有俄罗斯评论,对不起. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; using Math
16 2024-04-26
编程技术问答社区
我怎样才能在不阻塞和等待的情况下将另一个线程上的一些消息通知主线程?
我正在编写一个C#组件,该组件只能在我的公司内部使用.该组件将特定桌面应用程序需要与之通信的许多服务器封装了通信.服务器可以向组件发送未经请求的消息,该消息被"捕获"在单独的线程中. 我希望该组件的大多数在其创建线程的上下文中执行.我不希望单独的消息线程执行任何消息处理.取而代之的是,我想通知主线程正在等待处理的消息.希望在创建线程的上下文中执行执行的原因是,库的用户可能不知道多线程,并且我希望能够在可能的情况下同步所有操作. 是否有一种简单的信号传播线程?主线程将进行各种恒定处理,消息线程将不断旋转等待消息.可能值得注意的是,消息线程封装在第三方库中.收到消息后,它将执行回调.我希望回调要做诸如mainthread.notify(消息)之类的事情. 编辑: 抱歉,我不太清楚我想要主线程做什么.我不希望主线程立即处理消息线程发送的消息.我希望它在不久的将来的某个时候处理消息(例如Winforms消息循环的工作方式). 编辑2: 场景: Console
4 2024-04-24
编程技术问答社区
有可能在 Mono C# 程序中发送 unix 信号吗?
我有一个在Windows和Linux上运行的C#程序.当它在Linux上运行时,我希望能够将命令发送到并使该过程执行命令. 我最初的直觉是在另一个过程中实现信号处理程序,并让C#程序在需要与之互动时发送适当的信号.但是,在搜索周围我找不到有关发送单声道API中UNIX信号的功能的信息(但是,我能够找到单声道支持信号处理,这给了我希望.) 此功能是否作为单声道API的一部分存在? 解决方案 您在命名空间Mono.Unix.Native中寻找Syscall.kill(参考Mono.Posix). 用ABRT(6/APORT)自杀的示例: using System; using Mono.Unix.Native; namespace killself { class MainClass { public static void Main(string[] args) { var curre
2 2024-04-23
编程技术问答社区
当插槽存在时,Qt 连接 "无此插槽"。
我试图将信号连接到插槽.该项目可以很好地编译,但是在运行时我会收到此错误: QObject::connect: No such slot QHeaderView::onFilterAdded(int) 这是我的代码: class MySortFilterProxyModel: public QSortFilterProxyModel { Q_OBJECT public: explicit MySortFilterProxyModel(QObject *parent = 0); ~MySortFilterProxyModel(); void addFilter(int col, SteFilter *pFilter); void removeFilter(int col); signals: void filterAdded(int); void filterRemoved(int); } class MyHeaderVie
36 2024-04-22
编程技术问答社区
父进程能否确定其子进程是否收到了 SIGINT?
假设,我启动了一个父进程,该过程启动了一个子过程,但父母会收到SIGINT.我希望父母退出,但我不希望孩子的过程徘徊和/或成为僵尸.我需要确保它死亡. 如果我可以确定孩子也收到了SIGINT,那么它可能是自行清理的.在这种情况下,我宁愿短暂地等待它完成并自行退出.但是,如果它没有收到SIGINT,那么我会立即将其发送SIGTERM(或SIGKILL),然后让父母进行自己的清理. 我如何弄清楚孩子是否接受了SIGINT? (撇开它甚至可能对SIGINT的响应的事实...)我是否只需要猜测父母是否在前景过程组中运行?如果SIGINT是通过编程发送的,而不是通过Ctrl+C? 解决方案 我该如何弄清楚孩子是否收到了Sigint? 也许你不能.如果孩子处理 SIGINT(它可能忽略了它),对您来说应该重要的是.请参阅我的答案对您的另一个问题. 但是,在许多情况下, ctrl c 发送的信号已发送到过程组.然后,您可能也会收到该信号. 在病理情况下,您的整
6 2024-04-22
编程技术问答社区
如何在 macOS 中以异步信号安全的方式唤醒线程?
我有一个正在MacOS上开发的GRPC服务器应用程序.在此应用程序中,我需要处理sigint和sigterm才能优雅地终止. 通常,在Linux上,我将使用POSIX信号量,因为涉及的函数要等待并使用POSIX信号量通知和通知是异步信号安全. 但是,在MacOS中,未实施Posix Sempahores.我研究了要使用的其他可能的同步原始词,并且偶然发现了os_unfair_lock,但看起来不错,但是在文档中,它并不声明它是异步信号安全的. 我如何安全地让线程在条件变量上从信号处理程序中唤醒而不诉诸于轮询原子变量,它将燃烧CPU? 谢谢 编辑:应用程序在C/C ++ 中 解决方案 我求助于使用pipe(). 在注册信号处理程序之前打开管道 int fds[2]; if(pipe(fds) != 0) { LOG(ERROR)
18 2024-04-22
编程技术问答社区
有没有办法在另一个进程收到信号时得到通知?
我知道一个过程如何响应专门发送给它的信号(例如SIGINT,SIGTERM,SIGUSR2等).但是,可以通知一个流程的流程,这些信号已发送到另一个过程? 解决方案 不在标准UNIX或POSIX中,无法通知您发送到另一个过程的信号.请参阅 signal(7) 和 signal-safety(7). 但是, getRusage(2)可以计数信号(某些人回收其他过程).您也可以使用 signalfd(2) 或 ptrace(2) 信号是 btw,请注意,过程组和会话是相关的.另请参见 setpgid(2), setSid(2), corderations(7),也与终端和伪ttys有关(阅读 tty demystified and 我想您的其他问题是关于这些的.但是您在那里没有提到任何一个.
4 2024-04-22
编程技术问答社区
尝试在 Windows 上的 Hotspot JVM 中处理 SIGBREAK 时出现 IllegalArgumentException 异常
我正在尝试使用Sun.misc软件包中的信号处理类(如有记录在此处)在Windows上处理热点JVM中的SIGBREAK,因此我可以在Ctrl+Break上触发关机,而不仅仅是倾倒线程.但是,我遇到了一种触发IllegalArgumentException的情况,说当我尝试设置处理程序时,OS或VM已经处理了Sigbreak.即使我使用-Xrs标志运行JVM,据说也可以禁用Sigbreak信号的处理. 有人在窗户上使用sun.misc.signal有任何经验处理信号吗?有办法解决吗? 解决方案 这似乎是一个令人困惑的话题. 使用-Xrs选项时,JVM不安装控制台控制处理程序,这意味着它不关注或处理CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,CTRL_LOGOFF_EVENT或CTRL_SHUTDOWN_EVENT. P> 请注意,CTRL_BREAK_EVENT不在列表中.因此,确实不受此选项的影响,但是很奇怪,该
6 2024-04-22
编程技术问答社区
Sigaction 的替代方案
我在此类中使用C ++中的sigaction有问题: class SerialHandler{ private: ... /* Action Handling */ struct sigaction receive_handler; /* Called using the receive_handler*/ static void receive_function(int status); /* Get byte from the Serial Port */ unsigned char receive_byte(); /* Buffer for Singalinterrupt on Reciving */ std::vector in_char_buffer; ... }; 我确实需要使用中断,并且确实需要在中断/sigaction上使用成员函数(recection
14 2024-04-22
编程技术问答社区
当进程在 waitpid 中等待时,如何处理信号?
我有一个带有用户定义的信号处理程序的父进程.每当收到信号时,我都会设置一个全局变量,在我的主循环中,我正在检查每个输入处理之前是否收到信号. 我产生一个过程来处理用户输入并使用waitpid收集孩子等待状态.同时,如果父进程收到用户定义的信号,如何有效地处理它? 最小化的代码剪切 #include #include volatile sig_atomic_t g_signal_number =0; void sig_hup_handler() { g_signal_number = SIGHUP; } void do_process_cleanup() { //Execute } int execute_user_input(char *str) { pid_t cpid,w; cpid = fork(); if (cpid == -1) { perro
12 2024-04-22
编程技术问答社区
UNIX 中的信号处理
注册后处理信号后.在信号处理程序函数中,需要再次调用信号()重新注册? 解决方案 检查 this 答案.或尤其是 摘自信号人页. 在原始的Unix系统中,当通过信号传递使用信号()建立的处理程序时,信号的处理将被重置 对于SIG_DFL,系统没有阻止信号的进一步实例的传递.系统V还为信号()提供了这些语义.这很糟糕,因为 在处理程序有机会重建自己之前,可能会再次发出信号.此外,同一信号的快速传递可能会导致递归 处理程序的调用. BSD通过更改信号处理的语义来改善这种情况(但不幸的是,在用信号()建立处理程序时,会默默地改变语义.在BSD上,当调用信号处理程序时,信号处置不是重置,并且信号的进一步实例被阻止在交付时交付 处理程序正在执行. Linux上的情况如下: 内核信号()系统呼叫提供系统v语义. 默认情况下,在GLIBC 2及以后,Signal()包装器函数不会调用内核系统调用.相反,它使用提供BSD语义的标志来调用Sigaction(2).只要定
12 2024-04-22
编程技术问答社区
为什么 ANSI C signal() 函数被认为是坏函数?
我会看到有关该函数文档的警告,有时在堆栈溢出上提到它时说使用POSIX sigaction()函数最好.警告说,在Linux上,功能可能不会像预期的那样行事.这是什么意思? 这些警告之一是在说明部分中 解决方案 如果您要做的就是捕获信号,那么signal仍然可以. 问题是,如果您第二次发出信号,会发生什么?也许当第一个信号处理程序仍在运行时? 在不同的系统下,有不同的答案. 曾经,您的信号处理程序第一次发射时会被检查期,这意味着您每次都必须重新检查它,这意味着如果您有机会重新检查 从那时起,已经进行了各种改进,例如在信号处理程序运行时,阻止了进一步的信号,并且并非总是会删除它们,因此您不必重新检查它们. 但是,如果您只调用signal,您不知道您正在得到哪些行为 - 但差异可能对您很重要. sigaction为您提供对所有这些细节的明确,可预测的控制,因此是首选的. 另请参见您链接的"人物页面"页面部分中的"可移植性"小节: https://m
4 2024-04-22
编程技术问答社区
尝试在 Angular 版本 16 中以信号形式获取 Firebase 版本 9 的 Firestore 数据
我目前正在从事一个Angular 16项目,并使用Firebase版本9用于我的后端.我正在尝试从Firestore检索数据,并以信号形式的可观察流返回.但是,我在实施方面面临一些困难. 这是我到目前为止所拥有的: profile_user_uid = signal(null); // getting the ID as a signal profile_user$ = toSignal( // trying to convert back to signal toObservable(this.profile_user_uid).pipe( tap((uid) => console.log('uid', uid)), // this shows the UID map((uid) => { if (uid) { const user = docData(
8 2024-04-22
编程技术问答社区
使用 os.sytem() 启动子进程时,Python 父进程无法捕获 SIGTERM/SIGINT 信号
我有两个python脚本如下 - parent.py import os import signal shutdown = False def sigterm_handler(signum, frame): global shutdown shutdown = True if __name__ == '__main__': signal.signal(signal.SIGTERM, sigterm_handler) signal.signal(signal.SIGINT, sigterm_handler) os.chdir(os.path.dirname(os.path.abspath(__file__))) cmd = 'python child.py' while True: if shutdown == True: break print 'execu
22 2024-04-22
编程技术问答社区
信号处理器和 waitpid 同时存在
我正在编码C中的外壳,该外壳应支持背景和前景过程. 约束: 终止的背景过程应由信号处理程序捕获 没有全局变量可用于从信号处理程序进行通信 无需允许的过程/PID列表 我的解决方案: 等待直到前景过程终止 对于背景过程,请立即返回提示 处理程序捕获sigchld,在其中使用等待夹来清除进程表 问题: 前景过程还触发处理程序,导致两个等待手中的一个错误 在运行前景过程时无法忽略sigchld来解决,因为背景过程可能在此期间终止 找不到使处理程序忽略特定pid的方法(前景过程开始) 谢谢! 解决方案 问题: 前景过程还触发处理程序,导致两个等待手之一 错误 这不是问题 - 然后离开处理程序. void handler(int signum) { pid_t pid; while (pid = waitpid(-1, NULL, WNOHANG), pid > 0) fprintf
6 2024-04-22
编程技术问答社区
收到信号 SIGSTOP,但 perl 脚本中未设置信号处理程序
我在我的perl脚本中具有以下代码,这些代码似乎不起作用: my $thr; sub start__server_thread() { $thr = threads->create(\&iperf_start_server, $_[0], $_[1], $_[2]); print("Value of thread is $thr\n"); &START_SERVER_RESPONSE($controller_ip, $controller_port, "success", 2345, $_[1]); } sub iperf_start_server() { # Do some stuff here and then handle the signal $SIG{'SIGSTOP'} = sub { print("Stop signal received\n"); $thr->exit();
20 2024-04-22
编程技术问答社区
使用 tokio 以编程方式创建并监听多个信号和滴答间隔时间
我正在尝试以编程方式收听多个信号和滴答间隔. 要清除内容,这是我当前拥有的代码: use std::time::Duration; use tokio::signal::unix::SignalKind; #[tokio::main] async fn main() -> Result> { let mut interval = tokio::time::interval(Duration::from_secs(5)); let sigrtmin = libc::SIGRTMIN(); let program_name = std::env::args().next().unwrap(); println!( "Try executing this command:\nkill -{} $(pidof {})\n", sigrtmin + 2,
14 2024-04-22
编程技术问答社区
了解信号屏蔽和信号暂停
阅读文档后,我仍然不太了解信号阻塞.如果您有阻塞给定信号的掩码,是否需要首先解除该信号以允许程序拦截它或信号阻止以不同的方式行为? 如果您使用sigsuspend,您的程序是否会被暂停,直到您通过参数到达时传递给给定信号? ? 使用Sigsuspend时您是否会等待信号,还是不需要? 顺便说一句,我正在使用c和pthread库来编写我的程序 解决方案 如果您有屏蔽给定信号的掩码,是否需要首先解除该信号以允许程序拦截它或信号阻止以不同的方式行为? 永远不会将信号传递到已阻止其线程的任何线程中.如果在该过程的所有线程都将其阻塞时升高了一个过程的信号,则它一直待定,直到至少限制一个线程,或者该过程终止. 如果您使用sigsuspend,您的程序是否会被暂停,直到您通过参数到达时传递给给定信号? ? 否.您传递给sigsuspend的信号掩码具有与将其传递给(例如)sigprocmask()的含义相同的含义:它指定了一组应阻止的信号集.此掩码不
4 2024-04-22
编程技术问答社区
MariaDB 无法正确使用 SIGNAL
可能相关的: mysql触发定义-1064错误 嗨, 我正在尝试将触发器添加到MariadB 10.4.10-GA中的用户表中.目的是,用户可以设置第二个邮寄地址,但是该邮件地址不得与第一个邮寄地址相同.给定触发器的代码: CREATE TRIGGER MyValidator BEFORE INSERT ON User FOR EACH ROW BEGIN IF NEW.U_Mail LIKE '%_@%_.%' THEN IF NEW.U_AlternateMail LIKE NEW.U_Mail THEN SIGNAL SQLSTATE VALUE '45001' SET MESSAGE_TEXT = 'User - Mail already set'; ELSEIF NEW.U_AlternateMail NOT LIKE '%_@%_.%' THEN SIGNAL SQLSTATE VALUE
32 2024-04-22
编程技术问答社区