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 FunctionToi 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 SubMod. edit: helpompi lukea, kun käyttää kooditageja
Aihe on jo aika vanha, joten et voi enää vastata siihen.