"ANDROID - Media Framework (Audio,Video), Telephony APIs(SMS/MMS), Speech Synthesis & Recognition"



Podobne dokumenty
Obsługa SMS i telefonii

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

akademia androida Service, BroadcastReceiver, ContentProvider część IV

akademia androida Składowanie danych część VI

[Android] Podstawy programowania

Powiadomienia w systemie Android

akademia androida Http i AsyncTask część VII

Systemy operacyjne na platformach mobilnych

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Programowanie telefonów z Windows Phone 7, cz. 4

Android, wprowadzenie do SDK

Programowanie Urządzeń Mobilnych. Laboratorium nr 11, 12

Fragmenty są wspierane od Androida 1.6

Systemy operacyjne na platformach mobilnych

Android pierwsza aplikacja

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

akademia androida Intencje oraz URI część III

Wideoboroskop AX-B250

Tworzenie i wykorzystanie usług

Dźwięk w IOS. Wykład 8. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.

Wykład 6 Dziedziczenie cd., pliki

Mobilne Aplikacje Multimedialne

Programowanie obiektowe

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Laboratorium Programowania Kart Elektronicznych

Mechanizm powiadomień

Analiza technologii UPNP w kontekście strumieniowania multimediów. Paweł Szafer. Promotor: dr inż. doc. M. Sajkowski

ROZDZIAŁ 1. PRZEGLĄD BRAMOFONU SAFE...

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

ROZDZIAŁ 1. PRZEGLĄD APLIKACJI SAFE...

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Laboratorium Systemów Mobilnych. Wykład 2

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Laboratorium Systemów Mobilnych. Wykład 1

Tworzenie aplikacji w języku Java

INSTRUKCJA OBSŁUGI KARTY PRZECHWYTUJĄCEJ PCI-E

MP4 FY535D. Włączanie: Przesuń przełacznik ON/OFF na pozycję ON i przytrzymaj przycisk > aby właczyć. Aby wyłączyć przesuń przełacznik na pozycję OFF

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Mechanizm zapisu preferencji

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Instrukcja obsługi User s manual

Tworzenie aplikacji na WP. Blog dotyczący.net oraz WP.

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Java. Programowanie Obiektowe Mateusz Cicheński

Nero 12 Platinum. Motywy filmowe retro Nowość - - Efekty filmowe Nowość Nowość -

Podstawowe elementy GUI - zadania

Profesjonalne systemy do nagrywania i strumieniowania Epiphan Systems

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Programowanie obiektowe

Wprowadzenie. 1. Terminal WebRTC. LABORATORIUM 5: WebRTC komunikacja między terminalami.

Wyciąganie ścieżki dźwiękowej z płyty DVD za pomocą DVD Audio Extractor

Microsoft IT Academy kurs programowania

JVC CAM Control (na telefony iphone) Instrukcja obsługi

Programowanie obiektowe

K2 XVR-04 K2 XVR-08 K2 XVR-16 K2 XVR-24

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Mobile Client Software. ivms Instrukcja obsługi

AKADEMIA MŁODYCH ODKRYWCÓW

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Java Platform Micro Edition

Streaming multimediów od kuchni

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

komunikator na platformę Android wspierający protokół GG

Compatible cameras for NVR-5000 series Main Stream Sub stream Support Firmware ver. 0,2-1Mbit yes yes yes n/d

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

Udostępnianie obrazu z kamer Sanyo HD na stronach WWW PORADNIK

Programowanie w Javie

Laboratorium 10 - Web Services

Lekcja 5. Funkcje handlemessage() i initialize(), konstruktor i destruktor

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

Wideokonferencje MGR INŻ. PAWEŁ SPALENIAK

itext 1. Wprowadzenie 2. Przykłady i zastosowania.

Przechowywanie danych

OpenPoland.net API Documentation

Wirtualne Klasy. Kontakt: Izabela Trojan, Tel: Fax:

Specyfikacja techniczna. mprofi Interfejs API

Technologie Obiektowe PK WFMI 2010/2011

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

INSTRUKCJA OBSŁUGI USB2.0 GRABBER

Wpisany przez Łukasz Nawrotek Niedziela, 08 Czerwiec :43 - Zmieniony Niedziela, 08 Czerwiec :44

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. matt@gynsoft.net

