Algorithmus verbesserung von webradio... ich komm nicht weiter



  • Ich schreibe derzeit an einer für viele eher kleinen Sache, trotzdem komm ich nicht weiter. Es handelt sich um einen Webradio wie Technobase,... etc.

    Das ganze ist in C# geschrieben und verwendet zum decoden http://naudio.codeplex.com/

    Ich kann das zwar Streamen und auch einen Teil abspielen doch 1. ist der Audiostream unvollständig ( sprich läuft nicht flüssig lässt kleine Zeiten aus ) und 2. stoppt das ganze nach ner zeit.

    Jetzt versuch ich einfach mal zu erklären was ich mache und zeige anschließend noch Code. Habs nich ins C# Forum gestellt, da es weniger was mit der Syntax zu tun hat sondern mehr mit dem Algorithmus:

    Also ich habe zum einen eine ganz normale Sub/Funkion welche das Abspielen als Aufgabe hat. Dann noch einen Backgroundworker(neuer thread) der das Streamen als Aufgabe hat. Beim Backgroundworker wird eben das ganze mit einer httpwebrequest/httprespone in einen IO.Stream geschrieben und dann in der AbspielSub abgespielt.

    Hier noch der Code:

    private void button1_Click(object sender, EventArgs e)
            {
                PlayMp3FromUrl();
            }
            public Stream memstream = new MemoryStream();
    
            public void PlayMp3FromUrl(/*string url hier würde noch url mitgegeben werden.*/)
            {
                backStream.RunWorkerAsync();
                System.Threading.Thread.Sleep(2000);
                Console.Beep(500, 1000);
                memstream.Position = 0;
                using (WaveStream blockAlignedStream =
                    new BlockAlignReductionStream(
                        WaveFormatConversionStream.CreatePcmStream(
                            new Mp3FileReader(memstream))))
                {
                    using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                    {
                        while (true)
                        {
                            waveOut.Init(blockAlignedStream);
                            waveOut.Play();
                            while (waveOut.PlaybackState == PlaybackState.Playing)
                            {
                                System.Threading.Thread.Sleep(100);
                            }
                        }
                    }
                }
            }
    
            private void backStream_DoWork(object sender, DoWorkEventArgs e)
            {
                using (Stream stream = WebRequest.Create("http://listen.technobase.fm/tunein-dsl-asx").GetResponse().GetResponseStream())
                {
                    byte[] buffer = new byte[32768];
                    int read;
                    while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                            memstream.Write(buffer, 0, read);
                        }
                    }
                }
            }
    

    Ich wär euch wirlich dankbar wenn mir einer helfen könnte bin noch in den Startlöchern mit programmieren und auch noch recht jung also bitte etwas Nachsicht mit Programmierstil und Rechtschreibung 🙂

    danke


Anmelden zum Antworten