Hilfe bei der Entwicklung einer kleinen App gesucht

  • Antworten:28
  • Bentwortet
Kevin D.
  • Forum-Beiträge: 18

23.06.2010, 13:25:42 via Website

Hallo allerseits,

ich beschreibe hier mal mein Anliegen und hoffe das vielleicht jemand dabei ist der mir bei der Entwicklung einer kleinen Android-App hilft.

Mein eigentliches Problem, ich kann nicht Java programmieren und auch dieses ganze objektorientierte leuchtet mir einfach nicht ein. Sprich, ich bin Laie und kann es nicht selber.
Ich würde vielleicht noch eine einfache GUI in Eclipse hinbekommen, mehr aber auch nicht.

Die App die ich möchte ist wirklich kein großer Aufwand und auch grafisch habe ich keinerlei Ansprüche. Im Grunde benötige eine erste Activity zur Eingabe von 3 Variablen mit einem Start Button. Die erste Variable gibt eine Anzahl an (z.B. 5), die zweite und die dritte Variable gibt eine Zeit in Sekunden an (z.B. 30 sek. und 45 sek.). Nach dem Start soll einfach nach jeder abgelaufenen Zeit (z.B. nach 30 Sekunden) ein Ton/Geräusch/Signal ertönen. Und nach 5 mal ist alles vorbei.

Ist jetzt vielleicht nicht sofort zu verstehen was ich hier will, aber wenn jemand bereits wäre mir zu helfen, erstelle ich auch gerne ein UML oder sonstiges und beschreibe noch einmal im Detail was ich meine!


Besten Dank im Voraus und schöne Grüße ;-)

Antworten
Alex W.
  • Forum-Beiträge: 84

23.06.2010, 20:09:48 via Website

Ich verstehe das mit allen 30 sek einen Ton abspielen, 5 mal, aber wofür die zweite Angabe der Zeit?

Bin grad dabei Java/Android zu lernen und würde mich dem gerne annehmen. Wenn Du mir einen Ton gibst, und das mit der zweiten Zeit erklärst kann ich vlt helfen.

— geändert am 23.06.2010, 20:11:49

Antworten
Kevin D.
  • Forum-Beiträge: 18

24.06.2010, 09:19:36 via Website

Hey hey super,

besten Dank!

Ich werde das ganze mal genau beschreiben wofür ich es benötige, dann versteht man es auch besser.
Ich benötige es beim Sport. Und zwar muss ich für gewisse Leistungsprüfungen trainieren. Diese sehen wie folgt aus.
Es wird auf einer Laufbahn um ein Fußballfeld gelaufen (400 Meter). Relevant ist jetzt aber erst einmal nur die Hälfte also 200 Meter. Diese 200 Meter sind ein "Hit". Daher heißt diese Prüfung auch Hit-Test. So ein Hit besteht aus einer Kombination aus sprinten (150m) und eine kurzen Regenerationsphase (50m).
Allerdings müssen exakt die Zeiten eingehalten werden.
2 Hits sind daher eine Runde um das Spielfeld.

Daher wäre eine kleine App super, die mir einfach immer ein kleines Signal gibt wann die Zeit abgelaufen ist, und ich wieder sprinten muss, oder wieder langsam gehen kann! Die Zeiten sind aber nicht immer gleich, daher muss es Variabel bleiben, genauso wie die Anzahl der zu laufenden Hits.

Beispiel. Der Test geht los, ich muss nun 150m sprinten und nach z.B. 30 Sekunden kommt der erste Ton, dann weiß ich ob ich schnell genug war und im Zeitfenster liege, oder ob ich etwas zu langsam war und beim nächsten mal schneller sein muss. Wenn nun die Zeit (z.B. 25 sek.) für die Regenartion um sind, kommt der nächste Ton und ich weiß das ich wieder los sprinten muss.

Hört sich im Grunde total einfach an, aber das schwirigste an der Geschichte ist es, das richtige Tempo zu finden. Sonst geht einem zu schnell die Puste aus, und nach dem 30. Hit biste blatt xD


