Das aktuelle Sprachpaket ist nicht verfügbar

L

linuxnutzer

Enthusiast
170
Wo kann ich deas Sprachpaket für Osmand~ runterladen. Ich erhalte die Meldung "Das aktuelle Sprachpaket ist nicht verfügbar". In den Einstellunge von Pico TTS funktioniert der Download leider auch nicht.
 
Ich vermute ich habe ein grundsätzliches Rechteproblem. Wo speichert denn Osmand die Sprachdateien?
 
Osmand -> Voice
 
Sorry, wo finde ich dieses Voice? Ich hatte schon nach ähnlichem gesucht und nichts gefunden.
 
... in dem Ordner/Datenpfad, wo Osmand seine Daten speichert. Der Ordner wird von Osmand selbstständig angelegt.
Pico TTS und dessen Sprachpackete hat mit Osmand nichts zu tun. Irgendeine funktionierende TTS wird aber für die Sprachausgabe bei Osmand benötigt => Keine Sprachausgabe in 2.0.1

Gruß __W__
 
Wenn du auf SD Karte speicherst sieht es so aus, ansonsten im internen Speicher gucken...
 

Anhänge

  • Screenshot.jpg
    Screenshot.jpg
    14,7 KB · Aufrufe: 345
Ich habe jetzt ein Osmand+ und kein Osmand~ zum testen, aber bekomme die gleiche Fehlermeldung.

Gefunden habe ich:

Code:
u0_a165@x3:/storage/sdcard0/osmand/voice/de-tts $ ls -1
_ttsconfig.p

u0_a165@x3:/storage/sdcard0/osmand/voice/de-tts $ cat _ttsconfig.p
% for turbo-prolog
:- op('--', xfy, 500).
% for swi-prolog
:- op(500, xfy,'--').

version(103).
tts :- version(X), X > 99.
voice :- version(X), X < 99.

language('de').
% http://www.tcts.fpms.ac.be/synthesis/mbrola/dba/de6/de6.zip
% http://www.tcts.fpms.ac.be/synthesis/mbrola/dba/de7/de7.zip
% fest_language('').

% IMPLEMENTED (X) or MISSING ( ) FEATURES:
% (X) new Version 1.5 format
% (X) route calculated prompts, left/right, u-turns, roundabouts, straight/follow
% (X) arrival
% (X) other prompts: attention (without Type implementation), location lost, off_route, exceed speed limit
% (X) attention Type implementation
% (X) special grammar: onto / on / to Street fur turn and follow commands
% (X) special grammar: nominative/dativ for distance measure
% (N/A) special grammar: imperative/infinitive distincion for turns
% (X) distance measure: meters / feet / yard support
% (X) Street name announcement (suppress in prepare_roundabout)
% (X) Name announcement for destination / intermediate / GPX waypoint arrival
% (X) Time announcement for new and recalculated route (for recalculated suppress in appMode=car)
% (X) word order checked
% (X) Announcement of favorites, waypoints and pois along the route
% (X) Support announcement of railroad crossings and pedestrian crosswalks


% ROUTE CALCULATED
string('route_is1.ogg', 'Die berechnete Strecke ist ').
string('route_is2.ogg', 'lang ').
string('route_calculate.ogg', 'Route wurde neu berechnet ').
string('distance.ogg', ', Die Entfernung beträgt ').

% LEFT/RIGHT
string('prepare.ogg', 'Demnächst '). % Demnächst sounds better then Vorbereiten zum
string('after.ogg', 'nach ').

string('left.ogg', 'links abbiegen ').
string('left_sh.ogg', 'scharf links abbiegen ').
string('left_sl.ogg', 'leicht links abbiegen ').
string('right.ogg', 'rechts abbiegen ').
string('right_sh.ogg', 'scharf rechts abbiegen ').
string('right_sl.ogg', 'leicht rechts abbiegen ').
string('left_keep.ogg', 'links halten ').
string('right_keep.ogg', 'rechts halten ').
% if needed, "left/right_bear.ogg" can be defined here also. "... (then) (bear_left/right)" is used in pre-announcements to indicate the direction of a successive turn AFTER the next turn.

% U-TURNS
string('make_uturn1.ogg', 'wenden ').
string('make_uturn2.ogg', 'Bitte wenden ').
string('make_uturn_wp.ogg', 'Wenn möglich, bitte wenden ').

% ROUNDABOUTS
string('prepare_roundabout.ogg', 'Einbiegen in Kreisverkehr ').
string('roundabout.ogg', 'in den Kreisverkehr einfahren, ').
string('then.ogg', 'dann ').
string('and.ogg', 'und ').
string('take.ogg', 'nehmen Sie die ').
string('exit.ogg', 'Ausfahrt ').

string('1st.ogg', 'erste ').
string('2nd.ogg', 'zweite ').
string('3rd.ogg', 'dritte ').
string('4th.ogg', 'vierte ').
string('5th.ogg', 'fünfte ').
string('6th.ogg', 'sechste ').
string('7th.ogg', 'siebte ').
string('8th.ogg', 'achte ').
string('9th.ogg', 'neunte ').
string('10th.ogg', 'zehnte ').
string('11th.ogg', 'elfte ').
string('12th.ogg', 'zwölfte ').
string('13th.ogg', 'dreizehnte ').
string('14th.ogg', 'vierzehnte ').
string('15th.ogg', 'fünfzehnte ').
string('16th.ogg', 'sechzehnte ').
string('17th.ogg', 'siebzehnte ').

% STRAIGHT/FOLLOW
string('go_ahead.ogg', 'Weiter geradeaus ').
string('follow1.ogg', 'Dem Strasenverlauf ').
string('follow2.ogg', 'folgen ').

% ARRIVE
string('and_arrive_destination.ogg', 'dann haben Sie Ihr Ziel ').
string('reached_destination.ogg', 'Ziel ').
string('and_arrive_intermediate.ogg', 'dann haben Sie Ihr Zwischenziel ').
string('reached_intermediate.ogg', 'Zwischenziel ').
string('reached.ogg', 'erreicht ').
%NEARBY POINTS
string('and_arrive_waypoint.ogg', 'dann passieren Sie Weegpunkt ').
string('reached_waypoint.ogg', 'Sie passieren Weegpunkt ').
string('and_arrive_favorite.ogg', 'dann passieren Sie Favorit ').
string('reached_favorite.ogg', 'Sie passieren Favorit ').
string('and_arrive_poi.ogg', 'dann passieren Sie P O I ').
string('reached_poi.ogg', 'Sie passieren P O I ').

% OTHER PROMPTS
string('attention.ogg', 'Achtung, ').
string('speed_camera.ogg', 'Geschwindigkeitskontrolle ').
string('border_control.ogg', 'Grenzkontrolle ').
string('railroad_crossing.ogg', 'Bahnübergang ').
string('traffic_calming.ogg', 'Verkehrsberuhigung ').
string('toll_booth.ogg', 'Mautstelle ').
string('stop.ogg', 'Stoppzeichen ').
string('pedestrian_crosswalk.ogg', 'Fusgängerübergang ').

string('location_lost.ogg', 'GPS Signal verloren '). % maybe change to "tschie pie es" because of pronounciation
string('location_recovered.ogg', 'GPS Signal gefunden '). % maybe change to "tschie pie es" because of pronounciation
string('off_route.ogg', 'Sie weichen von der Route ab seit '). % possibly "Sie verlassen die Route seit "
string('exceed_limit.ogg', 'Sie überschreiten die Höchstgeschwindigkeit ').

% STREET NAME GRAMMAR

string('onto.ogg', 'auf '). % possibly "Richtung", better grammar, but is also misleading is some cases
string('on.ogg', 'auf ').
string('to.ogg', 'bis ').
string('with.ogg', 'auf '). % is used if you turn together with your current street, i.e. street name does not change. "mit " or "entlang" are possible alternatives, "auf" seems to be adequate in most instances. "über" is wrong here.
string('to2.ogg', 'Richtung '). % "zu " gives wrong results in many cases

% Utility: toLowerCaseStr(OldString,NewString)
toLowerCaseStr(L1,L1):- var(L1), !.
toLowerCaseStr([],[]):- !.
toLowerCaseStr([H1|T1],[H2|T2]):- H1>64,H1<91, !, H2 is H1+32, toLowerCaseStr(T1,T2).
toLowerCaseStr([H1|T1],[H1|T2]):- toLowerCaseStr(T1,T2).

% Utility: toLowerCaseAto(OldString,NewString)
toLowerCaseAto(A1,A2) :- atom_codes(A1,S1),toLowerCaseStr(S1,S2),atom_codes(A2,S2).

% Utility: removeSemicolonStr(OldString,NewString)
removeSemicolonStr(L1,L1):- var(L1), !.
removeSemicolonStr([],[]):- !.
removeSemicolonStr([H1|T1],[H2|T2]):- H1=59, !, H2 is 32, removeSemicolonStr(T1,T2).
removeSemicolonStr([H1|T1],[H1|T2]):- removeSemicolonStr(T1,T2).

% Utility: removeSemicolonAto(OldString,NewString)
removeSemicolonAto(A1,A2) :- atom_codes(A1,S1),removeSemicolonStr(S1,S2),atom_codes(A2,S2).

% Utility: reverseStr(OldStr,[],RevStr)
reverseStr([H|T], A, R) :- reverseStr(T, [H|A], R).
reverseStr([], A, A).

% Utility: startsWithStr(String,Match)
startsWithStr([],[]).
startsWithStr([H1|T1],[]):- startsWithStr(T1,[]).
startsWithStr([H1|T1],[H1|T2]):- startsWithStr(T1,T2).

% Utility endsWithString(String, Match)
endsWithString(A1,A2) :- atom_codes(A1,S1),atom_codes(A2,S2),reverseStr(S1,[],R1),reverseStr(S2,[],R2),toLowerCaseStr(R1,RL1),startsWithStr(RL1,R2).

