|
Oops, no sorry. Will repost under the correct tab...
|
|
|
|
|
hey..i was able to do it...i used this code
<pre>Private Sub lblsave_Click(sender As Object, e As EventArgs) Handles lblsave.Click
If ListBox1.SelectedItem = "" Then
Dim r8 As DialogResult = MessageBox.Show(Me, "No file selected!",
"Select files!", MessageBoxButtons.OK)
Else
Dim rw As DialogResult = MessageBox.Show(Me, "SAVE all TAGs?",
"Save tags!", MessageBoxButtons.OKCancel)
If rw = DialogResult.OK Then
If CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False And CheckBox5.Checked = False And CheckBox6.Checked = False And CheckBox7.Checked = False And CheckBox8.Checked = False Then
Dim r8 As DialogResult = MessageBox.Show(Me, "Select a tag to enter!",
"Select tags!", MessageBoxButtons.OK)
Else
Dim ite = ListBox1.SelectedItems
For Each item In ite
myMp3.Read(FolderBrowserDialog1.SelectedPath & "\" & item)
If CheckBox1.Checked = True Then
myMp3.ID3v2Tag.Title = label1.Text
myMp3.Write()
End If
If CheckBox2.Checked = True Then
myMp3.ID3v2Tag.Artist = Label2.Text
myMp3.Write()
End If
If CheckBox3.Checked = True Then
myMp3.ID3v2Tag.Album = Label3.Text
myMp3.Write()
End If
If CheckBox4.Checked = True And Label4.Text <> "" Then
On Error Resume Next
myMp3.ID3v2Tag.Year = Short.Parse(Label4.Text)
myMp3.Write()
End If
If CheckBox5.Checked = True And label5.Text <> "" Then
On Error Resume Next
myMp3.ID3v2Tag.TrackNum = Short.Parse(label5.Text)
myMp3.Write()
End If
If CheckBox6.Checked = True Then
myMp3.ID3v2Tag.Comments = label6.Text
myMp3.Write()
End If
If CheckBox7.Checked = True Then
myMp3.ID3v2Tag.Genre = label7.Text
myMp3.Write()
End If
If CheckBox8.Checked = True Then
If label10.Text <> "" Then
Dim pics = myMp3.ID3v2Tag.Frames.GetFrames(CommonMultipleInstanceID3v2FrameTypes.Picture)
myMp3.ID3v2Tag.Frames.Remove(pics)
myMp3.Write()
Dim AlbumArt As ID3v2PictureFrame = New ID3v23PictureFrame(CType(System.Drawing.Bitmap.FromFile(label10.Text), System.Drawing.Bitmap), PictureTypes.CoverFront, "Attached picture", TextEncodingTypes.ISO88591)
myMp3.ID3v2Tag.Frames.Add(AlbumArt)
myMp3.Write()
Else
Dim re As DialogResult = MessageBox.Show(Me, "Could not write image!",
"Tagged files!", MessageBoxButtons.OK)
End If
End If
Next item
End If
End If
End If
Dim r9 As DialogResult = MessageBox.Show(Me, "Operation complete!",
"Tagged files!", MessageBoxButtons.OK)
End Sub
|
|
|
|
|
No that is definitely not the way to do it. You should set the tags as and when the user edits them*, and then save the entire set when he/she presses Save. The way you are doing it the user has no way to cancel the changes.
*You should not need all those checkboxes. Just use an event handler for when the user changes any of the tag entries. As I said yesterdsay, and as clearly demonstrated in your video, you are going about this whole project the wrong way. And until you step back and take on board some of the suggestions you have been given, and start utilising proper functions and subroutines, you will never get your "mass edit" to work.
|
|
|
|
|
|
The problem is that it does not returns any error...it simply does not perform the action required!
|
|
|
|
|
According to the documentation, the code I supplied is 100% correct. Did you try and log it out to your console or create some form of message to see what it does when you call the .Write function? Maybe one of your variables (textbox's) has an empty value?
|
|
|
|
|
Leave it....thanks for the help!
|
|
|
|
|
Hi...i cannot write the Album Art..here is the code im using:
Dim AlbumArt As ID3v2PictureFrame = New ID3v23PictureFrame(System.Drawing.Bitmap.FromFile("E:\teste\img.jpg"), PictureTypes.CoverFront, "Attached picture", TextEncodingTypes.ISO88591)
AlbumArt.Picture = PictureBox1.Image
myMp3.ID3v2Tag.Frames.Add(AlbumArt)
Thanks!!!
|
|
|
|
|
You're going to have to ask whoever wrote that library.
|
|
|
|
|
Puzzling???
Clipboard image different with different version of vision basic
Clipboard.SetImage(New Bitmap(Clipboard.GetImage, newWidth, newHeight))
Visual basic 2010 express (32bit). Size of image is as per setting newWidth, newHeight (perfect)
Visual Studio 2022 (64bit). Size of image will not change with the newWidth, newHeight (about 1/3 of previous)
Is there any issue related to 32-64bit?
Appreciate very much any helps. Thank you. Lean Chew
|
|
|
|
|
Given that we do not have access to the image, and you have not shown any of the code you are using, it is impossible to guess.
[edit]
I just tried your code and the image was correctly resized. You need to provide more information.
[/edit]
modified 9-Jun-23 9:13am.
|
|
|
|
|
Thank you Richard and Gerry.
Coding. Capture screen shot to clipboard and paste to RichTextbox inside PrintBuffer
Same coding using VisualBasic 2010 (32Bit) and Visual Studio 2022 (64Bit)
The image on VB 2010 is perfect and size change with the newWidth, newHeight but with VS 2022 the image is about 1/3 size of previous and will not response to change in newWidth, NewHeight.
Dim newWidth,newHeight as integer
newWeight=710: newHeight=430
Clipboard.Clear()
SendKeys.SendWait("%{PRTSC}"): Call TimeDelay(100)
If IsNothing(Clipboard.GetImage) = False Then
Clipboard.SetImage(New Bitmap(Clipboard.GetImage, newWidth, newHeight))
PrintBuffer = DataToPrint + vbCrLf
frmPrint.ShowDialog()
|
|
|
|
|
I have just tried that again and it works exactly correctly, the image is resized to the values you give above. You can test this for yourself by running the ClipBoard code above, and pasting into one of the paint applications to check the new size. The problem you have is most likely to do with your printing code where you are not adjusting the mapping to account for the different point density between screen and printer. I have only ever done this using the Windows GDI library, so am not sure how you manage it in VB.NET. I suggest you open a new question asking for help on that specific subject.
|
|
|
|
|
Thanks again Richard.
The coding works perfect using Visual Basic 2010, size of image change as defined. However when the same coding used on Visual Studio 2022, the image size will not change with setting, about 1/3 the size by comparison. Not sure if it has anything to do with 32-64Bit platform or just another one of those bugs. My opinion is that Visual Studio 2022 is no good, It is operating like a degraded VBasic. I changed from 2010 to 2022 thinking that the 64Bit enviroment will work and run better. Disappointment. Looks like I will stay with the 2010 even though it is 32Bit. Thanks again
|
|
|
|
|
Well, as I have said twice now (and I just checked again), your code works perfectly with Visual Studio 2022. So whatever you are doing, and however you are measuring the image, is not the same as I am. So without more information it is impossible to make a useful suggestion.
And, to be honest, Visual Studio 2022 is one of the best IDE's I have worked with, and definitely better than the Express versions going back to 2005 and before.
|
|
|
|
|
2010 to 2022 is a big leap. The VS 2022 designer looks at the possible screen sizes / resolutions more closely; using them as defaults during the design. (No idea what "phase" you are talking about)
My current "default design surface" is: "13.5 in. Surface Book (3000x2000)" ... for no obvious reason since my monitors are 27 and 45 in; though it doesn't impact the way I actually use what create.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Hello all...im new and im not even a coder. I just do some apps once in a while to keep the head busy and exercise my mind.
im actually trying to make an mp3 tagger. All is good but i cannot tag new files..only pre-tagged files...it says it cannot convert string to byte in the "Track" and "Genre" fields.
This is the class im using
<pre>Imports System.IO
Public Class MP3ID3v1
Public Sub New(Optional ByVal Filename As String = "")
MyBase.New()
If (Filename <> "") Then Me.Filename = Filename
End Sub
#Region " Declarations "
Public Enum Genres As Byte
Blues = 0
ClassicRock = 1
Country = 2
Dance = 3
Disco = 4
Funk = 5
Grunge = 6
HipHop = 7
Jazz = 8
Metal = 9
NewAge = 10
Oldies = 11
Other = 12
Pop = 13
RnB = 14
Rap = 15
Reggae = 16
Rock = 17
Techno = 18
Industrial = 19
Alternative = 20
Ska = 21
DeathMetal = 22
Pranks = 23
Soundtrack = 24
EuroTechno = 25
Ambient = 26
TripHop = 27
Vocal = 28
JazzFunk = 29
Fusion = 30
Trance = 31
Classical = 32
Instrumental = 33
Acid = 34
House = 35
Game = 36
SoundClip = 37
Gospel = 38
Noise = 39
AlternRock = 40
Bass = 41
Soul = 42
Punk = 43
Space = 44
Meditative = 45
InstrumentalPop = 46
InstrumentalRock = 47
Ethnic = 48
Gothic = 49
Darkwave = 50
TechnoIndustrial = 51
Electronic = 52
PopFolk = 53
Eurodance = 54
Dream = 55
SouthernRock = 56
Comedy = 57
Cult = 58
Gangsta = 59
Top40 = 60
ChristianRap = 61
PopFunk = 62
Jungle = 63
NativeAmerican = 64
Cabaret = 65
NewWave = 66
Psychadelic = 67
Rave = 68
Showtunes = 69
Trailer = 70
LoFi = 71
Tribal = 72
AcidPunk = 73
AcidJazz = 74
Polka = 75
Retro = 76
Musical = 77
RocknRoll = 78
HardRock = 79
None = 255
End Enum
Public Enum FrameTypes As Byte
Title = 0
Artist = 1
Album = 2
Year = 3
Track = 4
Comment = 5
Genre = 6
End Enum
#End Region
#Region " Properties "
Private mstrFilename As String
Public Property Filename() As String
Get
Return mstrFilename
End Get
Set(ByVal Value As String)
Dim objFile As File
If (objFile.Exists(Value)) Then
mstrFilename = Value
Refresh()
Else
Throw New System.IO.FileLoadException("The specified file does not exist", Value)
End If
End Set
End Property
Private mblnTagExists As Boolean
Public ReadOnly Property TagExists() As Boolean
Get
Return mblnTagExists
End Get
End Property
Private mobjFrame(7) As Object
Public Property Frame(ByVal FrameType As FrameTypes)
Get
Return mobjFrame(FrameType)
End Get
Set(ByVal Value)
mobjFrame(FrameType) = Value
End Set
End Property
#End Region
#Region " Methods "
Public Sub Refresh()
Dim strTag As New String(" ", 3)
Dim strTitle As New String(" ", 30)
Dim strArtist As New String(" ", 30)
Dim strAlbum As New String(" ", 30)
Dim strYear As New String(" ", 4)
Dim strComment As New String(" ", 28)
Dim bytDummy As Byte
Dim bytTrack As Byte
Dim bytGenre As Byte
Dim intFile As Integer = FreeFile()
FileOpen(intFile, mstrFilename, OpenMode.Binary, OpenAccess.Read, OpenShare.LockWrite)
Dim lngLOF As Long = LOF(intFile)
If (lngLOF > 128) Then
FileGet(intFile, strTag, lngLOF - 127, True)
If (strTag.ToUpper <> "TAG") Then
mblnTagExists = False
mobjFrame(0) = ""
mobjFrame(1) = ""
mobjFrame(2) = ""
mobjFrame(3) = ""
mobjFrame(4) = ""
mobjFrame(5) = ""
mobjFrame(6) = ""
Else
mblnTagExists = True
FileGet(intFile, strTitle)
FileGet(intFile, strArtist)
FileGet(intFile, strAlbum)
FileGet(intFile, strYear)
FileGet(intFile, strComment)
FileGet(intFile, bytDummy)
FileGet(intFile, bytTrack)
FileGet(intFile, bytGenre)
mobjFrame(0) = strTitle
mobjFrame(1) = strArtist
mobjFrame(2) = strAlbum
mobjFrame(3) = strYear
mobjFrame(4) = bytTrack
mobjFrame(5) = strComment
mobjFrame(6) = bytGenre
End If
End If
FileClose(intFile)
End Sub
Public Sub Update()
Dim strTag As New String(" ", 3)
Dim strTitle As New String(" ", 30)
Dim strArtist As New String(" ", 30)
Dim strAlbum As New String(" ", 30)
Dim strYear As New String(" ", 4)
Dim strComment As New String(" ", 28)
Dim bytDummy As Byte
Dim bytTrack As Byte
Dim bytGenre As Byte
Dim intFile As Integer = FreeFile()
FileOpen(intFile, mstrFilename, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockWrite)
Dim lngLOF As Long = LOF(intFile)
If (lngLOF > 0) Then
If (lngLOF > 128) Then
FileGet(intFile, strTag, lngLOF - 127)
If (strTag.ToUpper <> "TAG") Then
Seek(intFile, lngLOF)
strTag = "TAG"
FilePut(intFile, strTag)
End If
strTitle = LSet(mobjFrame(0), Len(strTitle))
strArtist = LSet(mobjFrame(1), Len(strArtist))
strAlbum = LSet(mobjFrame(2), Len(strAlbum))
strYear = LSet(mobjFrame(3), Len(strYear))
bytTrack = mobjFrame(4)
strComment = LSet(mobjFrame(5), Len(strComment))
bytGenre = mobjFrame(6)
FilePut(intFile, strTitle)
FilePut(intFile, strArtist)
FilePut(intFile, strAlbum)
FilePut(intFile, strYear)
FilePut(intFile, strComment)
FilePut(intFile, bytDummy)
FilePut(intFile, bytTrack)
FilePut(intFile, bytGenre)
End If
End If
FileClose(intFile)
End Sub
#End Region
End Class
and this is my code:
<pre>Imports System.IO
Imports System.Windows.Forms.VisualStyles.VisualStyleElement
Imports System.Resources.ResXFileRef
Imports System.Text
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
ListBox1.Items.Clear()
Dim fileNames = My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath, FileIO.SearchOption.SearchTopLevelOnly, "*.mp3")
For Each fileName As String In fileNames
Dim result As String = Path.GetFileName(fileName)
ListBox1.Items.Add(result)
Next
End If
ComboBox1.DataSource = System.Enum.GetValues(GetType(MP3ID3v1.Genres))
Label1.Text = "Title :"
Label2.Text = "Artist :"
Label3.Text = "Album :"
Label4.Text = "Year :"
Label5.Text = "Track :"
Label6.Text = "Comment :"
Label7.Text = "Genre : "
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
If FolderBrowserDialog1.SelectedPath = "" Then
Dim r8 As DialogResult = MessageBox.Show(Me, "You need to load a folder.",
"Load Files", MessageBoxButtons.OK)
Else
Dim fileNames = My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath, FileIO.SearchOption.SearchTopLevelOnly, "*.mp3")
For Each fileName As String In fileNames
Dim result As String = Path.GetFileName(fileName)
ListBox1.Items.Add(result)
Next
End If
ComboBox1.DataSource = System.Enum.GetValues(GetType(MP3ID3v1.Genres))
Label1.Text = "Title :"
Label2.Text = "Artist :"
Label3.Text = "Album :"
Label4.Text = "Year :"
Label5.Text = "Track :"
Label6.Text = "Comment :"
Label7.Text = "Genre : "
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.DataSource = System.Enum.GetValues(GetType(MP3ID3v1.Genres))
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Dim objMP3V1 As New MP3ID3v1(FolderBrowserDialog1.SelectedPath & "\" & ListBox1.SelectedItem)
If (objMP3V1.TagExists) Then
Label1.Text = "Title : " & (objMP3V1.Frame(MP3ID3v1.FrameTypes.Title))
Label2.Text = "Artist : " & (objMP3V1.Frame(MP3ID3v1.FrameTypes.Artist))
Label3.Text = "Album : " & (objMP3V1.Frame(MP3ID3v1.FrameTypes.Album))
Label4.Text = "Year : " & (objMP3V1.Frame(MP3ID3v1.FrameTypes.Year))
Dim TR = (objMP3V1.Frame(MP3ID3v1.FrameTypes.Track))
Label5.Text = "Track : " & (TR.ToString)
Label6.Text = "Comment : " & (objMP3V1.Frame(MP3ID3v1.FrameTypes.Comment))
Dim GR As MP3ID3v1.Genres = (objMP3V1.Frame(MP3ID3v1.FrameTypes.Genre))
Label7.Text = "Genre : " & (GR.ToString)
Else
Label1.Text = "Title :"
Label2.Text = "Artist :"
Label3.Text = "Album :"
Label4.Text = "Year :"
Label5.Text = "Track :"
Label6.Text = "Comment :"
Label7.Text = "Genre : "
ComboBox1.DataSource = System.Enum.GetValues(GetType(MP3ID3v1.Genres))
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
If ListBox1.Text = "" Then
Dim r8 As DialogResult = MessageBox.Show(Me, "No File Selected!",
"Select Files", MessageBoxButtons.OK)
Else
Dim objMP3V1 As New MP3ID3v1(FolderBrowserDialog1.SelectedPath & "\" & ListBox1.SelectedItem)
If CheckBox1.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Title) = TextBox1.Text
objMP3V1.Update()
End If
If CheckBox2.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Artist) = TextBox2.Text
objMP3V1.Update()
End If
If CheckBox3.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Album) = TextBox3.Text
objMP3V1.Update()
End If
If CheckBox4.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Year) = TextBox4.Text
objMP3V1.Update()
End If
If CheckBox5.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Track) = TextBox5.Text
objMP3V1.Update()
End If
If CheckBox6.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Comment) = TextBox6.Text
objMP3V1.Update()
End If
If CheckBox7.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Genre) = ComboBox1.SelectedValue
objMP3V1.Update()
End If
Dim r9 As DialogResult = MessageBox.Show(Me, "Operation Complete!",
"Tagged Files!", MessageBoxButtons.OK)
End If
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
ListBox1.Items.Clear()
ComboBox1.DataSource = System.Enum.GetValues(GetType(MP3ID3v1.Genres))
End Sub
End Class
What am i doing wrong?..Thanks!!
Duarte
|
|
|
|
|
Just dumping all your code and expecting someone to fix it is quite rude. We have no idea where the error occurs. So please edit the question, remove all the code that is not relevant to the problem, mark the point where the error occurs, and include the complete text of the error message.
|
|
|
|
|
Hi..sorry..i posted all the code cause i do not know what is happenning at all...
anyway...thanks and i can resume yes...
when i try to save the tags:
Dim bytTrack As Byte
Dim bytGenre As Byte
the error returns it cannot convert String to Byte..but this is only happenning in new files..if i use a pretagged file all seems good.
im using this method:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
If ListBox1.Text = "" Then
Dim r8 As DialogResult = MessageBox.Show(Me, "No File Selected!",
"Select Files", MessageBoxButtons.OK)
Else
Dim objMP3V1 As New MP3ID3v1(FolderBrowserDialog1.SelectedPath & "\" & ListBox1.SelectedItem)
If CheckBox1.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Title) = TextBox1.Text
objMP3V1.Update()
End If
If CheckBox2.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Artist) = TextBox2.Text
objMP3V1.Update()
End If
If CheckBox3.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Album) = TextBox3.Text
objMP3V1.Update()
End If
If CheckBox4.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Year) = TextBox4.Text
objMP3V1.Update()
End If
If CheckBox5.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Track) = TextBox5.Text
objMP3V1.Update()
End If
If CheckBox6.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Comment) = TextBox6.Text
objMP3V1.Update()
End If
If CheckBox7.Checked = True Then
objMP3V1.Frame(MP3ID3v1.FrameTypes.Genre) = ComboBox1.SelectedValue
objMP3V1.Update()
End If
Dim r9 As DialogResult = MessageBox.Show(Me, "Operation Complete!",
"Tagged Files!", MessageBoxButtons.OK)
End If
End Sub
|
|
|
|
|
You are trying to store the text strings into both those fields which are (presumably) byte types. So you need to convert the strings into their correct value types first. As someone who claims not to be a programmer, that is a lot of code that you have written.
|
|
|
|
|
Thanks...i use a lot of snippets too....so how do i convert them properly?..i already tried some methods but i could not do it!
anyway..the code is functionning for pre-tagged files...i just cannot write the properties into new files
|
|
|
|
|
I don't know how you convert them because I am not clear on what type the target is. So you need to check the definition of those fields and use an appropriate method of the Convert Class (System) | Microsoft Learn[^].
|
|
|
|
|
well..they are just the Track ID and Genre ID in an mp3 file...can i change the main code and switch them to string?...this is why i posted the full code on the start!!!
|
|
|
|
|
I don't know the answer. You first need to know what actual type they are in the file: Byte, String, Int32, Int64, Bool etc. You then need to set a matching type in your code. Then when you get the user's selection, you may or may not need to convert what the user chooses into the appropriate type. But all that detail should have been decided before you put all this code together. And I am afraid there is far too much for anyone other than you, to know where to do this.
|
|
|
|
|
i think i can do the conversion here:
Dim strTag As New String(" ", 3)
Dim strTitle As New String(" ", 30)
Dim strArtist As New String(" ", 30)
Dim strAlbum As New String(" ", 30)
Dim strYear As New String(" ", 4)
Dim strComment As New String(" ", 28)
Dim bytDummy As Byte
Dim bytTrack As Byte
Dim bytGenre As Byte
setting the "as byte" to "new string" but i do not know about the numbers here??!!!
|
|
|
|
|