Ich hoffe das ist erst einmal ausreichend genug!

Wie gesagt, besten Dank!

Antworten
Alex W.
  • Forum-Beiträge: 84

24.06.2010, 12:27:47 via Website

Ah ok, ich denke ich verstehe.

Ich hoffe ich hab das bis über das Wochenende fertig, kann leider erst Samstag anfangen. Aber ich werde mich daran setzen, versprochen :-)

Also nochmal zur Wiederholung:

Du startest die App und es fängt an den ersten Zeitwert zu zählen (bsp 30 sek). nach den 30 sek kommt der ton. dann ist für den zweiten Zeitwert lang Ruhe angesagt. Wenn dieser zweite Zeitwert um ist, spielt das Programm wieder einen Ton damit Du weist es geht los. Jetzt fängt das Programm wieder bei 0 an. Ja?

Gruß Alex

Antworten
Kevin D.
  • Forum-Beiträge: 18

24.06.2010, 13:04:08 via Website

Hey Alex,

nur keine Hektik! Ich glaube nämlich ich bekomme es auch fast selber hin. Habe mal angefangen mich mit Android Entwicklung und Java Tutorials auseinander zu setzen! Und habe mittlerweile die ersten Spielereien hin bekommen. Z.B. ein Eingabefeld und einen Button, wenn man den Button drückt kommt das Eingegebene via Toast auf den Bildschirm. Hört sich lächerlich an, war aber für mich ein Meilenstein bis dort hin xD

Vllt. wollen wir es ja so machen, bevor du dir die ganze Arbeit der App-Entwicklung machen musst, ich werde versuchen soweit zu kommen wie ich es schaffe, und wenn ich mal nicht weiter komme, frage ich dich um Rat?

Was hältst du davon?

Gruß Kevin

P.S.:

Antworten
Kevin D.
  • Forum-Beiträge: 18

24.06.2010, 22:00:21 via Website

Hab schon meine ersten zwei Fragen.

  • Wie bekomme ich einen Sound abgespielt? Irgendwie komme ich nicht mit dem Soundpool klar?
  • Wie kann ich meine Schleife eine bestimmte Sekundenzahl pausieren lassen?

Danke MfG

Antworten
Alex W.
  • Forum-Beiträge: 84

26.06.2010, 12:05:50 via Website

Hi, klar das ist ok. hier hab ich dir eine einfache sound app als Beispiel wie man sound abspielt. Hier per onlick, nicht wie du es brauchst, aber vlt hilft es dir.

1public class PlaySound extends Activity implements OnClickListener {
2 /** Called when the activity is first created. */
3 int soundId = 0;
4 SoundPool soundPool;
5 AudioManager audioManager;
6 boolean playedSound = false;
7 private Button clickBtn;
8 //Button button = (Button) findViewById(R.id.Button1);
9 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13 clickBtn = (Button) findViewById(R.id.Button1);
14 clickBtn.setOnClickListener(this);
15 soundPool = new SoundPool( 5, AudioManager.STREAM_MUSIC, 0);
16 audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
17
18 try
19 {
20 AssetFileDescriptor descriptor = getAssets().openFd( "vuvuzela_sound_solo_mp.mp3" );
21 soundId = soundPool.load( descriptor, 1 );
22 }
23 catch( Exception ex )
24 {
25 //Log.d( "Sound Sample", "couldn't load sound 'shot.wav'" );
26 throw new RuntimeException( ex );
27 }
28 }
29
30
31 public void onClick(View v)
32 {
33
34 int volume = audioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
35 soundPool.play(soundId, volume, volume, 1, 0, 1);
36 playedSound = true;
37
38 }
39}

Kevin D.

Antworten
Kevin D.
  • Forum-Beiträge: 18

28.06.2010, 08:45:56 via Website

super >_>

funktioniert bestens, muss es nur noch anpassen!

thx

Antworten
Kevin D.
  • Forum-Beiträge: 18

28.06.2010, 09:42:07 via Website

Yeah die Implementierung hat super geklappt! Besten Dank