isMale(Street) :- endsWithString(Street, 'weg').
isMale(Street) :- endsWithString(Street, 'ring').
isMale(Street) :- endsWithString(Street, 'damm').
isMale(Street) :- endsWithString(Street, 'platz').
isMale(Street) :- endsWithString(Street, 'markt').
isMale(Street) :- endsWithString(Street, 'steig').
isMale(Street) :- endsWithString(Street, 'pfad').

isFemale(Street) :- endsWithString(Street, 'strasse').
isFemale(Street) :- endsWithString(Street, 'straße').
isFemale(Street) :- endsWithString(Street, 'bahn').
isFemale(Street) :- endsWithString(Street, 'chaussee').
isFemale(Street) :- endsWithString(Street, 'gasse').
isFemale(Street) :- endsWithString(Street, 'zeile').
isFemale(Street) :- endsWithString(Street, 'allee').
isFemale(Street) :- endsWithString(Street, '0').
isFemale(Street) :- endsWithString(Street, '1').
isFemale(Street) :- endsWithString(Street, '2').
isFemale(Street) :- endsWithString(Street, '3').
isFemale(Street) :- endsWithString(Street, '4').
isFemale(Street) :- endsWithString(Street, '5').
isFemale(Street) :- endsWithString(Street, '6').
isFemale(Street) :- endsWithString(Street, '7').
isFemale(Street) :- endsWithString(Street, '8').
isFemale(Street) :- endsWithString(Street, '9').

street_is_male(voice([Ref, Name, Dest],_)) :- isMale(Name).
street_is_female(voice([Ref, Name, Dest],_)) :- isFemale(Name).
street_is_female(voice([Ref, Name, Dest],_)) :- isFemale(Ref).
street_is_nothing(voice([Ref, Name, Dest],_)) :- not(isMale(Name)), not(isFemale(Name)).

% DISTANCE UNIT SUPPORT
string('meters_nominativ.ogg', 'meter ').
string('meters_dativ.ogg', 'metern ').
string('around_1_kilometer_nominativ.ogg', 'zirka einen Kilometer ').
string('around_1_kilometer_dativ.ogg', 'zirka einem Kilometer ').
string('around.ogg', 'zirka ').
string('kilometers_nominativ.ogg', 'Kilometer ').
string('kilometers_dativ.ogg', 'Kilometern ').

string('feet_nominativ.ogg', 'fuss ').
string('feet_dativ.ogg', 'fuss ').
string('1_tenth_of_a_mile_nominativ.ogg', 'eine zehntel meile ').
string('1_tenth_of_a_mile_dativ.ogg', 'einer zehntel meile ').
string('tenths_of_a_mile_nominativ.ogg', 'zehntel meilen ').
string('tenths_of_a_mile_dativ.ogg', 'zehntel meilen ').
string('around_1_mile_nominativ.ogg', 'zirka eine meile ').
string('around_1_mile_dativ.ogg', 'zirka einer meile ').
string('miles_nominativ.ogg', 'meilen ').
string('miles_dativ.ogg', 'meilen ').

string('yards_nominativ.ogg', 'yards ').
string('yards_dativ.ogg', 'yards ').

% TIME SUPPORT
string('time.ogg', ', Zeit ').
string('1_hour.ogg', 'eine Stunde ').
string('hours.ogg', 'Stunden ').
string('less_a_minute.ogg', 'unter einer Minute ').
string('1_minute.ogg', 'eine Minute ').
string('minutes.ogg', 'Minuten').


%% COMMAND BUILDING / WORD ORDER
turn('left', ['left.ogg']).
turn('left_sh', ['left_sh.ogg']).
turn('left_sl', ['left_sl.ogg']).
turn('right', ['right.ogg']).
turn('right_sh', ['right_sh.ogg']).
turn('right_sl', ['right_sl.ogg']).
turn('left_keep', ['left_keep.ogg']).
turn('right_keep', ['right_keep.ogg']).
bear_left(_Street) -- ['left_keep.ogg'].
bear_right(_Street) -- ['right_keep.ogg'].

% cut_part_street(voice([Ref, Name, Dest], [_CurrentRef, _CurrentName, _CurrentDest]), _).
cut_part_street(voice(['', '', Dest], _), DestClean) :- removeSemicolonAto(Dest,DestClean).
% cut_part_street(voice(['', Name, _], _), Name). % not necessary
cut_part_street(voice([Ref, Name, _], _), Concat) :- atom_concat(Name, ' ', C1), atom_concat(C1, Ref, Concat).

turn_street('', []).
turn_street(voice(['','',''],_), []).
turn_street(Street, ['to2.ogg', SName]) :- tts, Street = voice(['', '', D], _), cut_part_street(Street, SName).
turn_street(Street, ['onto.ogg', 'den ', SName]) :- tts, not(Street = voice(['', '', D], _)), street_is_male(Street), cut_part_street(Street, SName).
turn_street(Street, ['onto.ogg', 'die ', SName]) :- tts, not(Street = voice(['', '', D], _)), street_is_female(Street), cut_part_street(Street, SName).
turn_street(Street, ['onto.ogg', SName]) :- tts, not(Street = voice(['', '', D], _)), street_is_nothing(Street), cut_part_street(Street, SName).
turn_street(_Street, []) :- not(tts).

