<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Modartt user forum - A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
		<link>https://forum.modartt.com/viewtopic.php?id=8268</link>
		<description><![CDATA[The most recent posts in A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B.]]></description>
		<lastBuildDate>Tue, 17 Feb 2026 16:04:20 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006986#p1006986</link>
			<description><![CDATA[<p>Well I wasn&#039;t successful with the script. So I just installed it manually since I was able to sideload cpupower. It would still be nice to have the script running properly. I&#039;m sure I made some simple syntax error when updating the script... maybe someone will see what I missed.</p><p>If anyone wants to tinker with it, here it is:</p><div class="codebox"><pre><code>#!/usr/bin/env python3
# coding: utf-8

import dbm
import os
import re
import stat
import subprocess
import sys

PIANOTEQ_VERSION = 9
USERNAME = os.getlogin()
HOME = f&quot;/home/{USERNAME}&quot;
DEFAULT_INSTALL_LOCATION = HOME
CONFIG_PATH = f&#039;{HOME}/.config/pianoteq-pi.dbm&#039;
script_dir, script_filename = os.path.split(__file__)


def hl(text, style=1, margin=False):
    # style: https://misc.flogisoft.com/bash/tip_colors_and_formatting
    nl = &#039;\n&#039; if margin else &#039;&#039;
    return f&#039;{nl}\033[{style}m{text}{nl}\033[0m&#039;


def notify(text):
    print(hl(text, style=7, margin=True))


def run(*args, interact=True, **kwargs):
    if interact:
        print(hl(&#039;# &#039;, 2) + hl(&#039; &#039;.join([f&#039;&quot;{a}&quot;&#039; if &#039; &#039; in a else a for a in args])))
        kwargs.update(stdout=sys.stdout, stderr=sys.stderr)
    else:
        kwargs.update(capture_output=True)
    result = subprocess.run(args, check=True, text=True, **kwargs).stdout
    if result:
        return result.strip()
    else:
        return &#039;&#039;


if os.getuid():
    # exit if non-root
    sys.exit(f&#039;Please run as root like this:\n{hl(&quot;$&quot;, 2)} &#039; + hl(f&#039;sudo python3 {script_filename}&#039;))


class RPOS:
    cmdline_path = &#039;/boot/cmdline.txt&#039;
    config_path = &#039;/boot/config.txt&#039;
    security_limits_path = &#039;/etc/security/limits.conf&#039;

    def __init__(self):
        self.issue_date = None
        self.arch = None
        self._get_issue_date()
        self._get_arch()
        try:
            self.arch_bit = dict(aarch64=&#039;arm-64bit&#039;, armv7l=&#039;arm-32bit&#039;, x86_64=&#039;x86-64bit&#039;)[self.arch]
        except KeyError:
            raise EnvironmentError(f&#039;Unknown arch: {self.arch}&#039;)
        self.reboot_required = False

    def _get_issue_date(self):
        rpi_issue = run(&#039;cat&#039;, &#039;/etc/rpi-issue&#039;, interact=False)
        m = re.search(r&#039;[\d\-]{10}&#039;, rpi_issue)
        if not m:
            raise EnvironmentError(&#039;Please run on Raspberry Pi OS&#039;)
        self.issue_date = m.group()

    def _get_arch(self):
        self.arch = run(&#039;uname&#039;, &#039;-m&#039;, interact=False)

    def _config_modifier(self, path, rp_to_remove: re.Pattern, new_items: list, sep=&#039;\n&#039;):
        with open(path) as fp:
            old_config = fp.read()
        new_config = [line for line in old_config.strip().split(sep) if not rp_to_remove.search(line)]
        new_config = sep.join(new_config).strip(sep)
        new_config += sep + sep.join(new_items) + sep
        if new_config != old_config:
            with open(path, &#039;w&#039;) as fp:
                fp.write(new_config)
            self.reboot_required = True
            return new_config

    def set_default_resolution(self):
        notify(&#039;Setting default resolution ...&#039;)
        self._config_modifier(
            path=self.config_path,
            rp_to_remove=re.compile(r&#039;^\s*(hdmi_force_hotplug|hdmi_group|hdmi_mode)\b&#039;),
            new_items=[&#039;hdmi_force_hotplug=1&#039;, &#039;hdmi_group=2&#039;, &#039;hdmi_mode=4&#039;],
        )

    def overclock_cpu(self, freq=None, voltage=None):
        notify(f&#039;Overclocking CPU: freq={freq} over_voltage_delta={voltage} ...&#039;)
        self._config_modifier(
            path=self.config_path,
            rp_to_remove=re.compile(r&#039;^\s*(arm_freq|over_voltage_delta|over_voltage)\b&#039;),
            new_items=[f&#039;arm_freq={freq or 3000}&#039;, f&#039;over_voltage_delta={voltage or 50000}&#039;] if freq else [],
        )

    def disable_smsc95xx_turbo_mode(self):
        notify(&#039;Disabling smsc95xx.turbo_mode ...&#039;)
        self._config_modifier(
            path=self.cmdline_path,
            rp_to_remove=re.compile(r&#039;^\s*smsc95xx\.turbo_mode\b&#039;),
            new_items=[&#039;smsc95xx.turbo_mode=N&#039;],
            sep=&#039; &#039;
        )

    def modify_account_limits(self):
        notify(&#039;Modifying account limits ...&#039;)
        self._config_modifier(
            path=self.security_limits_path,
            rp_to_remove=re.compile(r&#039;^\s*^@audio\s*-\s*(rtprio|nice|memlock)\s+&#039;),
            new_items=[
                &#039;@audio - rtprio 90&#039;,
                &#039;@audio - nice -10&#039;,
                &#039;@audio - memlock 500000&#039;
            ]
        )


rp = RPOS()


class Pianoteq:
    desktop_entry_path = f&#039;{HOME}/Desktop/pianoteq.desktop&#039;
    service_path = &#039;/lib/systemd/system/pianoteq.service&#039;
    all_arch_bits = [&#039;arm-64bit&#039;, &#039;arm-32bit&#039;, &#039;x86-64bit&#039;]

    def __init__(self, parent_dir=None):
        self.parent_dir = parent_dir or DEFAULT_INSTALL_LOCATION
        self.pianoteq_dir = None
        self.edition_suffix = None
        self.find_existing_installation()

    def find_existing_installation(self):
        for root, folders, files in os.walk(self.parent_dir):
            for folder in folders:
                m = re.search(r&#039;^Pianoteq &#039; + str(PIANOTEQ_VERSION) + r&#039;( \w+)?$&#039;, folder)
                if m:
                    path = os.path.join(root, folder)
                    if rp.arch_bit in os.listdir(path) and os.path.isdir(os.path.join(path, rp.arch_bit)):
                        self.edition_suffix = m.group(1) or &#039;&#039;
                        self.pianoteq_dir = path
                        return self.pianoteq_dir
            break

    @staticmethod
    def install_dependencies():
        def which_cmd(cmd):
            try:
                return run(&#039;which&#039;, cmd, interact=False)
            except subprocess.CalledProcessError as e:
                if e.returncode == 1:
                    return False

        if which_cmd(&#039;7za&#039;) and which_cmd(&#039;cpupower-set&#039;):
            return
        notify(&#039;Installing dependencies ...&#039;)
        run(&#039;apt&#039;, &#039;update&#039;)
        run(&#039;apt&#039;, &#039;install&#039;, &#039;p7zip-full&#039;, &#039;cpupower&#039;, &#039;-y&#039;)

    @staticmethod
    def _find_installer_package():
        for fn in os.listdir(os.curdir):
            if re.search(r&#039;^pianoteq\w*_linux_v?\d*\.(7z|zip)$&#039;, fn) and os.path.isfile(fn):
                return fn
        else:
            raise LookupError(&#039;Unable to find installer package.&#039;)

    def extract_package(self):
        package_path = self._find_installer_package()
        notify(f&#039;Extracting package {package_path} ...&#039;)
        content_list = run(&#039;7za&#039;, &#039;l&#039;, &#039;-slt&#039;, package_path, interact=False)
        root_dir = re.search(r&#039;^-{5,}\n^Path = (.+)$&#039;, content_list, re.M).group(1).split(&#039;/&#039;)[0]
        m = re.search(r&#039;^Pianoteq \d+( \w+)?$&#039;, root_dir)
        self.edition_suffix = m.group(1) or &#039;&#039;
        exclusion = self.all_arch_bits[:]
        exclusion.remove(rp.arch_bit)
        exclusion = [&#039;-xr!&#039; + e for e in exclusion]
        run(&#039;7za&#039;, &#039;x&#039;, package_path, &#039;-o&#039; + self.parent_dir, &#039;-aoa&#039;, *exclusion)
        self.pianoteq_dir = os.path.join(self.parent_dir, root_dir)
        return self.pianoteq_dir

    @property
    def start_sh_path(self):
        return os.path.join(self.pianoteq_dir, &#039;start.sh&#039;)

    def create_start_sh(self):
        notify(&#039;Creating start.sh for Pianoteq ...&#039;)
        start_sh_content = f&quot;&quot;&quot;#!/bin/bash

exec_path=&quot;{self.pianoteq_dir}/{rp.arch_bit}/Pianoteq {PIANOTEQ_VERSION}{self.edition_suffix}&quot;
base_args=&quot;--multicore max --do-not-block-screensaver --midimapping TouchOSC&quot;

base_cmd=(&quot;${{exec_path}}&quot; $base_args)

sudo cpupower-set -r -g performance

if [ &quot;$#&quot; -eq 0 ] ; then
    # open directly
    sudo systemctl stop pianoteq
    &quot;${{base_cmd[@]}}&quot;
    sudo systemctl start pianoteq
else
    # run from systemctl
    &quot;${{base_cmd[@]}}&quot; &quot;$@&quot;
fi

sudo cpupower frequency-set -g performance
&quot;&quot;&quot;
        with open(self.start_sh_path, &#039;w&#039;) as fp:
            fp.write(start_sh_content)
        os.chmod(self.start_sh_path, os.stat(self.start_sh_path).st_mode | stat.S_IEXEC)

    def create_service(self):
        notify(&#039;Creating service for Pianoteq ...&#039;)
        service_content = f&quot;&quot;&quot;[Unit]
Description=Start Pianoteq {PIANOTEQ_VERSION}{self.edition_suffix}
After=graphical.target

[Service]
User={USERNAME}
Environment=DISPLAY=:0
Environment=XAUTHORITY={HOME}/.Xauthority
ExecStart=&#039;{self.pianoteq_dir}/start.sh&#039; --headless
Restart=on-failure
RestartSec=2s
KillMode=control-group
TimeoutSec=infinity

[Install]
WantedBy=graphical.target
&quot;&quot;&quot;
        with open(self.service_path, &#039;w&#039;) as fp:
            fp.write(service_content)
        run(&#039;systemctl&#039;, &#039;daemon-reload&#039;)
        run(&#039;sudo&#039;, &#039;systemctl&#039;, &#039;enable&#039;, &#039;pianoteq&#039;)

    def create_desktop_entry(self):
        notify(&#039;Creating desktop entry for Pianoteq ...&#039;)
        desktop_entry_content = f&quot;&quot;&quot;[Desktop Entry]
Name=Pianoteq {PIANOTEQ_VERSION}
Exec=&quot;{self.pianoteq_dir}/start.sh&quot;
Type=Application
Icon={self.pianoteq_dir}/icon.png
Comment=Fourth Generation Piano Instrument
Terminal=false
&quot;&quot;&quot;
        run(
            &#039;wget&#039;,
            &#039;https://raw.githubusercontent.com/youfou/pianoteq-pi/main/icon.png&#039;,
            &#039;-O&#039;, f&#039;{os.path.join(self.pianoteq_dir, &quot;icon.png&quot;)}&#039;
        )

        with open(self.desktop_entry_path, &#039;w&#039;) as fp:
            fp.write(desktop_entry_content)
        run(&#039;desktop-file-validate&#039;, self.desktop_entry_path)

    def install(self):
        notify(f&#039;Installing Pianoteq to {self.parent_dir} ...&#039;)
        self.install_dependencies()
        try:
            self.extract_package()
        except LookupError:
            notify(&#039;Pianoteq 7z/zip package not found&#039;)
            sys.exit(
                &#039;Please download Pianoteq from Modartt website and put the 7z/zip package under the same folder.\n&#039;
                &#039;Download: https://www.modartt.com/user_area#downloads&#039;
            )
        self.create_start_sh()
        self.create_desktop_entry()
        self.create_service()
        run(&#039;chown&#039;, &#039;-R&#039;, f&#039;{USERNAME}:{USERNAME}&#039;, self.pianoteq_dir)
        rp.set_default_resolution()
        rp.disable_smsc95xx_turbo_mode()
        rp.modify_account_limits()
        run(&#039;systemctl&#039;, &#039;start&#039;, &#039;pianoteq&#039;)
        notify(&#039;Pianoteq has been installed/updated.&#039;)

    def uninstall(self):
        notify(f&#039;Uninstalling Pianoteq from {self.parent_dir} ...&#039;)
        run(&#039;systemctl&#039;, &#039;stop&#039;, &#039;pianoteq&#039;)
        run(&#039;systemctl&#039;, &#039;disable&#039;, &#039;pianoteq&#039;)
        run(&#039;rm&#039;, self.service_path)
        run(&#039;systemctl&#039;, &#039;daemon-reload&#039;)
        run(&#039;rm&#039;, self.desktop_entry_path)
        run(&#039;rm&#039;, &#039;-rf&#039;, self.pianoteq_dir)
        self.pianoteq_dir = None
        self.edition_suffix = None
        notify(&#039;Pianoteq has been uninstalled.&#039;)


def number_menu(callbacks: list):
    while True:
        for i, (prompt, _) in enumerate(callbacks):
            print(f&#039;{i + 1}. {prompt}&#039;)
        choice = input(&#039;\nEnter a number or &quot;q&quot; to quit: &#039;).strip()
        if choice.lower().startswith(&#039;q&#039;):
            sys.exit(0)
        number = int(choice)
        if number &lt;= len(callbacks):
            return callbacks[number - 1][1]()


def ask_to_overclock_cpu():
    oc_3000_5 = lambda: rp.overclock_cpu(3000, 50000)
    oc_2000_6 = lambda: rp.overclock_cpu(2000, 60000)
    oc_1750_2 = lambda: rp.overclock_cpu(1750, 20000)
    cancel_oc = lambda: rp.overclock_cpu()
    notify(&#039;Would you like to overclock the CPU of your Raspberry Pi?&#039;)
    return number_menu([
        (&#039;Overclock to 3000 MHz @ 5th voltage level (recommended for Pi5)&#039;, oc_3000_5),
        (&#039;Overclock to 2000 MHz @ 6th voltage level&#039;, oc_2000_6),
        (&#039;Overclock to 1750 MHz @ 2nd voltage level&#039;, oc_1750_2),
        (&#039;Restore back to the stock CPU frequency and voltage&#039;, cancel_oc),
    ])


if __name__ == &#039;__main__&#039;:
    notify(&#039;System version:&#039;)
    print(f&#039;Raspberry Pi OS {rp.arch_bit} ({rp.issue_date})&#039;)
    notify(&#039;Specify install location for Pianoteq&#039;)
    with dbm.open(CONFIG_PATH, &#039;c&#039;) as db:
        install_location = db.setdefault(&#039;install_location&#039;, DEFAULT_INSTALL_LOCATION.encode()).decode()
        install_location = input(f&#039;Install location (default: &quot;{install_location}&quot;): &#039;).strip() or install_location
        if not os.path.exists(install_location):
            to_create = input(f&#039;&quot;{install_location}&quot; does not exist. Would you like to create it now? (Y/n)&#039;)
            if to_create.strip().lower().startswith(&#039;y&#039;) or not to_create:
                os.makedirs(install_location)
                run(&#039;chown&#039;, f&#039;{USERNAME}:{USERNAME}&#039;, install_location)
            else:
                sys.exit(0)
        db[&#039;install_location&#039;] = install_location
        pt = Pianoteq(install_location)
    if pt.pianoteq_dir:
        notify(&#039;You have already installed Pianoteq. What would you like to do?&#039;)
        number_menu([
            (&#039;Re-install / Update&#039;, pt.install),
            (&#039;Uninstall&#039;, pt.uninstall),
            (&#039;Overclock CPU or cancel overclocking&#039;, ask_to_overclock_cpu)
        ])

    else:
        pt.install()
        ask_to_overclock_cpu()
    if rp.reboot_required:
        reboot = input(&#039;Your system has been tweeted during the installation, reboot now? (Y/n): &#039;)
        if reboot.strip().lower().startswith(&#039;y&#039;) or not reboot:
            run(&#039;reboot&#039;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (chrish)]]></author>
			<pubDate>Tue, 17 Feb 2026 16:04:20 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006986#p1006986</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006945#p1006945</link>
			<description><![CDATA[<div class="quotebox"><cite>jari_42 wrote:</cite><blockquote><p>So cpufrequtils got removed from the latest OS which is why the script is failing. The recommended replacement is <strong>linux-cpupower</strong> which has similar usage: <br /></p><div class="codebox"><pre><code>sudo cpupower frequency-set -g performance</code></pre></div><p>You can absolutely edit the setup.py file locally, it&#039;s just a Python script. Hopefully hillcow can update his excellent script.</p></blockquote></div><p>Please forgive my ignorance in this matter.</p><p>I was able to bypass the first issue by just creating my own repository. That was much simpler than spending a bunch of time trying to do it locally.</p><p>I am experiencing issues with cpupower. I keep seeing errors where it is unable to locate the package for cpupower. I proceeded to install it with the package manager, which didn&#039;t change anything. I&#039;m so close to victory that I can taste it... but it&#039;s still slightly out of reach. Once I get it figured out I&#039;ll post the updated setup.py for those that are interested.</p>]]></description>
			<author><![CDATA[null@example.com (chrish)]]></author>
			<pubDate>Sat, 14 Feb 2026 20:07:01 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006945#p1006945</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006875#p1006875</link>
			<description><![CDATA[<p>I recently discovered a new distribution called <strong>Pianoberry</strong>. It uses a Pisound hat. It&#039;s a ready-to-use image to copy to your SD card for a minimal setup optimized for low latency. It runs headless, so there is nothing to distract you from playing. <i class="far fa-smile smiley"></i> I managed to get it up and running quite quickly, and wrote a short <a href="https://community.blokas.io/t/pianoberry-pianoteq-8-1-33-ms-latency-on-raspberry-pi-5/5627/71?u=orcmeal"><strong>Pianoberry install guide</strong></a> to help others get going.</p>]]></description>
			<author><![CDATA[null@example.com (Orcmeal)]]></author>
			<pubDate>Tue, 10 Feb 2026 17:30:05 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006875#p1006875</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006850#p1006850</link>
			<description><![CDATA[<p>Thanks for sharing that info! It tracks with what I was suspecting, but didn&#039;t know enough about it to be sure.</p><p>I&#039;ll update the setup.py and figure out how to pull in into that line locally instead of pointing it at the GitHub. I&#039;m sure there&#039;s documentation somewhere. Linux people are really good about sharing that kind of stuff.</p>]]></description>
			<author><![CDATA[null@example.com (chrish)]]></author>
			<pubDate>Mon, 09 Feb 2026 16:36:23 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006850#p1006850</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006843#p1006843</link>
			<description><![CDATA[<p>So cpufrequtils got removed from the latest OS which is why the script is failing. The recommended replacement is <strong>linux-cpupower</strong> which has similar usage: <br /></p><div class="codebox"><pre><code>sudo cpupower frequency-set -g performance</code></pre></div><p>You can absolutely edit the setup.py file locally, it&#039;s just a Python script. Hopefully hillcow can update his excellent script.</p>]]></description>
			<author><![CDATA[null@example.com (jari_42)]]></author>
			<pubDate>Mon, 09 Feb 2026 06:21:41 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006843#p1006843</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=1006833#p1006833</link>
			<description><![CDATA[<div class="quotebox"><cite>hillcow wrote:</cite><blockquote><div class="quotebox"><cite>OhmGroan wrote:</cite><blockquote><p>Hello.<br />I am receiving an error while executing hillcow&#039;s above script.</p><p> &lt;title&gt;pianoteq-pi/setup.py at main · Hillcow/pianoteq-pi · GitHub&lt;/title&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^<br />SyntaxError: invalid character &#039;·&#039; (U+00B7)</p><p>I am running RPI 5 with a clean install of Raspbian 64.</p><p>Any help greatly appreciated.</p></blockquote></div><p>Please try this instead:</p><div class="codebox"><pre><code>wget -qO setup.py https://raw.githubusercontent.com/ven0ms99/pianoteq-pi/main/setup.py &amp;&amp; sudo python3 setup.py</code></pre></div></blockquote></div><p>Hi there. do you know if this script is still current? It looks like it might be expecting an element of 7zip that is outdated in the script.&nbsp; I&#039;m moderately savvy at best so I&#039;m not sure if I&#039;m reading that correctly.</p><p>When i run it I&#039;m seeing the following message:<br /></p><div class="codebox"><pre><code># apt update
Hit:1 http://deb.debian.org/debian trixie InRelease
Hit:2 http://deb.debian.org/debian trixie-updates InRelease
Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Get:4 http://deb.debian.org/debian-security trixie-security/main armhf Packages [96.3 kB]
Get:5 http://deb.debian.org/debian-security trixie-security/main arm64 Packages [102 kB]
Get:6 http://deb.debian.org/debian-security trixie-security/main Translation-en [65.2 kB]
Hit:7 http://archive.raspberrypi.com/debian trixie InRelease    
Fetched 307 kB in 3s (106 kB/s)                           
All packages are up to date.    
# apt install p7zip-full cpufrequtils -y
Package cpufrequtils is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

Error: Package &#039;cpufrequtils&#039; has no installation candidate
Traceback (most recent call last):
  File &quot;/home/chris/modartt/setup.py&quot;, line 346, in &lt;module&gt;
    pt.install()
    ~~~~~~~~~~^^
  File &quot;/home/chris/modartt/setup.py&quot;, line 263, in install
    self.install_dependencies()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File &quot;/home/chris/modartt/setup.py&quot;, line 162, in install_dependencies
    run(&#039;apt&#039;, &#039;install&#039;, &#039;p7zip-full&#039;, &#039;cpufrequtils&#039;, &#039;-y&#039;)
    ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File &quot;/home/chris/modartt/setup.py&quot;, line 35, in run
    result = subprocess.run(args, check=True, text=True, **kwargs).stdout
             ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File &quot;/usr/lib/python3.13/subprocess.py&quot;, line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command &#039;(&#039;apt&#039;, &#039;install&#039;, &#039;p7zip-full&#039;, &#039;cpufrequtils&#039;, &#039;-y&#039;)&#039; returned non-zero exit status 100. </code></pre></div><br /><p>Edited to add-</p><p>I was in a rush for my original post. I was able to go back and read in more detail. The cpufrequtils appears to be the tweaked settings for Pianoteq. </p><p>Can I edit that setup.py file locally and include it in the script instead of the github link? I&#039;m sure it&#039;s possible, I&#039;ve just never attempted it. I&#039;ll mess around with it and see if I can figure it out.</p>]]></description>
			<author><![CDATA[null@example.com (chrish)]]></author>
			<pubDate>Sun, 08 Feb 2026 20:20:28 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=1006833#p1006833</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=998551#p998551</link>
			<description><![CDATA[<div class="quotebox"><cite>OhmGroan wrote:</cite><blockquote><p>Hello.<br />I am receiving an error while executing hillcow&#039;s above script.</p><p> &lt;title&gt;pianoteq-pi/setup.py at main · Hillcow/pianoteq-pi · GitHub&lt;/title&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^<br />SyntaxError: invalid character &#039;·&#039; (U+00B7)</p><p>I am running RPI 5 with a clean install of Raspbian 64.</p><p>Any help greatly appreciated.</p></blockquote></div><p>Please try this instead:</p><div class="codebox"><pre><code>wget -qO setup.py https://raw.githubusercontent.com/ven0ms99/pianoteq-pi/main/setup.py &amp;&amp; sudo python3 setup.py</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (hillcow)]]></author>
			<pubDate>Thu, 12 Sep 2024 10:12:32 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=998551#p998551</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=996605#p996605</link>
			<description><![CDATA[<div class="quotebox"><cite>Kontrabass wrote:</cite><blockquote><p>Hi guys,</p><p>does anyone run Pianoteq 8 on a Raspberry Pi 4 (64bit)? I have tried out but the app didn&#039;t <a href="https://buyweedseedsonline.com">start</a>. Pianoteq 7 works well.</p></blockquote></div><p>I don&#039;t have a Raspberry Pi, but I own an Odroid N2. I&#039;ll give it a try and let you know!</p>]]></description>
			<author><![CDATA[null@example.com (Evaffek)]]></author>
			<pubDate>Wed, 24 Apr 2024 10:50:29 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=996605#p996605</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=996571#p996571</link>
			<description><![CDATA[<p>Hello.<br />I am receiving an error while executing hillcow&#039;s above script.</p><p> &lt;title&gt;pianoteq-pi/setup.py at main · Hillcow/pianoteq-pi · GitHub&lt;/title&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^<br />SyntaxError: invalid character &#039;·&#039; (U+00B7)</p><p>I am running RPI 5 with a clean install of Raspbian 64.</p><p>Any help greatly appreciated.</p>]]></description>
			<author><![CDATA[null@example.com (OhmGroan)]]></author>
			<pubDate>Sun, 21 Apr 2024 12:58:29 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=996571#p996571</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=995421#p995421</link>
			<description><![CDATA[<p>Thanks guys! The updated script worked like a charm on the latest RaspberryPi OS with a brand new RaspberryPi 5.</p><p>To make it a tad easier for non-coders, I created a pull request including the discussed changes: <a href="https://github.com/youfou/pianoteq-pi/pull/8">https://github.com/youfou/pianoteq-pi/pull/8</a></p><p>Until &quot;youfou&quot; includes these changes, you can just use my version: <a href="https://github.com/Hillcow/pianoteq-pi/tree/main">https://github.com/Hillcow/pianoteq-pi/tree/main</a></p><p>Be aware that you need to download the correct version of the script. You just have to change the following line for the terminal to download my version and then execute it:</p><div class="codebox"><pre><code>wget -qO setup.py https://github.com/Hillcow/pianoteq-pi/blob/main/setup.py &amp;&amp; sudo python3 setup.py</code></pre></div><p>Fully tested and 100% working.</p><p>I did not update the overclock section. If you have a Pi 5, just choose to not overclock. Not necessary for the Pi 5 anyway. But if you want me to, I could update that section for the Pi 5 as well to overclock the CPU to 3.000MHz (default is 2400). As it is now, you would effectively underclock your CPU, if you were to choose 2.000 <i class="far fa-laugh smiley"></i></p>]]></description>
			<author><![CDATA[null@example.com (hillcow)]]></author>
			<pubDate>Mon, 12 Feb 2024 10:27:50 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=995421#p995421</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=990524#p990524</link>
			<description><![CDATA[<div class="quotebox"><cite>Yannick wrote:</cite><blockquote><p>On raspbian bullseye, because changes were made to the default &quot;pi&quot; user and group, this script doesn&#039;t work straight out of the box anymore. However, by slightly altering the setup.py file it still works like a charm! (tested on the 64bit version) here&#039;s how:&nbsp; change all the paths in setup.py from &quot;/home/pi/...&quot;&nbsp; to &quot;/home/MyUserName/...&quot;&nbsp; &nbsp;(if you&#039;re working from the home directory) ,&nbsp; and at the end of the script there are some lines referring to &quot;pi:pi&quot; . just change these to &quot;MyUserName:MyUserName&quot;. Hope this helps someone out.&nbsp; &nbsp;@Youfou thanks a lot for making this!!</p></blockquote></div><p>@SoundSteve the default username on the RaspberryPi is no longer pi as the script assumes so you need to edit it as described above.</p>]]></description>
			<author><![CDATA[null@example.com (jari_42)]]></author>
			<pubDate>Tue, 30 May 2023 03:09:37 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=990524#p990524</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=990517#p990517</link>
			<description><![CDATA[<p>I am trying to install PianoTeq 8 on a Raspberry Pi 4 but when I run the setup.py script it comes up with this error:</p><p>System version:</p><p>Raspberry Pi OS arm-64bit (2023-05-03)</p><p>Specify install location for Pianoteq</p><p>Traceback (most recent call last):<br />&nbsp; File &quot;/home/steve/Pi/Pianoteq/setup.py&quot;, line 320, in &lt;module&gt;<br />&nbsp; &nbsp; with dbm.open(CONFIG_PATH, &#039;c&#039;) as db:<br />&nbsp; File &quot;/usr/lib/python3.9/dbm/__init__.py&quot;, line 95, in open<br />&nbsp; &nbsp; return mod.open(file, flag, mode)<br />_dbm.error: [Errno 2] No such file or directory: &#039;/home/pi/.config/pianoteq-pi.dbm&#039;</p><br /><p>Has anyone successfully installed version 8 using this script or am I doing something completely wrong.</p><p>Thanks for your help</p><p>Steve</p>]]></description>
			<author><![CDATA[null@example.com (Sound Steve)]]></author>
			<pubDate>Mon, 29 May 2023 18:32:31 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=990517#p990517</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=985946#p985946</link>
			<description><![CDATA[<p>It didn&#039;t work for me... i&#039;m not technical unfortunately. The command terminal seemed to execute the script explained on this forrum ok, it said it was installed, but no shortcut on desktop (nor after reboot) hopefully this gets fixed</p>]]></description>
			<author><![CDATA[null@example.com (Blouies)]]></author>
			<pubDate>Fri, 18 Nov 2022 07:44:20 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=985946#p985946</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=985925#p985925</link>
			<description><![CDATA[<div class="quotebox"><cite>Kontrabass wrote:</cite><blockquote><p>Hi guys,</p><p>does anyone run Pianoteq 8 on a Raspberry Pi 4 (64bit)? I have tried out but the app didn&#039;t start. Pianoteq 7 works well.</p></blockquote></div><p>It plays the blues demo flawless on a T95Max with Armbian</p><p>CPU: Amlogic S905X3 64-bit quad core ARM® Cortex™ A55</p><p><strong>however</strong> I had to start it from the terminal - starting from the file manager didn&#039;t work...</p>]]></description>
			<author><![CDATA[null@example.com (Antonio M)]]></author>
			<pubDate>Thu, 17 Nov 2022 23:13:29 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=985925#p985925</guid>
		</item>
		<item>
			<title><![CDATA[Re: A quick way to install Pianoteq 7 and tweak system on Raspberry Pi 4B]]></title>
			<link>https://forum.modartt.com/viewtopic.php?pid=985923#p985923</link>
			<description><![CDATA[<div class="quotebox"><cite>Kontrabass wrote:</cite><blockquote><p>Hi guys,</p><p>does anyone run Pianoteq 8 on a Raspberry Pi 4 (64bit)? I have tried out but the app didn&#039;t start. Pianoteq 7 works well.</p></blockquote></div><p>I don&#039;t have a Raspberry but I own a odroid N2, then I&#039;ll give a try an let you know!</p>]]></description>
			<author><![CDATA[null@example.com (marcos daniel)]]></author>
			<pubDate>Thu, 17 Nov 2022 22:43:13 +0000</pubDate>
			<guid>https://forum.modartt.com/viewtopic.php?pid=985923#p985923</guid>
		</item>
	</channel>
</rss>
