[Java J2ME] Probleem met audio

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ZipperJR
  • Registratie: Maart 2006
  • Laatst online: 03-06 17:10
Ik ben voor mijn studie bezig met een project, wij moeten hiervoor een audio applicatie maken voor de mobiele telefoon. De gebruikte telefoon is een Nokia N78 en beschikt over MIDP 2.0 en CLDC 1.1
Wij gebruiken Eclipse en S60 3rd edition Symbian tools.

Wij zijn bezig om een gratis en zwaar versimpelde versie te schrijven van de welbekende Ocarina applicatie van de iPhone (link). Wij doen dit echter voor de gewone telefoon.

Het idee is dus om te laten detecteren of er geblazen word en als er geblazen word een simpele sinusoide af te spelen. Tevens willen we deze laten verwisselen in frequentie naar mate een andere knop(combinatie) word ingedrukt.

Nu zijn wij al een flink stuk opweg maar zitten wij te stoeien met hoe we de audio tot stand moeten brengen, we zijn zelf al bezig geweest met de PlayTone() functie bezig geweest maar hierbij krijgen wij het niet voor mekaar om een nette langdurige toon te creeren (lees: met een while loop krijgen we steeds korte bliepjes achter elkaar ipv een smoothe lange toon). Tevens zit er hierdoor ook nog een flinke vertraging in.

de code:


//==========================
// Description: Virtual English Pendant Ocarina (V.E.P.O. ?) Midlet for Nokia S60 platform
// Project 'Audio Bewerking', group MT1C-1, Media Technologie, Hogeschool Utrecht, period C 2008-2009.
// Class Desciption: Plays Notes on heights indicated by the canvas input.
// Author should be Joep, implementation by Laurens
//==========================
package fluteProject;

import javax.microedition.media.Manager;


class TonePlayer implements Runnable {

EnglishPendant midlet;
FluteCanvas usedCanvas;
int note;

public TonePlayer(EnglishPendant midlet, FluteCanvas thingy) {
//this.info = info;
this.usedCanvas = thingy;
this.midlet = midlet;
}//Constructor..

public void run() {
try {
// high e = 64;
// B = 59;
// G = 55;
// D = 50;
// A = 45;
// E = 40;
boolean blowing = true;//TODO: blowing should depend on isBlowing function from Roys class
while(blowing){
note = usedCanvas.getNoteCode() + 50;
usedCanvas.setText("Playing " + note);
Manager.playTone(note, 1 , 100);//TODO: JOEP fix Bug: playnote keeps playing the same note, even with a different input

}//while(blowing)..

} catch (Exception me) {
System.err.println(me);
}//catch(me)..
}//run()..
}//TonePlayer..


Tevens hebben wij gekeken naar Fourier Synthesis en Inputstream() maar wij vragen ons af hoe we dit zouden kunnen verwerken en of dit wel mogelijk is op een mobiele telefoon.

Ik heb bij de Inputstream gekeken in de API maar dan zou ik hiervoor een reeks getallen moeten hebben van een simpele sinusoide. Echter heb ik geen flauw benul waarop ik moet zoeken om deze reeksen te vinden (heb al een tijd zitten googlenen maar zonder succes).

Ik hoop dat iemand ons kan helpen of in ieder geval de goede richting in kan sturen!

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 15:41

voodooless

Sound is no voodoo!

Helaas is de controle die je met plattone hebt zeer beperkt. Je kunt inderdaad beter kijken naar Player. Deze voer je een inputstream met een WAV file. Deze WAV file kun je dan gewoon zelf on-the-fly genereren. Wat je hiervoor moet doen is het genereren van een eigen Inputstream. Deze zal als eerste een WAV header sturen, waarin dus staat wat de sampling frequentie is, en stereo of mono (begin simpel, 8Khz 16 bit mono is prima zat), en daarna de PCM sample data. Deze kun je dus direct generen. Je kun dat beginnen met een simpele sinus van een bepaalde frequentie, en deze frequentie laat je aanpassen door user interactie.

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 22-09 14:46

Wijnbo

Electronica werkt op rook.

voodooless schreef op woensdag 08 april 2009 @ 23:40:
Helaas is de controle die je met plattone hebt zeer beperkt. Je kunt inderdaad beter kijken naar Player. Deze voer je een inputstream met een WAV file. Deze WAV file kun je dan gewoon zelf on-the-fly genereren. Wat je hiervoor moet doen is het genereren van een eigen Inputstream. Deze zal als eerste een WAV header sturen, waarin dus staat wat de sampling frequentie is, en stereo of mono (begin simpel, 8Khz 16 bit mono is prima zat), en daarna de PCM sample data. Deze kun je dus direct generen. Je kun dat beginnen met een simpele sinus van een bepaalde frequentie, en deze frequentie laat je aanpassen door user interactie.
Inderdaad. Wat TS nodig heeft is de MMAPI. Google daar op, en je krijgt genoeg voorbeelden!