follow_street('', []).
follow_street(voice(['','',''],_), []).
follow_street(Street, ['to.ogg', SName]) :- tts, Street = voice(['', '', D], _), cut_part_street(Street, SName).
follow_street(Street, ['to.ogg', 'zum ', SName]) :- tts, not(Street = voice([R, S, _],[R, S, _])), street_is_male(Street), cut_part_street(Street, SName).
follow_street(Street, ['to.ogg', 'zur ', SName]) :- tts, not(Street = voice([R, S, _],[R, S, _])), street_is_female(Street), cut_part_street(Street, SName).
follow_street(Street, ['to.ogg', SName]) :- tts, not(Street = voice([R, S, _],[R, S, _])), street_is_nothing(Street), cut_part_street(Street, SName).
follow_street(Street, ['on.ogg', SName]) :- tts, Street = voice([R, S, _],[R, S, _]), cut_part_street(Street, SName).
follow_street(_Street, []) :- not(tts).

prepare_turn(Turn, Dist, Street) -- ['prepare.ogg', 'after.ogg', D, M | Sgen] :- distance(Dist, dativ) -- D, turn(Turn, M), turn_street(Street, Sgen).
turn(Turn, Dist, Street) -- ['after.ogg', D, M, ' '| Sgen] :- distance(Dist, dativ) -- D, turn(Turn, M), turn_street(Street, Sgen).
turn(Turn, Street) -- [M, ' '| Sgen] :- turn(Turn, M), turn_street(Street, Sgen).

prepare_make_ut(Dist, Street) -- ['prepare.ogg', 'after.ogg', D, 'make_uturn2.ogg' | Sgen] :- distance(Dist, dativ) -- D, turn_street(Street, Sgen).
make_ut(Dist, Street) -- ['after.ogg', D, 'make_uturn1.ogg' | Sgen] :- distance(Dist, dativ) -- D, turn_street(Street, Sgen).
make_ut(Street) -- ['make_uturn2.ogg' | Sgen] :- turn_street(Street, Sgen).
make_ut_wp -- ['make_uturn_wp.ogg'].

prepare_roundabout(Dist, _Exit, _Street) -- ['prepare.ogg', 'after.ogg', D, 'prepare_roundabout.ogg'] :- distance(Dist, dativ) -- D.
roundabout(Dist, _Angle, Exit, Street) -- ['after.ogg', D, 'roundabout.ogg', 'then.ogg', 'take.ogg', E, 'exit.ogg' | Sgen] :- distance(Dist, dativ) -- D, nth(Exit, E), turn_street(Street, Sgen).
roundabout(_Angle, Exit, Street) -- ['take.ogg', E, 'exit.ogg' | Sgen] :- nth(Exit, E), turn_street(Street, Sgen).

go_ahead -- ['go_ahead.ogg'].
go_ahead(Dist, Street) -- ['follow1.ogg', D, 'follow2.ogg'| Sgen]:- distance(Dist, nominativ) -- D, follow_street(Street, Sgen).

then -- ['then.ogg'].
name(D, [D]) :- tts.
name(_D, []) :- not(tts).
and_arrive_destination(D) -- ['and_arrive_destination.ogg', Ds, 'reached.ogg'] :- name(D, Ds).
reached_destination(D) -- ['reached_destination.ogg', Ds, 'reached.ogg'] :- name(D, Ds).
and_arrive_intermediate(D) -- ['and_arrive_intermediate.ogg', Ds, 'reached.ogg'] :- name(D, Ds).
reached_intermediate(D) -- ['reached_intermediate.ogg', Ds, 'reached.ogg'] :- name(D, Ds).
and_arrive_waypoint(D) -- ['and_arrive_waypoint.ogg'|Ds] :- name(D, Ds).
reached_waypoint(D) -- ['reached_waypoint.ogg'|Ds] :- name(D, Ds).
and_arrive_favorite(D) -- ['and_arrive_favorite.ogg'|Ds] :- name(D, Ds).
reached_favorite(D) -- ['reached_favorite.ogg'|Ds] :- name(D, Ds).
and_arrive_poi(D) -- ['and_arrive_poi.ogg'|Ds] :- name(D, Ds).
reached_poi(D) -- ['reached_poi.ogg'|Ds] :- name(D, Ds).

route_new_calc(Dist, Time) -- ['route_is1.ogg', D, 'route_is2.ogg', 'time.ogg', T] :- distance(Dist, nominativ) -- D, time(Time) -- T.
route_recalc(_Dist, _Time) -- ['route_calculate.ogg'] :- appMode('car').
route_recalc(Dist, Time) -- ['route_calculate.ogg', 'distance.ogg', D, 'time.ogg', T] :- distance(Dist, nominativ) -- D, time(Time) -- T.

