PDA

View Full Version : [Frage] "Audioeffekt: ????" hat wer tips?


bimbo
01-01-2003, 21:26
Wir haben "Audioeffekt: Schreie" al thema, und hängen ganz schön:

zum einen bring ich es nicht fertig, ein mp3 mit einem processor wiederzugeben.

dann hab ich noch eine frage: mit was für einer art plugin ( codec, mux, effect,...) is sowas am gscheitesten zu lösen, ich glaub mit an mux, aber hab ka ahnung

leobasil
01-01-2003, 21:38
"muss" es nicht mit einem codec gelöst werden ?
..kenn mich aber selber mit audioeffekten nicht aus, aber da wir ziemlich viel mit codecs gemacht haben hätte ich das mal angenommen

bimbo
01-01-2003, 21:47
hab ich am anfang auch gedacht, aber wie soll ihc so einen audioeffekt als plugin machen, ich hab mir gedacht, mux, weil ich einfach zu meinem original track, ein paar anderer (schreie) dazumisch. aber wie gsagt, keine ahnung von dem ganzen.


auch nicht, wie ich überhaupt mit sound in java umgehen soll...

moaxl
02-01-2003, 12:14
Ich hab das gleiche Problem, aber wo gibts einen Beispiel Multiplexer?
Allerdings hab ich ein kleines Programm auf der Sun-Page gefunden, dass genau das macht (allerdings arbeitet es ohne ein Plugin, sondern mit einer Custom Datasource), vielleicht hilft dir das weiter.
Falls irgendwer was anderes brauchbares hat: Nur zu, her damit

bimbo
02-01-2003, 20:32
ich weis nicht recht, ich glaub ehrlich nicht, dass wir das einfach so machen dürfen...

zum einen bring ich es nicht fertig, ein mp3 mit einem processor wiederzugeben.


hat zu diesem problem wer eine lösung? mein player hast zusammenbracht mp3's zu spielen. naiv wie ich war dachte ich, ein processor is ja nix anderers als ein konfigurierbarer player -> kann auch mp3's bearbeiten. anscheinend falsch gedacht. aber das is java.

lifelikebmx
02-01-2003, 22:00
auszug aus dem JMFguide