Kann mir jemand noch bei dem Punkt "Wie kann ich meine Schleife eine bestimmte Sekundenzahl pausieren lassen?" weiter helfen? Vllt. gibt es ja auch eine andere möglichkeit soetwas zu realisieren...?

Gruß Kevin

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

28.06.2010, 13:01:59 via Website

Zeig mal deine Schleife und den Kontext in dem sie rennt, einfach mittels Thread#sleep da was zu machen ist meist nicht das was man machen sollte.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Kevin D.
  • Forum-Beiträge: 18

28.06.2010, 14:56:06 via Website

servus,

habe es mittlerweile so geregelt.
Eine erste Version läuft auch bereits auf meinem Magic, ist allerdings noch nicht das Gelbe vom Ei!

1while (counter++ < hits) {
2 //Schleife für sprint!
3 soundPool.play(sprinten, volume, volume, 1, 0, 1);
4 try {
5 Thread.sleep((sprint-10)*1000);
6 } catch (InterruptedException e) {
7 // TODO Auto-generated catch block
8 e.printStackTrace();
9 }
10 soundPool.play(zehn, volume, volume, 1, 0, 1);
11 }

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

28.06.2010, 16:44:03 via Website

Und jetzt musst du uns noch sagen welchen Thread du da zum schlafen bringst ?

Du könntest auch einen TimerTask oder ähnliches benutzen, ist evtl. flexiblere/bessere Lösung

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Kevin D.
  • Forum-Beiträge: 18

29.06.2010, 15:16:27 via Website

Phu gute Frage? Wie gesagt, ich habe vorher noch nie Objektorientiert programmiert :wacko:
Habe momentan leider nicht die Zeit dazu mich da auch voll rein zu hängen (leider)...!

Im Grunde erfüllt die App nun meine Grundvoraussetzungen, zwar nicht schön und gut, aber es klappt!
Problem z.B. wenn ich die Schleife starte (kann durch aus mal eine halbe Stunde lang sein das Training) ist der Start-Button so lang aktiv (sprich der Screen blockiert) bis die Schleife zu ende ist. Ist natürlich nervig, denn dann hilft nur das Killen der App.
Aber wie gesagt, mehr bzw. besser kann ich es nicht!

Wenn ihr möchtet kann ich ja mal die ganze Activity posten oder euch schicken, aber ich weiß nicht ob ihr dann lachen, oder heulen werdet 8o
Bzw. kann ich auch die .apk online stellen, aber eigentlich gehört so eine "nicht zu beendende App" nicht auch noch veröffentlicht :cold:


Ggf. werde ich doch nochmal auf das Angebot von aaa w. zurück kommen müssen, mir die App zu erstellen!

— geändert am 29.06.2010, 15:19:17

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.06.2010, 16:36:32 via Website

Ich dachte mir schon das deine APP einfriert, daher auch die Thread Frage.
Nein, poste einfach mal den Code der die Schleife startet, daraus sollte der Thread Kontext ersichtlich werden!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Alex W.
  • Forum-Beiträge: 84

29.06.2010, 17:43:29 via Website

Jo, stell mal Deinen Code rein :-) Dann werden wir Dir bestimmt helfen können.

Gruß Alex

Antworten
Kevin D.
  • Forum-Beiträge: 18

30.06.2010, 07:34:41 via Website

Tja dann schaut euch mal mein Durcheinander an :P
Über Kritik wäre ich sehr dankbar (bin schließlich totaler Anfänger), aber dann bitte mit kurzer Erklärung!

Thx

Hier auch nochmals als .java Datei !