location_lost -- ['location_lost.ogg'].
location_recovered -- ['location_recovered.ogg'].
off_route(Dist) -- ['off_route.ogg', D] :- distance(Dist, dativ) -- D.
speed_alarm -- ['exceed_limit.ogg'].
% attention(_Type) -- ['attention.ogg'].
attention(Type) -- ['attention.ogg', W] :- warning(Type, W).

% TRAFFIC WARNINGS
warning('SPEED_CAMERA', 'speed_camera.ogg').
warning('SPEED_LIMIT', '').
warning('BORDER_CONTROL', 'border_control.ogg').
warning('RAILWAY', 'railroad_crossing.ogg').
warning('TRAFFIC_CALMING', 'traffic_calming.ogg').
warning('TOLL_BOOTH', 'toll_booth.ogg').
warning('STOP', 'stop.ogg').
warning('PEDESTRIAN', 'pedestrian_crosswalk.ogg').
warning('MAXIMUM', '').
warning(Type, '') :- not(Type = 'SPEED_CAMERA'; Type = 'SPEED_LIMIT'; Type = 'BORDER_CONTROL'; Type = 'RAILWAY'; Type = 'TRAFFIC_CALMING'; Type = 'TOLL_BOOTH'; Type = 'STOP'; Type = 'PEDESTRIAN'; Type = 'MAXIMUM').


%%
nth(1, '1st.ogg').
nth(2, '2nd.ogg').
nth(3, '3rd.ogg').
nth(4, '4th.ogg').
nth(5, '5th.ogg').
nth(6, '6th.ogg').
nth(7, '7th.ogg').
nth(8, '8th.ogg').
nth(9, '9th.ogg').
nth(10, '10th.ogg').
nth(11, '11th.ogg').
nth(12, '12th.ogg').
nth(13, '13th.ogg').
nth(14, '14th.ogg').
nth(15, '15th.ogg').
nth(16, '16th.ogg').
nth(17, '17th.ogg').


%% resolve command main method
%% if you are familar with Prolog you can input specific to the whole mechanism,
%% by adding exception cases.
flatten(X, Y) :- flatten(X, [], Y), !.
flatten([], Acc, Acc).
flatten([X|Y], Acc, Res):- flatten(Y, Acc, R), flatten(X, R, Res).
flatten(X, Acc, [X|Acc]) :- version(J), J < 100, !.
flatten(X, Acc, [Y|Acc]) :- string(X, Y), !.
flatten(X, Acc, [X|Acc]).

resolve(X, Y) :- resolve_impl(X,Z), flatten(Z, Y).
resolve_impl([],[]).
resolve_impl([X|Rest], List) :- resolve_impl(Rest, Tail), ((X -- L) -> append(L, Tail, List); List = Tail).


% handling alternatives
[X|_Y] -- T :- (X -- T),!.
[_X|Y] -- T :- (Y -- T).


pnumber(X, Y) :- tts, !, num_atom(X, Y).
pnumber(X, Ogg) :- num_atom(X, A), atom_concat(A, '.ogg', Ogg).
% time measure
hours(S, []) :- S < 60.
hours(S, ['1_hour.ogg']) :- S < 120, H is S div 60, pnumber(H, Ogg).
hours(S, [Ogg, 'hours.ogg']) :- H is S div 60, pnumber(H, Ogg).
time(Sec) -- ['less_a_minute.ogg'] :- Sec < 30.
time(Sec) -- [H, '1_minute.ogg'] :- tts, S is round(Sec/60.0), hours(S, H), St is S mod 60, St = 1, pnumber(St, Ogg).
time(Sec) -- [H, Ogg, 'minutes.ogg'] :- tts, S is round(Sec/60.0), hours(S, H), St is S mod 60, pnumber(St, Ogg).
time(Sec) -- [Ogg, 'minutes.ogg'] :- not(tts), Sec < 300, St is Sec/60, pnumber(St, Ogg).
time(Sec) -- [H, Ogg, 'minutes.ogg'] :- not(tts), S is round(Sec/300.0) * 5, hours(S, H), St is S mod 60, pnumber(St, Ogg).


%%% distance measure
distance(Dist, Y) -- D :- measure('km-m'), distance_km(Dist, Y) -- D.
distance(Dist, Y) -- D :- measure('mi-f'), distance_mi_f(Dist, Y) -- D.
distance(Dist, Y) -- D :- measure('mi-y'), distance_mi_y(Dist, Y) -- D.

