Laden...

Wie binde ich Irrklang in mein Projekt ein und spiele eine Datei ab?

Erstellt von M.Lach vor 5 Jahren Letzter Beitrag vor 5 Jahren 5.009 Views
M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren
Wie binde ich Irrklang in mein Projekt ein und spiele eine Datei ab?

Hallo,
Frage zur Irrklang.
Ich bin (als Anfänger) dabei zu lernen und bei der Suche nach Möglichkeiten, die Soundausgabe auf ein "wählbares" Device zu legen, auch auf IrrKlang gestoßen.
Bei mir scheitert es aber schon daran, das ich in meinem Projekt in den Eigenschaften die "Verweispfade" für das LIB und INCLUDE von Irrklang angegeben habe, aber trotzdem ein simples "using Irrklang" einen Fehler wirft mit :> Fehlermeldung:

Der Typ- oder Namespacename "Irrklang" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)"

Using mache ich ja, wo stelle ich ggf. was um wegen dem "Assemblyverweis"?

Ich nutze VS2012 auf Win10 und habe irrKlang-64bit-1.6.0 entpackt in einem Ordner - paralell zu meinem Projekte-Ordner liegen.
Ziel soll es sein, eine "EXE" zu erstellen, die ohne Installation oder zusätzliche DLL lauffähig ist.
Daher wollte ich alles in das Projekt rein verlinken.
Das Programm soll eine Windows-Form werden und in eine Combox haben, die alle Sounddevices auflistet und mindestens eins davon ausgewählt ist.
Wenn möglich soll man dort (in V2.0) auch ein weiteres Ausgabe-Device wählen.
Aber im ersten Schritt soll erst mal nur das Ausgabe-Device auswählbar sein (so es denn mehrere gibt).
Die Seite von https://www.ambiera.com habe ich im FAQ und Forum schon durch sucht, aber als Neuling ist das alles nicht so einfach zu verstehen.
Ggf. kann mir Hier jemand für solche "Basics" kurz erklären, was ich da anders machen muss.
So - ich hoffe, ich habe genug Infos geliefert - und den richtigen Thread gefunden.
Danke schon mal.

--

Mit freundlichen Grüßen,

Matthias Lach

5.658 Beiträge seit 2006
vor 5 Jahren

Ich empfehle für so etwas NAudio oder, falls das vom Funktionsumfang nicht reicht, CSCore. Beide Bibliotheken sind Open Source.

Weeks of programming can save you hours of planning

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Hallo und danke für die rasche Antwort.
Das ist alles bestimmt gut und brauchbar, aber auch für mich als Anfänger nicht umsetzbar.
Ebenso wie IrrKlang kann ich auch diese Pakete nicht in mein Projekt einbinden.
Was muss sich machen, damit ich IrrKlang im Projekt nutzen kann?
Dort habe ich die Verweispfade auf die Ordner "lib" und "include" von IrrKlang gesetzt.
Was fehlt?
Ziel: MP§'s als Ressource mit in die EXE zu packen und auf einen Button-Click abzuspielen. Simple "Soundleiste" a la "Stefan Raab"

--

Mit freundlichen Grüßen,

Matthias Lach

5.658 Beiträge seit 2006
vor 5 Jahren

Für die beiden von mir genannten Bibliotheken gibt es NuGet-Pakete. Wie du IrrKlang verwendest, kannst du sicherlich der dortigen Dokumentation entnehmen.

Weeks of programming can save you hours of planning

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

