web-dev-qa-db-ja.com

Audacityがバックグラウンドで実行されている場合、録音を制御することは可能ですか?

Audacityがバックグラウンドで実行されている間に音声を録音したい。別のウィンドウに集中しているからです。グローバルキーボードショートカットを使用して記録の開始と停止を制御することは可能ですか?

5
orschiro

AudacityにはCLIオプションがありますか?

残念ながら、man audacityを調べても、興味深いオプションや関連するオプションは表示されません。

OPTIONS
       -help     display a brief list of command line options

       -version  display the audacity version number

       -test     run  self  diagnostics  tests  (only  present  in development
                 builds)

       -blocksize nnn
                 set the audacity block size for writing files to disk to  nnn
                 bytes

しかしながら...

cliからAudacityを一時停止/継続することは、記録の一時停止/継続とまったく同じように動作します

kill -stop <pid>およびkill -cont <pid>コマンドを使用して、プロセスとしてAudacityを一時停止することをテストしました。それは完璧に仕事をしました。すぐに記録を停止し、プロセスが続行されるとすぐに再開しました。 6〜7時間後でも、これらのコマンドを使用してすぐに記録を停止/再開します。

2つのコマンドをショートカットキーに追加すると、説明したとおりに正確に実行されます。

使い方

次の2つのコマンドをショートカットキーに追加します。

/bin/bash -c "kill -stop $(pgrep audacity)"

...記録を停止(一時停止)する

/bin/bash -c "kill -cont $(pgrep audacity)"

...再開するには、記録を開始/停止(実際には一時停止)するための独自のショートカットキーが必要です。

Audacity GUIを介して行う必要があるのは、記録の初期startingのみです。

ショートカットキーに追加する

システム設定>「キーボード」>「ショートカット」>「カスタムショートカット」を選択します。 「+」をクリックして、上記の2つのコマンドを2つの異なるショートカットキーに追加します。

拡張オプション

もちろん、オプションを拡張できます。

/bin/bash -c "kill -cont $(pgrep audacity) && notify-send Recording"

そして

/bin/bash -c "kill -stop $(pgrep audacity) && notify-send Stopped"

enter image description here

...現在の状態に関する通知を表示するか、現在の状態を表示するパネルアイコンを作成します。何でも可能です


さらに、コメントで要求されたトグルスクリプト

以下のスクリプトは記録を切り替えます。ショートカットキーに追加するか、他の方法で起動します。

スクリプトは、ファイル/proc/<pid>/statusから現在のプロセス状態を読み取り、ターゲット状態を決定します。

さらに、スクリプトはユーザーに通知で何が起こるかを通知します(notify-sendを使用)。

#!/usr/bin/env python3
import subprocess