%%% distance measure km/m
distance_km(Dist, nominativ) -- [ X, 'meters_nominativ.ogg'] :- Dist < 100, D is round(Dist/10.0)*10, dist(D, X).
distance_km(Dist, dativ) -- [ X, 'meters_dativ.ogg'] :- Dist < 100, D is round(Dist/10.0)*10, dist(D, X).
distance_km(Dist, nominativ) -- [ X, 'meters_nominativ.ogg'] :- Dist < 1000, D is round(2*Dist/100.0)*50, dist(D, X).
distance_km(Dist, dativ) -- [ X, 'meters_dativ.ogg'] :- Dist < 1000, D is round(2*Dist/100.0)*50, dist(D, X).
distance_km(Dist, nominativ) -- ['around_1_kilometer_nominativ.ogg'] :- Dist < 1500.
distance_km(Dist, dativ) -- ['around_1_kilometer_dativ.ogg'] :- Dist < 1500.
distance_km(Dist, nominativ) -- ['around.ogg', X, 'kilometers_nominativ.ogg'] :- Dist < 10000, D is round(Dist/1000.0), dist(D, X).
distance_km(Dist, dativ) -- ['around.ogg', X, 'kilometers_dativ.ogg'] :- Dist < 10000, D is round(Dist/1000.0), dist(D, X).
distance_km(Dist, nominativ) -- [ X, 'kilometers_nominativ.ogg'] :- D is round(Dist/1000.0), dist(D, X).
distance_km(Dist, dativ) -- [ X, 'kilometers_dativ.ogg'] :- D is round(Dist/1000.0), dist(D, X).

%%% distance measure mi/f
distance_mi_f(Dist, nominativ) -- [ X, 'feet_nominativ.ogg'] :- Dist < 160, D is round(2*Dist/100.0/0.3048)*50, dist(D, X).
distance_mi_f(Dist, dativ) -- [ X, 'feet_dativ.ogg'] :- Dist < 160, D is round(2*Dist/100.0/0.3048)*50, dist(D, X).
distance_mi_f(Dist, nominativ) -- ['1_tenth_of_a_mile_nominativ.ogg'] :- Dist < 241.
distance_mi_f(Dist, dativ) -- ['1_tenth_of_a_mile_dativ.ogg'] :- Dist < 241.
distance_mi_f(Dist, nominativ) -- [ X, 'tenths_of_a_mile_nominativ.ogg'] :- Dist < 1529, D is round(Dist/161.0), dist(D, X).
distance_mi_f(Dist, dativ) -- [ X, 'tenths_of_a_mile_dativ.ogg'] :- Dist < 1529, D is round(Dist/161.0), dist(D, X).
distance_mi_f(Dist, nominativ) -- ['around_1_mile_nominativ.ogg'] :- Dist < 2414.
distance_mi_f(Dist, dativ) -- ['around_1_mile_dativ.ogg'] :- Dist < 2414.
distance_mi_f(Dist, nominativ) -- ['around.ogg', X, 'miles_nominativ.ogg'] :- Dist < 16093, D is round(Dist/1609.0), dist(D, X).
distance_mi_f(Dist, dativ) -- ['around.ogg', X, 'miles_dativ.ogg'] :- Dist < 16093, D is round(Dist/1609.0), dist(D, X).
distance_mi_f(Dist, nominativ) -- [ X, 'miles_nominativ.ogg'] :- D is round(Dist/1609.0), dist(D, X).
distance_mi_f(Dist, dativ) -- [ X, 'miles_dativ.ogg'] :- D is round(Dist/1609.0), dist(D, X).

%%% distance measure mi/y
distance_mi_y(Dist, nominativ) -- [ X, 'yards_nominativ.ogg'] :- Dist < 241, D is round(Dist/10.0/0.9144)*10, dist(D, X).
distance_mi_y(Dist, dativ) -- [ X, 'yards_dativ.ogg'] :- Dist < 241, D is round(Dist/10.0/0.9144)*10, dist(D, X).
distance_mi_y(Dist, nominativ) -- [ X, 'yards_nominativ.ogg'] :- Dist < 1300, D is round(2*Dist/100.0/0.9144)*50, dist(D, X).
distance_mi_y(Dist, dativ) -- [ X, 'yards_dativ.ogg'] :- Dist < 1300, D is round(2*Dist/100.0/0.9144)*50, dist(D, X).
distance_mi_y(Dist, nominativ) -- ['around_1_mile_nominativ.ogg'] :- Dist < 2414.
distance_mi_y(Dist, dativ) -- ['around_1_mile_dativ.ogg'] :- Dist < 2414.
distance_mi_y(Dist, nominativ) -- ['around.ogg', X, 'miles_nominativ.ogg'] :- Dist < 16093, D is round(Dist/1609.0), dist(D, X).
distance_mi_y(Dist, dativ) -- ['around.ogg', X, 'miles_dativ.ogg'] :- Dist < 16093, D is round(Dist/1609.0), dist(D, X).
distance_mi_y(Dist, nominativ) -- [ X, 'miles_nominativ.ogg'] :- D is round(Dist/1609.0), dist(D, X).
distance_mi_y(Dist, dativ) -- [ X, 'miles_dativ.ogg'] :- D is round(Dist/1609.0), dist(D, X).


interval(St, St, End, _Step) :- St =< End.
interval(T, St, End, Step) :- interval(Init, St, End, Step), T is Init + Step, (T =< End -> true; !, fail).

interval(X, St, End) :- interval(X, St, End, 1).

string(Ogg, A) :- voice_generation, interval(X, 1, 19), atom_number(A, X), atom_concat(A, '.ogg', Ogg).
string(Ogg, A) :- voice_generation, interval(X, 20, 95, 5), atom_number(A, X), atom_concat(A, '.ogg', Ogg).
string(Ogg, A) :- voice_generation, interval(X, 100, 900, 50), atom_number(A, X), atom_concat(A, '.ogg', Ogg).
string(Ogg, A) :- voice_generation, interval(X, 1000, 9000, 1000), atom_number(A, X), atom_concat(A, '.ogg', Ogg).