1package de.hit.test;
2
3import android.app.Activity;
4import android.content.Context;
5import android.content.res.AssetFileDescriptor;
6import android.media.AudioManager;
7import android.media.SoundPool;
8import android.os.Bundle;
9import android.view.View;
10import android.view.View.OnClickListener;
11import android.widget.Button;
12import android.widget.EditText;
13
14public class EingabeActivity extends Activity implements OnClickListener {
15 /** Called when the activity is first created. */
16 int sprinten = 0;
17 int gehens = 0;
18 int ziel = 0;
19 int zehn = 0;
20 int vier = 0;
21 int zwei = 0;
22 SoundPool soundPool;
23 AudioManager audioManager;
24 private Button button;
25 private Button exit;
26
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.main);
31
32 button = (Button) findViewById(R.id.button);
33 button.setOnClickListener(this);
34 exit = (Button) findViewById(R.id.exit);
35 exit.setOnClickListener(this);
36
37 soundPool = new SoundPool( 5, AudioManager.STREAM_MUSIC, 0);
38 audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
39
40 try {
41 AssetFileDescriptor descriptor = getAssets().openFd( "sprint.wav" );
42 sprinten = soundPool.load( descriptor, 1 );
43
44 AssetFileDescriptor descriptor2 = getAssets().openFd( "ziel.wav" );
45 ziel = soundPool.load( descriptor2, 1 );
46
47 AssetFileDescriptor descriptor3 = getAssets().openFd( "zehn.wav" );
48 zehn = soundPool.load( descriptor3, 1 );
49
50 AssetFileDescriptor descriptor4 = getAssets().openFd( "vier.wav" );
51 vier = soundPool.load( descriptor4, 1 );
52
53 AssetFileDescriptor descriptor5 = getAssets().openFd( "zwei.wav" );
54 zwei = soundPool.load( descriptor5, 1 );
55
56 AssetFileDescriptor descriptor6 = getAssets().openFd( "gehen.wav" );
57 gehens = soundPool.load( descriptor6, 1 );
58 }
59 catch( Exception ex ) {
60 //Log.d( "Sound Sample", "couldn't load sound 'shot.wav'" );
61 throw new RuntimeException( ex );
62 }
63 }
64
65
66 public void onClick(View v) {
67 //Variable hits für die Anzahl der Hits
68 EditText hitsvar = (EditText) findViewById(R.id.hits);
69 String hitsvar2 = hitsvar.getText().toString();
70 int hits = Integer.valueOf( hitsvar2 ).intValue();
71 //Variable sprint für die Zeit zum sprinten
72 EditText sprintvar = (EditText) findViewById(R.id.sprint);
73 String sprintvar2 = sprintvar.getText().toString();
74 int sprint = Integer.valueOf( sprintvar2 ).intValue();
75 //Variable gehen für die Zeit zum gehen
76 EditText gehenvar = (EditText) findViewById(R.id.gehen);
77 String gehenvar2 = gehenvar.getText().toString();
78 int gehen = Integer.valueOf( gehenvar2 ).intValue();
79 //Variable für Counter
80 int counter = 0;
81
82
83
84 if (v == button) {
85 int volume = audioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
86 try {
87 Thread.sleep(5000);
88 } catch (InterruptedException e) {
89 // TODO Auto-generated catch block
90 e.printStackTrace();
91 }
92
93 while (counter++ < hits) {
94 //Schleife für sprint!
95 soundPool.play(sprinten, volume, volume, 1, 0, 1);
96 try {
97 Thread.sleep((sprint-10)*1000);
98 } catch (InterruptedException e) {
99 // TODO Auto-generated catch block
100 e.printStackTrace();
101 }
102 soundPool.play(zehn, volume, volume, 1, 0, 1);
103
104 try {
105 Thread.sleep(6000);
106 } catch (InterruptedException e) {
107 // TODO Auto-generated catch block
108 e.printStackTrace();
109 }
110 soundPool.play(vier, volume, volume, 1, 0, 1);
111
112 try {
113 Thread.sleep(2000);
114 } catch (InterruptedException e) {
115 // TODO Auto-generated catch block
116 e.printStackTrace();
117 }
118 soundPool.play(zwei, volume, volume, 1, 0, 1);
119
120 try {
121 Thread.sleep(2000);
122 } catch (InterruptedException e) {
123 // TODO Auto-generated catch block
124 e.printStackTrace();
125 }
126
127
128 if (counter == hits) {
129 soundPool.play(ziel, volume, volume, 1, 0, 1);
130 } else {
131 //Schleife für gehen!
132 soundPool.play(gehens, volume, volume, 1, 0, 1);
133 try {
134 Thread.sleep((gehen-10)*1000);
135 } catch (InterruptedException e) {
136 // TODO Auto-generated catch block
137 e.printStackTrace();
138 }
139 soundPool.play(zehn, volume, volume, 1, 0, 1);
140
141 try {
142 Thread.sleep(6000);
143 } catch (InterruptedException e) {
144 // TODO Auto-generated catch block
145 e.printStackTrace();
146 }
147 soundPool.play(vier, volume, volume, 1, 0, 1);
148
149 try {
150 Thread.sleep(2000);
151 } catch (InterruptedException e) {
152 // TODO Auto-generated catch block
153 e.printStackTrace();
154 }
155 soundPool.play(zwei, volume, volume, 1, 0, 1);
156
157 try {
158 Thread.sleep(2000);
159 } catch (InterruptedException e) {
160 // TODO Auto-generated catch block
161 e.printStackTrace();
162 }
163 }
164 }
165 }
166
167 if (v == exit) {
168 System.exit(0);
169 }
170 }
171}

