05 pys60_multimédia_v2

50
Bevezetés a mobil szoftverfejlesztésbe Dr. Forstner Bertalan [email protected] © BME-AAIT 2008 1 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás

Upload: sweidan-omar

Post on 16-Oct-2014

28 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 05 PyS60_Multimédia_v2

Bevezetés a mobil szoftverfejlesztésbe

Dr. Forstner Bertalan

[email protected]

© BME-AAIT 2008 1Bevezetés a mobil szoftverfejlesztésbe – 5. előadás

Page 2: 05 PyS60_Multimédia_v2

Az Amorg a Twitteren� Versenyek, ZH és vizsgaeredmények,

linkek, események és sok más hasznos dolog

� Kövesd: bme_amorg_lite

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 1. előadás 2

� Kövesd: bme_amorg_lite

Page 3: 05 PyS60_Multimédia_v2

Az előző rész tartalmából� User Interface

� Az alkalmazás felülete

� Text widget

� Tabok

� Dialógusok� Note

� Adatbekérő ablak

� Választólista

� Többszörös választólista

� Űrlap

� Listbox és ikonok© BME-AAIT 2008 3Bevezetés a mobil szoftverfejlesztésbe – 5. előadás

Page 4: 05 PyS60_Multimédia_v2

Emlékeztek még rá…Milyen beviteli mezők lehetnek egy űrlapon?

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 4

Page 5: 05 PyS60_Multimédia_v2

Emlékeztek még rá…Milyen beviteli mezők lehetnek egy űrlapon?

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 5

Page 6: 05 PyS60_Multimédia_v2

5. előadás – PyS60 Multimédiás lehetőségek

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 6

Page 7: 05 PyS60_Multimédia_v2

Tartalom� Graphics modul

� Grafikus primitívek

� Bitmapek használata

Billentyű kezelés� Billentyű kezelés

� Kamera használata

� Hangkeltés

� Külső tartalom-megjelenítés

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 7

Page 8: 05 PyS60_Multimédia_v2

Graphics modul� Kétdimenziós grafikák elkészítéséhez:

grafikai primitívek

� Rajzolás a vászonra: Canvas

� canvas = appuifw.Canvas(redraw_callback = ujrarajzolas_fv, � canvas = appuifw.Canvas(redraw_callback = ujrarajzolas_fv, event_callback = billentyukezeles_fv)

� Vagy Image objektumra

� Megjelenítés� appui.app.body=canvas

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 8

Page 9: 05 PyS60_Multimédia_v2

Rajzolási kontextus� Opció paraméterek segítségével

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 9

Page 10: 05 PyS60_Multimédia_v2

Koordináták megadása� Vásznon, képen belüli „tájékozódáshoz”

� tetszőleges típusú szekvenciában (pl. ennes, lista)

� koordináta-párok tetszőleges, kételemű � koordináta-párok tetszőleges, kételemű szekvenciákként

� vagy pedig maguk a koordináták, � minden ponthoz egymást követően egy x és egy y

koordináta érték

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 10

Page 11: 05 PyS60_Multimédia_v2

Koordináták: példák(1,1)

((1,2))

((1,1),(1,2))

([1.1, 1.2][-2.0, -2.2])

(1,1,5,5)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 11

Page 12: 05 PyS60_Multimédia_v2

Rajzoló primitívek 1� line(koordináták, opciók)

� polygon(koordináták, opciók)

� rectangle(bal_felső_sarok, jobb_alsó_sarok, opciók)jobb_alsó_sarok, opciók)

� ellipse(bal_felső_sarok, jobb_alsó_sarok, opciók)

� pieslice(bal_felső_sarok, jobb_alsó_sarok, kezdet, vég, opciók)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 12

Page 13: 05 PyS60_Multimédia_v2

Rajzoló primitívek 2� arc(bal_felső_sarok, jobb_alsó_sarok, kezdet,

vég, opciók)

� point((x, y), opciók)

� clear([háttérszín= (255,255,255)])� clear([háttérszín= (255,255,255)])

� text((x,y), szöveg, [fill=szín, font])

� measure_text(text, [font=None, maxwidth=-1, maxadvance=-1])

� (bounding_rect, cursorAdvance, NumberOfChars)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 13

Page 14: 05 PyS60_Multimédia_v2

Példa 1def view1():

t = appuifw.Text()appuifw.app.body = tt.clear()t.font='title't.color=(255,0,0)t.set(u'Szöveges nézet.')

def view2():global canvas, imageglobal canvas, imageappuifw.app.body = canvas

def changetab(index): appuifw.app.activate_tab( index)if index==0:view1()

else:view2()

def redraw(rect):global image, canvascanvas.blit(image)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 14

Page 15: 05 PyS60_Multimédia_v2

Példa 2

canvas = appuifw.Canvas(redraw_callback = redraw)w, h=canvas.sizeimage = graphics.Image.new((w,h))image.line((0,0,200,200), width=3, outline=(255,0,0))image.line((200,200,200,0,0,100), width=5, outline=(0,0,255))image.polygon((40,20,50,30,40,40,30,30), fill=(0,255,0))image.rectangle((70,70,90,90),outline=(0,0,255),fill=(255,0,0),width=4)image.ellipse((20,50,40,100), outline=(0,0,0))image.ellipse((20,50,40,100), outline=(0,0,0))image.pieslice((60,150,90,200), 10,20, fill=(255,255,0))

appuifw.app.set_tabs([u"szöveg", u"rajz"], changetab)changetab(1)

�Demo

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 15

Page 16: 05 PyS60_Multimédia_v2

Bitképek� Image objektum: memóriában tárolt bitkép

� Függvények opcionális callback paraméterrel

� paramétere a hibakód� paramétere a hibakód

� 0: hibamentes lefutás

� Az Image.new(size, [mode='RGB16']) � 'RGB12', 'RGB16', 'RGB' (ez 24 bites), '1' (fekete-fehér), 'L' (8 bites

szürkeárnyalatos)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 16

Page 17: 05 PyS60_Multimédia_v2

Bitképek használata 1� load(fájlnév, callback): meglévő objektum

� a kép dimenziói meg kell egyezzenek az éppen megnyitandó kép méreteivel

� open(fájlnév, callback): factory

� teljes path

� PNG, JPEG

� Image.inspect(fájlnév)

� szótárral tér vissza

� 'size' kulcsszó alatt tartalmazza a fájl által tartalmazott kép méretét

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 17

Page 18: 05 PyS60_Multimédia_v2

Bitképek használata 2� save(fájlnév, [callback=None, format=None, quality=75,

bpp=24, compression=default])

� Fájlformátum� jpeg

� Quality: tömörítés minősége egy 1-100-ig terjedő skálán � Quality: tömörítés minősége egy 1-100-ig terjedő skálán

� png� Bpp: Színmélység: 1, 8, 24� Compression: ‘best’, ‘fast’, ‘no’, ‘default’

� None formátum esetén a fájl kiterjesztése dönt

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 18

Page 19: 05 PyS60_Multimédia_v2

Műveletek képekkel� resize(méret, [callback, keepaspect=0])

� visszatérési értéke az új bitmap

� keepaspect=1: méretarány megtartása

transpose(irány, [callback])� transpose(irány, [callback])� visszatérési értéke az új bitmap

� FLIP_LEFT_RIGHT, FLIP_TOP_BOTTOM, ROTATE_90, ROTATE_180, ROTATE_270

� stop()

� Aszinkron esemény leállítása

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 19

Page 20: 05 PyS60_Multimédia_v2

Bitképek másolása� célkép.blit(forráskép, [target=(0,0), source=((0,0),

image.size), mask=None, scale=0])� target, source:

� egy koordináta pár� két koordinátapár: célnégyzet

� scale=1: on-the-fly átméretezés a cél betöltésére

� maszk kép� 1 bites vagy 8 bites szürkeárnyalatos � A képnek csak azok a részei lesznek átmásolva (vagy

áttetszően átmásolva), amelyek a maszk képen fehér árnyalatúak.