try:
    pid = subprocess.check_output(["pgrep", "audacity"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
    pass
else:
    state = "(stopped)" in open("/proc/"+pid+"/status").read()
    if state == True:
        cmd = ["kill", "-cont", pid]; msg = "Recording"
    else:
        cmd = ["kill", "-stop", pid]; msg = "Pausing"
    subprocess.Popen(cmd)
    subprocess.Popen(["notify-send", msg])

それを使用するには

  • 空のファイルにコピーして、toggle_record.pyとして保存します
  • 次のコマンドでテスト実行します:

    python3 /path/to/toggle_record.py
    
  • すべてが正常に機能する場合は、回答で前に説明したように、ショートカットキーに追加します。

5
Jacob Vlijm

ウィンドウがフォーカスされていないときにAudacityを制御できますか?

理論的には、はい、 スクリプトモジュール があり、これは明らかにPerlスクリプト言語で使用できますが、現時点では作成されていないので、Perlスキルの可能性があります開発者が作成します。

しかし、現状では、あなたの質問に対する答えは「いいえ」です。

arecordスクリプト

オープンソースコミュニティの素晴らしいところは、常に代替手段があることです。この場合、arecord、コマンドラインから機能します。以下に表示されているのは、私が作成した非常に簡単なスクリプトで、キーボードショートカットにバインドすることを目的としています。使い方は簡単です。キーの組み合わせを押す-録音が開始され、もう一度押すと録音が停止します。

このスクリプトで「ハードコード化」されているのは、デフォルトのwavタイプの記録と~/Music/recordsフォルダーです。ユーザーは、独自のオプション/ファイルタイプ/場所などを使用したいので、このスクリプトを自由に編集できます。追加のオプションについては、arecord manページを参照してください。

最終的には、このスクリプトをPythonで書き直すことで、ユーザーのディレクトリをよりきめ細かく制御し、コマンドラインオプションなどを追加できるようにする予定です。今のところ、これは仕事の75%を行う必要があります。

以下に、スクリプトのソースコードを示します。これは、私の GitHubリポジトリ でも利用できます。スクリプトを作成および使用するための標準ルールが適用されます。実行可能権限があり、~/binフォルダーに保存されていることを確認してください

#!/bin/bash
# Author: Serg Kolo
# Date: Dec 1, 2016
# Purpose: simple script for recording audio with arecord
# Written for: https://askubuntu.com/q/855893/295286

record_audio()
{
    # Set up some variables to control arecord here
    # Please remember to quote the variables
    # and pay attention to slashes in file paths

    filetype="wav"
    filename="record_$(date +%H_%M_%m_%d_%Y)"
    directory="$HOME/Music/recordings/"

    if ! [ -d "$directory" ];
    then
        mkdir "$directory"
    fi

    # This part will initiate recording of timestamped
    # please see arecord's man page for other options
    notify-send "Recording started"
    exec arecord -t "$filetype" "$directory""$filename"."$filetype"
}

main()
{
    if pgrep -f "arecord" ;
    then
       pkill -f "arecord" && notify-send "Recording stopped"
    else
       record_audio
    fi
}

main "$@"

追加情報:

4

はい。 a scriptxdotoolwmctrlおよびbuntuのホットキーの組み合わせを使用できます。

最初にファイルを作成して記録ウィンドウを選択し、コマンドキーをそのウィンドウに送信します。

次に、ホットキーを割り当ててスクリプトをアクティブにします。

スクリプト

#!/bin/bash

# Specify the Window running your recording by running 
# "./hkrecord.sh getwindowid" from the command line.
# Alternatively you can edit the ~/recordfile and place your own string.  This
# first line of the fie will be used 

# Ensure you have the following "xdotool" and "wmctrl" installed.

recordfile="$HOME/recordfile"

getwindowid(){
    windowid=$(wmctrl -lp | awk '{$2=$3=$4=":"; print $0}'| awk -F: \
'{print $1"\n"$4}' | zenity --list --column="No" --height=800 --width=1000 \
--column="Select your choice" \
--text="Text above column(s)" --hide-column=1 --title="My menu" 2>/dev/null)
    [[ "$windowid" ]] && sed -i "1i @$windowid" $recordfile || \
echo "No Window selected"
    exit
}

if [ ! $# -eq 0 ]; then
    if [[ "x$1" == *"get"* ]]; then     
        echo "Getting the window id"
        getwindowid
        exit
    fi
fi

recordwindow="$(head -n1 $recordfile)"

if [ "$(echo $recordwindow | egrep '@0x')" ]; then
    windowid=$(echo $recordwindow | sed "s/\@//")
else
    windowid=$(echo $(wmctrl -lp|egrep -i $recordwindow)|head -n1|\
awk '{print $1}')
    echo "$windowid|$recordfwindow"  # debug line... can be commented out.
fi

echo "Using WindowID: $windowid" # debug line... can be commented out.

if [ -z $windowid ]; then
    espeak "Can't locate specified window!"
    espeak "Exiting..."
    exit
fi

xdotool key --window $windowid p

/usr/local/bin/hkrecord.shなどの便利な領域にスクリプトを保存します

ホットキーを割り当てる

最初に、簡単なテストとしてコマンドラインからスクリプトを実行します。次に、グローバルキーボードショートカットを割り当てます。ウィンドウを指定するには(1回だけ必要)実行します:

$ ./hkrecord.sh getwindow

引数なしでhkrecord.shを実行すると、記録が制御されます。

System Settings-> keyboardに移動し、カスタムキーボードショートカットを追加します。フォアグラウンドプログラムと競合しないホットキーを選択します。私が使う Shift+Ctrl+P

これは、カスタムショートカットの構成です。

名前:ホットキーレコード
コマンド:/usr/local/bin/hkrecord.sh

スクリプトファイルにコメントとして指示を配置しました。

追加の利点として、同じグローバルホットキーを再生の一時停止に使用できます。私はこのシステムをディクタフォンとして使用して、録音したメモから書き込みます。

わかりやすくカスタマイズしやすいように、スクリプトを非常にシンプルにしようとしました。完全にテストされ、シームレスに動作します。

注:don_crisstiおよびGeorge_Vasiliouに感謝します( https://unix.stackexchange.com/a/328548/81664 )レコードウィンドウ。

1
L. D. James