Setting the output data format to null causes the media data to be rendered instead of output to the Processor object's output DataSource.
[http://java.sun.com/products/java-media/jmf/2.1.1/guide/JMFProcessing.html]

allerdings sollen wir den dieprocessor outputdatasource an einen player weitergeben (siehe aufgabenstellung)

bimbo
02-01-2003, 22:18
is mir schon klar, ich bekomm aber immer folgende fehlermeldung:

Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
Failed to realize: com.sun.media.PlaybackEngine@c68a98
Error: Unable to realize com.sun.media.PlaybackEngine@c68a98

gck
02-01-2003, 23:08
bei mir kann der processor auch nicht "realized" werden -> ich glaub, es ist überhaupt kein MP3 codec in der aktuellen JMF 2.1.1c dabei (auf der SUN Homepage steht auch was von Lizenzproblemen und dass es nur den nativen MP3 Decoder unter Windows im Moment gibt)... -> d.h. der Player kanns schon decodieren, indem er das einfach von nicht zum JMF gehörigen Windows eigenen Codecs machen lässt (für die das JMF keine Lizenz zu haben braucht), während bei einem Prozessor das schon vom JMF gemacht werden müsste, da wir ja unter Umständen noch andere Codecs in der Chain haben könnten und daher die dekomprimierten Audiodaten noch brauchen...

BTW: ich hab mit meiner Gruppe auch so einen Samples-Drüberspielen Effekt:

hat schon wer eine Idee, wie man am simplesten einen entsprechenden Codec bzw. Effect realisieren könnte?
Es gibt auf der JMF Homepage von SUN ein Beispiels Plugin names "GainControl"... Da schauts so aus, als könnte man die AudioDaten relativ "intuitiv" lauter machen, indem man sie einfach mit einem Faktor multipliziert...

wenn das geht, dann kann man das drüberlegen ja auch recht leicht implementieren, einfach die beiden IntegerWerte (des Musikstückes und des Samples) zsammzählen und mitteln...

aber mehr weiß ich im Moment auch nicht... ich krieg immer nur ein ziemlich verrauschtes Zeugs zusammen, wenn ich das Gain Plugin verwende...

hat schon wer (einigermaßen) funktionierenden Sourcecode??

bimbo
02-01-2003, 23:46
@gck mit dem mp3-codec wirst recht haben, ich hab auch schon sowas vermutet, aber mir dacht, wenns beim player geht, sollts auch beim processor. ausserdfem gibts auf der javahomepage eien seite, uaf der alle form ate stehen, die unterstützt werden, da war mp3 bei lesen und schreiben dabei.

anderes thema: ich bekomm, wenn ich bei einer wav datei den contentdescriptor auf
new FileTypeDescriptor(FileTypeDescriptor.WAVE) setze folgende fehlermeldung

javax.media.NoPlayerException: Cannot find a Player for: com.sun.media.multiplexer.BasicMux$BasicMuxDataSou rce@51127a
at javax.media.Manager.createPlayerForSource(Manager. java:1512)
at javax.media.Manager.createPlayer(Manager.java:500)
at mm1.ProcessorEvents.controllerUpdate(ProcessorEven ts.java:55)
at com.sun.media.BasicController.dispatchEvent(BasicC ontroller.java:1254)
at com.sun.media.SendEventQueue.processEvent(BasicCon troller.java:1286)
at com.sun.media.util.ThreadedEventQueue.dispatchEven ts(ThreadedEventQueue.java:65)
at com.sun.media.util.ThreadedEventQueue.run(Threaded EventQueue.java:92)

kann mir wer einfach ( welche methoden) erklären, wie ich:

1. demultiplexe mit jmf
2. multiplexe
3. wie hängen contentdescriptor und setFormat zusammen?
3. was man snost noch so braucht ???

wäre nett

gck
02-01-2003, 23:54
einen Demux gibt es als Example Code auf der SUN JMF Homepage...

für welchen Effekt brauchst du einen Demux?
Und ob man die "Sample-Drüberlegen" Effekte mittels eines Mux machen kann|soll, bin ich mir auch nicht sicher...

bimbo
03-01-2003, 00:03
das mit dem demux / mux hat mich nämlich verwirrt:

aus Javaª Media Framework API Guide (sun homepage)


Use the Processor setOutputContentDescriptor method to specify the
multiplexed data format of the Processor object's output.


aus dem skriptum:

Verarbeitungschritte:

1. Erzeugung eines Processors & Demultiplexing




es gibt doch aebr multiplexer als plugins oder habich da was falsch verstanden

gck
03-01-2003, 00:09
ich glaub, den muss man erst ausprogrammieren, i.e. mittels der vom JMF zur Verfügung gestellten Mittel einen Multiplexer "Codec" erzeugen und dann kannst du ihn verwenden...

also ja und nein, es gibt schon alle Sachen, die man für einen Mux braucht, man muss aber erst ein konkretes Plugin erzeugen...

leider kenn ich mich im Moment mit dem #'§&$§@?`´ JMF auch überhaupt nicht wirklich aus....

lifelikebmx
03-01-2003, 01:55
Original geschrieben von bimbo
@gck mit dem mp3-codec wirst recht haben, ich hab auch schon sowas vermutet, aber mir dacht, wenns beim player geht, sollts auch beim processor. ausserdfem gibts auf der javahomepage eien seite, uaf der alle form ate stehen, die unterstützt werden, da war mp3 bei lesen und schreiben dabei.

audiospur extrahieren und als mp3 schreiben funktioniert (wie auf den folien) im windows einwandfrei
aber wie gck schon richtig sagt zitiere ich hier einen absatz von http://www.golem.de/0209/21466.html

"Lediglich das "JMF for Windows Performance Pack" erlaubt weiterhin die Wiedergabe von MP3-Dateien, da das Dekodieren hier direkt über die Windows-Plattform läuft. Streams lassen sich aber auch damit nicht wiedergeben."

und die vergiftung nimmt ihren lauf...

arbeit hier auch irgendwer an video?

Wings-of-Glory
03-01-2003, 02:00
>audiospur extrahieren und als mp3 schreiben funktioniert (wie auf den folien) im windows einwandfrei

hmm.. bei mir funzt kein einziger source aus den ims folien

>arbeit hier auch irgendwer an video?

ja. ich arbeite an video.

lifelikebmx
03-01-2003, 02:11
hmm.. bei mir funzt kein einziger source aus den ims folien
naja eins zu eins hab ichs natürlich nicht abgeschrieben -
wenn du willst kannst du mir ja sourcecode schicken der nichtfunktioniert und ich test ihn bei mir -jmftest@lifelikebmx.com

gck
03-01-2003, 14:12
2 Dinge:

1) Also, man kann doch mittels eines Prozessors MP3 abspielen (zumindest im Windows JMF, für Linux gibts ja im Moment keins *grummel*): dazu muss man aber statt
p.setContentDescriptor(null);