Odtwarzacz multimedialny

KONFIGURACJA KAMER FORTEC IP

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Podstawowe elementy GUI - zadania

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Ćwiczenie 1. Przygotowanie środowiska JAVA

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

Transkrypt:

"ANDROID - Media Framework (Audio,Video), Telephony APIs(SMS/MMS), Speech Synthesis & Recognition" inż. Michal Bulba, Mateusz Kuszczak, Piotr Gudas. Opiekun dr Marek Piasecki

Media Framework Audio/Video Piotr Gudas EMIF EiT rok III

Plan prezentacji Obsługiwane pliki multimedialne Odtwarzanie audio Nagrywanie audio Odtwarzanie video Nagrywanie video Wyświetlanie zdjęć

Obsługiwane formaty (1) Audio 3GPP MPEG-4 FLAC (Android 3.1+) MP3 Ogg kodek MIDI

Obsługiwane formaty (2) Video 3GPP MPEG-4 MPEG-TS WebM (Android 2.3.3+)

Obsługiwane formaty (3) Obrazy JPEG GIF PNG BMP

Zalecenia kodowania video public class CamcorderProfile extends Object

Obsługiwane protokoły sieciowe RTSP (RTP, SDP) HTTP progressive streaming HTTP live streaming draft protocol (Android 3.0 +) Więcej na: http://developer.android.com/guide/appendix/media-formats.html

Odtwarzanie audio/video Aby aplikacja mogła obsługiwać pliki audio/video używamy klasy: public class MediaPlayer extends Object

MediaPlayer: diagram statusu (1) opcja 1 MediaPlayer mp = MediaPlayer.create( context, R.raw.song); mp.start(); opcja 2 MediaPlayer mp; mp = new MediaPlayer(); mp.setdatasource(uri/path); mp.prepare(); mp.start();

MediaPlayer: diagram statusu (2) mp.pause(); mp.stop(); mp.seekto(time); mp.reset(); mp.relese();

Wybrane metody klasy MediaPlayer dla audio (1) public void prepareasync () public int getduration () public int getcurrentposition () public void seekto (int msec) public void setlooping (boolean looping) public boolean islooping ()

Wybrane metody klasy MediaPlayer dla audio (2) public boolean isplaying () public void setvolume (float leftvolume, float rightvolume) public void setwakemode (Context context, int mode) Więcej na: http://developer.android.com/reference/android/media/mediaplayer.html

Nagrywanie audio/video Klasa MediaRecorder posłuży nam do nagrywania plików multimedialnych. public class MediaRecorder extends Object

Nagrywanie audio (1) Utworzenie nowej instancji android.media.mediarecorder mrecorder = new MediaRecorder(); Ustawić ścieżkę za pomocą MediaRecorder.setAudioSource() mrecorder.setaudiosource( ); MediaRecorder.AudioSource.MIC

Nagrywanie audio (2) Ustawić format pliku wyjściowego MediaRecorder.setOutputFormat() mrecorder.setoutputformat( MediaRecorder.OutputFormat.THREE_GPP); Ustawić nazwę utworzonego pliku MediaRecorder.setOutputFile() mrecorder.setoutputfile(srcpath);

Nagrywanie audio (3) Ustawić koder MediaRecorder.setAudioEncoder() mrecorder.setaudioencoder( MediaRecorder.AudioEncoder.AMR_NB); Wywołanie funkcji MediaRecorder.prepare() mrecorder.prepare();

Nagrywanie audio (4) Włączamy nagrywanie MediaRecorder.start() mrecorder.start(); Zatrzymujemy nagrywanie MediaRecorder.stop() mrecorder.stop();

Nagrywanie audio (5) Kończenie pracy MediaRecorder.release() mrecorder.release(); mrecorder = null;

Dostęp do karty pamięci <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.record_audio" /> srcpath = Environment.getExternalStorageDirectory().getAbsolutePath(); scrpath+= "/audio_record.3gp";

Wybrane metody klasy MediaRecorder dla audio (1) public int getmaxamplitude () public void setaudiochannels (int numchannels) public void setaudioencoder (int audio_encoder) public void setaudioencodingbitrate (int bitrate) public void setaudiosamplingrate (int samplingrate)