dist(X, Y) :- tts, !, num_atom(X, Y).

dist(0, []) :- !.
dist(X, [Ogg]) :- X < 20, !, pnumber(X, Ogg).
dist(X, [Ogg]) :- X < 1000, 0 is X mod 50, !, num_atom(X, A), atom_concat(A, '.ogg', Ogg).
dist(D, ['20.ogg'|L]) :- D < 30, Ts is D - 20, !, dist(Ts, L).
dist(D, ['30.ogg'|L]) :- D < 40, Ts is D - 30, !, dist(Ts, L).
dist(D, ['40.ogg'|L]) :- D < 50, Ts is D - 40, !, dist(Ts, L).
dist(D, ['50.ogg'|L]) :- D < 60, Ts is D - 50, !, dist(Ts, L).
dist(D, ['60.ogg'|L]) :- D < 70, Ts is D - 60, !, dist(Ts, L).
dist(D, ['70.ogg'|L]) :- D < 80, Ts is D - 70, !, dist(Ts, L).
dist(D, ['80.ogg'|L]) :- D < 90, Ts is D - 80, !, dist(Ts, L).
dist(D, ['90.ogg'|L]) :- D < 100, Ts is D - 90, !, dist(Ts, L).
dist(D, ['100.ogg'|L]) :- D < 200, Ts is D - 100, !, dist(Ts, L).
dist(D, ['200.ogg'|L]) :- D < 300, Ts is D - 200, !, dist(Ts, L).
dist(D, ['300.ogg'|L]) :- D < 400, Ts is D - 300, !, dist(Ts, L).
dist(D, ['400.ogg'|L]) :- D < 500, Ts is D - 400, !, dist(Ts, L).
dist(D, ['500.ogg'|L]) :- D < 600, Ts is D - 500, !, dist(Ts, L).
dist(D, ['600.ogg'|L]) :- D < 700, Ts is D - 600, !, dist(Ts, L).
dist(D, ['700.ogg'|L]) :- D < 800, Ts is D - 700, !, dist(Ts, L).
dist(D, ['800.ogg'|L]) :- D < 900, Ts is D - 800, !, dist(Ts, L).
dist(D, ['900.ogg'|L]) :- D < 1000, Ts is D - 900, !, dist(Ts, L).
dist(D, ['1000.ogg'|L]):- Ts is D - 1000, !, dist(Ts, L).
 

Anhänge

  • Screenshot_2015-07-28-19-56-56.png
    Screenshot_2015-07-28-19-56-56.png
    11,2 KB · Aufrufe: 300
Suuuuper, ne deutsche Sprachdatei :lol: ... und wo lagert/erwartet Osmand seine Daten ???
Was hindert dich eigentlich daran mit dem "Downloadmanager" von Osmand, Osmand selber die Daten "dahin legen zu lassen", wo sie gebraucht werden, dann wärest du schon seit drei Tagen fertig.

Gruß __W__
 
Ich vermute, das wurde von Osmand installiert, jedenfalls nicht gezielt von mir. Es gibt da auch noch Englisch und andere Sprachen, wenn ich mit Es Expolorer schaue.

und wo lagert/erwartet Osmand seine Daten ???

Keine Ahnung, wurde alles default installiert. Ich finde auch nicht, wo man zusätzliche Karten installiert. Wie ruft man diesen Downloadmanager auf? Ich finde alles mögliche, nur das nicht, wonach ich suche.
 
Einstellungen
=> erster Punkt "Karten-Management" (mehr Download geht nicht)
=> dritter Punkt "Allgemeine Einstellungen" => weit unten "Datenspeicherungsordner"

Gruß __W__
 
  • Danke
Reaktionen: linuxnutzer
Tja, wenn ich da irgendwie die Einstellungen finden könnte ...

Über einen Umweg habe ich das Problem entdeckt. Wenn man zu einem Land geht, wo keine Karte heruntergeladen wurde, dann gelangt man dort zu den Einstellungen, muss aber auch der richtige Reiter sein. Ich denke, da gibt es aber auch noch einen anderen Weg zu den Einstellungen.

In Folge habe ich entdeckt, dass Osmand sdcard1 als Speicher angelegt hat, während der Rest der Installation auf sdcard0 ist.
 

Anhänge

  • Screenshot_2015-07-28-22-10-44.png
    Screenshot_2015-07-28-22-10-44.png
    84,9 KB · Aufrufe: 313
  • Screenshot_2015-07-28-22-11-29.png
    Screenshot_2015-07-28-22-11-29.png
    117,1 KB · Aufrufe: 297
  • Screenshot_2015-07-28-22-12-00.png
    Screenshot_2015-07-28-22-12-00.png
    63,7 KB · Aufrufe: 344
  • Screenshot_2015-07-28-22-12-20.png
    Screenshot_2015-07-28-22-12-20.png
    148,4 KB · Aufrufe: 338