p.setContentDescriptor(new ContentDescriptor("mpeg.audio"));

verwenden... offensichtlich veranlasst das den Prozessor, nicht selbst zu dekodieren und als "Player" zu fungieren, sondern den Datenstrom an den Windows-eigenen MP3 Dekodierer abzugeben...

das bringt uns aber nüsse, da selbst wenn man jetzt einen anderen Prozessor an diesen Prozessor anschließt, man wieder nur MP3 kodierte Daten kriegt, über die man keinen post-processed Effekt legen kann, und als Preprocessor Effekt sind unsere "Audio-drüberleg" Aufgaben sicherlich nur schwierig zu bewältigen!

2)
Ich glaub, ein Multiplexer ist für solche Beispiele auch nicht der richtige Ansatz: laut Doku dient ein Multiplexer dazu, mehrere Tracks "interleaved" ineinand abzuspeichern, also z.b. um ein Video mit einer Tonspur zu "verweben", aber eben nicht, um zwei Spuren zu "mischen", so wie wir es machen sollen...

d.h. entweder es funktioniert so wie in Merge.java von der SUN Homepage, oder wir müssen "händisch" die beiden Quellen in "process()" mischen -> dazu muss ich mich aber noch ein bissl mit der linearen PCM Kodierung auseinandersetzen...

Wäre cool, wenn jemand irgendwelche Einfälle dazu hätte...

bimbo
03-01-2003, 18:17
audiospur extrahieren und als mp3 schreiben funktioniert (wie auf den folien) im windows einwandfrei

das schon, aber ich kann keine mp3's lesen. was ich einigermaßen beschissen find. was is dann ein gutes format? mp2?

1) Also, man kann doch mittels eines Prozessors MP3 abspielen (zumindest im Windows JMF, für Linux gibts ja im Moment keins *grummel*): dazu muss man aber statt
p.setContentDescriptor(null);

p.setContentDescriptor(new ContentDescriptor("mpeg.audio"));


das habich gmacht, und ich bekomm immer noch die fehlermeldung:

Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian,
Signed, 24000.0 frame rate, FrameSize=32768 bits
Failed to realize: com.sun.media.PlaybackEngine@322bce
Error: Unable to realize com.sun.media.PlaybackEngine@322bce

gck
03-01-2003, 18:56
naja, bei mir klappt es so schon: so eine Exception mit "PlayerEngine" hab ich überhaupt noch nicht gesehen...


andere Frage: weiß wer, wie ich Audiodaten aus z.b. einem WAV File auslesen kann, OHNE dabei einen Prozessor zu verwenden, also einfach das file zu *lesen*, wie man eben aus einer normalen Datei lesen könnte, nur halt, dass ich Audiodaten ohne header etc... haben will -> also ich möcht sie in der Form auslesen, in der sie ein Prozessor der process() Methode eines Codec übergeben würde...

bimbo
03-01-2003, 20:30
@gck: das hab ich mich auch schon gefragt. hab mich aber noch nicht eingehend mit dem java.sound (oder is es javax.sound) auseinandergesetzt.


einmal eine anderr frage: welche datentypen sollen denn von uns unterstützt werden? reichts da wenn wir uns einen aussuchen, oder sollen wir alle vom jmf unterstützten verwenden können?