� a maszk kép mérete meg kell, hogy egyezzen a forráskép méretével.

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 20

Page 21: 05 PyS60_Multimédia_v2

Példa1bitmap = graphics.Image.open(u"C:\\amorg.png")

appuifw.app.body.clear()tab=2canvas = appuifw.Canvas(redraw_callback = redraw)canvas.clear()w, h=canvas.sizeimage = graphics.Image.new((w,h))image = graphics.Image.new((w,h))image.line((0,0,200,200), width=3, outline=(255,0,0))image.line((200,200,200,0,0,100), width=5, outline=(0,0,255))image.polygon((40,20,50,30,40,40,30,30), fill=(0,255,0))image.rectangle((70,70,90,90),outline=(0,0,255),fill=(255,0,0),width=4)image.ellipse((20,50,40,100), outline=(0,0,0))image.pieslice((00,00,90,200), 0,1.57, outline=(255,255,0))image.text((90,200), u"Árvíztűrő", font="title")image.save("c:\\abstract.png")

bitmap2=graphics.Image.open(u"C:\\abstract.png")bitmap2 = bitmap2.transpose(graphics.ROTATE_90)bitmap2 = bitmap2.resize((90,90))

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 21

Page 22: 05 PyS60_Multimédia_v2

Példa 2def redraw(rect):

global image, canvas, tab, bitmap, bitmap2if tab==1:canvas.blit(image)

if tab==2:canvas.blit(bitmap, target=(50,80), source=(0,0))canvas.blit(bitmap2, target=(40,140), source=(0,0))

�Demo

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 22

Page 23: 05 PyS60_Multimédia_v2

Billentyűzet események kezelése� Egyes UI elemek maguktól helyesen

lekezelik a gombnyomásokat

� Első módszer: Cavas objektumhoz billentyű kódok kötésebillentyű kódok kötése

� bind(keycode, callback)

� minden egyes billentyűhöz külön callback függvény

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 23

Page 24: 05 PyS60_Multimédia_v2

Key_code, scan_code

Key code Scan code1 EKeyLeftSoftkey EScanCodeLeftSoftkey2 EKeyRightSoftkey EScanCodeRightSoftkey3 EKeyYes EScanCodeYes4 EKeyNo EScanCodeNo5 EKeyLeftArrow EScanCodeLeftArrow6 EKeyRightArrow EScanCodeRightArrow7 EKeyUpArrow EScanCodeUpArrow7 EKeyUpArrow EScanCodeUpArrow8 EKeyDownArrow EScanCodeDownArrow9 EKeyEdit EScanCodeEdit10 EKeyBackspace EScanCodeBackspace11 EKeyStar EScanCodeStar12 EKeyHash EScanCodeHash13 EKeySelect EScanCodeSelect14 EKeyMenu EScanCodeMenu15 EKey1 EScanCode1

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 24

Keycode: Oprendszer által feldolgozva, pl. 'a' és 'A' különbözőScancode: szorosabb leképzés a billentyűzetre

Page 25: 05 PyS60_Multimédia_v2

Példaimport appuifw, key_codes, e32

def handle1():appuifw.note(u"Egy: Megérett a meggy.", "conf")

def handle2():appuifw.note(u"Kettő: Csipkebokorvessző.", "conf")

def handle3():appuifw.note(u"Három: Ezt elfelejtettem.", "error")

canvas = appuifw.Canvas()appuifw.app.body = canvascanvas.bind(key_codes.EKey1, handle1)canvas.bind(key_codes.EKey2, handle2)canvas.bind(key_codes.EKey3, handle3)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 25

Page 26: 05 PyS60_Multimédia_v2

Érintés események� bind függvénnyel

� keycode helyett:

� EButton1Down a megérintést,

� EButton1Up az érintés végét, � EButton1Up az érintés végét,

� EDrag a megérintett állapotban történő húzás eseményt,

� ESwitchOn paraméter a kijelző érintés miatti bekapcsolását jelzi

� Harmadik paraméter: koordináta párt tartalmazó kettes, amelyre szűrünk

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 26

Page 27: 05 PyS60_Multimédia_v2

