Laden...

Forenbeiträge von Kravnos Ingesamt 46 Beiträge

18.11.2011 - 19:24 Uhr

Hallo Zusammen

Ich lasse über einen vlc wrapper Videos in einer Form abspielen. Das klappt auch alles sehr gut. Bei einigen Videos jedoch klappt das nicht. Ich glaube dass er da vll eine Art "Fingerzeig" braucht denn der VLC als Anwendung spielt die Videos ab.
Nun ist mir aufgefallen dass es noch eine libvlc_medialibary gibt. Ich werde aber nicht so recht schlau daraus für was genau sie gut ist. Könnte es sein das mir das noch fehlt?
Oder muss ich noch etwas besonderes beachten?

Hier die Kurzfassung:


IntPtr Handle = LibVlc.libvlc_new(args.Length, args);
libvlc_media_player_set_media(Handle, value.Handle);
libvlc_media_player_play(Handle)

Ich hoffe das ist kurz genug 😉
Da ich ein Hobbyprogrammierer bin fällt es mir noch schwer so ganz da durch zu steigen. Ich benötige einfach nur einen Tipp was fehlen könnte damit ich weiss wonach ich suchen muss. Und bitte erklärt mir kurz was die fehlende medialibary macht, dazu ist die Doku recht schweigsam oder ist verstehe es einfach nicht 😉

Vielen Danke schonmal für jeden Tipp

09.04.2009 - 13:44 Uhr

Ich möchte euch heute die Arbeit eines sehr guten Freundes von mir vorstellen. Den "SmartStart". Leider ist er vor kurzen sehr jung gestorben. Damit jedoch ein Teil von ihm weiterlebt stelle ich das Projekt ein. Er hat jahrelang hart und verbissen daran gearbeitet und es immer wieder verbessert. Es würde mich einfach freuen wenn diese Arbeit nicht umsonnst war und es jemand gebrauchen kann.

Beschreibung:
Der SmartStart wurde für Laptops & Ähnliches entwickelt. Er gewährt schnellen Zugriff auf verschiedenste Windowsfunktionen. Leichter erreichbare sowie auch im System gut vergrabene. Da es ja mit dem Touchpad so ne sache ist sich durch Menüs zu wühlen ist der SmartStart das ideale Programm für Leute die ebne halt nicht immer ne Maus zur verfügung haben. Entwickelt wurde es für Windows Vista, läuft aber auch unter XP.

Systemvoraussetzungen:
.Net Framework 2.0 oder höher
Windows XP/Vista

Hier zum Download.

In gedenken an Jan B., einem der besten Freunde die ich je hatte.

Kravnos

02.04.2009 - 19:21 Uhr

Habe es editiert 😉

Liebe Grüsse

Kravnos

01.04.2009 - 22:44 Uhr

Auf den Link klicken 😉

01.04.2009 - 22:41 Uhr

Danke muntablues für deine Hilfe, habe jetzt mal um diesen Graus anderen zu ersparen die Klasse hochgeladen und ein recht simples beispiel dazu gemacht. Hoffe das ist verständlich. die Lösong findet ihr also hier.

Liebe Grüsse

Kravnos

01.04.2009 - 22:14 Uhr

Beschreibung:

Hallo Alle zusammen. Hier eine Klasse mit der ihr in der Lage seid einen Bass.NET-Filestream zu einem Shoutcastserver zu streamen. Das hat mich echt ne menge Nerven gekostet und um das dem Nächsten der die Idee hat zu ersparen, stelle ich es hier rein. Ein dickes Danke geht an muntablues der mir sehr geholfen hat. Ohne Ihn würde ich wohl jetzt immernoch hier sitzen und mir die Haare raufen g

Das Testprojekt habe ich Angehangen es sollte Verdeutlichen wie die Klasse zu Benutzen ist. Bitte gebt euch nicht der Illusion hin dass ihr jeden stream dafür verwenden könnt, die BassFlags sind wichtig dabei. Wie im Snipe dargestellt. So benutzt ihr die Klasse beispielsweise, wobei jeder mit // überschriftete Abschnitt für sich alleine steht.

Ihr Braucht auchnoch folgende Dateien im Ausführungsverzeichniss:
* Bass.Net.dll (als Referenz hinzufügen)
* bass.dll
* bassenc.dll
* bassmix.dll
* lame.exe
* lame._enc.dll
Zu bekommen hier, oder im Testprojekt schon vorhaden.


//Varibalen
Radiostreaming streaming;
int stream;

public Form1()
{
   InitializeComponent();
   Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle, null);
}
      
//Senden starten
streaming = new Radiostreaming();
stream = Bass.BASS_StreamCreateFile("1.mp3", 0, 0,  BASSFlag.BASS_STREAM_DECODE);
streaming.StartStreaming(stream, "Titel");
          

//Um einen neuen stream hinzuzufügen (Nächstes Lied zB)
Bass.BASS_StreamFree(stream);
stream = Bass.BASS_StreamCreateFile("2.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE);
streaming.UpdateStreaming(stream, "Neuer Titel");

//Um den Stream zu stoppen und das Senden zu beenden
Bass.BASS_StreamFree(stream);
streaming.StopStreaming()

So ich denke mal mit der Beispielanwendung und dem kurzen Snipe hier kommt ihr nun klar 😉 Wenn nicht fragt mich einfach per privater Nachricht oder durch ne Antwort hier.

Hier noch der Link zum Testprojekt.

Die Klasse selber Hängt an dem Beitrag dran g

Liebe Grüsse und viel Glück

Kravnos
Schlagwörter: <Shoutcast Bass.Net>

28.03.2009 - 17:03 Uhr

Hallo nochmal, der Tipp mit dem Mixer war supi danke 😉 Genau das habe ich gesucht. Leider komme ich damit nicht klar, ich habe den Eindruck dass der Stream immer leer ist. Habe mir das Sample x mal angesehen und versucht das für meine zwecke anzugleichen. Dabei ist diese Klasse herausgekommen. Aber es funktioniert einfach nicht. Der Broudcast connectet einfach nicht. Wenn ich ihm statt dem _mixer einfach einen normalen stream gebe klappt es wunderbar. Ich hoffe ihr könnt mir helfen.

Liebe Grüsse

Kravnos


using System;
using System.Threading;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

using Un4seen.Bass;
using Un4seen.Bass.AddOn.Mix;
using Un4seen.Bass.AddOn.Tags;
using Un4seen.Bass.Misc;

namespace BassPlayit
{
    class Mixerstream
    {
        //Mixerzeugs
        public int _mixer = 0;
        private Track _currentTrack = null;
        private Track _previousTrack = null;
        public string Filename;
        //Hier beginnt der Serverstreamteil
        EncoderLAME lame;
        SHOUTcast shoutcast;
        BroadCast _broadCast = null;
        IBaseEncoder encoder = null;
        IStreamingServer server = null;
        public void InitMixer() 
        {
            if (!Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT,IntPtr.Zero, null))
            {
                return;
            }
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 200);
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20);
            _mixer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT);
            if (_mixer == 0)
            {
                
                Bass.BASS_Free();
                return;
            }
            Bass.BASS_ChannelPlay(_mixer, false);
        }
        public void StartMixer(string tFilename)
        {
            InitMixer();
            this.Filename = "1.mp3";
            AddTracksToMixerstream();
            lame = new EncoderLAME(_mixer);
            lame.InputFile = null;	//STDIN
            lame.OutputFile = null;	//STDOUT
            lame.LAME_Bitrate = 128;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_44100;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Q0;
            if (lame.EncoderExists)
            {
                encoder = lame;
            }
            //Server
            shoutcast = new SHOUTcast(encoder, true);
            shoutcast.ServerAddress = "127.0.0.1";
            shoutcast.ServerPort = 8000;
            shoutcast.Password = "passwort";
            shoutcast.PublicFlag = false;
            shoutcast.Genre = "Alles *g*";
            shoutcast.StationName = "Kravis Server";
            shoutcast.Url = "";
            shoutcast.Aim = "";
            shoutcast.Icq = "";
            shoutcast.Irc = "";
            server = shoutcast;
            server.SongTitle = "hallo";
            if (_broadCast != null && _broadCast.IsConnected)
            {
                _broadCast.Disconnect();
            }
            GC.Collect();
            _broadCast = new BroadCast(server);
            _broadCast.AutoReconnect = true;
            _broadCast.ReconnectTimeout = 5;
            _broadCast.AutoConnect();
        }

        public void AddTracksToMixerstream()
        {
            Track track = new Track(Filename);
            // add the new track to the mixer (in PAUSED mode!)
            BassMix.BASS_Mixer_StreamAddChannel(_mixer, track.Channel, BASSFlag.BASS_MIXER_PAUSE | BASSFlag.BASS_MIXER_DOWNMIX | BASSFlag.BASS_STREAM_AUTOFREE);

            // an BASS_SYNC_END is used to trigger the next track in the playlist (if no POS sync was set)
            track.TrackSync = new SYNCPROC(OnTrackSync);
            BassMix.BASS_Mixer_ChannelSetSync(track.Channel, BASSSync.BASS_SYNC_END, 0L, track.TrackSync, new IntPtr(0));

            if (_currentTrack == null)
            {
                PlayNextTrack();
            }


        }
        private void PlayNextTrack()
        {
            _previousTrack = _currentTrack;
            _currentTrack = new Track(Filename);
            BassMix.BASS_Mixer_ChannelPlay(_currentTrack.Channel);
        }
        private void OnTrackSync(int handle, int channel, int data, IntPtr user)
        {
            if (user.ToInt32() == 0)
            {
                //An der Stelle muss ich mogeln weil ich nicht mit this.Handle initialisieren kann
                // END SYNC
                //BeginInvoke(new MethodInvoker(PlayNextTrack));
                PlayNextTrack();
            }
            else
            {
                // POS SYNC
                //BeginInvoke((MethodInvoker)delegate()
                //{
                // this code runs on the UI thread!
                PlayNextTrack();
                // and fade out and stop the 'previous' track (for 4 seconds)
                if (_previousTrack != null)
                    Bass.BASS_ChannelSlideAttribute(_previousTrack.Channel, BASSAttribute.BASS_ATTRIB_VOL, -1f, 1000);
                //}
                //);
            }
        }

    }
    public class Track
    {
        public Track(string filename)
        {
            Filename = filename;
            Tags = BassTags.BASS_TAG_GetFromFile(Filename);
            if (Tags == null)
                throw new ArgumentException("File not valid!");

            // we already create a stream handle
            // might not be the best place here (especially when having a larger playlist), but for the demo this is okay ;)
            CreateStream();
        }

        public override string ToString()
        {
            return String.Format("{0} [{1}]", Tags, Utils.FixTimespan(Tags.duration, "HHMMSS"));
        }

        // member
        public string Filename = String.Empty;
        public TAG_INFO Tags = null;
        public int Channel = 0;
        public long TrackLength = 0L;
        public SYNCPROC TrackSync;
        public int NextTrackSync = 0;
        public long NextTrackPos = 0L;

        private bool CreateStream()
        {
            Channel = Bass.BASS_StreamCreateFile(Filename, 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_STREAM_PRESCAN);
            if (Channel != 0)
            {
                TrackLength = Bass.BASS_ChannelGetLength(Channel);
                return true;
            }
            return false;
        }
    }

}

Uns als download angehängt

27.03.2009 - 01:27 Uhr

Hallo genau das habe ich schon gemacht, aber sobald ein Lied wechselt disconnectet sich der broadcast weil der stream ja zurückgesetzt wird. Ich lasse ihn dann im mom neu connecten, das bedeutet bei jedem neuen lied wird ein diconnect vom Server gemacht und dann wieder connectet, das dauert etwa 5 Sekunden. Diese 5 Sekunde fehlen dann natürlich vom lied. Es funktioniert zwar aber das wahre ist das auch nicht. Deswegen wollte ich das recording verwenden weil das kein ende hat und ich nicht neu connecten muss.

Trotzdem danke für die Idee 😉

Liebe Grüsse

Kravnos

PS im Moment habe ich es so gemacht

