Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: MP3-soittimen tekeminen

Sivun loppuun

dooDle [17.01.2005 22:35:07]

#

Kuinka mci:llä pystyy tekemään mp3 soittimen jossa on kaikki perus ominaisuudet(äänen voimakkuus, eteen ja taakse kelaus, mp3:n id3v1 tai id3v2 tagien luku..)? En oikeen oo ehtiny perehtyä tohon ja vaikka kuinka googletin nii ei löytyny ku vaan et kuinka sen kappaleen pystyy soittamaan. Että jos voisitte auttaa. Ees joku sivu, josta sais parempaa tietoa kuin "Tällä pitäis saada mp3:t soimaan". VB:n oppaissa eikä koodivinkeissäkään oikeen sen paremmin oo asiaa valaistu. Kiitti jo etukäteen. (Miksihän kaikki aina pistää ton tohon loppuun? Luuleeko ne että aina ois joku vastaamassa?)

tuomas [17.01.2005 22:53:27]

#

no paikka josta löydät varmaankin satoja toteutuksia:
http://www.planetsourcecode.com

dooDle [18.01.2005 19:11:01]

#

Just tätä pelkäsinkin. Kyllähän sieltä löytyy tietoa asiasta.. just sen verran että kuinka se saadaan soimaan ja siihenkin tarvitaan vaikka mitä lisä kirjastoja. Ei enempää paitsi kunnon etsinnällä. Siihen ei oikeen ole aikaa. Mutta kiitos kuitenkin :)

tuomas [18.01.2005 21:05:01]

#

No osaa noista asioista voisi hoitaa myös joidenkin .dll kirjastojen avulla (project -> references -> yritä etsiä jokin helppo käyttöinen kirjasto.) Joillakin asiat onnistuvat ihan yhdellä koodirivillä.. tosin ohjelman mukaan joutuu liittämään kyseisen dll:n joiden koot ovat joskus harmillisen isoja.

dooDle [19.01.2005 12:59:30]

#

Tiedän, mutta haluaisinkin tehdä sen nyt wintoosan kautta. Ei siis mitään ylimääräisiä kirjastoja.. Kuinka se muuten toimii. Siis kuinka ne kirjastot tai se mci juttelee niite tietokoneen sisällä olevien laitteiden kanssa?

esakom [19.01.2005 13:35:05]

#

pelkällä mci:llä ei taida tagien luku onnistua, vaan joudut lukemaan ne binääritasolla filestä oikeanlaisiin tietorakenteisiin. Tässä pätkä .NET koodia, joka lukee tageja, koko sample löytyy osoitteesta:
http://msdn.microsoft.com/msdnmag/issues/03/04/EditorsNote/default.aspx

Jos käytät VB6:tta, niin ton samplen perusteella saat selville että mitä pitää lukea ja minkälaiseen rakenteeseen.

Mainittu pätkä:

Private Function TagsFromFile() As Collection
        Dim sMPEGFile As FileStream
        Dim ba(15) As Byte
        Dim theTags As New Collection

        Try
            ' Open MP3 File
            sMPEGFile = New FileStream(Path, FileMode.Open)

            ' Read MP3 header info
            sMPEGFile.Read(ba, 0, 10)

            If (ba(0) = &H49) And (ba(1) = &H44) And (ba(2) = &H33) Then ' It's a proper MP3

            End If

            Dim theTag As Tag

            theTag = TagFromStream(sMPEGFile)

            Do While Not IsNothing(theTag.MTag)
                theTags.Add(theTag, theTag.MTag)
                theTag = New Tag
                theTag = TagFromStream(sMPEGFile)
            Loop

        Catch ex As Exception
        End Try

        sMPEGFile.Close()
        Return theTags
    End Function

