Upgrade to go 1.21, upgrade dependencies

This commit is contained in:
DataHoarder 2023-10-15 20:10:59 +02:00
parent ea88eaa4bf
commit c1d7d181cd
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
5 changed files with 141 additions and 100 deletions

View file

@ -5,7 +5,10 @@ package cgo
#include "lemire.h"
*/
import "C"
import "fmt"
import (
"fmt"
"unsafe"
)
type LemireMaxClampedFilter struct {
ptr *C.LemireMaxClampedFilter
@ -23,7 +26,7 @@ func NewLemireMaxClampedFilter(windowSize, dataLength int) (*LemireMaxClampedFil
}
func (l *LemireMaxClampedFilter) Filter(data, max []float32) {
C.lemire_max_clamped_filter(l.ptr, (*C.float)(&data[0]), C.size_t(len(data)), (*C.float)(&max[0]))
C.lemire_max_clamped_filter(l.ptr, (*C.float)(unsafe.SliceData(data)), C.size_t(len(data)), (*C.float)(unsafe.SliceData(max)))
}
func (l *LemireMaxClampedFilter) Close() {

16
go.mod
View file

@ -1,15 +1,15 @@
module git.gammaspectra.live/S.O.N.G/Hibiki
go 1.18
go 1.21
require (
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230128142054-5241fcfde7f2
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20221212173659-6476c8414bc3
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230409113125-69b8586d2a7d
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20231015144851-f1a23bdf2bf9
github.com/cocoonlife/testify v0.0.0-20160218172820-792cc1faeb64
)
require (
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20221130070259-2ac188033aab // indirect
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20230303065636-594dc137ca25 // indirect
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20230128024257-7bab2d4f9384 // indirect
git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220910135048-823922bd661a // indirect
git.gammaspectra.live/S.O.N.G/go-mp3 v0.0.0-20221206093437-a465b24607a2 // indirect
@ -19,13 +19,13 @@ require (
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20230128225810-b55589f8c12a // indirect
git.gammaspectra.live/S.O.N.G/minimp3 v0.0.0-20230128141646-872fc9482587 // indirect
git.gammaspectra.live/S.O.N.G/voaac-go v0.0.0-20221206094054-e088a49a96bc // indirect
github.com/Eyevinn/mp4ff v0.33.2 // indirect
github.com/Eyevinn/mp4ff v0.33.3-0.20230130064723-aba5e8eeb8a6 // indirect
github.com/dh1tw/gosamplerate v0.1.2 // indirect
github.com/icza/bitio v1.1.0 // indirect
github.com/jfreymuth/oggvorbis v1.0.4 // indirect
github.com/jfreymuth/oggvorbis v1.0.5 // indirect
github.com/jfreymuth/vorbis v1.0.2 // indirect
github.com/klauspost/cpuid v1.3.1 // indirect
github.com/mewkiz/pkg v0.0.0-20220820102221-bbbca16e2a6c // indirect
github.com/mewkiz/pkg v0.0.0-20230226050401-4010bf0fec14 // indirect
github.com/viert/go-lame v0.0.0-20201108052322-bb552596b11d // indirect
golang.org/x/exp v0.0.0-20230127193734-31bee513bff7 // indirect
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
)

57
go.sum
View file

@ -1,7 +1,7 @@
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230128142054-5241fcfde7f2 h1:T7Pv4ECyM7qSbGHPJDKs3l+GStxhjsRawfMES5FyZNE=
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230128142054-5241fcfde7f2/go.mod h1:8oPZ22PyYsS3tRpN/0rjqy24FKXDp+nuWW7ALdMEfKY=
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20221130070259-2ac188033aab h1:1jKDhlDQK6hzR6KulALSYZTPgiCthL8UqufYXCRSuRo=
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20221130070259-2ac188033aab/go.mod h1:sYjxqsHurCJUzQQiSUNZbjW8st2fiD3kLxO08gBqmW8=
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230409113125-69b8586d2a7d h1:1aYGx/yl8rTkesAclko8Az9B0eDoU0Ip9RQRRtiacig=
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20230409113125-69b8586d2a7d/go.mod h1:OQgFlHY/0QWSw+W/mQ366XqMI5OMdGaPuCvPi/wTeqM=
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20230303065636-594dc137ca25 h1:vaNlo2n2JVdnPb2SAYidGu3auYBc7xElsuh+/ixMQ/8=
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20230303065636-594dc137ca25/go.mod h1:qaexeZ64kRn9D331LaP1nwoQoZZ4UvCJfwnkjWt3HPw=
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20230128024257-7bab2d4f9384 h1:zKrLQZVLM5RoOywaxINIoeVOWRnMjrRKuf6R07G5h1I=
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20230128024257-7bab2d4f9384/go.mod h1:DL2pznFXuNVoBk+VOSKA3Udl3xOQLkfprw5n19N9BsY=
git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220910135048-823922bd661a h1:JQaryqLtNZn1jydhVc7CzcAvO8ZNB4jeZ1B5gJbHWUU=
@ -14,16 +14,16 @@ git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 h1:ITV
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6/go.mod h1:cobkT8u8vq/+ngLy+feKS2M2ZT2HoCec5riA/0Cex3Q=
git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0 h1:kZA/fy9BhBgNGjY8OlQbIR4xkq9fmIeRQ+sXZ+m9Ic4=
git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0/go.mod h1:EZl7z0vfpaiu0ykpEkk6dh59XxBgWxAh4QPCCnkhICE=
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20221212173659-6476c8414bc3 h1:MgjEzhwrqnrYAPPwSMwX2a95qRbfcixxO7QkIeAs610=
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20221212173659-6476c8414bc3/go.mod h1:h9FLBSwTFtaj4Ek1PGEBvO3XsL24d9NkdWRU+6yoNnY=
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20231015144851-f1a23bdf2bf9 h1:R8cHr/QD4ncnmKqzUr37Bq/ElOcHhiDlrtwGy6mTC7A=
git.gammaspectra.live/S.O.N.G/goborator v0.0.0-20231015144851-f1a23bdf2bf9/go.mod h1:lcoiS3rsFI9Q3nkNjegxIyVRrLIWCMK4Ju8JzlyYaQw=
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20230128225810-b55589f8c12a h1:Suhx/0ER6JCqp58BRiay6lEBjYscWYKMMI9SaVy2XnE=
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20230128225810-b55589f8c12a/go.mod h1:/po1QgOh3xynbvi4sxdY6Iw8m5WPJfGGmry2boZD8fs=
git.gammaspectra.live/S.O.N.G/minimp3 v0.0.0-20230128141646-872fc9482587 h1:yCfo8C7ANblOn5FEZLpkJZDl0v8OL/jOh3lIIe+v1fo=
git.gammaspectra.live/S.O.N.G/minimp3 v0.0.0-20230128141646-872fc9482587/go.mod h1:B34pwapfc0f6be6rJYg37xDeFPPB0bSyH0+DYM1lyEE=
git.gammaspectra.live/S.O.N.G/voaac-go v0.0.0-20221206094054-e088a49a96bc h1:57tqeyhK5ypviBHumVxdhiphsAX3nJXli6Ni/1+6Jn4=
git.gammaspectra.live/S.O.N.G/voaac-go v0.0.0-20221206094054-e088a49a96bc/go.mod h1:y8tX6ZPpGKVO2uso29/q5XW4r8/lTc5QRjPOwDRVMNk=
github.com/Eyevinn/mp4ff v0.33.2 h1:6b4OCWyBQim+VrL3bNYkqxumnqGdJEGnls2JBMWvKLs=
github.com/Eyevinn/mp4ff v0.33.2/go.mod h1:w/6GSa5ghZ1VavzJK6McQ2/flx8mKtcrKDr11SsEweA=
github.com/Eyevinn/mp4ff v0.33.3-0.20230130064723-aba5e8eeb8a6 h1:Em3hPepz8RAvHOaeMw9i4rn1jgFcNzpdmVCj26Oi/UM=
github.com/Eyevinn/mp4ff v0.33.3-0.20230130064723-aba5e8eeb8a6/go.mod h1:w/6GSa5ghZ1VavzJK6McQ2/flx8mKtcrKDr11SsEweA=
github.com/cocoonlife/testify v0.0.0-20160218172820-792cc1faeb64 h1:LjPYdzoFSAJ5Tr/ElL8kzTJghXgpnOjJVbgd1UvZB1o=
github.com/cocoonlife/testify v0.0.0-20160218172820-792cc1faeb64/go.mod h1:LoCAz53rbPcqs8Da2BjB/yDy4gxMtiSQmqnYI/DGH+U=
github.com/d4l3k/messagediff v1.2.2-0.20190829033028-7e0a312ae40b/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo=
@ -35,20 +35,45 @@ github.com/icza/bitio v1.1.0 h1:ysX4vtldjdi3Ygai5m1cWy4oLkhWTAi+SyO6HC8L9T0=
github.com/icza/bitio v1.1.0/go.mod h1:0jGnlLAx8MKMr9VGnn/4YrvZiprkvBelsVIbA9Jjr9A=
github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6 h1:8UsGZ2rr2ksmEru6lToqnXgA8Mz1DP11X4zSJ159C3k=
github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA=
github.com/jfreymuth/oggvorbis v1.0.4 h1:cyJCd0XSoxkKzUPmqM0ZoQJ0h/WbhfyvUR+FTMxQEac=
github.com/jfreymuth/oggvorbis v1.0.4/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII=
github.com/jfreymuth/oggvorbis v1.0.5 h1:u+Ck+R0eLSRhgq8WTmffYnrVtSztJcYrl588DM4e3kQ=
github.com/jfreymuth/oggvorbis v1.0.5/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII=
github.com/jfreymuth/vorbis v1.0.2 h1:m1xH6+ZI4thH927pgKD8JOH4eaGRm18rEE9/0WKjvNE=
github.com/jfreymuth/vorbis v1.0.2/go.mod h1:DoftRo4AznKnShRl1GxiTFCseHr4zR9BN3TWXyuzrqQ=
github.com/jszwec/csvutil v1.5.1/go.mod h1:Rpu7Uu9giO9subDyMCIQfHVDuLrcaC36UA4YcJjGBkg=
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
github.com/mewkiz/pkg v0.0.0-20220820102221-bbbca16e2a6c h1:6AzCfQNCql3Of8ee1JY6dufssFnBWJYuCVrGcES84AA=
github.com/mewkiz/pkg v0.0.0-20220820102221-bbbca16e2a6c/go.mod h1:J/rDzvIiwiVpv72OEP8aJFxLXjGpUdviIIeqJPLIctA=
github.com/mewkiz/pkg v0.0.0-20230226050401-4010bf0fec14 h1:tnAPMExbRERsyEYkmR1YjhTgDM0iqyiBYf8ojRXxdbA=
github.com/mewkiz/pkg v0.0.0-20230226050401-4010bf0fec14/go.mod h1:QYCFBiH5q6XTHEbWhR0uhR3M9qNPoD2CSQzr0g75kE4=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/viert/go-lame v0.0.0-20201108052322-bb552596b11d h1:LptdD7GTUZeklomtW5vZ1AHwBvDBUCZ2Ftpaz7uEI7g=
github.com/viert/go-lame v0.0.0-20201108052322-bb552596b11d/go.mod h1:EqTcYM7y4JlSfeTI47pmNu3EZQuCuLQefsQyg1Imlz8=
golang.org/x/exp v0.0.0-20230127193734-31bee513bff7 h1:pXR8mGh4q8ooBT7HXruL4Xa2IxoL8XZ6lOgXY/0Ryg8=
golang.org/x/exp v0.0.0-20230127193734-31bee513bff7/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/image v0.0.0-20190220214146-31aff87c08e9/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View file

@ -6,6 +6,8 @@ import (
"git.gammaspectra.live/S.O.N.G/Hibiki/utilities"
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
"git.gammaspectra.live/S.O.N.G/goborator"
"runtime"
"unsafe"
)
type EventPointProcessor struct {
@ -28,6 +30,7 @@ type EventPointProcessor struct {
maxHorizontal []float32
bandNumber int
gaborator *goborator.Gaborator
pinner runtime.Pinner
}
func NewEventPointProcessor(instance *Instance) (*EventPointProcessor, error) {
@ -60,6 +63,7 @@ func NewEventPointProcessor(instance *Instance) (*EventPointProcessor, error) {
ob.maxMagnitudes = make([][]float32, ob.maxFilterWindowSizeTime)
for i := range ob.maxMagnitudes {
ob.maxMagnitudes[i] = make([]float32, ob.bandNumber)
ob.pinner.Pin(unsafe.SliceData(ob.maxMagnitudes[i]))
}
ob.maxHorizontal = make([]float32, ob.bandNumber)
@ -85,12 +89,17 @@ func (e *EventPointProcessor) GetEventPoints() []EventPoint {
return e.eventPoints
}
func (e *EventPointProcessor) Process(source audio.Source) {
e.ProcessBlockChannel(source.ToFloat32().GetBlocks())
func (e *EventPointProcessor) Process(source audio.Source) error {
return e.ProcessBlockChannel(source.ToFloat32().GetBlocks())
}
func (e *EventPointProcessor) ProcessBlockChannel(channel chan []float32) {
e.processResultChannel(e.gaborator.GaborBlockTransform(channel))
func (e *EventPointProcessor) ProcessBlockChannel(channel chan []float32) error {
err := e.gaborator.GaborBlockTransform(channel, e.processResult)
if err != nil {
return err
}
e.processResultFinish()
return nil
}
func (e *EventPointProcessor) ProcessingFinished() {
@ -99,73 +108,75 @@ func (e *EventPointProcessor) ProcessingFinished() {
e.maxFilterVertical.Close()
e.maxFilterVertical = nil
}
e.pinner.Unpin()
}
func (e *EventPointProcessor) GetLatency() int64 {
return e.gaborator.GetLatency()
}
func (e *EventPointProcessor) processResultChannel(allMagnitudes chan []float32) {
for currentMagnitudes := range allMagnitudes {
e.magnitudes[e.magnitudesIndex] = currentMagnitudes
func (e *EventPointProcessor) processResult(currentMagnitudes []float32) {
e.magnitudes[e.magnitudesIndex] = currentMagnitudes
//store the frame magnitudes
//store the frame magnitudes
e.previousMagnitudes[e.analysisFrameIndex] = e.magnitudes[e.magnitudesIndex]
e.previousMagnitudes[e.analysisFrameIndex] = e.magnitudes[e.magnitudesIndex]
e.pinner.Pin(unsafe.SliceData(e.magnitudes[e.magnitudesIndex]))
//run a max filter over frequency bins
e.maxFilterVertical.Filter(e.magnitudes[e.magnitudesIndex], e.maxMagnitudes[e.magnitudesIndex])
//store the max filtered frequency bins
e.previousMaxMagnitudes[e.analysisFrameIndex] = e.maxMagnitudes[e.magnitudesIndex]
//run a max filter over frequency bins
e.maxFilterVertical.Filter(e.magnitudes[e.magnitudesIndex], e.maxMagnitudes[e.magnitudesIndex])
//store the max filtered frequency bins
e.previousMaxMagnitudes[e.analysisFrameIndex] = e.maxMagnitudes[e.magnitudesIndex]
//find the horizontal maxima
if len(e.previousMaxMagnitudes) == e.maxFilterWindowSizeTime {
time := e.analysisFrameIndex - e.maxFilterWindowSizeTime/2
//find the horizontal maxima
if len(e.previousMaxMagnitudes) == e.maxFilterWindowSizeTime {
time := e.analysisFrameIndex - e.maxFilterWindowSizeTime/2
maxFrame := e.previousMaxMagnitudes[time]
frameMagnitudes := e.previousMagnitudes[time]
maxFrame := e.previousMaxMagnitudes[time]
frameMagnitudes := e.previousMagnitudes[time]
for frequency := 2; frequency < len(frameMagnitudes)-1; frequency++ {
maxVal := maxFrame[frequency]
currentVal := frameMagnitudes[frequency]
for frequency := 2; frequency < len(frameMagnitudes)-1; frequency++ {
maxVal := maxFrame[frequency]
currentVal := frameMagnitudes[frequency]
if maxVal == currentVal && currentVal != 0 {
e.horizontalFilter(frequency)
maxVal = e.maxHorizontal[frequency]
if currentVal == maxVal {
prevFrameMagnitudes := e.previousMagnitudes[time-1]
nextFrameMagnitudes := e.previousMagnitudes[time+1]
if maxVal == currentVal && currentVal != 0 {
e.horizontalFilter(frequency)
maxVal = e.maxHorizontal[frequency]
if currentVal == maxVal {
prevFrameMagnitudes := e.previousMagnitudes[time-1]
nextFrameMagnitudes := e.previousMagnitudes[time+1]
//add the magnitude of surrounding bins for magnitude estimates more robust against discretization effects
totalMagnitude := frameMagnitudes[frequency] + prevFrameMagnitudes[frequency] + nextFrameMagnitudes[frequency] +
frameMagnitudes[frequency+1] + prevFrameMagnitudes[frequency+1] + nextFrameMagnitudes[frequency+1] +
frameMagnitudes[frequency-1] + prevFrameMagnitudes[frequency-1] + nextFrameMagnitudes[frequency-1]
//add the magnitude of surrounding bins for magnitude estimates more robust against discretization effects
totalMagnitude := frameMagnitudes[frequency] + prevFrameMagnitudes[frequency] + nextFrameMagnitudes[frequency] +
frameMagnitudes[frequency+1] + prevFrameMagnitudes[frequency+1] + nextFrameMagnitudes[frequency+1] +
frameMagnitudes[frequency-1] + prevFrameMagnitudes[frequency-1] + nextFrameMagnitudes[frequency-1]
e.eventPoints = append(e.eventPoints, EventPoint{
Time: uint32(time),
Frequency: uint32(frequency),
Magnitude: totalMagnitude,
})
}
e.eventPoints = append(e.eventPoints, EventPoint{
Time: uint32(time),
Frequency: uint32(frequency),
Magnitude: totalMagnitude,
})
}
}
//Remove analysis frames that are not needed any more:
ix := e.analysisFrameIndex - e.maxFilterWindowSizeTime + 1
delete(e.previousMaxMagnitudes, ix)
delete(e.previousMagnitudes, ix)
}
//magnitude index counter
e.magnitudesIndex++
if e.magnitudesIndex == len(e.magnitudes) {
e.magnitudesIndex = 0
}
//Increment analysis frame counter
e.analysisFrameIndex++
//Remove analysis frames that are not needed any more:
ix := e.analysisFrameIndex - e.maxFilterWindowSizeTime + 1
delete(e.previousMaxMagnitudes, ix)
delete(e.previousMagnitudes, ix)
}
//magnitude index counter
e.magnitudesIndex++
if e.magnitudesIndex == len(e.magnitudes) {
e.magnitudesIndex = 0
}
//Increment analysis frame counter
e.analysisFrameIndex++
}
func (e *EventPointProcessor) processResultFinish() {
e.packEventPointsIntoFingerprints()
e.ProcessingFinished()
}

View file

@ -5,6 +5,7 @@ import (
"git.gammaspectra.live/S.O.N.G/Kirika/audio/filter"
"log"
"math"
"slices"
"sort"
"sync"
"time"
@ -70,9 +71,12 @@ func (s *Strategy) SourceToFingerprints(source audio.Source) []Fingerprint {
func (s *Strategy) BlockChannelToFingerprints(channel chan []float32) []Fingerprint {
eventPointProcessor, err := s.instance.GetEventPointProcessor()
if err != nil {
log.Panic(err)
panic(err)
}
err = eventPointProcessor.ProcessBlockChannel(channel)
if err != nil {
panic(err)
}
eventPointProcessor.ProcessBlockChannel(channel)
return eventPointProcessor.GetFingerprints()
}
@ -90,13 +94,7 @@ func (s *Strategy) QueryStoreRecords(records []StoreRecord) (queryResults []Quer
hitsPerResource := make(map[ResourceId][]*MatchedRecord)
for record := range s.store.GetPanakoMatches(records, s.instance.QueryRange) {
if _, ok := hitsPerResource[record.Match.ResourceId]; ok {
hitsPerResource[record.Match.ResourceId] = append(hitsPerResource[record.Match.ResourceId], record)
} else {
hitsPerResource[record.Match.ResourceId] = []*MatchedRecord{
record,
}
}
hitsPerResource[record.Match.ResourceId] = append(hitsPerResource[record.Match.ResourceId], record)
}
var wg sync.WaitGroup
@ -118,8 +116,8 @@ func (s *Strategy) QueryStoreRecords(records []StoreRecord) (queryResults []Quer
defer wg.Done()
//sort by query time
sort.SliceStable(hitList, func(i, j int) bool {
return hitList[i].Query.Time < hitList[j].Query.Time
slices.SortStableFunc(hitList, func(a, b *MatchedRecord) int {
return int(a.Query.Time) - int(b.Query.Time)
})
ix := len(hitList) / s.instance.QueryHitListDivisor
@ -239,19 +237,22 @@ func (s *Strategy) QueryStoreRecords(records []StoreRecord) (queryResults []Quer
emptySeconds := numberOfMatchingSeconds - float64(len(matchesPerSecondHistogram))
percentOfSecondsWithMatches := 1. - (emptySeconds / numberOfMatchingSeconds)
if percentOfSecondsWithMatches >= s.instance.QueryDurationPercentageMinimum {
queryResultMutex.Lock()
queryResults = append(queryResults, QueryResult{
QueryStart: queryStart,
QueryStop: queryStop,
ReferenceResourceId: resourceId,
ReferenceStart: refStart,
ReferenceStop: refStop,
Score: score,
TimeFactor: timeFactor,
FrequencyFactor: frequencyFactor,
PercentOfSecondsWithMatches: percentOfSecondsWithMatches,
})
queryResultMutex.Unlock()
func() {
queryResultMutex.Lock()
defer queryResultMutex.Unlock()
queryResults = append(queryResults, QueryResult{
QueryStart: queryStart,
QueryStop: queryStop,
ReferenceResourceId: resourceId,
ReferenceStart: refStart,
ReferenceStop: refStop,
Score: score,
TimeFactor: timeFactor,
FrequencyFactor: frequencyFactor,
PercentOfSecondsWithMatches: percentOfSecondsWithMatches,
})
}()
return
}
}
@ -266,6 +267,7 @@ func (s *Strategy) QueryStoreRecords(records []StoreRecord) (queryResults []Quer
wg.Wait()
//sort results by score desc
// This does not copy instead of slices.SortStable
sort.SliceStable(queryResults, func(i, j int) bool {
return queryResults[j].Score < queryResults[i].Score
})