Das wird zuerst gemacht, damit wird connectet.


 public void StreamToServer() 
        {
             
            if (_broadCast != null && _broadCast.IsConnected)
            {
                _broadCast.Disconnect();
                _broadCast = null;
                Bass.BASS_RecordFree();
                GC.Collect();
            }
            else
            {
                lame = new EncoderLAME(stream);
                lame.InputFile = null;	//STDIN
                lame.OutputFile = null;	//STDOUT
                lame.LAME_Bitrate = 128;
                lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
                lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_44100;
                lame.LAME_Quality = EncoderLAME.LAMEQuality.Q0;
                if (lame.EncoderExists)
                {
                    encoder = lame;
                }
                //Server
                shoutcast = new SHOUTcast(encoder, true);
                shoutcast.ServerAddress = "127.0.0.1";
                shoutcast.ServerPort = 8000;
                shoutcast.Password = "passwort";
                shoutcast.PublicFlag = false;
                shoutcast.Genre = "Alles *g*";
                shoutcast.StationName = "Kravis Server";
                shoutcast.Url = "";
                shoutcast.Aim = "";
                shoutcast.Icq = "";
                shoutcast.Irc = "";
                server = shoutcast;
                server.SongTitle = t.artist + " - " + t.title;
                if (_broadCast != null && _broadCast.IsConnected)
                {
                    _broadCast.Disconnect();
                }
                GC.Collect();
                _broadCast = new BroadCast(server);
                _broadCast.AutoReconnect = true;
                _broadCast.ReconnectTimeout = 5;
                _broadCast.AutoConnect();
            }
            

Dann ist das lied zu ende und es passiert folgendes:


 Bass.BASS_StreamFree(stream);
stream = 0;
stream = Bass.BASS_StreamCreateFile(@Pfad, 0L, 0L, BASSFlag.BASS_DEFAULT);
Bass.BASS_ChannelPlay(stream, false);

//Nun das wieder Connecten
if (_broadCast.IsConnected) 
                {
                    UpdateServerstream();
                }

//Hier meine Methoade dazu
    public void UpdateServerstream()
        {
            _broadCast.Disconnect();
            lame = new EncoderLAME(stream);
            lame.InputFile = null;	//STDIN
            lame.OutputFile = null;	//STDOUT
            lame.LAME_Bitrate = 128;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_44100;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Q0;
            if (lame.EncoderExists)
            {
                encoder = lame;
            }
            //Server
            shoutcast = new SHOUTcast(encoder, true);
            shoutcast.ServerAddress = "127.0.0.1";
            shoutcast.ServerPort = 8000;
            shoutcast.Password = "passwort";
            shoutcast.PublicFlag = false;
            shoutcast.Genre = "Alles *g*";
            shoutcast.StationName = "Kravis Server";
            shoutcast.Url = "";
            shoutcast.Aim = "";
            shoutcast.Icq = "";
            shoutcast.Irc = "";
            server = shoutcast;
            server.SongTitle = t.artist + " - " + t.title;
            if (_broadCast != null && _broadCast.IsConnected)
            {
                _broadCast.Disconnect();
            }
            GC.Collect();
            _broadCast = new BroadCast(server);
            _broadCast.AutoReconnect = true;
            _broadCast.ReconnectTimeout = 5;
            _broadCast.AutoConnect();
        }

Wie gesagt, ist ne Brechstangenmethode, funzt aber nicht zufriedenstellend. Wäre schick wenn da jemand ne Idee hat wie ich das vll noch anders machen kann ohne immer neu connecten zu müssen.

26.03.2009 - 17:09 Uhr

Hallo. Ich habe ein Problem. Ich möchte einen Audiostream an einen Shoutcastserver senden. Das aufnehmen klappt auch wunderbar, allerdings werden Eingänge und Ausgänge meiner Soundkarte aufgenommen. Ich will ja nicht dass mein Mic oder meine Wave-Eigentschft der Soundkarte an den Server gestreamt werden sondern der Audiostream der abgespielt wird.

Hier mein Code mit dem es schonmal klappt:

using System;
using System.Xml;
using System.IO;
using System.Threading;
using System.Net;
using System.Text;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
using Un4seen.Bass;
using Un4seen.Bass.AddOn.Enc;
using Un4seen.Bass.AddOn.Tags;
using Un4seen.Bass.Misc;

namespace TestStream
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // LOCAL VARS
        public BroadCast _broadCast = null;
        int kbps = 128;
        SimpleBassPlay s = new SimpleBassPlay(); //s.stream ist der standart Audiostream von Bass.NET
        int _recHandle = 0;
        RECORDPROC _rec = null; 
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle, null))
                    MessageBox.Show(this, "Bass_Init error!");

               
                s.InitialBass();
                s.Play("1.mp3");
                s.SetLautstärke(0);
                Bass.BASS_RecordInit(-1);
                _rec = new RECORDPROC(RecordingHandler);
                _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT,_rec , IntPtr.Zero);
            }
            catch (System.Exception) 
            {
                MessageBox.Show("Fehler im Load");
            }
        }
        private bool RecordingHandler(int handle, IntPtr buffer, int length, IntPtr user)
        {
            return true;
        }
        private void button1_Click(object sender, EventArgs e)
        {
           
               
                

                IBaseEncoder encoder = null;
                IStreamingServer server = null;
                // MP3
                EncoderLAME lame = new EncoderLAME(_recHandle);
                lame.InputFile = null;	//STDIN
                lame.OutputFile = null;	//STDOUT
                lame.LAME_Bitrate = kbps;
                lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
                lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_44100;
                lame.LAME_Quality = EncoderLAME.LAMEQuality.Q0;
                if (lame.EncoderExists)
                {
                    encoder = lame;
                }
                else
                {
                    MessageBox.Show(this, "LAME.EXE can not be found or does not exist!\r\n\r\nMake sure it exists in your executable directory.");
                    return;
                }
                //Server
                SHOUTcast shoutcast = new SHOUTcast(encoder, true);
                shoutcast.ServerAddress = "127.0.0.1";
                shoutcast.ServerPort = 8000;
                shoutcast.Password = "meinPasswort";
                shoutcast.PublicFlag = false;
                shoutcast.Genre = "Hörspiel";
                shoutcast.StationName = "Kravis Server";
                shoutcast.Url = "";
                shoutcast.Aim = "";
                shoutcast.Icq = "";
                shoutcast.Irc = "";
                server = shoutcast;

                server.SongTitle = "BASS.NET";

                // disconnect, if connected
                if (_broadCast != null && _broadCast.IsConnected)
                {
                    _broadCast.Disconnect();
                }
                _broadCast = null;
                GC.Collect();
                _broadCast = new BroadCast(server);
                _broadCast.AutoReconnect = true;
                _broadCast.ReconnectTimeout = 5;
                _broadCast.AutoConnect();
                timer1.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (_broadCast != null && _broadCast.IsConnected)
            {
                _broadCast.Disconnect();
                _broadCast = null;
                GC.Collect();
            }

            Bass.BASS_Stop();
            Bass.BASS_Free();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
           label1.Text = (_broadCast.TotalBytesSend / 1024).ToString();
        }
    
    }
}

Wie bekomme ich jetzt meinen Stream s.stream in das Recording?

Vielen dank schonmal an dieser Stelle für eure Antworten

Liebe Grüsse

Kravnos

14.02.2009 - 12:42 Uhr

Ich denke ich habe mich etwas "komisch" ausgedrückt, ich möchte einen Internetradiosender "rippen" halt nur nicht auf die Platte sondern erstmal in den RAM und dann bei badarf auf die Platte. Ich hoff das ist verständlicher als das Kauderwelsch oben und es kann mir jemand helfen. Habe auch schon einen Hinweis hier gefunden dass es mit HttPWeBRequest gehen soll, Aber immer wenn ich das probier, erhalte ich ne Fehlermeldung. Irgendwer muss mir helfen bevor ich irre werde g

Liebe Grüsse

Kravnos

14.02.2009 - 12:32 Uhr

Hallo zusammen, auch wenn der Thread schon etwas länger nicht bearbeitet wurde habe ich es jetzt erst entdeckt und gleich ne Frage. Theoretisch ist das ja mit deinem Beispiel ganz einfach Internetradiostreams zu rippen, habe mir den Code kopiert und ausprobiert, leider erhalte ich immer die Fehlermeldung: Der Server hat eine Protokollverletzung ausgeführt. Section: ResponseStatusLine. GetResponse(). Bei dir ist dieser Fehler oofenbar nicht aufgetreten, da ich mich noch nicht so gut mit dem Klassen WebRequest und WebResponse auskenne kann ich den Fehler nicht finden. Könntest du mir vll sagen was falsch ist? Ich will genau wie du auch einen Sender Rippen und das in meinen bestenden Player einbauen. Wenn das wircklich so geht wäre ich echt superglücklich, hätte nicht gedacht dass es so einfach sein könnte 😉

Vielen lieben Dank schonmal im Voraus für JEDE Antwort.

Liebe Grüsse

Kravnos

30.01.2009 - 22:45 Uhr

Hallo, ich habe da so eine Idee für meinen Player gehabt. Ich möchte ihn insofern erweitern dass ich einen Radiostream den ich gerade wiedergebe in den RAM schreibe. Wenn der Titel sich ändert (anderes Lied) soll er das Lied im RAM deponieren und das mit 1-2 Liedern machen. Wenn man dann einen Titel gehört hat der einem gefällt soll er aus dem RAM auf die Festplatte gespeichert werden. Ich möchte den RAM verwenden da ich nicht will dass die Platte unnötig damit belastet wird. Einen Stream aufzunehmen halte ich für unngeeignet da bei jedem Encoden sich die Qualität verschlechtert. Ich suche also nun nach einer Möglichkeit den Stream so wie er decodiert wird (als int) zu "sammeln" bis ein Lied zuende ist und das dann auf der Platte als MP3/OGG usw (Originalformat) Datei zu speichern. Denn die meisten Lieder die gespielt werden möchte mann ja garnicht haben.

