News:

Welcome to RetroCoders Community

Main Menu

what kind of music do you like?

Started by ron77, May 26, 2023, 11:37 AM

Previous topic - Next topic

aurel

maybe not but they are world the well known band of all times  ;)

INEXES ?
man at work
all from Australia... ;)

johnno56

Agreed...

.. and yet another pair of cool groups... ;)
May your journey be free of incident.  Live long and prosper.

__blackjack__

My favourite genres are Rock, Punk, Metal.  And music from demos and games, mainly from the C64, so I guess that genre is "Chiptunes".

Out of curiosity what the genre tags on the audio file collection on my computer have to say I've wrote a FreeBASIC program that counts the different genres of those files:
#include Once "dir.bi"
#include Once "glib.bi"

Const DirAttribMask = fbNormal Or fbDirectory Or fbHidden

Function DirExists(ByVal path As String) As Boolean
    Dim attrib As Integer
    
    path = Dir(RTrim(path, "/"), DirAttribMask, attrib)
    DirExists = path <> "" And (attrib And fbDirectory) <> 0
End Function

'Declare the stuff we need from libtag_c / TAG_C.DLL right here.
#inclib "tag_c"
Type Taglib_File As Any Ptr
Type Taglib_Tag As Any Ptr

Extern "C"
    Declare Function taglib_file_new(filename As Const ZString Ptr) _
        As Taglib_File
    Declare Sub taglib_file_free(file as TagLib_File)
    Declare Function taglib_file_is_valid(file As Const TagLib_File) As Boolean
    Declare Function taglib_file_tag(file As Const TagLib_File) As Taglib_Tag

    Declare Function taglib_tag_genre(tag As Const Taglib_Tag) As ZString Ptr
    Declare Sub taglib_tag_free_strings
End Extern

'Open an audio file.  Returns 0 if the file isn't a valid audio file
'understood by the TagLib library.
Function OpenFile(filename As Const String) As Taglib_File
    Dim file As Taglib_File
    
    file = taglib_file_new(filename)
    If file AndAlso taglib_file_is_valid(file) = 0 Then
        taglib_file_free file
        file = 0
    End If
    OpenFile = file
End Function

'Get the genre from the audio file.
Function GetGenre(file As Const Taglib_File) As String
    GetGenre = *taglib_tag_genre(taglib_file_tag(file))
    taglib_tag_free_strings
End Function


Type TItem
    genre As ZString Ptr  'Genre name.
    count As Integer      'Number of files with that genre.
    
    Declare Destructor()
End Type

Destructor TItem()
    g_free(genre)
End Destructor

'Compare by count (descending) and genre name (ascending).
Function CompareItem(a As Const Any Ptr, b As Const Any Ptr, _
                    userData As Any Ptr) As gint
    Dim itemA As Const TItem Ptr, itemB As Const TItem Ptr, result As Integer
    
    itemA = a: itemB = b: result = itemB->count - itemA->count
    If result = 0 Then result = g_strcmp0(itemA->genre, itemB->genre)
    CompareItem = result
End Function


'Count the given key.
Sub UpdateCounts(counts As GHashTable Ptr, key As String)
    Dim keyPtr As ZString Ptr, value As Any Ptr
    
    keyPtr = StrPtr(key): If keyPtr = 0 Then keyPtr = @""
    If g_hash_table_contains(counts, keyPtr) Then
        value = g_hash_table_lookup(counts, keyPtr)
    Else
        value = 0: keyPtr = g_strdup(keyPtr)
    End If
    g_hash_table_insert(counts, keyPtr, value + 1)
End Sub

'Move the data from the hash table into an array and destroy the hash table.
Sub MoveCountsToArray(counts As GHashTable Ptr, result() As TItem)
    Dim i As Integer
    Dim iter As GHashTableIter, key As ZString Ptr, value As Any Ptr
    
    If g_hash_table_size(counts) > 0 Then
        Redim result(g_hash_table_size(counts) - 1)

        i = 0
        g_hash_table_iter_init(@iter, counts)
        Do While g_hash_table_iter_next(@iter, @key, @value)
            With result(i)
                .genre = key: .count = CInt(value)
            End With
            i = i + 1
        Loop
    End If
    g_hash_table_destroy(counts)
End Sub


