| |
VB.NET - Ein- und UmsteigerMCISendString und BackgroundWorker | | | Autor: Logo | Datum: 19.03.10 12:36 |
| Hallo allerseits,
ich schon wieder; ist mir ja schon fast peinlich, aber dieses Forum hat mir bislang jedes Mal so gut geholfen, dass ich mich einfach an Euch wenden muss.
Ich bin heute auf ein seltsames Phänomen gestoßen, als ich eine einwandfrei funktionierende Sub, in welcher mittels MCISendString WAV-Files abgespielt werden, in den BackgroundWorker verlegt habe (oder wie immer man das ausdrücken sollte):
Der ganze MCISendString-Prozess wird einwandfrei, also exakt wie in der Sub, als sie noch nicht im BGW lief, durchlaufen, Pfade stimmen, Alias ist OK usw, es kommt aber kein Ton.
Der MCI-Error-String gibt Folgendes zurück: "Unbekanntes Problem beim Laden des angegebenen Gerätetreibers".
Wenn ich My.Computer.Audio... zum Abspielen nehme, ist es kein Problem, aber da ich im Rahmen meiner App unregelmäßig wechselnd den linken oder rechten Kanal abschalten muss, brauche ich MCISendString.
Hat evtl. jemand eine Erklärung für das Phänomen oder sogar eine Lösung dafür, wie ich den BGW zufrieden stellen kann, damit er MCISendString akzeptiert?
Wie immer bereits im Voraus ganz herzlichen Dank und allerseits noch einen schönen Tag
Stefan | |
Re: MCISendString und BackgroundWorker | | | Autor: Logo | Datum: 19.03.10 17:20 |
| Hallo RalfE,
vielen Dank für die Antwort.
Ja, das Threading ist zweifellos das Problem. Ich habe vorhin mal exzessiv gegoogelt: Das Problem wurde in allen möglichen Foren rund um den Globus mehrfach (zumeist von C'-Programmierern) angesprochen, aber es gab niemals eine Antwort drauf.
Ich weiß viel zu wenig vom API, um substantiell mitreden zu köönnen, aber kann es sein, dass man MCI evtl. irgendwie anders deklarieren müsste?
Beste Grüße
Stefan | |
Re: MCISendString und BackgroundWorker | | | Autor: Drapondur | Datum: 19.03.10 18:01 |
| Hallo,
also ich denke, dass es an MCI plus Threading selbst liegt, egal wie Du es deklarierst. Ich meine selber mal damit Probleme gehabt zu haben und die Beiträge im Netz weisen eigentlich auch alle darauf hin. Auf jeden Fall würde ich den letzten Parameter von mciSendString hwndCallback in Zusammenhang mit Threading nur sehr vorsichtig verwenden.
Für die Sachen, die Du hier im Laufe der Zeit so beschrieben hast, halte ich MCI eigentlich für nicht ausreichend genug bzw. für zu umständlich. Ich würde da eher direkt mit Streams und vor allem mit WaveOut / WaveIn-Device arbeiten.
Eine sehr umfangreiche .NET Open-Source Lib dafür (und vieles mehr) gibt's auf Codeplex (http://naudio.codeplex.com/), allerdings in C#.
Wenn Du jedoch bei MCI bleiben willst: Es eigentlich keinen zwingenden Grund mciSendString in einem separaten Thread zu starten; mciSendString kann von sich aus die Kontrolle direkt an das Programm zurückgeben und den Sound asynchron abspielen.
Außerdem: Teste Deine Anwendung rechtzeitig auf 64-Bit-Systemen. Immerhin spielst Du mit API-Funktionen herum.
Ciao
D. | |
Re: MCISendString und BackgroundWorker | | | Autor: Logo | Datum: 20.03.10 10:20 |
| Hallo Drapondur,
das finde ich ja irre, dass Du Dir an Hand meiner gesammelten Postings (na ja: kleinlauter Fragen) ein Bild machst.
Damit Du meine - vermutlich oftmals recht naive - Fragerei besser einordnen kannst: Ich war selbständiger Logopäde und bin seit 2 Jahren im Ruhestand. Da es in meinem Fachbereich für viele Therapiegebiete keine gezielten PC-Programme gibt, habe ich vor einigen Jahren angefangen, solche in VB6 für meine eigene Praxis zu schreiben. Da sie gut ankamen und ankommen, verkaufe ich sie seit einigen Jahren. Für die Tonausgabe habe ich immer MCI eingesetzt und natürlich zuvor alles umfänglich getestet. Und hab bei sicherlich 6-700 Installationen zum Glück keinen einzigen Rücklauf gehabt, dass etwas nicht lief.
Ich bin Anfang des Jahres auf VB.NET umgestiegen und will nun so peu a peu all die Projekte umsetzen, für die ich während des Jobs nie die Zeit hatte (da wird also vermutlich noch die eine oder andere Frage auf Euch zukommen . Die Soundfunktionen werden naturgemäß bei allen Programmen besonders wichtig sein, ich denke/hoffe mal, dass die basalen MCI-Funktionen auch unter .NET gleich unproblematisch laufen sollte - werde es aber auf jeden Fall wie gehabt ausführlich testen.
Nichtsdestotrotz hat mich das 'naudio'-Projekt schon beim ersten Anschauen umgehauen - das ist genau das, was ich brauche, denn ich bin auch Musiker und habe in dem Bereich einiges programmiert, aber eben nicht mit der Eleganz und den Möglichkeiten, wie es mit naudio wohl möglich ist.
Wie Ralf in seiner Ergänzung zu Deinem Posting schreibt, kann man auch derartige C#-Projekte in VB.NET einbinden - ich habe natürlich bislang nicht den Schimmer einer Ahnung, wie das geht, werde aber versuchen, mich schlau zu machen (ein kleiner Tipp, wo ich das am besten kann, wäre natürlich hochwillkommen).
Ach ja, noch mal zum Threading und MCI: Ich hätte das MCI gerne im BGW, weil ich dann die Schleifen unterbrechen kann, in denen die WAVs abgespielt werden können, nicht um die MCI-Funktionen selbst zu unterbrechen.
Ich bedanke mich beim Forum für das wohlwollende Interesse und die vielfache Hilfe und wünsche allerseits ein schönes Wochenende.
Beste Grüße
Stefan | |
Re: MCISendString und BackgroundWorker | | | Autor: Logo | Datum: 20.03.10 11:01 |
| Super - vielen Dank !!!!!!!!!!!!
Stefan | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|