Wäre super wenn mir jemand einen Tipp geben könnte wie ich das machen könnte.

Liebe Grüsse

Kravnos

30.01.2009 - 22:15 Uhr

Hallo nochmal, dickes SORRY an alle die an der Fehlermeldung dass er die basswma.dll nicht finden kann gescheitert sind. Sie ist ein Addon dass ich als so selbstverständlich verstand dass ich garnicht daran gedacht hatte, dass ihr ja garnicht wissen könnt (weil ich es nicht erwähnt habe) dass diese Datei dann natürlich auch im Debugverzeichniss liegen muss. Sonnst versucht er diese Datei zu öffnen und findet sie natürlich nicht. Ich habe die Klasse aktualiesiert und jetzt tritt dieser Fehler nicht mehr auf.

Liebe Grüsse

Kravnos

30.01.2009 - 22:05 Uhr

Hallo ich habe einen Player mit Bass.Net geschrieben 😉 Ich stelle ihn gerne zur verfügung. Im Anhang kannst du das Projekt herunterladen. Ich hoffe es hilft dir, steckt viel Hirnschmalz und Arbeit drin 😉 Mittlerweile bin ich wieder ein stück weiter damit. Wenn du eine möglichst einfache Möglichkeit haben möchtest mit Bass.Net abzuspielen, schaue dir das hier mal an.

Liebe Grüsse

Kravnos

14.01.2009 - 21:16 Uhr

Wollte nochmal Danke sagen das Teil ist genial und einfach zu benutzen 😉

Liebe Grüsse

Kravnos

14.01.2009 - 21:11 Uhr

Hier der Link zur Lösung die bei mir wunderbar funktioniert hat. Danke nochmal 😉

Liebe Grüsse

Kravnos

14.01.2009 - 16:42 Uhr

ja die bass.dll muss auf jeden Fall immer im Programmverzeichnis liegen. Wenn du Addondateien wie die basswma nutzen willst müssen diese auch dabei. Das ist aber auch der einzige Nachteil. Wie mann es hinbekommt dass die bass.dll z.B in deine exe miteingebunden wird weiss ich leider nicht. Der Gedanke ist natürlich verführerisch 😉

Liebe Grüsse

Kravnos

PS: Meinen fertigen Player könnt ihr übrigends hier als Porjekdatei herunterlanden. Tipp: lest die Readme.htm wegen der Tastenkombies 😉)

03.01.2009 - 17:58 Uhr

Ich habe das Problem inzwischen im Griff, es geht mit Anchor und Panel´s. Hatte ja auch angekündigt eine Anleitung bzw eine Klasse zu machen um mit Bass möglichst einfach Dateien wiederzugeben. Ich habe mal beides gemacht 🙂

hier der Link und ein Danke nochmal an alle die mir geholfen haben. Der Player ist mitterweile richtig genial geworden g. Im Anhang die aktuelle Version als Projekt. Tipp: Lest die Readme erst vor der Benutzung der EXE wegen der Tastenkombies g

Liebe Grüsse

Kravnos

30.12.2008 - 01:37 Uhr

Hallo an Alle.

Ich habe mich in der Vergangenheit mit Bass.Net beschäftigt. Für mich war es schwierig mit der API umzugehen da es ja doch recht "umständlich" gemacht ist. Das rührt aus der Vielzahl von Möglichkeiten die Bass.Net bietet. Um es Einsteigern wie mir einfacher zu machen habe ich mal eine sehr stark vereinfachte Klasse geschrieben und möchte hier mal einen kleinen Workshop einbinden.

  1. Was sind die Vorteile zu DirectX.Net
    -Der User muss sich nicht die über 100 MB grosse DirectX SDK runterladen.
    -Es ist relativ einfach eine Visualisierung darzustellen.
    -Beherrsch mann die API erst einmal kann man damit sehr viel machen und sie ist nur 1 MB gross.

  2. Was brauche ich dafür?

  3. Lade dir die Bass.Net API runter und installiere Sie. erhältlich hier

  4. Nun brauchen wir noch die originale Bass.dll, erhältlich hier. In der Zip-Datei ist die bass.dll enthalten. Diese musst du in deinen Debug-Ordner deines Porjektes kopieren. Damit sind wir in der Lage MP3 sowie auch OGG-Dateien abzuspielen.

  5. Lade dir meine SimpleBassPlay.cs runter (ganz unten als Dateianhang) und binde es in dein Porjekt ein. Dabei ist zu beachten dass du noch den Namespace deinem Programm-Namespace angleichen musst. Nun noch einen Verweis mit Rechtsklick auf "Verweise" und dann "Verweis hinzufügen" dort "BASS.NET API for .NET 2.0" hinzufügen.

  6. Und los geht es

Wie bedient mann die SinpleBassPlay-Klasse?
Als erstes erstellen wir uns ein Objekt von der Klasse.

SimpleBassPlay s = new SimpleBassPlay();

Nun initialisieren wir das Audioobjekt erstmal.

s.InitialBass();

Als nächstes geben wir die Läutstärke von 0 - 100 Porzent an.

s.SetLautstärke(75);

Jetzt können wir mit der Wiedergabe beginnen. Komplette Pfadangabe. Z.B. "D:\Musik\hallo.mp3"

s.Play("DeineDatei.mp3");

Infos über den eingetragenen Interpret & Titel rufen wir so ab.

Titel=s.tags.artist +" - "+s.tags.title;

Um die Lautstärke herauszufinden

s.GetVolume()

Soll die Wiedergabe Pausiert werden oder eine bereits pausierte Wiedergabe fortsetzt geht das mit

s.Pause();

Es gibt Situationen in denen es nützlich ist zu wissen ob die Wiedergabe schon beendet ist, um das abzufragen

s.IsPlaying()

Wenn man wissen will wie die Aktuelle Position in Sekunden der Wiedergabe ist

s.GetCurrentPosition();

Um die Dauer in Sekunden abzurufen

s.GetDuration();

Die Aktuelle Position in Sekunden zu Setzen geht so

s.SetCurentposition(112);

Wenn wir die Wiedergabe stoppen wollen

s.Stop();

Soo ich hoffe ich konnte wem damit helfen und habe mich nicht zu kompliziert ausgedrückt. Schreibt mir ob es euch geholfen hat. Bis dahin viel spass beim proggen und basteln.

Liebe Grüsse

Kravnos

PS: Ich würde mich über Antworten freuen 🙂

24.08.2008 - 15:53 Uhr

Hallo, habe da mal ne etwas kniffligere Angelegenheit. Ich habe auch die gleichen mediatasten. Wie ich sie in der Form abrufe weiss ich, jetzt habe ich aber bemerkt dass der Windows Mediaplayer unabhängig davon wo man ist (Also zB wenn ich ein Game offen habe) auf die Tasten reagiert, mein Player allerdings nicht, weder der Winamp noch soost ein anderer Player dne ich Priobiert habe. Ich habe mir einen selber getippt, bin auch hochzufrieden mit dem Teil nur wäre es jetzt natürlich supergenail wenn die Tasten genau so wie beim Mediaplayer überall im System funktionieren würden bzw wenn mein Proggie überall darauf reagieren würde und nicht nur wenn es angeklickt ist 😉

