Dieses Problem hatte ich anfangs auch.
Wo liegt denn dein File?
liegt auf dem Raspberry wo auch Symcon installiert ist
/home/tts/test.mp3
habe bei der Freigabe folgende einstellungen genommen
writable = yes
printable = no
comment = teste
only guest = yes
public = yes
guest ok = yes
leider bin ich nicht wirklich gut was linux angeht und so stehe ich bei dieser einfachen Sache auf dem Schlauch…
Hast du in der smb.conf auch den Pfad angegeben, welches du nutzen willst?
Also in deinem Fall path = /home/tts/
Da ich Probleme mit dem Pfad hatte, habe ich alles in den „pi“ - Ordner gelegt und einen Unterordner angelegt.
Bei mir liegt es auf /home/pi/pi-share
Wie du es dann nennst, bleibt dir überlassen. Anstellen von pi-share kann es auch tts heißen.
So sieht meine Konfig aus, leider ohne Erfolg
[global]
client min protocol = core
client max protocol = SMB3
workgroup = WORKGROUP
security = user
ntlm auth = yes
map to guest = bad user
guest account = nobody
[TTS]
comment = Samba-Test-Freigabe
path = /home/tts
browseable = yes
guest ok = yes
read only = no
Hast du den Ordner, den du verwenden möchtest auch freigegeben bzw. die Berechtigung erteilt?
yupp, ich kann ja auch per Windows drauf zugreifen und die Dateien abspielen.
Aber wie gesagt, es kommt eine Passwortabfrage und ich habe keine Ahnung wie ich die weg bekomme.
Habe jetzt zig Tutorials durch aber es will leider nicht.
Ich denke aber, genau das ist das Problem.
Ich glaube ich habe den Fehler gefunden.
Habe die Desktop app von Sonos installiert und da steht nicht, dass er nicht auf die Datei zugreifen kann sondern, dass die Samplingrate nicht stimmt.
Das werde ich jetzt mal ändern und dann sollte es ja klappen.
Vielen dank für die super Hilfe hier.
Wünsche noch ein schönes Wochenende
Hast du die Musikbibliothek in der Sonos-App eingerichtet und schon mal getestet, ob du dort die Files abspielen kannst?
Dort kannst du den Benutzer und das Passwort eingeben.
Falls du den Samba Zugriff trotzdem erreichen möchtest, hier ein Vorlage, siehe Freigabe symcon.
Bei force User aber unbedingt mit hosts allow auf die eigene IP einschränken.
# /etc/samba/smb.conf: <<< Central configuration by Ansible >>>
[global]
# Generelle Einstellungen
security = user
workgroup = WORKGROUP
server role = standalone server
server string = %h Server (Standalone)
map to guest = Bad User
# Logfile Einstellungen
log file = /var/log/samba/log.%M
log level = 0
max log size = 500
# Browsing and DNS
domain master = no
local master = no
preferred master = no
os level = 0
dns proxy = no
hostname lookups = yes
# Druckeinstellungen (deaktivieren)
load printers = no
disable spoolss = yes
#======================= Share Definitions =======================
[tmp]
comment = tmp
path = /tmp
read only = no
guest ok = yes
hosts allow = 127.0.0.1 192.168.0.0/27 10.0.8.200/32 top5-pc1. top5-pc2. edv4.
[symcon]
comment = Symcon
path = /var/lib/symcon
read only = no
public = yes
guest ok = yes
writeable = yes
create mask = 0755
directory mask = 0755
force user = root
force group = root
hosts allow = 127.0.0.1 192.168.0.0/27 10.0.8.200/32 top5-pc1. top5-pc2. media4.
Super wenn es das war!
Wenn nicht, melde dich gerne nochmals, dann gehen wir alles nochmals durch.
LG Peter
Nochmals vielen dank für die Hilfe.
Ja, das war es. Es läuft jetzt genauso wie ich es will
Gehört vielleicht nicht zu 100% hier zum Thread, aber habt ihr auch diese starken Lautstärke Unterschiede, zwischen den TTS Dateien und zB. Google Assistant auf dem Sonos Speaker? Momentan ist die Lautstärke leider nicht getrennt regelbar
Google schreit dann abundzu die Nachbarn aus dem Bett…
Hallo Zusammen,
kann mir jemand vielleicht Starthilfe geben?
Ich bin soweit, dass ich beide Module instaliert habe und auch einen API-Code habe. Mit dem SONOS-Modul komme ich gut zurecht, jedoch bin ich mir total unsicher wie ich das RSS-Modul verwende.
Wo sollte ich denn die Dateien hin speichern? Ich verwende die Sym-Box. Kann ich auf die Speichern oder auf einen Visu-PC, der eh die ganze Zeit läuft? Und wie gehts dann weiter? Wie erstelle ich die Dateien? Ihr merkt, ich bin auf dem gebiet noch vollends grün und würde mich über Hilfe freuen.
Vielen Dank im Voraus
Dennis.
Am besten speicherst du die Dateien in einen Ordner im Webfront Verzeichnis.
Darauf kann Sonos per HTTP direkt zugreifen.
Danke Dir - kannst Du mir noch bisschen mehr „Input“ geben - wie genau erstelle ich denn die Sprachausgabedateien? Und wie lege ich den Ort der Speicherung genau fest? Wie finde ich denn den Pfad?
Tut mir leid dass ich hier so neu bin…
LG Dennis.
Vielleicht helfen dir meine Hilfsfunktionen, die auf Polly und Sonos ausgelegt sind etwas weiter.
<?php
declare(strict_types=1);
define('IPS_SERVER_NAME', '192.168.178.86');
define('ID_POLLY_INSTANCE', 27789);
define('SOUND_DIR', IPS_GetKernelDir() . 'webfront' . DIRECTORY_SEPARATOR . 'user' . DIRECTORY_SEPARATOR . 'sounds');
define('SOUND_URL', 'http://' . IPS_SERVER_NAME . ':3777/user/sounds');
// ---- ab hier nichts mehr ändern ----
// Hilfsfunktionen zum Erzeugen von TTS Dateien und zum Abspielen der Dateien auf Sonos
//
// Version: 1.0 16.4.2020
// Autor: bumaas
//
// Die Datei wird in ein Skript eingebunden mit
// require_once IPS_GetScriptFile(12345);
//-------------------------------------------------------------------------------------
// Funktion zum Erzeugen beliebig vieler Sounddateien
// Beispiel:
// $FilesToPlay = createTTSFiles(['Dies ist ein Test', 'Der Test hat gut geklappt']);
//-------------------------------------------------------------------------------------
function createTTSFiles(array $arrText): array
{
$arrFilesToPlay = [];
if (!@mkdir(SOUND_DIR) && !is_dir(SOUND_DIR)) {
return [];
}
foreach ($arrText as $Text) {
//Dateinamen erzeugen
$Filename_base = replace_chars($Text);
//Symcon Polly Instance erzeugt mp3 Dateien
$Filename = $Filename_base . '.mp3';
if (!file_exists($Filename)) {
try {
$tmpfile = TTSAWSPOLLY_GenerateFile(ID_POLLY_INSTANCE, $Text);
if (@rename($tmpfile, SOUND_DIR . '/' . $Filename)) {
$arrFilesToPlay[] = SOUND_URL . '/' . $Filename;
} else {
trigger_error(sprintf('Die Sprachdatei "%s" konnte nicht nach "%s" verschoben werden.', $tmpfile, SOUND_DIR . '/' . $Filename));
}
} catch (Exception $e) {
trigger_error(
sprintf('Die Erzeugung der Sprachdatei %s klappte nicht (%s)', SOUND_DIR . DIRECTORY_SEPARATOR . $Filename, $e->getMessage())
);
}
} else {
$arrFilesToPlay[] = SOUND_URL . '/' . $Filename;
}
}
return $arrFilesToPlay;
}
//-------------------------------------------------------------------------------------
// Funktion zum Abspielen beliebig vieler Sounddateien auf beliebig vielen Sonos Geräten
// Beispiel:
// playOnSonos([['Id' => 47111, 'Volume' => 10],
// ['Id' => 47888, 'Volume' => '+5']],
// $FilesToPlay);
//-------------------------------------------------------------------------------------
function playOnSonos(array $SonosDevices, $arrFiles)
{
if (count($arrFiles) === 0) {
trigger_error(sprintf('Devices: : %s. Es fehlen die Files...', json_encode($SonosDevices)));
return;
}
if (IPS_SemaphoreEnter(__FUNCTION__, 20 * 1000)) {
$idMaster = $SonosDevices[0]['Id'];
$volumeMaster = $SonosDevices[0]['Volume'];
unset($SonosDevices[0]);
$Clients = [];
foreach ($SonosDevices as $SonosDevice) {
$idClient = $SonosDevice['Id'];
$volumeClient = $SonosDevice['Volume'];
$Clients[$idClient] = ['volume' => $volumeClient];
}
set_time_limit(60);
try {
if (count($Clients) > 0) {
SNS_PlayFilesGrouping($idMaster, json_encode($Clients), json_encode($arrFiles), $volumeMaster);
} else {
SNS_PlayFiles($idMaster, json_encode($arrFiles), $volumeMaster);
}
} catch (Exception $e) {
trigger_error(
sprintf(
'Das Abspielen der Dateien %s auf Master %s und Clients %s klappte nicht (%s)',
json_encode($arrFiles),
$idMaster,
json_encode($Clients),
$e->getMessage()
)
);
}
//Semaphore wieder freigeben
IPS_SemaphoreLeave(__FUNCTION__);
}
}
//-----------------------------------------------
// siehe hier: https://stackoverflow.com/questions/10444885/php-replace-foreign-characters-in-a-string
function replace_chars(string $fileSyntax): string
{
return strtolower(
preg_replace(
[
'/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i',
"/[^a-zA-Z0-9\s-]/i",
"/\s+/"
],
[
'$1', // remove foreign character accents
'', // remove anything that's not alphanumeric, hyphen or a space
'_' // replace space with underscore
],
htmlentities($fileSyntax, ENT_QUOTES, 'UTF-8')
)
);
}
Hallo Zusammen,
hat jemand vielleicht eine kleine „Anleitung“ wie ich alles entsprechend einstellen muss?
Sorry für die doofe (Laien) Frage!
Sprachausgabe über HomeMini sicherlich nicht möglich oder?
Habe Text to Speech AWS Polly installiert und eingerichtet, scheitere am Punkt 8:
8. PHP-Befehlsreferenz
string TTSAWSPOLLY_GenerateData(integer $InstanzID, String $Text); Fragt über AWS den Text an und liefert die Sprachdaten Base64-kodiert in der Rückgabe zurück. `echo TTSAWSPOLLY_GenerateData(12345, "Dies ist ein Test");``
string TTSAWSPOLLY_GenerateFile(integer $InstanzID, String $Text); Fragt über AWS den Text an und liefert den Dateinamen zu den Sprachdaten zurück. `echo TTSAWSPOLLY_GenerateFile(12345, "Dies ist ein Test");``
Bin leider nur leider. Wie bekomme ich eine Sprachausgabe hin?
Hallo,
ich hatte ein ähnliches Anliegen.
Ich wollte einen Text in eine Wav-Datei schreiben und mit VOIP an mein Telefon senden lassen.
Ich wollte aber keinen Online-Service verwenden (AWS etc.), obwohl die bestimmt wesentlich besser klingen.
Ich habe auf meinem alten Laptop (wo IP-Symcon läuft) folgende zwei Programme installiert:
- espeak von sSpeak: Samples
- ffmpeg von Releases · BtbN/FFmpeg-Builds · GitHub
Mit espeak wird der Text per Synthesizer erzeugt. Klingt ein bisschen metallisch, ist aber zu verstehen.
Mit ffmpeg wird die erzeugte Wav-Datei in das passende Format für VOIP (16 bit, 8000 Hz) umgewandelt.
Dafür, dass man hiermit von keinem Online-Dienst abhängig ist, klingt es recht gut.
Folgendes Script verwende ich hierfür:
<?php
$result_code = null;
$text = "Eine erste Zeile. Eine zweite Zeile. Eine dritte Zeile.";
$tempWav = IPS_GetKernelDir() . "media\AlarmText_temp.wav";
$newWav = IPS_GetKernelDir() . "media\AlarmText.wav";
$espeak = "\"c:/Program Files (x86)/eSpeak/command_line/espeak.exe\"" . " -s100 -vde"; // speed=100, language=german // Source code: http://espeak.sourceforge.net/samples.html
$ffmpeg = "\"c:/Tools/ffmpeg.exe\"";
if($tempWav)
{
$espeak = $espeak . " -w" . $tempWav;
}
$espeak = $espeak . " \"" . $text . "\"";
$ret = system($espeak, $result_code);
// echo $result_code . "\n";
if( $result_code == "0")
{
$ffmpeg = $ffmpeg . " -i " . $tempWav . " -ar 8000 -y " . $newWav; // new sample rate=8000 Hz // Source code: https://github.com/BtbN/FFmpeg-Builds/releases
$ret = system($ffmpeg, $result_code);
// echo $result_code . "\n";
unlink( $tempWav );
}
else
{
unlink( $newWav );
}
?>
Die erzeugte Wav-Datei verwende ich dann für VOIP.
VoIP_PlayWave($voip, $id, $newWav);
Frohes neues Jahr Ralf