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?)
no paikka josta löydät varmaankin satoja toteutuksia:
http://www.planetsourcecode.com
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 :)
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.
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?
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
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??
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")
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 :)
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.