Liebe Grüsse und schonmal vielen Dank im Voraus für nützliche Tipps g

Kravnos

15.07.2008 - 13:16 Uhr

Hallo und vielen Dank für den Tipp.
Ich habe mich allerdings oben falsch ausgedrückt. Nicht nur die Form sondern auch alle Steuerelemente sollen sich mitanpassen. Die Zeilen funktionieren und Zoomem das Fenster auf die Grösse, aber die ganzen Steuerelemente bleiben so wie sie sind. Nun habe ich gesehen dass ich bei jedem Element eine Breite und eine Höhe angeben kann. Gibt es einen weg, wie ich zb aufgrund der ermittelten Auflösung die Weite und die Höhe errechnen kann? Oder gibt es vll sogar einen einfacheren Weg?

Trotzdem Danke Trib g

Liebe Grüsse

Kravnos

14.07.2008 - 19:35 Uhr

Hallo nochmal. Danke für die beiden Tipps, den einen mit der Codezeile habe ich heute an nem Vistarechner erfolgreich getestet g

Auf den 2. Tipp hätte ich eigentlich von selber kommen können g

Nun muss ich nur noch herausbekommen wie ich eine Form automatisch der Bildschirmauflösung anpasse und ich habe alles was ich brache um das Teil zur Final zu führen 😉

Bin schon bei Version 1.29 g

Ich denke was noch fehlt ist ne Inetradiofunktion, das habe ich allerdings noch überhaupt nicht kapiert, scheint echt sehr komplex zu sein. Also wenn ich das noch einbaue dann in beide Richtungen das heisst Streams empfangen & Streams an nen shoutcastserver senden g

Vielen Dank nochmal 😉

Kravnos

12.07.2008 - 14:34 Uhr

Ja das probiere ich am Montag dirket mal aus. Ich habe aber ein generelles Problem mit Dateizugriff unter Vista.

zb:


StreamWriter sw = new StreamWriter("test.txt",false,Encoding.Default);
sw.Writeline("Hallo du da draussen");
sw.Close();

Solange mann es auf nem Stick ausführt kein Problem. Wenn ich es aber zb auf den Desktop kopiere und dann das da machen will oder überhaupt irgendwo auf den Platten geht das nicht.

Ich weiss dass Vista den Dateizugriff anders behandelt aus Sicherheitsgründen. Aber mehr auch nicht und ich finde nix im Netz dazu wie ich die Proggies anpassen kann. Ich weiss ja aber auch nicht wonach ich genau suchen muss. Vll liegt das Problem auch darin dass ich mit .Net 2.0 SDK progge ka. Wäre cool wenn das jemand weiss 😉

Liebe Grüsse

Kravnos

11.07.2008 - 13:30 Uhr

Der Player ist nun komplett auf Bass.dll umgeschrieben, ich habe mir das tatsächlich angetan g. Der komplette Kern wurde ausgetauscht. Im Moment bin ich bei Version 1.27. Ich stelle das komplette Projekt hier zum Download bereit. Ich habe mir mühe gegeben alles so einfach wie möglich zu halten damit auch Andere die diese Engine benutzen möchten nen schnellen und einfachen Einblick bekommen. Ich hoffe es hilft wem.

Das Programm ist ne Vollbildanwendung und da ich leider nicht weiss wie man der Anwendung sagt dass sie sich automatisch der Auflösung anpassen soll ist diese auf meine Bildschirmgrösse zugeschnitten (1280x1024). Wäre schick wenn mir das noch wer erklären würde vll mit einem kleinen Codebeispiel. Ansonnsten wünsche ich viel Fum damit und frohes lernen g. Wenn ihr Fragen habt bezüglich dem Player oder Bass.dll, schickt mir einfach ne E-Mail an: kravnos@netcologne.de Ich werde vll auch noch eine Anleitung hier reinposten wie man genau mit Bass Dateien wiedergibt. So ne Art Workshop oder vll sogar ne Klasse. Daran arbeite ich im Moment immer mal wieder sporalisch g.

Jetzt wünsche ich euch alles gute und vielen Dank nochmal für die Hilfe hier im Forum. Betrachtet das hochgeladene Projekt an dem ich mir ganz schön oft und lange den Kopf zermartert habe als Dankeschön g

Liebe Grüsse

Kravnos

PS: Leider läuft der Player nur unter WinXP, ich weiss leider abselut nicht warum er (und alle meinen anderen Programme) nicht unter Vista will und ich finde auch nix dazu. Wäre auch supernett wenn mir das noch wer erklären könnte.

08.06.2008 - 21:35 Uhr

Hallo muntablues. Ja ich habe es jetzt auch mit Bass.dll zuminedest mal im Sample ans laufen bekommen. Ich muss zugeben dass ich sehr angetan bin von den Möglichkeiten, hast meinen Player ja nun gesehen. Ich müsste ihn nahezu komplett umschreiben, vorausgesetzt ich begreife das was im Beispiel (Simple) steht lol 😉. Ich bleibe wahrscheinlich bei den beiden Progressbars, die andere Visualisierung ist ab ner gewissen Grösse der Picturebox einfach zu Prozessorlastig 😉. Einarbeiten will ich mich aber trotzdem mal, wenn ich mich auch dagegen entscheiden sollte, so finde ich ist die bass.dll (wenn auch zu kompliziert) mit so vielen nützlichen Dingen und Kniffen ausgerüstet, dass ich das Wissen sicherlich nochmal brauchen kann.

Viele liebe Grüsse und ein dickes Danke für deine Mühen muntablues und all die Anderen die mir geholfen haben.

Kravnos

05.06.2008 - 01:08 Uhr

Ich mache das mit AudioVideo Playback mit einem Audioobjekt. Wäre super wenn da was möglich wäre G

Ich mache es so:


Audio a = new Audio("1.mp3");
a.OpenUrl(Pfad);
a.Play();

Ich habe auch mal das Projekt hochgeladen und hier zum download verlinkt. Das ist schon wieder ne aktuellere Version g. Du brauchst dazu das DirectX.Net Framework und halt das nochrmale .Net Framework 2.0.

04.06.2008 - 19:28 Uhr

Danke für die schnelle Antwort. Komplett auf die Bass.dll unzusteigen hätte sicherlich so seine Vorteile aber ob ich das wircklich mache weiss ich noch nicht so genau. Ich wollte ja nur das VU-Meter über Bass laufen lassen weil ich nix Anderes gefunden habe das dazu in der Lage ist und mit C# funktioniert. Sonnst läuft alles zu meiner vollen Zufriedenheit und vor allen sehr einfach. Was mann von der Bass.dll wircklich nicht behaupten kann, von meiner kleinen Sicht als Hobbyprogger aus gesehen 😉.

Vielen Dank nochmal und liebe Grüsse

Kravnos

04.06.2008 - 02:08 Uhr

Hallo, ich habe mich mit dem bass.Net beschäftigt. Es gibt auch schon so eine Art vorgefertigtes VU-Meter. Leider kapiere ich das nicht, ich habe das Beispiel einfach mal erstellt und bekomme immer ne Fehlermeldung:

Die DLL bass.dell: Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Ich brauche da mal echt Hilfe. Hier mal der Code den ich mir aus dem Beispiel kopiert habe, aber leider da noch nicht so wircklich durchblicke:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Un4seen.Bass.Misc;
using Un4seen.Bass;