bin ich dann als "Anfänger" hier falsch?
Ich befolge die in den FAQ und Forum angegebenen Hinweise, die LIB und INCLUDE Ordner der IrrKlang-Sachen in den Eigenschaften des Projektes mit an zu geben, ich denke mal, das hier die Verweispfade gemeint sind.... (org: "You only need to add the include path to your options and link with the irrklang.lib "

--

Mit freundlichen Grüßen,

Matthias Lach

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo M.Lach,

in deinem Projekt Rechtsklick auf die "References", "Add Reference" hast du gemacht, dann deine Irrklang-dll angegeben?

Dann so wie hier beschrieben? irrKlang Tutorial: Hello World (C#)

Gruss

Coffeebean

D
152 Beiträge seit 2013
vor 5 Jahren

... die LIB und INCLUDE Ordner der IrrKlang-Sachen ...

Für mich sieht das nach C/C++ aus und nicht nach C#

5.658 Beiträge seit 2006
vor 5 Jahren

... die LIB und INCLUDE Ordner der IrrKlang-Sachen ...
Für mich sieht das nach C/C++ aus und nicht nach C#

Das kommt von diesem Eintrag aus dem Ambiera-Forum.

Da steht dann allerdings auch:

For CSharp, you only need to add the irrKlang.NET.dll as reference to your project. The include and lib folders are only if you are using C++.

Weeks of programming can save you hours of planning

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Ah! Danke. Meine Versuche waren immer auf die "IrrKlang.DLL" gerichtet.
Nun habe ich die "irrKlang.NET4.dll" genommen und das klappt!
Danke dafür!

Der Fehler ist um weg, dafür steht nun dafür ein Warning:> Fehlermeldung:

Warnung 1 Konflikt zwischen Prozessorarchitektur des Projekts "MSIL", das erstellt wird, und der Prozessorarchitektur des Verweises, "irrKlang.NET4", "AMD64". Dieser Konflikt kann zu Laufzeitfehlern führen. Ändern Sie ggf. mithilfe des Konfigurations-Managers die als Ziel angegebene Prozessorarchitektur Ihres Projekts so, dass die Prozessorarchitekturen zwischen Ihrem Projekt und den Verweisen ausgerichtet werden, oder wählen Sie eine Abhängigkeit von Verweisen mit einer Prozessorarchitektur, die der als Ziel angegebene Prozessorarchitektur Ihres Projekts entspricht.

Unter den Projekt-Eigenschaften versuche ich die .net-Version (akt. 4.5) zu ändern (auf 4.0) aber das bringt nix. Der Fehler > Fehlermeldung:

Namespace nicht gefunden erscheint wieder und dazu ein Warnung: > Fehlermeldung:
Warnung 2 Der primäre Verweis "irrKlang.NET4" konnte nicht aufgelöst werden, da er anhand des ".NETFramework,Version=v4.5"-Frameworks erstellt wurde. Dabei handelt es sich um eine höhere Version als das aktuelle Zielframework ".NETFramework,Version=v4.0". Soundbar
-
Also stell ich wieder auf 4.5 zurück. Bei "Erstellen" und "Zielplatform" CPU-Type habe ich "any" und "32 bit bevorzugen" aktiv.
Unter "Verweispfade" ist nichts mehr eingetragen.
-
Wo guck ich nun weiter?

Hinweis von Coffeebean vor 5 Jahren

Bitte benutze die richtigen Code-Tags. [Hinweis] Wie poste ich richtig?

--

Mit freundlichen Grüßen,

Matthias Lach

M
368 Beiträge seit 2006
vor 5 Jahren

Wo guck ich nun weiter?

Als Reserve: im entpackten Verzeichnis unter irrKlang-64bit-1.6.0\irrKlang-64bit-1.6.0\examples.net
finden sich Projekte mit VS-Solution. Diese unter VS 2017 öffnen, kompilieren und ausführen funktioniert hervorragend. Und bei den Projekt-Eigenschaften kann man auch "spicken".

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Ja, das habe ich schon gesehen. Die Beispiele dort drehen sich aber um eine Consolenausgabe.
In den Beispielen klappt das auch immer wunderbar, aber nicht, wenn ich das in mein Projekt einbaue.
Meine Anfänger-Probleme sind dann, die gesehenen Beispiele auf meine Anwendung umzusetzen und die Warnings und Fehler aus zu bügeln. Zumal die Beispiele alle auf englisch sind, meine VS2012 auf Deutsch ist und die Übersetzung auch nicht immer so einfach ist.

Scheint, als ob ich mich da an etwas (zu) komplizierteres ran gemacht habe.

Was wäre denn eine gutes "Austauschforum für Anfänger", in dem man seine Code-Beispiele posten und diskutieren kann?

--

Mit freundlichen Grüßen,

Matthias Lach

16.827 Beiträge seit 2008
vor 5 Jahren

In den Beispielen klappt das auch immer wunderbar, aber nicht, wenn ich das in mein Projekt einbaue.

Klapp nich alleine, ist keine Fehlermbeschreibung, mit der wir was anfangen können.

Zumal die Beispiele alle auf englisch sind, meine VS2012 auf Deutsch

Ein Grundproblem
Auf einem deutschen System zu entwickeln führt dazu, dass Du auch deutsche Fehlermeldungen bekommst.
Software Entwicklung ist aber nun mal eine englische Dominanz; mit deutschen Fehlermeldungen wird Dir Google kaum was ausspucken.

Was wäre denn eine gutes "Austauschforum für Anfänger", in dem man seine Code-Beispiele posten und diskutieren kann?

In dem befindest Du Dich doch schon?!

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Ah ok, danke.

Hier ein Beispiel, das ich im Netz gefunden habe, um das Output-Device zu bestimmen.


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Get the list of installed sound devices. 
            var sdl = new IrrKlang.ISoundDeviceList(IrrKlang.SoundDeviceListType.PlaybackDevice);
            //Add each device to a combo box.
            for (int i = 0; i < sdl.DeviceCount; i++)
            {
                comboBox1.Items.Add(sdl.getDeviceDescription(i) + "\n");
            }
        }

Das habe ich so bei mir eingebaut, der Code gibt keinen Fehler, aber die Cobobox bleibt leer.
Erwartet hätte ich hier die Auflistung meiner Devices.
Das "var" vor dem ersten "sdl" habe ich eingebaut und weiche damit vom Beispiel schon ab, gibt aber sonst eine Fehlermeldung "sdl im aktuellen Konterxt nicht gefunden".

--

Mit freundlichen Grüßen,

Matthias Lach

F
10.010 Beiträge seit 2004
vor 5 Jahren

Evtl solltest du mal schauen wann SelectedIndexChanged aufgerufen wird.

M
368 Beiträge seit 2006
vor 5 Jahren

Erwartet hätte ich hier die Auflistung meiner Devices.

Das kann auch passieren, wenn man das 6. Beispiel von Irrklang um eine comboBox1 erweitert (ob man den geposteten Quellcode deswegen in der Form_Load-Methode ausprobieren soll, sei dahingestellt):

private void Form1_Load(object sender, EventArgs e)
    {
      var sdl = new....
}

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

1.040 Beiträge seit 2007
vor 5 Jahren

Zumal die Beispiele alle auf englisch sind, meine VS2012 auf Deutsch ist...

Warum stellst du es dann nicht einfach auf Englisch um? =)
Tools - Optionen - Umgebung - Internationale Einstellungen