Einstellungen =>
dritter Screenshot
rechts oben das "Hamburgersymbol" und dann im sich öffnenden Menu ganz unten
oder einfach rechts oben das "Zahnrad"
linuxnutzer schrieb:
... dass Osmand sdcard1 als Speicher angelegt hat, während der Rest der Installation auf sdcard0 ist ...
Bestimmt nicht, das muß von einer älteren Installation stammen, denn wenn während (oder auch später im Nachhinein) der Installation der Installationsordner geändert wird, bietet Osmand automatisch das Verschieben der entsprechenden Dateien an.

Gruß __W__
 
  • Danke
Reaktionen: linuxnutzer
Ja, das war dann auch so mit den Dateien verschieben. Am besten ich deinstalliere Osmand und lösche danach die Ordner, die noch übrig sind. Die Fehlermeldung ist jetzt weg und nach dem Verschieben gibt es auch nun Einstellungen. Danke!
 
Device: HUAWEI HUAWEI MT7-L09
Android Version: 4.4.2
Build: MT7-L09V100R001C00B137SP03
OsmAnd+ (v2.1.1)

Neues Handy, leere externe SD-Karte und das Problem ist wieder da, allerdings etwas anders, dh die Einstellungen sind zugänglich.

Es fällt auf, dass beim Download von Sprachdateien nichts angezeigt wird und, dass auf der externen SD-Karte, wo die Kartendownloads definiert sind, keine Sprachdateien sind, auf der internen SD-Karte schon. Keine Ahnung, ob es reicht, die Sprachdateien einfach umzukopieren.
 

Anhänge

  • Screenshot_2015-08-01-12-26-04.jpeg
    Screenshot_2015-08-01-12-26-04.jpeg
    230,4 KB · Aufrufe: 316
  • Screenshot_2015-08-01-12-26-35.jpeg
    Screenshot_2015-08-01-12-26-35.jpeg
    229,4 KB · Aufrufe: 312
  • Screenshot_2015-08-01-12-27-48.jpeg
    Screenshot_2015-08-01-12-27-48.jpeg
    104,7 KB · Aufrufe: 320
  • Screenshot_2015-08-01-12-28-18.jpeg
    Screenshot_2015-08-01-12-28-18.jpeg
    141 KB · Aufrufe: 302
  • Screenshot_2015-08-01-12-28-43.jpeg
    Screenshot_2015-08-01-12-28-43.jpeg
    130,2 KB · Aufrufe: 286
  • Screenshot_2015-08-01-12-31-52.jpeg
    Screenshot_2015-08-01-12-31-52.jpeg
    15 KB · Aufrufe: 294
  • Screenshot_2015-08-01-12-32-56.jpeg
    Screenshot_2015-08-01-12-32-56.jpeg
    90,6 KB · Aufrufe: 312
  • Screenshot_2015-08-01-12-33-15.jpeg
    Screenshot_2015-08-01-12-33-15.jpeg
    48,6 KB · Aufrufe: 317
linuxnutzer schrieb:
... ob es reicht, die Sprachdateien einfach umzukopieren
... sollte reichen. Wahrscheinlich fehlte dir zwischendurch ein "echter" Neustart von Osmand (über den Appmanager einfach Prozess stoppen) und da die Sprachpackete noch auf der internen SD-Karte liegen und nicht auf der externen (die du als Datenpfad angegeben hast) kommt es natürlich zur Fehlermeldung.
linuxnutzer schrieb:
Download von Sprachdateien nichts angezeigt wird
Hmmm, sieht merkwürdig aus, kann aber daran liegen, das du im Moment ja gar keine Sprachpacket, auch nicht die von der "Installation" zur Verfügung hast (auch wenn sie auf der internen SD-Karte herumliegen).

Falls alles nichts hilft, Workflow zur Installation:
  • Osmand deinstallieren und alle möglicherweise verbliebenen Dateien und Ordner löschen
  • Handy Neustart
  • Osmand neuinstallieren, dabei erst mal den "Standardpfad" beibehalten, sollte die interne SD-Karte sein
  • Handy Neustart (oder Prozess stoppen)
  • Osmand jetzt über die Einstellungen auf die externe SD-Karte verschieben
  • Handy Neustart (oder Prozess stoppen)
  • Karten und Sprachpakete herunterladen und dann einstellen/installieren
Evtl. auf der internen SD-Karte verbleibende "Reste" sollten dann über sein und gelöscht werden können.

Gruß __W__
 
  • Danke
Reaktionen: linuxnutzer
... sollte reichen.

Ich habe den gesamten Inhalt der internen Karte auf die externe kopiert. den osmand-Ordner intern gelöscht und das Handy neu gestartet. Nun höre ich was. Danke!
 

Ähnliche Themen

A
Antworten
7
Aufrufe
566
HaJoHausB
HaJoHausB
C
Antworten
4
Aufrufe
632
vonharold
vonharold
A
Antworten
6
Aufrufe
473
berniewet
berniewet
Zurück
Oben Unten