namespace BassTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private DSP_PeakLevelMeter _plm;
        public delegate void UpdatePeakMeterCallback();
        //Diese beiden musste ich manuell einfügen damit es überhaupt kompeliert werden konnte
        int _recHandle=0;
        private RECORDPROC _recProc;
        

        private void Form1_Load(object sender, EventArgs e)
        {
            Bass.BASS_RecordInit(-1);
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _recProc, IntPtr.Zero);
            _plm = new DSP_PeakLevelMeter(_recHandle, 1);
            _plm.CalcRMS = true;
            _plm.Notification += new EventHandler(UpdatePeakMeterDisplay);
            
            

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
        }
        private void UpdatePeakMeterDisplay(object sender, EventArgs e)
        {
            this.progressBarRecL.Value = _plm.LevelL;
            this.progressBarRecR.Value = _plm.LevelR;
            this.labelRMS.Text = String.Format("RMS: {0:#00.0} dB - AVG: {1:#00.0} dB - Peak: {2:#00.0} dB",
                        _plm.RMS_dBV,
                        _plm.AVG_dBV,
                        Math.Max(_plm.PeakHoldLevelL_dBV, _plm.PeakHoldLevelR_dBV));
        }
        //Das ist mein Knopf zum starten
        private void button1_Click(object sender, EventArgs e)
        {
            _plm.Start();
        }

    }
}

Ich will einfach 2 Progressbars als VU-Meter benutzen. Das muss doch möglich sein 😉

Ich danke schonmal im voraus für jede Hilfe.

Liebe Grüsse

Kravnos

24.05.2008 - 22:44 Uhr

Hallo und danke, ich recharchiere jetzt mal in die Richtung.

Ich benutze das DirectX SDK und davon ein Audioobject. Hier ein kleines Beispiel:


//Hier weden die DirectX klamotten eingebunden
using Microsoft.DirectX;
using Microsoft.DirectX.AudioVideoPlayback;
using Microsoft.DirectX.DirectSound;
//erzeugen des Audioobjektes (vorsicht hier muss eine bereits existierende Datei angegeben werden(leider))
Audio a = new Audio("1.mp3");
//erstmal stoppen, an dieser Stell wäre es eigentlich nicht nötig aber trotzdem habe ich es mit reingenommen denn wenn ihr nach dem Lied ein anderes Lied spielen wollt müsst ihr erstmal stoppen sonnst spielt der das alte einfach weiter und dann noch das neue dazu also beide gleichzeitig *g* Und das soll ja nicht so sein. 
a.Stop();
//damit öffnet ihr eine Audiodatei (MP3, WMA, WAVE, usw)
// Habe übrigends auch herausgefunden dass das Audioobjekt sogar den ton von Videos abspielt wenn es sein muss *g*
a.OpenUrl(Pfad);
//Damit starten wir das Abspielen *g*
a.Play();

So mache ich das, das ist simpel und funktioniert sehr gut, nur für alle andere denen es vll weiter hilft 😉

Habe meinen aktuelle Player einfach mal im ganzen hier als Link zum download mitgeliefert, kopiert euch was ihr so braucht g Er ist dafür gedacht dass man von der Chouch aus ganz bequem alles noch lesen und ihn komplett per Tastatur (habe ne Funktastatur) bedienen kann, deshalb ist auch alles so riesig g Wundert euch nicht dass es nicht immer ganz logisch zugeht, sind noch einige steuerelemente drin die von früheren versionen her stammen. Download hier

Tipp: Unter dem OPEN-Knopf befindet sich ein kleiner Knopf "Tastenkombis", klickt da drauf und der Rest erklärt sich von selbst g

Liebe Grüsse und vielen Dank nochmal an J2T

Kravnos

PS: Wenn ich es kapiert und zum laufen gebracht habe poste ich es hier rein und hoffe dass es dann anderen weiterhilft g

24.05.2008 - 15:16 Uhr

Danke dir für die schnelle Antwort aber ich verstehe das leider nicht 😉 Ich habe mal was gegoogelt und 2 sachen dazu gefunden, leider glaube ich dass das gar kein c# code ist oder? Ich weiss es leider nicht. Mit dem DirectSound bin ich auch nicht weitergekommen, zumal der ja nur WAVE abspielen kann.

In deinem Beitrag sieht das so schick einfach aus 😉.

Ich wäre über weitere Ideen sehr dankbar, denn so komme ich einfach nicht weiter.

Liebe Grüsse

Kravnos

22.05.2008 - 02:15 Uhr

Hallo alle zusammen. Ich habe mir mit DirectX einen recht schicken Mediaplayer gebastelt. Funktioniert auch sehr schön. Sogar das Auslesen der Titelinfos ist mir mit hilfe einer Klasse MP3Info (genilale Arbeit) gelungen. Nun möchte ich den nächsten Schritt machen und eine Visualisierung einbauen. Zum Beispiel 2 Balken (Progressbars) die sich dann zum Sound bewegen, bzw ausschlagen. Dazu müsste ich irgendwie an die Werte herankommen.

Ich weiss das dieses Thema schon existiert, aber kapiert habe ich das nicht und ich will ja auch keinen Windows Mediaplayer einbauen sondern es direkt selber auslesen. Bin natürlich auch gewohnt Sachen zweckzuentfremden wenn es sein muss g Also zum Beispiel wenn mann nur durch den MediaPlayer Zugriff auf diese Werte bekommt ihn zu nutzen aber halt nicht anzuzeigen.

Ein Hinweis für Alle, ich bin nur ein kleiner Hobbyprogrammierer der noch viel lernen muss. Also bitte keine allzukomplizierten Antworten g.

Vielen Dank schonmal für alles.

Liebe Grüsse

Kravnos

21.02.2008 - 21:39 Uhr

Ich danke euch beiden für die sehr schnelle und hilfreiche Antwort. Ich werde mich in beide Materien mal hereinarbeiten. DIe Netzwerkvariante hat ihre Faszination da das zu wissen und zu verstehen sicherlich auch in der ZUjunft interessant ist. Die Pipevariante habe ich bis jetzt noch nicht ganz Kapiert ist aber sicherlich auch interesant 😉 So kommt man von Einem zum Anderen 😉) VIelen Danke euch nochmal freu

Liebe Grüsse

Kravnos

21.02.2008 - 21:08 Uhr

Hallo zusammen. Ich weiss es gibt schon einige Threads dazu, aber ich bin nur Hobbyprogrammierer und verstehe das was da geschrieben wurde irgendwie nicht. Ich suche einen möglichst einfachen Weg 2 c# Programme miteinenander "Reden" zu lassen.

Genauer ist das eine ein Programm das in dem Ordner eines Internetradiorippers nach Wunschtiteln von mir sucht und diese dann an einen bestimmten Ort verschiebt, den rest wieder löscht.

Das Zweite Programm ist ein MP3 Player der auf dem DirectX Framework basiert.

Die Funktion die ich jetzt noch haben will ist das wenn ein neuer Wunsch im Wunschprogramm gefunden wurde dieser direkt in die Playliste des laufenden MP3 Programmes aufgenommen werden soll.