gck
03-01-2003, 22:18
ich würd sagen, alle, die möglich sind -> es ist ja kein Problem, welchen Codec du jetzt noch in deine CodecChain aufnimmst, oder?

Nur MP3 kömma uns jetzt abschminken, danke an die lieben Säcke, die was gegen MP3 Support im JMF gehabt haben...

Wenn du Samples über etwas drüberlegst, dann (nehm ich an) kannst du aber zumindest für die Samples ein bestimmtes Format vorraussetzen, die sind ja Teil deines Effects... (ich nehm LINEAR, also pcm, damit kann man am einfachsten rechnen, weil man zuvor nix decompressen muss...)

bimbo
04-01-2003, 00:23
wie meinst du das es ist ja kein Problem, welchen Codec du jetzt noch in deine CodecChain aufnimmst

imemr wenn ich einen anderen datentyp aufmahc muss ich zuerst die codecchain ändern und dann neu compielen. ich hab jetzt sowas in der codecchain :


tracks[i].setCodecChain(effect);
tracks[i].setFormat(new AudioFormat(AudioFormat.LINEAR));
r.p.setContentDescriptor(r.desc);

gck
04-01-2003, 15:08
naja, du kannst ja die CodecChain "dynamisch" erzeugen, indem du zuerst eine (Pull)DataSource für deinen Input öffnest, daraus den ContentDescriptor holst und dann entsprechend einen Codec aussuchst. Anschließend kannst du entweder die DataSource an einen Processor hängen oder (noch einfacher) direkt einen Processor auf dieses File erzeugen (der Content wird sich ja nicht geändert haben :))

bimbo
04-01-2003, 16:44
kannst du das alles :

naja, du kannst ja die CodecChain "dynamisch" erzeugen, indem du zuerst eine (Pull)DataSource für deinen Input öffnest, daraus den ContentDescriptor holst und dann entsprechend einen Codec aussuchst. Anschließend kannst du entweder die DataSource an einen Processor hängen oder (noch einfacher) direkt einen Processor auf dieses File erzeugen (der Content wird sich ja nicht geändert haben )



genauer erklären? ich probier grad mit dem PlugInManager mir für mein ipputformat einen codec zu hohlen, der mir das gegebene format ins pcm (=linear ???) = umwandelt. ich weis aber nicht ganz wie ihc das anstellen kann.

gck
05-01-2003, 16:22
nein, das fällt nicht in meinen "Zuständigkeitsbereich", was unsere Gruppe angeht -> ich bin nur für den eigentlichen Effekt zuständig...

ich werd mich aber heute noch damit beschäftigen, vielleicht weiß ich dann genaueres...

PS: ich habs bis jetzt so gemacht, dass ich mir mittels getContentType() einen Codec ausgesucht hab und ihn veranlasst hab, in das Format, das getInputFormats() meines Effect returned, umzuwandeln...

wolk
06-01-2003, 21:38
da alle nur an audio beispielen arbeiten

Ich arbeite an VIDEO effekt
hab auch schon einen funktionierenden effekt der etwas in ein video einblendet und hab auch schon eine oberfläche (allerdings als getrenntes programm mit swing)

Wie in gottes namen kann ich die zusammenmergen?
und hat schon jemand geschafft, einen effekt in diesem JMStudio zu registrieren, geschweige denn darin etwas abzuspielen mit einem codec ?

noch was: warum kann ich nur mov dateien abspielen ?

mfg wolk

lifelikebmx
07-01-2003, 00:58
Original geschrieben von wolk
hab auch schon einen funktionierenden effekt der etwas in ein video einblendet und hab auch schon eine oberfläche (allerdings als getrenntes programm mit swing)


naja die oberfläche setzt sich ja aus visual controlPanel und controlcomponent vom effect zusammen - wo ist da die schwierigkeit wenn du schon einen funktionierenden effekt der etwas in ein vdo einblendet hast?


Wie in gottes namen kann ich die zusammenmergen?
und hat schon jemand geschafft, einen effekt in diesem JMStudio zu registrieren

ähh.. ist zb auf den folien beschrieben...
du machst ein package, dann registrierst du das prefix, dann den effekt