Antworten
Kevin D.
  • Forum-Beiträge: 18

11.08.2010, 16:38:36 via Website

hallo zusammen,

so inzwischen ist einiges an zeit vergangen, aber ich habe immer mal wieder etwas weiter gebastelt. und eigentlich habe ich jetzt schon eine richtig gut funktionierende app.
aber könnte mir jemand bei tts (text-to-speech) helfen. ich würde gern das ein oder andere ausgeben lassen.
kann ich irgendwie recht einfach eine weitere klasse bilden und dieser den inhalt übergeben der gesprochen werden soll?

habt ihr da vllt. schon etwas parat?

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

11.08.2010, 20:34:39 via Website

Hi,

parat habe ich gerade nichts, aber mit diesem Beispiel sollte es recht einfach sein:

TextToSpeech Beispiel


Gruß
Jochen

— geändert am 11.08.2010, 20:48:47

Antworten
Kevin D.
  • Forum-Beiträge: 18

12.08.2010, 12:47:22 via Website

danke

diese seite hatte ich auch schon gefunden, komme damit aber nicht klar. liegt aber wohl eher an meinem mangelnden wissen.
bin froh jetzt zwei activitys hinbekommen zu haben ;)

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

13.08.2010, 09:43:43 via Website

Hi,

ok, ich versuche es mal für Dich einfach zu machen.
Ist vielleicht nicht die "reine Lehre" aber sollte funktionieren.

Hier mal die Klasse, die die TTS Initialisierung und die Sprachausgabe übernimmt:

1import java.util.Locale;
2import java.util.concurrent.CountDownLatch;
3
4import android.content.Context;
5import android.speech.tts.TextToSpeech;
6
7public class TextToSpeechService implements TextToSpeech.OnInitListener {
8 private int status;
9 private CountDownLatch countdownLatch;
10 private TextToSpeech textToSpeech;
11
12 public Integer init(Context context) {
13 countdownLatch = new CountDownLatch(1);
14 textToSpeech = new TextToSpeech(context, this);
15
16 // Wait for service to initialize
17 try {
18 countdownLatch.await();
19 } catch (InterruptedException e) {
20 e.printStackTrace();
21 status = TextToSpeech.ERROR;
22 }
23
24 return status;
25 }
26
27 public Integer speak(String text, Locale locale) {
28 if(textToSpeech != null) {
29 int result = textToSpeech.setLanguage(locale);
30 if (result == TextToSpeech.LANG_MISSING_DATA ||
31 result == TextToSpeech.LANG_NOT_SUPPORTED) {
32 return result;
33 } else {
34 textToSpeech.speak(text,
35 TextToSpeech.QUEUE_ADD,
36 null);
37
38 return TextToSpeech.SUCCESS;
39 }
40 }
41
42 return TextToSpeech.ERROR;
43 }
44
45 public int getStatus() {
46 return status;
47 }
48
49 @Override
50 public void onInit(int status) {
51 this.status = status;
52 countdownLatch.countDown();
53 }
54}