Dazu muss ich aber eine Möglichkeit finden dem MP3 Programm den kompletten Pfad zu der Datei / den Dateien zu übergeben damit es reagieren kann. Ich hatte schonmal die Idee mit einer TXT-Datei, in das das Wunschprogramm dann die neuen Wünsche schreibt und das MP3 Programm dann darin nachschaut was so neu dazugekommen ist, das abarbeitet und dann die Datei einfach wieder löscht. Das ist aber Festplattenquälerei und es muss doch einen besseren Weg geben die beiden Komunizieren zu lassen. Ähnlich einem Netzwerk nur eben halt alles auf demselben Rechner. Es muss auch keinerlei Sicherheitsstandarts erfüllen, nur so simpel wie möglich sein 😉)

Ich danke jedem im Voraus der versucht mir zu helfen und würde mich echt freuen wenn ihr mir ein Paar tipps geben könntet wie man sowas macht denn das ist (wie so oft) für mich totales neuland und irgendwie habe ich den Eindruck dass das nicht leicht zu realisieren ist.

Liebe Grüsse

Kravnos

14.09.2007 - 15:13 Uhr

Ich trinke auch keinen Kaffe 😉 Dafür rauche ich wie ein Schlot.

Liebe Grüsse

Kravnos

17.06.2007 - 22:34 Uhr

Danke dann werde ich mir das mal ansehen g

Liebe Grüsse

Kravnos

17.06.2007 - 21:16 Uhr

Also der beste und auch einfachste Weg führt über Systemsteuerung->Leistung und Wartung->Verwaltung->Dienste. Such dir den Dienst da raus mit hoher wahrscheinlichkeit ist er dort aufgeführt. Dann Deaktivierst du den. So kann er und alle von ihm abhängenden Dienste nicht mehr gestartet werden. Ich weiss das ist ne spur zu einfach um wahr zu sein aber oftmals sind die einfachsten Lösungen die Besten g

Liebe Grüsse

Kravnos

17.06.2007 - 21:10 Uhr

Hallo zusammen.

Ich würde gerne wissen ob es mit C# geht ein Komplettes Verzeichnis einzulesen (das weiss ich wie geht) und es dann in eine Datei (wie z.B. bei Winzip) zu schreiben. Und ob der Aufwand enorm gross ist oder ob es sich im Rahmen hällt.

Ich habe mal etwas in Netzt gesucht, finde aber keine Erwähnung von sowas, entweder habe ich nach den falschen Begriffen gesucht oder es ist soo selten dass das wer haben will g. Aber es muss doch ne Möglichkeit dazu geben wenn es ja schon Progs gibt die sowas können.

Ich danke euch im Voraus für eure Hilfe

Liebe Grüsse

Kravnos

10.06.2007 - 17:18 Uhr

Hallo 😉

Ja ich habe mich auch nochmal weiter schlau gelesen, die Sicherheit wird dadurch wircklich nicht soo gesteigert. Es seie denn wir bekommen es hin dass er einen block mit RijnDeal verschlüsselt dann mit Blowfish und so weiter also blockweise das machen und dann auchnoch in einem scheinbar zufälligen Reihenfolge gg Aber man kann es ja auch übertreiben 😉
Das Porbem mit der Pfadangabe habe ich so gelöst dass ich den Pfad in deine Textdatei schreibe und er es sich da rausliest und fertig g Bei mir ist Porggen eben auch immer Basteln 😉 Die Argumente /infile und /outfile werden zwar übergeben aber sie werden nicht verwendet so dass in /infile x steht und in /outfile xx. Eine Zeile drunter werden die werte dann mit der Textdatei ne gesetzt g. Zwar gebastelt aber funzt g. Das einzige Problem was ich jetzt noch habe ist dass ich dein Prog ja mit nem anderen mit Process.Start() ausführe und das braucht scheinbar ne totale Pfadangabe. Da muss ich mir noch was überlegen denn sonnst müsste der User ja das Programm immer an einer bestimmten Stelle auf der Platte haben, aber dafür fällt mir auchnoch was ein, wenn nicht dann schreibei ch halt nochmal nen Post g.

Liebe Grüsse und nochmal vielen Dank an dich marsgk

Kravnos

08.06.2007 - 03:33 Uhr

Vielen Danke!!! Das Porgramm ist supersauber geschreiben. Der einzige Nachteil ist dass man keine kompletten Pfadangaben übergeben kann, aber ich habe es etwas modifiziert g und das ist nun auch kein Porblem mehr. Ohne dein Beispiel wäre ich sicherlich nicht so weit gekommen 😉 Ich muss ja neidlos gestehen deine Langeweile iss ja echt krass, ich blicke da selbst nach stundenlangen auseinanderklamüsern des Codes immernochnicht voll durch, aber es funzt und das rasend schnell g Ich habe mir vorgenommen das mal als Klasse umzuschreiben dan kann man es leichter in andere sachen einbinden, aber jetzt bin ich erstmal froh dass es läuft g. Wenn ich das fertig habe dann poste ich die Klasse hier.

Aber sagtmal RijnDeal wird ja im mom als eines der sichersten Verfahren bei einem schlüssel von 256 Bit angesehen, macht es da überhaupt noch Sinn ein 2. Verfahren (BlowFish) drüberlaufen zu lassen oder haltet ihr das für Zeitverschwendung? Ich möchte mal Eure Meinung dazu hören.

Liebe Grüsse

Kravnos

01.06.2007 - 00:10 Uhr

Hi und ich danke dir 😉 Ich habe mir die CryptIT.cs mal angesehen, bloss alles habe ich nicht verstanden, bin ja auch kein porfessioneller Progger g. Also
was mich als erstes interessiert was ist ein IV ? Dann würde mich noch interessieren ob ich das auch in ein Windowsprogramm integrieren kann. Wenn ich das so richg verstanden habe hast du das Pufferproblem so gelöst dass du Filstreams verwendest oder ? Könntest du das mal etwas erläutern, so ganz blicke ich da noch nicht durch.

Danke schonmal im Voraus für die Hilfe und die ganze Arbeit die du dir gemacht hast.

Liebe Grüsse

Kravnos

31.05.2007 - 00:58 Uhr