Wybrane metody klasy MediaRecorder dla audio (2) public void setmaxduration (int max_duration_ms) public void setmaxfilesize (long max_filesize_bytes) Więcej na: http://developer.android.com/reference/android/media/mediarecorder.html

Odtwarzanie video (1) Do odtwarzania wideo służy klasa public class MediaPlayer extends Object Ale

Odtwarzanie video (2) Dlatego użyjemy narzędzi public class VideoView extends SurfaceView implements MediaController.MediaPlayerControl public class MediaController extends FrameLayout

VideoView (1) Dodajemy VideoView do pliku z layout <VideoView android:id="@+id/videov" android:layout_width="fill_parent" android:layout_height="wrap_content" /> Dodajemy do activity setcontentview(r.layout.main); VideoView myvideoview = (VideoView)findViewById(R.id.videov);

VideoView (2) Ustawienie ścieżki do pliku String SrcPath = "/sdcard/test.mp4"; lub myvideoview.setvideopath(srcpath); myvideoview.setvideouri(uri.parse("www")); myvideoview.setvideouri( Uri.parse("\sdcard\video.mp4"));

VideoView (3) Ustawianie ostrości videoview.setfocus(); użycie klasy MediaController myvideoview.setmediacontroller( new MediaController(this)); Odtwarzamy myvideoview.start();

VideoView (4)

Nagrywanie video Do nagrywania wideo używamy klasy MediaRecorder Aby obsługiwać wyświetlanie kamery użyjemy interfejsu SurfaceView oraz SurfaceHolder.Callback Więcej na: http://developer.android.com/reference/android/view/surfaceview.html http://developer.android.com/reference/android/view/surfaceholder.html

Klasa MediaRecorder (1) opis metod, które posłużą nam do konfiguracji nagrywania public void setvideosource (int video_source) Określa źródło wideo (np. kamery lub domyśle) do wykorzystania do nagrywania. Jeśli ta metoda nie jest wywoływana, plik wyjściowy nie może zawierać ścieżki wideo.

Klasa MediaRecorder (2) public void setoutputformat(int output_format) Wywołanie po setaudiosource () / setvideosource (), ale przed prepare (). public void setvideoencoder (int video_encoder) Jeśli ta metoda nie jest wywoływana, plik wyjściowy nie może zawierać ścieżki wideo. Wywołanie po setoutputformat () i przed prepare ().

Klasa MediaRecorder (3) setoutputfile(path_name) Wywołanie po setoutputformat() ale przed prepare(). public void setpreviewdisplay (surface sv) Ustawia powierzchni, aby wyświetlić podgląd zapisanych plików. Używanie przed prepare().

Klasa MediaRecorder (4) public void prepare () Przygotowuje kamery do rozpoczęcia przechwytywania i kodowania danych. Po ustaleniu kodera, ścieżki, formatu itp. Przed start(); public void start () Rozpoczęcie przechwytywanie. Wywołanie po prepare().

Nagrywanie video (1) <uses-permission android:name="android.permission.record_video"/> public Preview(Contect context, MediaRecorder temp_recorder) { super(context); recorder = temp_recorder; holder = getholder(); holder.addcallback(this); holder.settype(surfaceholder.surface_type_push_buffers); }

Nagrywanie video (2) public void surfacecreated(surfaceholder holder){ /.try recorder.setvideosource(mediarecorder.videosource.default); recorder.setoutputformat MediaRecorder.OutputFormat.MPEG_4); recorder.setvideoencoder(mediarecorder.videoencoder.mpeg_4_sp); recorder.setoutputfile("/sdcard/recordvideooutput.3gpp"); recorder.setpreviewdisplay(mholder.getsurface()); recorder.prepare(); // }

Nagrywanie video (3) public void surfacedestroyed(surfaceholder holder) { } // public void surfacechanged( } SurfaceHolder holder, int format, int w, int h) {

Nagrywanie video (4) public void oncreate.{ requestwindowfeature(window.feature_no_title); recorder = new MediaRecorder(); preview = new RecorderPreview(this,recorder); setrequestedorientation(activityinfo.screen_orientation_portrait); setcontentview(preview); }

Wyświetlanie zdjęć <ImageView android:id="@+id/imageview_0 android:layout_width="wrap_content" android:layout_height="wrap_content" /> mgview = (ImageView)findViewById(R.id.ImageView_0); imgview.setimageresource(uri);