In Deine Aktivity könntest Du das dann so einbinden:

1TextToSpeechService tts = new TextToSpeechService();
2if(tts.init(getApplicationContext()) == TextToSpeech.SUCCESS) {
3 tts.speak("Hallo", Locale.getDefault());
4}

Die Verzögerung bei der Initialisierung sollte nicht zu gravierend sein.

Hoffe das hilft Dir weiter...

Gruß
Jochen

Antworten
Kevin D.
  • Forum-Beiträge: 18

13.08.2010, 13:36:53 via Website

Hallo zusammen,

erst einmal besten Dank für den Code. Das Einsetzen in Eclipse hatte super geklappt, aber leider hängt sich meine App damit auf und stürzt dann ab =/
LogCat sagt folgendes:

08-13 11:28:07.289: ERROR/TTS is loading(231): /system/lib/libttspico.so
08-13 11:28:07.308: VERBOSE/SynthProxy(231): AudioTrack started
08-13 11:28:07.318: VERBOSE/TtsService(231): TtsService.setLanguage(deu, DEU, )
08-13 11:28:07.428: INFO/SVOX Pico Engine(231): loaded de-DE successfully
08-13 11:28:07.437: INFO/SynthProxy(231): setting speech rate to 100
08-13 11:28:58.527: WARN/WindowManager(53): Key dispatching timed out sending to de.hit.test/de.hit.test.EingabeActivity
08-13 11:28:58.527: WARN/WindowManager(53): Dispatch state: {{KeyEvent{action=1 code=24 repeat=0 meta=0 scancode=115 mFlags=8} to Window{438a8f98 de.hit.test/de.hit.test.EingabeActivity paused=false} @ 1281698517299 lw=Window{438a8f98 de.hit.test/de.hit.test.EingabeActivity paused=false} lb=android.os.BinderProxy@438f6410 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{43938270 de.hit.test/de.hit.test.EingabeActivity paused=false}}}
08-13 11:28:58.527: WARN/WindowManager(53): Current state: {{null to Window{43938270 de.hit.test/de.hit.test.EingabeActivity paused=false} @ 1281698938535 lw=Window{43938270 de.hit.test/de.hit.test.EingabeActivity paused=false} lb=android.os.BinderProxy@437903f0 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{43938270 de.hit.test/de.hit.test.EingabeActivity paused=false}}}
08-13 11:28:58.629: INFO/ActivityManager(53): ANR in process: de.hit.test (last in de.hit.test)
08-13 11:28:58.629: INFO/ActivityManager(53): Annotation: keyDispatchingTimedOut


Was noch dazu kommt, du schreibst etwas von einer Verzögerung (dies konnte ich ja leider nicht testen).
Aber um ehrlich zu sein kann ich bei der Aussprache keine Verzögerung gebrauchen, die Ansage müsste eigentlich auf die Sekunde genau kommen.
Ist das möglich?


Danke für Eure Hilfe!

Gruß Kevin

— geändert am 13.08.2010, 15:36:50

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

14.08.2010, 12:43:49 via Website

Hi,

ok, dann geht das in der onCreate() Methode so nicht.
Ich habe das ausserhalb einer Activity verwendet, deshalb war das bei mir kein Problem.

Bei Dir sollte das so gehen:

  • Die Activity muss TextToSpeech.OnInitListener implementieren (also YourActivity implements TextToSpeech.OnInitListener).
  • In der onCreate() methode initialisierst Du das TTS:
    1textToSpeech = new TextToSpeech(this, this);
    Die Methode onInit(int status) wird aufgerufen sobald TTS initialisiert ist.
    Das ganze ist asynchron, deshalb brauchst du den OnInitListener().
  • Deine Methode onInit(int status) sieht vereinfacht so aus:
    1public void onInit(int status) {
    2 if (status == TextToSpeech.SUCCESS) {
    3 textToSpeech.setLanguage(Locale.getDefault());
    4 // Hier könntest Du Deine GUI Elemente freigeben (Knöpfe etc.)
    5 }
    6 else {
    7 // Hier eine Fehlermeldung, da die Initialisierung nicht geklappt hat
    8 }
    9}
  • TTS verwenden kannst Du dann innerhalb Deiner Activity so:
    1textToSpeech.speak("Text", TextToSpeech.QUEUE_ADD, null);

