From 1d012bed5ecd10b5daf7331df37bbcca48f51bde Mon Sep 17 00:00:00 2001 From: Chigozirim Igweamaka Date: Sun, 23 Jun 2024 14:43:19 +0100 Subject: [PATCH] attempt to resample recording --- socketHandlers.go | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/socketHandlers.go b/socketHandlers.go index 86d2497..82f3dd5 100644 --- a/socketHandlers.go +++ b/socketHandlers.go @@ -30,10 +30,11 @@ func downloadStatus(statusType, message string) string { } type RecordData struct { - Audio string `json:"audio"` - Channels int `json:"channels"` - SampleRate int `json:"sampleRate"` - SampleSize int `json:"sampleSize"` + Audio string `json:"audio"` + Duration float64 `json:"duration"` + Channels int `json:"channels"` + SampleRate int `json:"sampleRate"` + SampleSize int `json:"sampleSize"` } func handleTotalSongs(socket socketio.Conn) { @@ -207,19 +208,38 @@ func handleNewRecording(socket socketio.Conn, recordData string) { bitsPerSample := recData.SampleSize fmt.Println(channels, sampleRate, bitsPerSample) - err = wav.WriteWavFile("blob.wav", decodedAudioData, sampleRate, channels, bitsPerSample) - if err != nil { - err := xerrors.New(err) - logger.ErrorContext(ctx, "failed to write wav file.", slog.Any("error", err)) - } - samples, err := wav.WavBytesToSamples(decodedAudioData) if err != nil { err := xerrors.New(err) logger.ErrorContext(ctx, "failed to convert decodedData to samples.", slog.Any("error", err)) } - matches, err := shazam.FindMatches(samples, 10.0, sampleRate) + /** this operation alters the audio, adding some level of bass to it. + if sampleRate != 44100 { + samples, err = shazam.Downsample(samples, sampleRate, 44100) + if err != nil { + err := xerrors.New(err) + logger.ErrorContext(ctx, "failed to downsample.", slog.Any("error", err)) + } + sampleRate = 44100 + } + + // Save recording + recordingInBytes, err := utils.FloatsToBytes(samples, bitsPerSample) + if err != nil { + err := xerrors.New(err) + logger.ErrorContext(ctx, "failed to convert bytes.", slog.Any("error", err)) + } + decodedAudioData = recordingInBytes + */ + + err = wav.WriteWavFile("blob.wav", decodedAudioData, sampleRate, channels, bitsPerSample) + if err != nil { + err := xerrors.New(err) + logger.ErrorContext(ctx, "failed to write wav file.", slog.Any("error", err)) + } + + matches, err := shazam.FindMatchess(samples, recData.Duration, sampleRate) if err != nil { err := xerrors.New(err) logger.ErrorContext(ctx, "failed to get matches.", slog.Any("error", err))