Galeria Zdjęć (1) <Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/example_gallery" android:layout_width="fill_parent" android:layout_height="wrap_content" /> gallery = (Gallery) findviewbyid(r.id.examplegallery); gallery.setadapter(new AddImgAdp(this));

Galeria Zdjęć (1) TypedArray typarray = obtainstyledattributes( R.styleable.GalleryTheme); GalItemBg = typarray.getresourceid( R.styleable.GalleryTheme_android_galleryItemBackground, 0); typarray.recycle();

Galeria Zdjęć (2) ImageView imgview = new ImageView(cont); imgview.setimageresource(img_id[position]); imgview.setlayoutparams(new Gallery.LayoutParams(80, 70)); imgview.setscaletype(imageview.scaletype.fit_xy); imgview.setbackgroundresource(gali_tem_bg);

Wyświetlanie zdjęć

Obsługa karty SD (emulator)

Telephony API s

Contents Introduction(SMS/MMS) Android.telephony Sending and receiving messages

SMS (Short Message Service) 1 Statistics - First sms was sent over the Vodafone GSM network in the United Kingdom on 3 December 1992-2.4 billion active users - SMS traffic reached five trillion by the close of 2010 - Global SMS revenues - US$105.5 billion

SMS (Short Message Service) 2 Technical details - PDU (protocol description unit) contains not only the message, but also a lot of meta-information - Length is limited to precisely 140 octets (140 octets = 140 * 8 bits = 1120 bits) - Messages can be encoded using a variety of alphabets - Concatenated SMS

MMS (Multimedia Messaging Service) 1 Technical details - delivered in a completely different way from SMS

Android.telephony Provides APIs for monitoring the basic phone information. Important classes: - CellLocation - PhoneStateListener - SmsManager - SmsMessage

Sending SMS message 1 <uses-permission android:name= android.permission.send_s MS ></uses-permission>

SmsManager public static SmsManager getdefault () public ArrayList<String> dividemessage (String text) public void sendtextmessage (String destinationaddress, String scaddress, String text, PendingIntent sentintent, PendingIntent deliveryintent) public void sendmultiparttextmessage (String destinationaddress, String scaddress, ArrayList<String> parts, ArrayList<PendingIntent> sentintents, ArrayList<PendingIntent> deliveryintents)

Sending SMS message 2

Sending SMS message 3 But how do we know that the message has been sent correctly or delivered?

Sending SMS message 4

Receiving SMS message 1 Receive incoming SMS by using a BroadcastReceiver object Useful when we want our application to perform an action when a certain SMS message is received BroadcastReceiver can continue to listen even if the application is not running!

Sending SMS message 3 But how do we know that the message has been sent correctly?

Android Speech Synthesis & Recognition inż. Michał Bulba

Plan prezentacji 1. Android TTS 2. Konfiguracja silnika TTS 3. Android mówi: Hello World 4. Mowa to też strumień audio 5. TTS a asynchroniczność 6. Syntezowanie mowy do pliku 7. Rozpoznawanie mowy 8. Stochastyczne modele rozpoznawania 9. Rozpoznawanie mowy parametry

Android TTS TTS Text To Speech czyli w skrócie syntezowanie mowy na podstawie tekstu Języki natywne Języki Angielski, Francuski, Niemiecki, Włoski, Hiszpański Dostępne od wersji 1.6 API Level 4 TTS Nowe możliwości w aplikacjach.

Konfiguracja silnika TTS cz1/3 Konfiguracja Różne urządzenia różne konfiguracje Intent checkintent = new Intent(); checkintent.setaction(texttospeech.engine.action_check_tts_data); startactivityforresult(checkintent, MY_DATA_CHECK_CODE); CHECK_VOICE_DATA_PASS wynik stwierdzający, że obsługa TTS jest zainstalowana

Konfiguracja silnika TTS cz2/3 Intent checkintent = new Intent(); checkintent.setaction(texttospeech.engine.action_check_tts_data); startactivityforresult(checkintent, MY_DATA_CHECK_CODE); private TextToSpeech mtts; protected void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode == MY_DATA_CHECK_CODE) { if (resultcode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { mtts = new TextToSpeech(this, this); } else { Intent installintent = new Intent(); installintent.setaction(texttospeech.engine.action_install_tts_data); startactivity(installintent); } } }