Ansonsten gilt beim Programmieren:
Versuche zu verstehen, was du tust.
Nicht einfach nur blind Code kopieren und hoffen, dass es funktioniert.

Z.B. soll in deinem Codeschnipsel eine ComboBox mit den Devices gefüllt werden. Eine schöne Aufgabe zum Einstieg.
Die Frage ist nur: wann sollte sie befüllt werden?
Im Beispiel machst du das im SelectedIndexChanged-Event der ComboBox. Dieses Event wird beim Auswählen eines Eintrages aus der ComboBox ausgelöst. Ist das also die richtige Stelle? Wohl kaum - nicht nur, dass die ComboBox am Anfang leer ist und man nichts auswählen kann, nein man würde auch bei jeder Auswahl immer und immer wieder die Devices zur ComboBox hinzufügen.

Eine Möglichkeit wäre - wie von M.L. schon erwähnt - die Einträge beim Laden der Form hinzuzufügen.

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

So.. da bin ich wieder.
Hatte was gedauert, aber ich habe mir Eure Ratschläge angesehen und hoffentlich gelernt.

* Mein VS ist nun auf "english", Sprache wurde nach installiert.

* Die Combobox 1 aus dem Beispiel von IrrKlang habe ich als Ziel für das Erstellen der Deviceliste raus genommen und
mit unter die "InitializeComponent();" gepackt.
Ergebnis: Die Combobox ist zum Start gefüllt, und ich lasse mit "comboBox1.SelectedIndex = 0;"
das erste Device auswählen.

Ziel: Bei "comboBox1_SelectedIndexChanged" möchte ich ein anderes, schon vorhandenes Device wählen und benutzten.
Was ich bei IrrKlang im Forum finde sind Beispiele in "c++" und dort wird beschrieben, das man das Device irgendwie an die Instanz von "ISoundEngine" üebrgeben muss.