Villódzás ellen� begin_redraw(rect) és end_redraw()

� a keretrendszer tudtára adjuk, hogy jelenleg egy újrarajzolási folyamat történik

� A függvénypáros használatával nagyban � A függvénypáros használatával nagyban csökkenthetjük a képernyő villódzását, illetve erőforrásokat takaríthatunk meg.

DEMO

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 27

Page 28: 05 PyS60_Multimédia_v2

Példa 1x = []

xx = []

y = []

yy = []

c=[]

count=0

def create_circle():

global x, y, xx, yy, c, countglobal x, y, xx, yy, c, count

x.append(random.randint(0,100))

y.append(random.randint(0,100))

xx.append(random.choice([-2, -1, 1, 2]))

yy.append(random.choice([-2, -1, 1, 2]))

c.append((random.randint(0,255), random.randint(0,255),

random.randint(0,255)))

count = count +1

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 28

Page 29: 05 PyS60_Multimédia_v2

Példa 2

t=appuifw.app.body

canvas = appuifw.Canvas()

appuifw.app.body = canvas

w, h=canvas.size

image = graphics.Image.new((w,h))

for i in xrange(0,6):for i in xrange(0,6):

create_circle()

ao_timer = e32.Ao_timer()

appuifw.app.exit_key_handler = quit

app_lock = e32.Ao_lock()

ao_timer.after(0.05, movethem)

app_lock.wait()

ao_timer.cancel()

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 29

Page 30: 05 PyS60_Multimédia_v2

Példa 3def movethem():

[…]

image.clear()

for i in xrange(0, count):

canvas.bind(key_codes.EButton1Down, None, ((x[i],y[i]),(x[i]+40,y[i]+40)))

x[i]+=xx[i]

if ((x[i]>w-40) or (x[i]<=0)):

xx[i]=-xx[i]

y[i]+=yy[i]

if ((y[i]>h-40) or (y[i]<=0)):if ((y[i]>h-40) or (y[i]<=0)):

yy[i]=-yy[i]

canvas.bind(key_codes.EButton1Down, clicked, ((x[i],y[i]),(x[i]+40,y[i]+40)))

image.ellipse((x[i],y[i],x[i]+40,y[i]+40), outline=(255,255,255), fill=c[i])

image.ellipse((x[i]+12,y[i]+24,x[i]+16,y[i]+28), outline=(255,255,255),

fill=(215, 215, 215))

canvas.begin_redraw()

canvas.blit(image)

canvas.end_redraw()

ao_timer.after(0.03, movethem)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 30

Page 31: 05 PyS60_Multimédia_v2

Példa 4def clicked(coords):

global canvas, x, y, xx, yy, count

(selectedx, selectedy) = coords

for i in xrange(0, count):

if(x[i]<=selectedx<=x[i]+40 and y[i]<=selectedy<=y[i]+40):

if(xx[i]==0):

xx[i]=random.choice([-2, -1, 1, 2])

yy[i]=random.choice([-2, -1, 1, 2])

else:else:

xx[i]=0

yy[i]=0

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 31

Page 32: 05 PyS60_Multimédia_v2

Event_callback� Azokon az objektumokon, amelyeknél beállíthatunk

event_callback függvényt (pl. Canvas, Listbox)

� Callback paramétere egy event dictionary� event['keycode']

� event['scancode']� event['scancode']

� event['modifiers']� pl. EModifierShift & EModifierControl

� event['type']� EEventKeyDown � EEventKeyUp� EEventKey� EButton1Up, EButton1Down, Edrag, stb.