Konfiguracja silnika TTS cz3/3 Języki i Locale Ustawianie języka: mtts.setlanguage(locale.us); Sprawdzanie dostepnosci językow: mtts.islanguageavailable(locale.uk)) mtts.islanguageavailable(locale.france)) mtts.islanguageavailable(new Locale("spa", "ESP"))) wynik pozytywny: TextToSpeech.LANG_COUNTRY_AVAILABLE Najprościej: Locale.getDefault()

Android mówi: Hello World Mówione Hello World String mytext1 = Hello World"; mtts.speak(mytext1, TextToSpeech.QUEUE_FLUSH, null); mtts.speak(mytext1, TextToSpeech.QUEUE_ADD, null); Jaka jest różnica pomiędzy powyższymi wywołaniami speak()?

Mowa to też strumień audio Parametry metody speak() przekazujemy w postaci HashMap y Np.: Chcemy użyć strumienia dla muzyki HashMap<String, String> myhash = new HashMap(); myhashput(texttospeech.engine.key_param_stream, String.valueOf(AudioManager.STREAM_MUSIC)); mtts.speak(mytext1, TextToSpeech.QUEUE_FLUSH, myhash);

TTS a asynchroniczność Jak radzić sobie z asynchronicznością: mtts.setonutterancecompletedlistener(this); myhash.put(texttospeech.engine.key_param_stream, String.valueOf(AudioManager.STREAM_MUSIC)); mtts.speak(mytext1, TextToSpeech.QUEUE_FLUSH, myhash); myhash.put(texttospeech.engine.key_param_utterance_id, jakis ID"); mtts.speak(mytext2, TextToSpeech.QUEUE_ADD, myhash); public void onutterancecompleted(string uttid) { if (uttid.equals( jakis ID")) { DoSthElse(); } } Utterance element kolejki słów do syntezowania

Syntezowanie do pliku Syntezowanie do pliku = oszczędność cpu HashMap<String, String> myhashrender = new HashMap(); String Text = "Are there?"; String destfilename = "/sdcard/myappcache/areyou.wav"; myhashrender.put(texttospeech.engine.key_param_utterance_id, Text); mtts.synthesizetofile(text, myhashrender, destfilename); addspeech(string text, String destination) przypisanie do danego stringa jego gotowego brzmienia z karty SD

Rozpoznawanie mowy cz1/2 Model rozpoznawania Nowe możliwości

Stochastyczne modele rozpoznawania

Rozpoznawanie mowy cz2/2 public void onclick(view button) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // Ustawiamy model intent.putextra(recognizerintent.extra_language_model, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // Uruchamiamy intent startactivityforresult(intent, 0); } // po zakonczonym rozpoznawaniu protected void onactivityresult(int requestcode,int resultcode,intent intent) { // pobieramy liste dopasowań ArrayList<String> nbest = intent.getstringarraylistextra(recognizerintent.extra_results); DoSomething(nbest.get(0)) }

Rozpoznawanie mowy - parametry Parametry rozpoznawania Language (EXTRA_LANGUAGE) ustawienie języka innego niż uzyskany z locale metoda getdefault() używamy parametru zgodnego z IETF language tag np. pl-pl, en-us Language(EXTRA_LANGUAGE_MODEL) Modele: Search - podobny do wyszukiwań w google Free form - teksty dyktowane np. sms, e-mails

Materiały dodatkowe Warto zapoznać się z dokumentacją: Syntezowanie mowy: http://developer.android.com/reference/android/speech/tts/package-summary.html Rozpoznawanie mowy: http://developer.android.com/reference/android/speech/package-summary.html Przydatne linki: http://developer.android.com/resources/articles/tts.html http://developer.android.com/resources/articles/speech-input.html http://www.learn-android.com/2009/12/03/half-dozen-hello-worlds-part-4/ http://ebookbrowse.com/tt1-gruenstein-pdf-d120842652

Podsumowanie 1. Sprawdzenie obecności silnika TTS 2. Konfiguracja silnika TTS 3. Synteza i obsługa mowy 4. Rozpoznawanie mowy 5. Language models