Categorygithub.com/r9y9/gossp
repositorypackage
0.0.1
Repository: https://github.com/r9y9/gossp.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

GOSSP Build Status


GOSSP is a Speech Signal Processing library for the Go language, which includes time-frequency analysis, fundamental frequency estimation, spectral envelope estimation and waveform generation filters, etc.

Packages

  • cwt - Continuous Wavelet Tranform (CWT) and inverse CWT (in develop).
  • dct - Discrete Cosine Transform (DCT) and Inverse DCT.
  • dtw - Dynamic Time Warping (DTW)
  • excite - Excitation generation from fundamental frequency.
  • f0 - Fundamental frequency (f0) estimatnion.
  • io - Input/Output (in develop).
  • mgcep - Mel-generalized cepstrum analysis for spectral envelope estimation.
  • special - Special functions analogy to scipy in python.
  • stft - Short-Time Fourier Transform (STFT) and Inverse STFT.
  • vocoder - Speech waveform generation filters.
  • window - Window functions.
  • z - Z-transform to analyze digital filters.

Install

 go get github.com/r9y9/gossp

Install SPTK

To use SPTK with GOSSP, you need to install the modified version of SPTK as follows:

 git clone https://github.com/r9y9/SPTK.git && cd SPTK
 ./waf configure && ./waf
 sudo ./waf install

Getting Started

Short-Time Fourier Transform

package main

import (
	"flag"
	"fmt"
	"github.com/r9y9/gossp"
	"github.com/r9y9/gossp/io"
	"github.com/r9y9/gossp/stft"
	"github.com/r9y9/gossp/window"
	"log"
	"math"
)

func main() {
	filename := flag.String("i", "input.wav", "Input filename")
	flag.Parse()

	w, werr := io.ReadWav(*filename)
	if werr != nil {
		log.Fatal(werr)
	}
	data := w.GetMonoData()

	s := &stft.STFT{
		FrameShift: int(float64(w.SampleRate) / 100.0), // 0.01 sec,
		FrameLen:   2048,
		Window:     window.CreateHanning(2048),
	}

	spectrogram, _ := gossp.SplitSpectrogram(s.STFT(data))
	PrintMatrixAsGnuplotFormat(spectrogram)
}

func PrintMatrixAsGnuplotFormat(matrix [][]float64) {
	fmt.Println("#", len(matrix[0]), len(matrix)/2)
	for i, vec := range matrix {
		for j, val := range vec[:1024] {
			fmt.Println(i, j, math.Log(val))
		}
		fmt.Println("")
	}
}

Waveform Reconstruction using Inverse Short-Time Fourier Transform

package main

import (
	"flag"
	"fmt"
	"github.com/r9y9/gossp/io"
	"github.com/r9y9/gossp/stft"
	"github.com/r9y9/gossp/window"
	"log"
)

func main() {
	filename := flag.String("i", "input.wav", "Input filename")
	flag.Parse()

	w, werr := io.ReadWav(*filename)
	if werr != nil {
		log.Fatal(werr)
	}
	data := w.GetMonoData()

	s := &stft.STFT{
		FrameShift: int(float64(w.SampleRate) / 100.0), // 0.01 sec,
		FrameLen:   2048,
		Window:     window.CreateHanning(2048),
	}

	spectrogram := s.STFT(data)

	// do something on spectrogram

	reconstructed := s.ISTFT(spectrogram)

	for i := range data {
		// expect to be same
		fmt.Println(data[i], reconstructed[i])
	}
}

Fun with speech signal processing!

Third Party Libraries

LICENSE

MIT