ISoundEngine* engine = createIrrKlangDevice(irrklang::ESOD_AUTO_DETECT, 
                                                    irrklang::ESEO_DEFAULT_OPTIONS,
                                                    deviceID);

Alle vorhandenen Devices habe ich ja schon, muss ich also nicht neu einlesen.
Diese würde ich, so mein Verständnis, als Index der Combobox1 finden.

Die Combobox lass ich jetzt erst mal in Ruhe und widme mich dem Abspielen.
Dazu habe ich einen Button gebaut:

private void button1_Click(object sender, EventArgs e)
        {
            var song = textBox1.Text;
            var output = comboBox1.SelectedItem;
            ISoundEngine engine = new ISoundEngine();
           
           try
           {
                engine.Play2D(song, false);
                engine.Play2D("d:\\1.mp3");
            }
            catch (Exception)
           {
               MessageBox.Show("fehler");
           }
           engine.RemoveSoundSource(song);
           MessageBox.Show("ende");  
        }

In Textbox1 ist der komplette Pfad zu einer MP3-Datei angegeben, die Datei "d:\1.mp3" ist auch vorhanden und diese lassen sich beide mit normal abspielen.

Das Ergebnis: Es öffnet sich eine Messagebox mit dem Text "ende". Ein Sound ist nicht zu hören und ich habe der "Engine" noch nicht gesagt, welches Device sie nehmen soll. Das einfach "Play2d" scheint nicht zu klappen. Ein Fehler kommt nicht.

Soweit der Stand.
Und bevor ich das mit dem Device machen, möchte ich erst mal überhaupt ein MP3 abgespielt bekommen.

--

Mit freundlichen Grüßen,

Matthias Lach

5.658 Beiträge seit 2006
vor 5 Jahren

In dem von M.L. genannten Ordner mit Beispiel-Projekten für .NET findest du bestimmt mindestens eins, wo eine Audiodatei abgespielt wird.

Wenn nicht: Verwendet eine der Open-Source-Alternativen.

Weeks of programming can save you hours of planning

M
368 Beiträge seit 2006
vor 5 Jahren

Was passiert beim Auskommentieren von

private void button1_Click(object sender, EventArgs e)
        {
            var song = textBox1.Text;
            var output = comboBox1.SelectedItem;
//Variable output wird definiert, aber nicht benutzt
            ISoundEngine engine = new ISoundEngine();
           
           try
           {
                engine.Play2D(song, false);

            //    engine.Play2D("d:\\1.mp3");
            }
            catch (Exception)
           {
               MessageBox.Show("fehler");
           }
// auskommentieren :       
//   engine.RemoveSoundSource(song);
           MessageBox.Show("ende");  
        }

?

In dem Rohzustand kann man allerdings beim wiederholten Drücken des Button1 eine oder mehrere Musikdateien parallel abspielen (mit entsprechendem Klangerlebnis...)

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Ja, im Ordner sind Beispiele, auch genau für .NET.
Daran habe ich mich auch gehalten.
Im Beispiel "Hello World" ist im "Class1.cs" beschrieben wie es geht.
Instanz erzeugen: "ISoundEngine engine = new ISoundEngine();"
und dann
Sound abspielen: "engine.Play2D("../../media/getout.ogg", true);" (hier "looped").

- genau das mach ich in meinem Code auch.

Ich habe mich für IrrKlang entschieden, da hier die Ausgabe auch auf mehrere Devices möglich ist/sein soll.
Was Alternativen so können hab ich noch nicht untersucht.
Wenn die gefundenen Links nicht auf ungültige Seiten zeigen, guck ich da gerne mal.

--

Mit freundlichen Grüßen,

Matthias Lach

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Das Auskommentrieen hat keinerlei Auswirkung.
Ich höre weiterhin nichts, ein Fehler kommt nicht, die "Ende"-Meldung kommt wie erwartet.
Ich versuche ein Paralel-Porjekt mit einer Testausgabe.

--

Mit freundlichen Grüßen,

Matthias Lach

1.040 Beiträge seit 2007
vor 5 Jahren
ISoundEngine engine = new ISoundEngine();  

Kompiliert der Code überhaupt? 🤔
Ohne jetzt in die Sourcen/Doku von Irrklang geguckt zu haben: ein Interface mit new() instanziieren zu können sieht irgendwie falsch aus...

