Audio aufnehmen / Audioaufnahme / Sprachaufnahme


Die Methode recordAudioUntilEternity() arbeitet wie recordAudio(), jedoch nimmt sie solange auf, wie das Flag recording der Klasse CoreMidlet auf true gesetzt ist. Das Flag wird beim Drücken der Taste für den VoiceChat auf true gesetzt, wenn die Taste wieder losgelassen wird, auf false – damit endet die Aufnahme.

Da in MIDP oder Mobile Media API keine Funktion zur Skalierung von Bildern existiert, wurde die die Methode makeThumb() implementiert. Diese passt mit einem erweiterten Bresenham-Algorithmus1 ein Bild an die Displaygröße an, falls es zu groß ist. Dabei wird ein fester Randabstand von 10 Pixeln pro Seite festgelegt. Die verkleinerte Version des Bildes dient nur zur Darstellung, zwischen den Mobiltelefonen werden die unveränderten Rohdaten übertragen, um auch höher aufgelöste Displays ausnutzen zu können.

Der Methode makeThumb() wird das zu verkleinernde Image sowie die Breite des Displays übergeben, welche mit der Methode getWidth() der Klasse Form abgefragt werden kann. Die Breite des verkleinerten Bildes beträgt die Displaybreite abzüglich 20 Pixel als Randabstand. Die Höhe des Bildes berechnet sich aus dem Quotienten von Originalhöhe– und breite, multipliziert mit der Breite des verkleinerten Bildes – somit bleibt das Seitenverhältnis gleich.

Es wird ein neues Image mit den berechneten Abmessungen erzeugt, über ein daraus erzeugtes Graphics – Objekt werden die Zeichenoperationen zur Verfügung gestellt. Mit der Methode drawRGB() können einzelne Pixel, bestehend aus RGB und Alphakanal ( 0xAARRGGBB ), gezeichnet werden. Über die Methode getRGB() der Klasse Image können die Werte im ARGB-Format bezogen werden.

 

1 http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html

[sourcecode language=”java”]public Image makeThumb(Image image, int width) {

int sourceWidth = image.getWidth();
int sourceHeight = image.getHeight();

int thumbWidth = width – 20; // Formbreite minus 10 pixel pro seite
int thumbHeight = thumbWidth * sourceHeight / sourceWidth;

//nur wenn das ursprungsbild größer als die form ist, div durch 0 vermeiden
if ((thumbWidth >= sourceWidth) || (thumbHeight == 0)){

return image;
}

Image thumb = Image.createImage(thumbWidth, thumbHeight);
Graphics g = thumb.getGraphics();
int[] lineRGB = new int[sourceWidth];
int[] sourcePos = new int[thumbWidth]; // X-Positions-Cache
int y = 0;
int eps = -(sourceWidth >> 1);

for (int x = 0; x < sourceWidth; x++) {

eps += thumbWidth;

if ((eps << 1) >= sourceWidth) {

if (++y == thumbWidth) break;

sourcePos[y] = x;
eps -= sourceWidth;
}
}

for (y = 0; y < thumbHeight; y++) {

image.getRGB(lineRGB, 0, sourceWidth, 0, y * sourceHeight /
thumbHeight, sourceWidth, 1);

for (int x = 1; x < thumbWidth; x++) { // Pixel 0 überspringen

lineRGB[x] = lineRGB[sourcePos[x]];
}
g.drawRGB(lineRGB, 0, thumbWidth, 0, y, thumbWidth, 1, false);
}
return thumb;
}

[/sourcecode]

makeThumb() arbeitet relativ einfach, es wird über den Bresenham-Line-Algorithmus berechnet, welche Zeilen bzw. Spalten ausgelassen werden, um zur gewünschten Bildgröße zu kommen, das Ergebnis ist sicherlich nicht perfekt, für Mobile Endgeräte jedoch gut geeignet, da die Berechnung relativ schnell geschieht.



Ähnliche Artikel zu "Audio aufnehmen / Audioaufnahme / Sprachaufnahme":


Wenn Du noch Fragen zum Thema Audio aufnehmen / Audioaufnahme / Sprachaufnahme hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an:

Wie ist DEINE Meinung zum Thema Audio aufnehmen / Audioaufnahme / Sprachaufnahme?

Schreib sie einfach als Kommentar:

You must be logged in to post a comment.




karbacher.org © Audio aufnehmen / Audioaufnahme / Sprachaufnahme