'Process the directories starting with given path recursively and populate the
'genre counter hash table.
Sub ProcessDirs(path As Const String, counts As GHashTable Ptr)
    Dim i As Integer
    Dim subdirs(Any) As String, filename As String, attrib As Integer
    Dim file As Taglib_File
    
    filename = Dir(path + "*", DirAttribMask, attrib)
    Do Until filename = ""
        If filename <> "." AndAlso filename <> ".." Then
            If attrib And fbDirectory Then
                i = UBound(subdirs) + 1
                Redim Preserve subdirs(i)
                subdirs(i) = filename
            Else
                file = OpenFile(path + filename)
                If file Then
                    UpdateCounts counts, Trim(GetGenre(file))
                    taglib_file_free file
                End If
            End If
        End If
        filename = Dir(attrib)
    Loop
    If UBound(subdirs) <> -1 Then
        For i = 0 To UBound(subdirs)
            ProcessDirs path + subdirs(i) + "/", counts
        Next
    End If
End Sub


Dim path As String, i As Integer, counts As GHashTable Ptr, items(Any) As TItem

path = Command$
If path = "" Then Print "No path given.": End
If Not DirExists(path) Then Print "'"; path; "' does not exist": End
If Right$(path, 1) <> "/" Then path = path + "/"

counts = g_hash_table_new(@g_str_hash, @g_str_equal)
ProcessDirs path, counts
MoveCountsToArray counts, items()
If UBound(items) <> -1 Then
    g_qsort_with_data(@items(0), UBound(items) + 1, SizeOf(TypeOf(items)), _
                      @CompareItem, 0)
    For i = 0 To UBound(items)
        With items(i)
            Print Using "####### "; .count;: Print *.genre
        End With
    Next
End If
Output:
  2346 Rock
  1538 Punk Rock
    877 
    689 Metal
    676 Punk
    558 Pop
    460 Alternative
    443 Soundtrack
    377 Ska
    338 Hard Rock
    338 Progressive Rock
    333 Thrash Metal
    297 Heavy Metal
    239 Crossover
    168 Reggae
    148 Alternative Rock
    144 Grunge
    144 Hardcore
    111 Psychobilly
    106 Alternative & Punk
    103 Experimental Rock
    102 Rock - Alternative/Funk
    93 Other
    83 Pop Rock
    78 Indie
    74 Electronic
    74 Latin
    70 Hip-Hop
    70 Jazz
    61 Classical
    60 Comedy
    58 Southern Rock
    53 Pop/Rock
    49 Classic Rock
    48 Country
    47 Punkrock
    46 Rockabilly
    45 Acid Jazz
    45 Classic
    43 Blues
    41 Acoustic
    40 Irish Folk / Punk Rock
    38 Altern Rock
    37 Hip Hop/Rap
    36 Stoner Rock
    35 Instrumental
    34 Nu Metal
    34 Rock/Pop
    33 Rock & Roll
    30 Swing
    28 Garage Rock
    28 Punk/Ska
    28 Unknown
    27 Celtic Punk
    26 Alternative Country
    25 Chanson
    24 Alternative Metal
    24 Industrial Metal
    24 Soul
    22 Punk Rock / Ska
    22 Rock / Pop
    18 BritPop
    18 Pop / Rock / Ska
    18 Satire
    17 Irish Punk
    17 R&B
    16 Darkwave
    16 Folk
    16 Indie Rock
    16 Irish Folk Punk
    16 Post Grunge
    16 Punk Rock/Irish Folk
    16 Solo Piano
    16 Sonstiges
    15 Cello Metal
    15 Christmas
    15 Funk Metal
    15 Indiecountry
    15 Rap Metal
    14 Blues Rock
    14 Gothic
    14 Grunge / Metal
    14 Hardcore Punk
    13 Christmas Punk
    13 Classical Metal
    13 Death Metal
    13 Deathpunk
    13 Experimental Metal
    13 Funk
    13 Glamrock
    13 Horror Punk
    13 Psychedelic Rock
    13 Rap Rock
    13 Street Punk
    12 8Bit
    12 Ambient
    12 General Alternative Rock
    12 Metal+Latin
    12 Symphonic metal
    12 Unbekannt
    11 Bachata
    11 Otros
    10 Electronica
    10 Gothic Rock
    10 Heavy Metal/Hard Rock
    10 Trip-Hop
      9 Trance
      9 genre
      8 Chamber Music
      8 Cult
      8 Latin Rock
      5 default
      4 Oldies
      4 World
      3 Bass
      3 Big Beat
      3 Talk Radio
      2 Abstract
      2 Ballad
      2 Garage
      2 Hiphop
      2 Noise
      2 Skatepunk
      1 Chillout
      1 Disco
      1 Drum & Bass
      1 Folk/Rock
      1 Gangsta
      1 Gospel & Religious
      1 Industrial
      1 Native American
      1 Neu
      1 New Wave
      1 Noise-Rock
      1 Podcast
      1 Singer-Songwriter
      1 Top 40
      1 Unclassifiable
      1 rock
      1 world
,,Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." —Brian W. Kernighan