webForumDet fria alternativet

Hämta ljudfil från db (med asp) och spela upp i flash

Flash

6 svar · 830 visningar · startad av lenap

Medlem sedan feb. 200520 inlägg
Frågan#1

Hej

Jag försöker göra något som jag inte ens vet om det är möjligt, men jag tycker att det borde vara det. Jag vill kunna välja en ljudfil från en databas, med hjälp av en querystring i asp, och spela upp den i en flashspelare.

Går det att spela upp en ljudfil i flash utan att först importera den??

I flashfilen kan jag lägga in asp som hämtar rätt ljudfil-id från databasen, tar reda på filnamnet och sedan talar om var på servern själva ljudfilen ligger. Men går den att spela upp i flash?

Vet nån?

Medlem sedan juni 200546 inlägg
#2

Visst går det!

var mySound:Sound = new Sound();
mySound.loadSound("filnamn.mp3", true);

Den andra parametern i metoden loadSound anger om det är ett event ljud (false) eller ett strömmande (true). I ditt fall ska du använda 'true'.

Medlem sedan nov. 20017 144 inlägg
#3

Som princip borde väl detta gå.
Det är säkert belastande...

...
mySound.loadSound("din_mp3fil.asp?id=1", true);

[b]din_mp3fil.asp[/b]
'....
Set rs = connection.execute("SELECT mp3_namn,mp3_data FROM min_mp3musik WHERE id=" & id)
Response.ContentType = "application/mp3"
Response.AddHeader "content-disposition","attachment; filename="& rs(0)
Response.BinaryWrite rs(1)
Response.Flush
Response.End
Medlem sedan feb. 200520 inlägg
#4

Tack för två bra tips.

Tyvärr kan jag Flash alldeles för dåligt så jag får det inte att funka och har lite för ont om tid för att lära mig från grunden. Men jag skulle vilja ha den varianten i slutändan.

Tills vidare tror jag att asp-koden som Jesper T skrev ligger mer på min nivå, ska testa den. Tror du att det är väldigt belastande? Hur då?

/Lena

Medlem sedan nov. 20041 189 inlägg
#5

Ja... Den är ju ganska belastande för servern, då servern måste skicka en massa data. CPU-belastningen är ju dock inte så hög.

Om du använder ASP.Net så kan jag ge dig lite tips om det om du har lust. Då finns ju fördelen att man enkelt kan cacha låten och därefter stänga databasen. System.IO.BufferedStream kan användas för att läsa in den från just binary som finns i databasen. Datan kommer då ligga i byte[] format.

Så vad du gör är att skapa ett OleDbDataReader (eller Sql- eller Odbc-) eller en adapter som du hämtar datan med. Lite kod:

    public byte [] getImage(int imageNumber)
    {
        string strSql = "SELECT * FROM File";
        DataSet ds = new DataSet("Image");
        OdbcDataAdapter tempAP = new OdbcDataAdapter(strSql,this._objConn);
        tempAP.Fill(ds,"Table");

        try
        {
            this._objConn.Open();
            byte [] buffer = (byte [])ds.Tables["Table"].Rows[imageNumber]["Data"];
            return buffer;
        }
        catch{this._objConn.Close();return null;}
        finally{this._objConn.Close();}            
    }

den är för att läsa bilder från en databas, men binärt som binärt... Sedan skickar du resultatet binärt.

ASP belastas även genom att databasen är öppen, kom jag på nu.

Väldigt intressant tråd. Har funderat på att bygga en mediespelare i Flash själv nämligen ;). Så om jag/vi knåpar ihop något så ^^. Har du lust med det så kan jag stå för back-end.

//Henke

Medlem sedan sep. 2005114 inlägg
#6

Jag kan inte säga att jag är en stor beundrare av att lägga in större binära filer i SQL, själv skulle jag föredragit att lägga upp filer och ha en referens lista i SQL med filpath osv. But to each his own, det skulle fungera att göra så som de sagt.

Medlem sedan feb. 200520 inlägg
#7

Nej alltså, själva filen ligger inte i databasen. Bara en referens.
Att ha connection till databasen öppen under hela tiden man spelar ljudfilen, det låter helt vansinnigt.

En mediespelare i Flash verkar ju faktiskt inte vara så himla svårt. Jag är som sagt riktig nybörjare på flash, men bättre på asp och databaser.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)