Also das Problem habe ich gelöst. Nur es ist nicht das was ich mir vorgestellt habe. Der Mechanismus ist entweder müll oder meine art das anzugehen ist schrott. Das Endergebniss ist dass ein 4 MB grosse Datei ca 14 MB gross wird und es ausserdem wirckloch Ewigkeiten daurt bis er mal fertig ist. Vlleicht könnt ihr ja mit dem CODE was basteln um das schneller und vor allem KLEINER zu machen. Ich habe mit verschiedenen Buffergrössen rumprobiert. Also es hat keine auswirkungen auf die endgrösse wenn ich den Buffer größer mache. Aber es geht schonmal etwas schneller wenn ich den buffer entweder weglasse oder kleiner mache. Das habe ich mir echt besser vorgestellt, jetzt habe ich voll viel Arbeit reingesteckt und am Ende alles für die Katz 😦(



 StreamWriter sw = new StreamWriter(datei + "1", true, Encoding.Default);
            FileStream fs = new FileStream(datei, FileMode.Open);
            byte[] hallo = new byte[1];
            string buff="";
            int Buffergrösse = 102400; //Buffergröße in Byte
            for (int i = 0; i <= fs.Length - 1; i++)
            {
                hallo[0] = Convert.ToByte(fs.ReadByte());
                buff = buff + hallo[0].ToString();
                
                if (Buffergrösse == i)
                {
                    sw.Write(Encrypt.RijndaelSimple.MeinSimpleEncrypt(buff, Key));
                    buff = "";
                    Buffergrösse = Buffergrösse + 102400;
                }
            }
            sw.Write(Encrypt.RijndaelSimple.MeinSimpleEncrypt(buff, Key));
            buff = "";
            fs.Close();
            sw.Close();
            File.Delete(datei);
            File.Move(datei + "1", datei);

Naja wenn noch wer ne Idee hat schreibt mir. Ansonnsten vielen Dank für die Unterstützung!

Liebe Grüsse

Kravnos

30.05.2007 - 20:06 Uhr

also ... Ich habe das jetzt mal so gemacht mit dem Byteweise auslesen. Klappt auch ganz gut und Byteweise schreiben auch. Jetzt Meckert er allerdings dass bei der Verschlüsselungsmethode das falsche Format sei.


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            string path = @"C:\Testfile.txt";
            FileStream fsw = new FileStream(@"C:\Testfile1.txt", FileMode.Create);
            FileStream fs = new FileStream(path, FileMode.Open);
            byte[] hallo = new byte[fs.Length];
            string buff,buff2;
            for (int i = 0;i<=fs.Length -1;i++)
            {
                hallo[i] = Convert.ToByte(fs.ReadByte());
                buff = hallo[i].ToString();

                buff2=Encrypt.RijndaelSimple.MeinSimpleEncrypt(buff, "Hallo");
                fsw.WriteByte(Convert.ToByte(buff2));
            }
            fs.Close();
            fsw.Close();
            
            


        }
    }

}


Die SimpleEncrypt(string rohdaten,string Schlüssel);
Eigentlich müsste das doch gehen, Die Methode bekommt einen string vorgeworfen und in diesem stehen auch die Zahlen. Mit Zahlen kann der Mechanismus umgehen, also sollten daher keine Probs kommen. Jetzt bin ich ratlos ... Egal wie ich es Trixe es funzt einfach nicht.

Bitte helft mir das muss doch irgendwie gehen, wahrscheinlich ist es nur ein Denkfehler.

Liebe Grüsse

Kravnos

30.05.2007 - 00:58 Uhr

ok ich habe mir das angesehen aber ich kann da irgendwie nicht rauslesen wie ich jetzt sagen wir mal in 10 MB schritten ne datei auslesen kann. Ich fürchte dafür brauche ich dann doch ein Codebeispiel. Komm du weisst doch wies geht g
Soo viel kann das doch nicht sein.

Liebe Grüsse

Kravnos

29.05.2007 - 23:55 Uhr

Aber wie lese ich die Datei denn so ein ? Das weiss ich leider nicht sonnst würde ich ja solch einen wahnsinn garnicht machen g

Könntest du mir mal ein kleines Codebeispiel schreiben wie ich sowas mache ? Muss ja nicht gross sein damit ich weiss wo ich ansetzen kann.

Danke dir 😉

Kravnos

29.05.2007 - 23:07 Uhr

Hallo. Ich habe vor ein Verschlüsselungsprogramm für grössere Dateien zu schreiben. Mein Problem ist sobald die Dateien grösser werden klappt es nicht mehr da er ne OutOfMemoryexeption macht. Ich bin kein begnadeter Programmierer und würde ich über jeden Tipp freuen. Ich denke ich benutze nur nich das richtige Werkzeug dafür der Rest sollte Passen 😉
Es wäre wircklich lieb wenn mir einer sagen Könnte wie man große Dateien über 100 MB am besser verarbeiten und in eine Encryptermethode schmeissen kann als mit dem StreamWriter, da vermute ich mal das Problem. Die tödlichen Zeilen sind:

private void btn_Entschlüsseln_Click(object sender, EventArgs e)
{
    StreamReader sr_Ent = new StreamReader(datei,System.Text.Encoding.Default);
    StreamWriter sw_Ent = new StreamWriter(datei + "1",false,System.Text.Encoding.Default);
    sw_Ent.Write(Encrypt.RijndaelSimple.MeinSimpleDecrypt(sr_Ent.ReadToEnd(), Key));
    sw_Ent.Close();
    sr_Ent.Close();
    File.Delete(datei);
    File.Move(datei + "1", datei);
    lblStatus.Text = "Entschlüsseln... fertig";
}

Also in dem String "datei" liegt lediglich der Pfad zur Datei.
In Key (string) liegt auch nur der Schlüssel.
Das ist ein Windowsprogramm.
Sprache c#.Net
Und den Verschlüsselungsmechanismus müsstet ihr ja kennen, das ist der einzige den ich gefundne habe der auch Dateien verschlüsseln kann.

Ich hoffe mir kann jemand helfen und danke schonmal für jeden Tipp im Voraus.

Liebe Grüsse

Kravnos

Hier nochmnal der ganze Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace BoardEncrypter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //
        string Key;
        string datei="";
        

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void btnEnt_Durch_Click(object sender, EventArgs e)
        {
            ofd.ShowDialog();
            tb_Durch_Ent.Text = ofd.FileName;
            datei = ofd.FileName;
            ofd.RestoreDirectory=true;
            tb_Ent_pass.Enabled = true;
            btn_Ent_Pass.Enabled = true;
            
            
        }

        private void btn_Ent_Pass_Click(object sender, EventArgs e)
        {
            Key = tb_Ent_pass.Text;
            btn_Entschlüsseln.Enabled = true;
        }

        private void btn_Entschlüsseln_Click(object sender, EventArgs e)
        {
            StreamReader sr_Ent = new StreamReader(datei, System.Text.Encoding.Default);
            StreamWriter sw_Ent = new StreamWriter(datei + "1",false,System.Text.Encoding.Default);
            sw_Ent.Write(Encrypt.RijndaelSimple.MeinSimpleDecrypt(sr_Ent.ReadToEnd(), Key));
            sw_Ent.Close();
            sr_Ent.Close();
            File.Delete(datei);
            File.Move(datei + "1", datei);
            lblStatus.Text = "Entschlüsseln... fertig";
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void btn_Ver_Durch_Click(object sender, EventArgs e)
        {
            ofd.ShowDialog();
            tb_Ver_Durch.Text = ofd.FileName;
            datei = ofd.FileName;
            ofd.RestoreDirectory = true;
            btn_Ver_Pass.Enabled=true;
            tb_Ver_Pass.Enabled = true;
        }

        private void btn_Ver_Pass_Click(object sender, EventArgs e)
        {
            Key = tb_Ver_Pass.Text;
            btn_Verschlüsseln.Enabled = true;
        }

        private void btn_Verschlüsseln_Click(object sender, EventArgs e)
        {
            StreamReader sr_Ver = new StreamReader(datei,System.Text.Encoding.Default);
            StreamWriter sw_Ver = new StreamWriter(datei + "1",false,System.Text.Encoding.Default);
            sw_Ver.WriteLine(Encrypt.RijndaelSimple.MeinSimpleEncrypt(sr_Ver.ReadToEnd(), Key));
            sr_Ver.Close();
            sw_Ver.Close();
            File.Delete(datei);
            File.Move(datei + "1", datei);
            lblStatus.Text = "FETIG !!";
        }
    }
}

--> Edit: Beim nächsten mal bitte gleich Codetags verwenden. Noodles