GNU/Linux >> Linux の 問題 >  >> Ubuntu

出力オーディオをバックグラウンドで録音するためのサービスを設定するにはどうすればよいですか?

バックグラウンドで実行され、スピーカーが話し始めるたびにスピーカーの出力を記録し、スピーカーが停止すると停止するサービスを作成しようとしています。

この目的のために次のbashを作成しましたが、期待どおりに機能します。

echo "Monitoring sound card for recordings"
name="record"
name=~/recordings/$name
while true 
do
        echo "Monitoring speaker sound "
        now="$(date +'%m-%d-%H-%M-%S')"
        parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -v 5 -t raw -b 16 -e signed -c 2 -r 44100 - "$name"-"$now".ogg silence 1 0.1 3% 1 3.0 3%

        #test $? -eq 0 && break;
        echo "$name-$now was recorded"
done

それをサービスにするために、私はmyrecを作成しました /etc/init.d/にあります 次のように:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          myrec
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: your description here
### END INIT INFO

PATH=/home/ahmad/recordings
DESC="Recording audio output"
NAME=myrec
DAEMON=/home/ahmad/recordings/myrec.sh
DAEMON_ARGS="s read"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

再起動後、sudo service myrec statusでステータスを確認すると、自動的に実行されると思っていました。 、次のように表示されます:

● myrec.service - LSB: your description here
     Loaded: loaded (/etc/init.d/myrec; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)

だから私はsudo service myrec startで始めました 現在のステータスは次のとおりです:

● myrec.service - LSB: your description here
     Loaded: loaded (/etc/init.d/myrec; generated)
     Active: active (exited) since Wed 2020-07-22 15:23:24 +0430; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 3714 ExecStart=/etc/init.d/myrec start (code=exited, status=0/SUCCESS)

جولای 22 15:23:24 app systemd[1]: Starting LSB: your description here...
جولای 22 15:23:24 app systemd[1]: Started LSB: your description here.

実行されているかどうかはわかりませんが、何かを再生して停止すると、指定されたフォルダに何も記録されません。

何が悪いのか教えてもらえますか?ちなみに、同じ機能のツールがあれば、それを紹介してもらえますか…

更新:

録音サービスにはpulseaudioが必要ですのでご注意ください 実行するサービスであり、システム全体のサービスでない場合は、開始時に実行されないため、上記の問題が発生する可能性があります

承認された回答:

pulseaudio はユーザーサービスとして実行され、スクリプトをsysemdサービスとして実行する前に、システム全体のサービスにするなどの変更を行う必要があります。そうしないと、接続エラーが発生します。

ただし、bashスクリプトを実行するシステムサービスを作成する場合は、次の手順に従ってください。

まず、 ターミナルで次のコマンドを実行して、起動時にシェルスクリプトを実行するカスタムsystemdサービスを作成および編集します。

sudo nano /etc/systemd/system/MyRec.service 

2番目、 次のコードをコピーしてエディタに貼り付け、/FULL/PATH/TO/SCRIPTを置き換えます スクリプトへの実際のフルパス Ctrlを押して保存します + X 次に、 Yを押します 次に、 Enterを押します。 :

[Unit]
Description=MyRec service
After=gdm.service

[Service]
Type=oneshot
ExecStart=/FULL/PATH/TO/SCRIPT

[Install]
WantedBy=multi-user.target

3番目 ターミナルで次のコマンドを実行してサービスを開始します。

sudo systemctl start MyRec

最後に、 ターミナルで次のコマンドを実行して、サービスを有効にします。

sudo systemctl enable MyRec

正しく実行するために、必ずシバン#!/bin/bashを追加してください。 スクリプトの最初の行で次のようになります:

#!/bin/bash

echo "Monitoring sound card for recordings"
name="record"
name=~/recordings/$name
while true 
do
        echo "Monitoring speaker sound "
        now="$(date +'%m-%d-%H-%M-%S')"
        parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -v 5 -t raw -b 16 -e signed -c 2 -r 44100 - "$name"-"$now".ogg silence 1 0.1 3% 1 3.0 3%

        #test $? -eq 0 && break;
        echo "$name-$now was recorded"
done

また、chmod +xを実行して、スクリプトファイルを実行可能にします。 そのように:

chmod +x scriptfile

Ubuntu
  1. LinuxでユーザーのSudo権限を設定する方法

  2. コマンドラインからHdmiへのオーディオ出力を変更するにはどうすればよいですか?

  3. WHMCS用のCWPモジュールのセットアップ方法

  1. Ubuntu16.04でHAProxyをセットアップする方法

  2. Ubuntu18.04でMySecureShellSFTPサーバーをセットアップする方法

  3. systemd サービスの ulimit 値を設定する方法

  1. Ubuntu21.04でPipeWireAudioServiceを有効にしてPulseAudioを置き換える方法

  2. Systemdのスタートアップスクリプトを書く方法は?

  3. systemd サービスの出力をファイルにリダイレクトする方法