Hoffe das hilft Dir weiter und funktioniert auch dieses mal...

Gruß
Jochen

Antworten
Kevin D.
  • Forum-Beiträge: 18

17.08.2010, 16:41:35 via Website

hey jochen,

wieder einmal vielen besten dank für deine mühe. TTS funktioniert nun.
aber leider ist die verzögerung zu lange. die ansagen kommen einfach zu spät.
allerdings fast immer 2-3 sek. (im emulator)
fragt sich wie es sich auf dem device direkt verhält.

will ich eigentlich zwar nicht, aber ich könnte halt eben die ansagen immer 2-3 sek. früher starten lassen...!

würde sich TTS noch optimieren lassen, oder ist es einfach zu rechenintensiv?



zur zeit lasse ich ja zuvor aufgenommene sounds (.wav) dateien abspielen.
funktioniert zwar auf die sek. genau, hat aber auch noch ein paar kleine fehler.
wenn nicht optimiere ich diese methode!

— geändert am 17.08.2010, 16:43:06

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

17.08.2010, 17:58:24 via App

Hi Kevin,
eine Verzögerung von drei Sekunden hört sich für mich recht lange an. Ich würde vermuten, daß es auf einem "richtigen" Handy schnell geht. Selbst habe ich das nicht getestet. Einfach mal probieren.
Viel Erfolg!

Gruß Jochen

Antworten
Kevin D.
  • Forum-Beiträge: 18

19.08.2010, 09:25:49 via Website

Guten Morgen,

hätte noch eine kleine Frage, wie kann ich in meiner App (Activity) über die Lautstärkeregler des Gerätes (also die Hardwarebuttons) die Medienlautstärke ändern lassen. Zur Zeit ändert sich nur die Klingeltonlautstärke...
Da ich ja aber Sound abspiele, wäre es sinnvoller die Medienlautstärke ändern zu können.

Ich hoffe das ist recht einfach umzusetzen.

Thx Gruß

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

19.08.2010, 09:39:19 via Website

Hi,

das sollte einfach sein. Habe es allerdings selbst noch nicht ausprobiert.
In der onCreate() Methode kannst du folgendes einfügen:

1setVolumeControlStream(AudioManager.STREAM_MUSIC);

Gruß
Jochen

Antworten
Kevin D.
  • Forum-Beiträge: 18

19.08.2010, 13:46:15 via Website

Jochen Rühl

1setVolumeControlStream(AudioManager.STREAM_MUSIC);

also das funktioniert super :bashful: und war auch easy!
besten dank



hab jetzt mal die app auf meinem magic (cyanogen5) installiert, die TTS verzögerung ist dort genauso, so ziemlich immer 2 sek.
liegt es an meinem code, oder an TTS?

soll ich die eine activity mal posten?

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

20.08.2010, 12:03:53 via Website

Hi Kevin,

scheint schneller zu gehen, wenn du anstatt des:

1TextToSpeech.QUEUE_ADD

ein

1TextToSpeech.QUEUE_FLUSH

einbaust.

Zumindest ist das bei mir so.

Gruß
Jochen

Antworten
Kevin D.
  • Forum-Beiträge: 18

23.08.2010, 09:18:59 via Website

hallo jochen,

ja super. jetzt klappt es fast auf die sekunde genau. damit kann ich leben ;)

besten dank an alle die mir geholfen haben meine erste app zu programmieren.
ich habe zwar noch nicht alles so verstanden was objekorientierte programmierung angeht, aber mir ist einiges klarer geworden was ich vorher einfach nicht verstanden habe :smug:

nun kann ich mit meinem trainig so richtig los legen

mfg kevin

Antworten