M
368 Beiträge seit 2006
vor 5 Jahren

Kompiliert der Code überhaupt?

Die mitgelieferten Beispiele tun das. Allerdings ist die Doku wohl etwas veraltet : "The irrKlang Sound Engine Documentation © 2003-2010 by... " und die Verfasser halten sich nicht an die Richtlinien zur Namensgebung... (ISoundEngine ist kein Interface, sondern eine Klasse)

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Andere Frage:

Ihr hattet Alternativen empfohlen. Nutze ich gerne, aber kann ich: * Ein "Exe" erstellen, die ohne zusätzliche DLL (Installation) auskommt? * Evtl. auch den Sound auf einem Record-Device ausgeben? (Hier: Das MP3 soll dann mit dem Micro kombiniert werden)

gerne guck ich mir da was an. aber "was" . gefunden habe ich "MCI" (finde heir aber nur C++-Beispiele auf der MSDN-Seite)
und "Bass.net" von radio42.
Lese mich grade mal in Bass.Net ein.... (scheint aber kein frei verfügbares Produkt zu sein...)
Nur die Tiefe habe ich noch nicht, ob meine Anforderungen da umsetzbar sind.

--

Mit freundlichen Grüßen,

Matthias Lach

16.827 Beiträge seit 2008
vor 5 Jahren

* Ein "Exe" erstellen, die ohne zusätzliche DLL (Installation) auskommt?

Per Google auf diese Frage findest Du binnen Millisekunden ILMerge.

Evtl. auch den Sound auf einem Record-Device ausgeben?

Was ist ein Record Device?

5.658 Beiträge seit 2006
vor 5 Jahren

Was ist ein Record Device?

Ein Gerät zur Aufnahme von Audio. Und nein, damit kann man natürlich kein Audio wiedergeben.

kann ich:
* Ein "Exe" erstellen, die ohne zusätzliche DLL (Installation) auskommt?

Mit ILMerge geht das, aber warum?
Bei IrrKlang hast du doch auch Abhängigkeiten von DLLs.

* Evtl. auch den Sound auf einem Record-Device ausgeben?
(Hier: Das MP3 soll dann mit dem Micro kombiniert werden)

Die Vorgehensweise ist:

  • Mp3 laden
  • Audio vom Mikrofon aufnehmen
  • Evtl. Bitrate / Samplerate konvertieren
  • Beides zusammen mischen (Stichwort: Audio Mixing)
  • Ergebnis auf dem Ausgabegerät ausgeben

Das alles ist ohne Probleme mit NAudio oder CSCore umsetzbar, sogar live und mit gleichzeitigem Playback.

Wenn du allerdings schon Probleme damit hast, eine DLL in dein Projekt einzubinden, dann solltest du dich evtl. erstmal mit einem einfacheren Problem beschäftigen. Audiobearbeitung ist nicht gerade ein Thema, mit dem man als Einsteiger loslegen sollte.

Weeks of programming can save you hours of planning

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Infos zur Idee, das Thema "Sound (hier: mp3) auf Record-(ausgabe)-Device".

Der Sound soll im "live-Betrieb", also zeitgleich an den Kanal/Device geschickt werden, den das Mikrofon auch benutzt. Als Beispiel: Der Benutzer Telefoniert via VoIP-Client und kann dann mit dem Programm einen Sound mit auf die "Leitung" schicken. Zusätzlich zu dem was das Mikrofon sendet.

Das mit der DLL muss ich mal gucken. Es geht eher darum, das nichts installiert werden kann/soll, und auch Benutzer ohne Rechte etwas zu installieren das Programm nutzen können. Funktional, wenn ggf. unpraktisch, könnte man auch damit leben, die exe und eine DLL in einem Order zu haben und via Archiv zu verteilen.

Welche Alternative schaue ich mir denn nun am besten mal an?

--

Mit freundlichen Grüßen,

Matthias Lach

2.298 Beiträge seit 2010
vor 5 Jahren

Hallo,

grundsätzlich zum Abspielen von Musik kannst du ja mal meinen geposteten Code im Beitrag Irrklang spielt keinen Ton ab prüfen ob dieser funktioniert. Würde mich aber erst einmal wundern, wenn so viel geändert wäre, dass der nicht mehr funktioniert.