� event[‘pos']

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 32

Page 33: 05 PyS60_Multimédia_v2

Példa 1speed=10 #Kezdeti sebességy=180 #Kezdeti pozíció a képernyőndown=0 #Volt-e már lenyomva billentyű

canvas = appuifw.Canvas(event_callback = handle_keyboard)appuifw.app.body = canvasw, h=canvas.sizeimage = graphics.Image.new((w,h))

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 33

Page 34: 05 PyS60_Multimédia_v2

Példa 2def handle_keyboard(event):

global image, speed, downif event['type']==appuifw.EEventKeyUp and down==1:

shoot()down=0

if event['keycode']==key_codes.EKeySelect and event['type']==appuifw.EEventKey:speed = speed+3down=1if speed>100:if speed>100:

speed=100image.clear()image.rectangle((0,0,10,100),outline=(0,0,255), fill=(255,255,255),width=2)image.rectangle((0,100-speed,10,100),outline=(255,0,0),fill=(255,0,0),width=2)image.ellipse((100,180,140,220), outline=(255,255,255), fill=(255, 0, 0))image.ellipse((112,204,116,208), outline=(255,255,255), fill=(215, 215, 215))canvas.blit(image)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 34

Page 35: 05 PyS60_Multimédia_v2

Példa 3def shoot():

global speed, y, imagesound=audio.Sound.open(u"e:\\python\\shoot.wav")sound.play(1)e32.ao_sleep(1)while (speed>10):

y=y-(speed/10)speed=speed-1image.clear()image.clear()image.ellipse((100,y,140,y+40), outline=(255,255,255), fill=(255, 0, 0))image.ellipse((112,y+24,116,y+28), outline=(255,255,255), fill=(215, 215, 215))canvas.blit(image)e32.ao_sleep(0.05)

y=180sound.stop()

�Demo

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 35

Page 36: 05 PyS60_Multimédia_v2

Kamera használata� Camera modul

� Nemritkán két kamera

� Videohívás, filmfelvétel

Rengeteg beállítási lehetőség� Rengeteg beállítási lehetőség

� Viewfinder

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 36

Page 37: 05 PyS60_Multimédia_v2

Kamera beállításacameras_available() Visszatérési értéke egy szám, amely megmondja, hogy

hány kamera áll rendelkezésünkre fizikailag a mobileszközön.

image_modes() Egy sztringekből álló listával tér vissza, amelynekelemei az egyes színmélységek, amelyeket a kameratámogat. Pl. ['RGB12', 'RGB16', 'RGB', 'JPEG_Exif']

image_sizes() Szintén egy listával tér vissza, amely a támogatottfényképfelbontások ketteseit tartalmazza. Pl. [(640,fényképfelbontások ketteseit tartalmazza. Pl. [(640,480), (160, 120)]

flash_modes Visszatér a lehetséges vaku üzemmódokkal. Pl. ['auto','none', 'forced', 'red_eye_reduce']

max_zoom() A készülék által támogatott maximális digitális zoomértékkel tér vissza. Nokia N95 esetében ez 80.

exposure_modes() A képkészítési (exponálási) módokat adja visszasztring listaként. Pl. ['auto', 'center', 'backlight', 'night’]

white_balance_modes() A készülék által támogatott fehéregyensúly beállításértékekkel tér vissza, pl. ['daylight', 'fluorescent','tungsten', 'auto', 'cloudy']

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 37

Page 38: 05 PyS60_Multimédia_v2

Kamera keresőképe, fotózás� start_finder(callback)

� A callback paramétere egy kép

� Másodpercenként többször meghívódik

stop_finder()� stop_finder()� take_photo([mode='RGB16', size=(640, 480), flash='auto', zoom=0,

exposure='auto', white_balance='auto', position=0])

� Position: több kamerás készülék (0 = hátoldali kamera)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 38

Page 39: 05 PyS60_Multimédia_v2

PéldaPICTURE = "E:\\Python\\photo.jpg"

def finder_callback(img):canvas.blit(img)

def make_photo():try:canvas.bind(key_codes.EKeySelect, shoot)camera.start_finder(finder_callback)

except Exception, e:except Exception, e:appuifw.note( unicode( e ), 'error' )

def shoot():camera.stop_finder()photo = camera.take_photo(size = (640,480))w,h = canvas.sizecanvas.blit(photo,target=(0, 0, w, 0.75 * w), scale = 1)photo.save(PICTURE)canvas.bind(key_codes.EKeySelect, None)

canvas = appuifw.Canvas()appuifw.app.body=canvasmake_photo()

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 39

Page 40: 05 PyS60_Multimédia_v2

Video rögzítés� start_record(filename, callback): videorögzítés

indítása

� Előtte viewfindert kell indítani!

� Calback: a státuszról ad információt a paramétere

� stop_record()

� release()

� A kamerahardver átengedése más alkalmazásoknak

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 40

Page 41: 05 PyS60_Multimédia_v2

Hangkeltés 1� Audio modul

� WAV, AMR, AAC, MIDI, MP3, RealAudio

� Sound objektum� open(fájlnév)

play([hanyszor=1, szunet=0])� play([hanyszor=1, szunet=0])

� Nem blokkoló� audio.KMdaRepeatForever

� Több hang egyszerre nem lehet

� Ugyanazon az objektumon szimultán lejátszás: hiba

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 41

Page 42: 05 PyS60_Multimédia_v2

Hangkeltés 2� state(): állapot

� ENotReady

� EPlaying

� ERecording

� EOpen

� close()� close()

� stop()

� current_volume()

� max_volume()

� set_volume(int)

� current_position() //mikroszekundum

� duration()

� set_position(microseconds)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 42

Page 43: 05 PyS60_Multimédia_v2

Hangfelvétel� Sound.record()

� WAV vagy AMR

� Stop() hívásig

Telefonhívás alatti felvétel vagy lejátszás� Telefonhívás alatti felvétel vagy lejátszás

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 43

Page 44: 05 PyS60_Multimédia_v2

Példa 1appuifw.app.exit_key_handler = quitappuifw.app.menu = [(u"köszön", (

(u"helló", doPlayHello),(u"viszlát", doPlayGoodbye),)),

(u"felvesz", ((u"helló", doRecordHello),(u"viszlát", doRecordGoodbye),))]))]

sound = None

def doRecordHello():doRecord(u"C:\\hello.wav")

def doRecordGoodbye():doRecord(u"C:\\bye.wav")

def doPlayHello():doPlay(u"C:\\hello.wav")

def doPlayGoodbye():doPlay(u"C:\\bye.wav")

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 44

Page 45: 05 PyS60_Multimédia_v2

Példa 2def doRecord(filename):

global soundif sound:

sound.stop()os.remove(filename)sound=audio.Sound.open(filename)sound.record()appuifw.note(u"Halljam.", "conf")e32.ao_sleep(3)e32.ao_sleep(3)sound.stop()appuifw.note(u"Felvettem.", "conf")

def doPlay(filename):global soundif sound:

sound.stop()sound=audio.Sound.open(filename)sound.play()

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 45

Page 46: 05 PyS60_Multimédia_v2

Szöveg felolvasása stringből� Újabb okostelefonokon

� audio modul, text-to-speech

input = appuifw.query(u"Mondja, mi a gondja!", "text")

audio.say(input)

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 46

Page 47: 05 PyS60_Multimédia_v2

Content_handler� appuifw modul egy speciális szolgáltatása

� különböző tartalmak megjelenítése

� MIME típus alapján

� handler = appuifw.Content_handler(callback)

� open(content_file)

� open_standalone(content_file) � külön processzben

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 47

Page 48: 05 PyS60_Multimédia_v2

Példadef done():

appuifw.note(u"Kész!", "conf")

app_lock.signal()

handler = appuifw.Content_handler(done)

handler.open("E:\\Python\\marklar.mp4")handler.open("E:\\Python\\marklar.mp4")

appuifw.app.exit_key_handler = quit

app_lock = e32.Ao_lock()

app_lock.wait()

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 48

Page 49: 05 PyS60_Multimédia_v2

Összefoglalás� Graphics modul

� Grafikus primitívek

� Bitmapek használata

Billentyű kezelés� Billentyű kezelés

� Kamera használata

� Hangkeltés

� Külső tartalom-megjelenítés

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 49

Page 50: 05 PyS60_Multimédia_v2

Teszt� Mi a különbség a scancode és a keycode

között?

� Milyen rajzolási primitívek vannak PyS60 alatt?alatt?

� Mi a position paraméter szerepe fotó készítésénél?

© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 50