Private Shared Function TagFromStream(ByVal sMPEG As Stream) As Tag
        Dim theTag As New Tag

        Dim ba() As Byte
        Dim ascii As New ASCIIEncoding

        ReDim ba(5)
        Try
            sMPEG.Read(ba, 0, 4)
            theTag.MTag = ascii.GetString(ba)

            If ba(0) = 0 Then Return Nothing

            sMPEG.Read(ba, 0, 4)
            theTag.MSize = (65536 * (ba(0) * 256 + ba(1))) + (ba(2) * 256 + ba(3))

            sMPEG.Read(ba, 0, 3)
            theTag.MFlag = ba(0) * 256 + ba(1)

            ReDim ba(theTag.MSize + 1)

            If theTag.MSize > 0 Then
                sMPEG.Read(ba, 0, theTag.MSize - 1)
                theTag.MData = ba

                If theTag.MTag.Substring(0, 1) = "T" Then
                    theTag.StrData = ascii.GetString(ba)
                End If
            End If
        Catch ex As Exception
        End Try

        Return theTag
    End Function

koodi mies [19.01.2005 15:24:10]

#

Toi mp3 soittimen teko näyttää aika vaikealta koska tarvii noin pitkän koodin pelkän id tagin lukemiseen..miten joku jaksaa kirjottaa noin pitkän??

esakom [19.01.2005 15:55:18]

#

soittaminen onnistuu ihan muutamalla koodirivillä, eikä tuo tagienkaan luku vaadi suhteessa paljoa kun monet kunnon ohjelmat on kuitenkin helposti monta tuhatta riviä koodia. Ja Microsoft ihan kaupalliselta pohjalta kirjoittelee noita sampleja... (yllä oleva koodi on siis ms:n samplen "ydin")

dooDle [19.01.2005 21:47:50]

#

Eihän toi niin pitkä oo.. mutta kun en tajuu oikeen.. Juup ehkä jotain, mutta toi .net on vielä aika tuntematon vaikka on melkein täyspäivästä tavallista vb:tä. Juu pitää kai alkaa sitten ettii tuolta planetsourcecoden viidakosta jotain hyödyntämis kelpoista. Yleensä siellä on satoja samanlaisia ja sit niitten joukossa yks helmi. Koitappa sitten löytää se sieltä. Pitäis vaan kaikki ladata ja kattoo et onko hyvä. Se on vaan aika tylsää puuhaa ja kun on vielä muitakin tähän tietokoneelle haluavia, nii ei oikein aika riitä.. mut kiitti vaan kovasti :)

esakom [20.01.2005 11:35:42]

#

VB6 esimerkki tagien lukuun (löysin saksalaiselta sivulta, mutta koodiahan ymmärtää) tätä koodia en ole itse testannut, kerro jos toimii =)

http://www.activevb.de/tipps/vb6tipps/tipp0331.html

eikä koodi ole edelleenkään pitkä:

Option Explicit

Private Type TagInfo
    Tag As String * 3
    Songname As String * 30
    artist As String * 30
    album As String * 30
    year As String * 4
    comment As String * 30
    genre As String * 1
End Type

Dim FileName As String
Dim CurrentTag As TagInfo

Private Sub Form_Load()
    Dim temp As String
    On Error Resume Next

    FileName = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") &  _
    "myMP3.mp3"

    Open FileName For Binary As #1
    With CurrentTag

        Get #1, FileLen(FileName) - 127, .Tag
        If Not .Tag = "TAG" Then
            Label8.Caption = "No Tag"
            Close #1
            Exit Sub
        End If

        Get #1, , .Songname
        Get #1, , .artist
        Get #1, , .album
        Get #1, , .year
        Get #1, , .comment
        Get #1, , .genre
        Close #1

        txtTitle = RTrim(.Songname)
        txtArtist = RTrim(.artist)
        txtAlbum = RTrim(.album)
        txtYear = RTrim(.year)
        txtComment = RTrim(.comment)

        temp = RTrim(.genre)
        txtGenreCode = Asc(temp)
        Combo1.ListIndex = CInt(txtGenreCode) - 1
    End With
    Close #1
End Sub

Mod. edit: helpompi lukea, kun käyttää kooditageja


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta