Enable editing with Audacity

Fixes #28
This commit is contained in:
Keith Edmunds 2021-08-22 17:42:31 +01:00
parent 70d986f4ac
commit c5f094443a
5 changed files with 76 additions and 1 deletions

View File

@ -1,3 +1,6 @@
import os
import psutil
from datetime import datetime
from PyQt5.QtWidgets import QMessageBox
@ -37,6 +40,48 @@ def get_relative_date(past_date, reference_date=None):
return f"{weeks} {weeks_str}, {days} {days_str} ago"
def open_in_audacity(path):
"""
Open passed file in Audacity
Return True if apparently opened successfully, else False
"""
# Return if audacity not running
if "audacity" not in [i.name() for i in psutil.process_iter()]:
return False
to_pipe = '/tmp/audacity_script_pipe.to.' + str(os.getuid())
from_pipe = '/tmp/audacity_script_pipe.from.' + str(os.getuid())
EOL = '\n'
def send_command(command):
"""Send a single command."""
to_audacity.write(command + EOL)
to_audacity.flush()
def get_response():
"""Return the command response."""
result = ''
line = ''
while True:
result += line
line = from_audacity.readline()
if line == '\n' and len(result) > 0:
break
return result
def do_command(command):
"""Send one command, and return the response."""
send_command(command)
response = get_response()
return response
with open(to_pipe, 'w') as to_audacity, open(
from_pipe, 'rt') as from_audacity:
do_command(f'Import2: Filename="{path}"')
def show_warning(title, msg):
"Display a warning to user"

View File

@ -2,6 +2,7 @@
import webbrowser
import os
import psutil
import sys
import urllib.parse
@ -80,6 +81,7 @@ class Window(QMainWindow, Ui_MainWindow):
self.load_last_playlists()
self.enable_play_next_controls()
self.check_audacity()
self.timer.start(Config.TIMER_MS)
def add_file(self):
@ -112,6 +114,14 @@ class Window(QMainWindow, Ui_MainWindow):
height = record.f_int or 981
self.setGeometry(x, y, width, height)
def check_audacity(self):
"Warn user if Audacity not running"
if "audacity" in [i.name() for i in psutil.process_iter()]:
return
helpers.show_warning("Audacity check", "Audacity is not running")
def clear_selection(self):
if self.visible_playlist_tab():
self.visible_playlist_tab().clearSelection()

View File

@ -17,7 +17,7 @@ import os
from config import Config
from datetime import datetime, timedelta
from helpers import get_relative_date, show_warning
from helpers import get_relative_date, open_in_audacity, show_warning
from log import DEBUG, ERROR
from model import (
Notes, Playdates, Playlists, PlaylistTracks, Session, Settings, Tracks
@ -181,6 +181,9 @@ class PlaylistTab(QTableWidget):
lambda: self._copy_path(row))
act_rescan = self.menu.addAction("Rescan track")
act_rescan.triggered.connect(lambda: self._rescan(row))
act_audacity = self.menu.addAction(
"Open track in Audacity")
act_audacity.triggered.connect(lambda: self._audacity(row))
self.menu.addSeparator()
act_delete = self.menu.addAction('Delete')
act_delete.triggered.connect(self._delete_rows)
@ -551,6 +554,20 @@ class PlaylistTab(QTableWidget):
# ########## Internally called functions ##########
def _audacity(self, row):
"Open track in Audacity. Audacity must be already running"
DEBUG(f"_audacity({row})")
if row in self._meta_get_notes():
return None
track_id = self._get_row_id(row)
if track_id:
with Session() as session:
track = Tracks.get_track(session, track_id)
open_in_audacity(track.path)
def _calculate_next_start_time(self, session, row, start):
"Return this row's end time given its start time"

0
audacity_control.py Normal file → Executable file
View File

View File

@ -17,6 +17,7 @@ parso==0.8.2
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.18
psutil==5.8.0
ptyprocess==0.7.0
pycodestyle==2.7.0
pydub==0.25.1
@ -25,6 +26,8 @@ Pygments==2.8.1
PyQt5==5.15.4
PyQt5-Qt5==5.15.2
PyQt5-sip==12.8.1
PyQtWebEngine==5.15.4
PyQtWebEngine-Qt5==5.15.2
python-dateutil==2.8.1
python-editor==1.0.4
python-slugify==5.0.0