EDIT: Beachte auch die ersten Aussagen im Thread. - Die könnten schon des Rätsels Lösung sein, warum du keinen Ton erhältst.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

M
368 Beiträge seit 2006
vor 5 Jahren

Der Sound soll im "live-Betrieb", also zeitgleich an den Kanal/Device geschickt werden, den das Mikrofon auch benutzt. Dazu siehe das (in C++ gehaltene) Beispiel unter irrKlang-64bit-1.6.0\irrKlang-64bit-1.6.0\examples\06.Recording (funktioniert auch mit VS 2017)
Es geht eher darum, das nichts installiert werden kann/soll, und auch Benutzer ohne Rechte etwas zu installieren das Programm nutzen können. Stichwort MSDN - ClickOnce

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Vielen Dank für diesen Hinweis.
Das kopieren der ikpMP3.dll in den bin\Debug-Ordner brachte Abhilfe.
Ich höre nun den Sound!

--

Mit freundlichen Grüßen,

Matthias Lach

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo M.Lach,

Das kopieren der ikpMP3.dll in den bin\Debug-Ordner brachte Abhilfe.

Hast du das manuell gemacht? Das sollte eigentlich automatisch passieren. Hast du die Dll richtig eingebunden? Siehe mein erster Beitrag in dem Thread.

Gruss

Coffeebean

4.938 Beiträge seit 2008
vor 5 Jahren

Das ist eine native DLL, d.h. diese kann nicht als Referenz eingebunden werden. Man kann diese aber trotzdem dem Projekt hinzufügen (Add File) und CopyToOutputDir auf Copy, if newer stellen.

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo Th69,

ah okay, das hatte ich übersehen. Wichtig ist, dasss es nicht immer manuell geschehen muss. Danke! 👍

Gruss

Coffeebean

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

Nun finde ich Code-Beispile für das Wählen des Output-Device, aber das scheint nur c++ zu sein.
Auch verstehe ich nicht, was da passiert.
https://www.ambiera.com/irrklang/docu/index.html#enumeratingDevices
Fragen dazu:
* was macht das ""(Strenchen) hinter "ISoundEngine"?
* was macht "createIrrKlangDevice()? Oder wie bekomme ich das in meinem Beispiel hin?
Wenn ich das via copy&paste in meinen Code einbaue hagelt es logischerweise Fehler.
Ich versuch mal weiter.....

--

Mit freundlichen Grüßen,

Matthias Lach

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo M.Lach,

die Sternchen sind Pointer. Wenn du die mal wirklich verstanden hast, dann fällt dir vieles leichter. Aber trotzdem solltest du dir erstmal die Grundlagen anschauen mMn.

Klar kannst du nicht C++ in C# Code pasten und erwarten, dass es geht. Du kannst aber C++ Dlls Referenzieren.

Ich hab jetzt auf die Schnelle nicht gesehen, was die Methode macht.

Hilft:
Changing output sound device in &quot;realtime&quot;?

Gruss

Coffeebean

5.658 Beiträge seit 2006
vor 5 Jahren

Du verwendest nicht die Doku für .NET, sondern die für C++, und wunderst dich hinterher, daß du Compilerfehler bekommst?

Weeks of programming can save you hours of planning

M
M.Lach Themenstarter:in
33 Beiträge seit 2008
vor 5 Jahren

nein, ich wunder mich nicht.
Habe aber durch das Beispiel oben das hier gefunden, was ich nun austeste.
Ja, mir fehlen Grundlagen der Programmierung.
Bin kein Student mehr, habe einen Job, Kind, Frau, Haus - und bastel in der noch verbleibenden Freizeit was rum...


 int output = comboBox1.SelectedIndex;
            ISoundDeviceList sndDev = new ISoundDeviceList(SoundDeviceListType.PlaybackDevice);
            ISoundEngine engine = new ISoundEngine(SoundOutputDriver.AutoDetect, SoundEngineOptionFlag.DefaultOptions, sndDev.getDeviceID(output));

Das geht wie erwartet und ädnert das Device.
Ändere ich dann in der Combobox einen Eintrag, ändert sich auch die Ausgabe auf das andere Device.
Obwohl:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //
        }

Das da leer ist.... grübel

--

Mit freundlichen Grüßen,

Matthias Lach