This is a Go port of the phase vocoding analysis/resynthesis routines from Tom Erbe's program "SoundHack".

Overview

This is a Go port of the phase vocoding analysis/resynthesis routines from Tom Erbe's program "SoundHack".

Unlike the original SoundHack, this port does not have a UI and must be used on the command line.

Differences from the original SoundHack

  • gopvoc doesn't allow time stretching beyond the maximum or minimum as determined by the given inputs, see below.
  • gopvoc uses a slightly different vonn Hann window function than SoundHack
  • gopvoc can process AIFF files with an arbitrary number of channels.
  • gopvoc can only read and write AIFF files.
  • gopvoc pitch shifting can only take a multiplier scale factor for pitch (octave lower is scale factor of 0.5, octave higher is 2.0, etc).
  • gopvoc time stretching can only take a multiplier scale factor for time instead of a target output duration.

Commands and Options

Flags and Options

Both time stretching and pitch shifting use the following common set of flags:

Input AIFF file path (required):

-i

Output AIFF file path (required):

-f

Number of requested bands for FFT processing (must be one of: 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096):

-b

Overlap factor (must be one of 0.5, 1, 2, 4):

-o

Scale factor (for time stretching, the amount to mutliply input duration by. For pitch shifting, the pitch shift multiplier):

-s

Windowing function for FFT processing (must be one of: rectangle, hamming, vonhann, kaiser, sinc, triangle, ramp):

-w

Quiet flag (suppress stdout information and progress bar):

-q

Time stretching can do phase locking during resynthesis, to enable it:

-p

Time Stretching

Time stretching is acheived via windowed FFT analysis of the input file, then resynthesis into the output file via overlap add resynthesis.

For a list of flags relevant to time stretching:

./gopvoc time -h

Note that the original SoundHack could crash given certain program states based on extreme stretching multipliers. The maximum or minimum allowed -s scale multiplier is dependent on the FFT window size which in turn is dependent on the number of FFT bands requested by the -b flag. Unlike SoundHack, gopvoc will cap the multiplier within this limit instead of crashing due to a division by zero. Program output will indicate of your requested -s flag has been limited.

Example:

./gopvoc time -i strings.aif -f strings_x10.aif -b 4096 -o 4 -s 10 -w kaiser

The above example takes strings.aif, and stretches it to be 10 times the original length using 4096 FFT bands with an overlap factor of 4, using a kaiser windowing function

Pitch Shifting

Pitch shifting is acheived via windowed FFT analysis of the input file, then resynthesis into the output file via oscillator bank resynthesis.

For a list of flags relevant to pitch shifting:

./gopvoc pitch -h

Example:

./gopvoc pitch -i strings.aif -f strings_octavedown.aif -b 2048 -o 1 -s 0.5

The above example takes strings.aif, and pitch shifts it down one octave (0.5 multipler of any given pitch in Hz is an octave lower) using 2048 FFT bands with an overlap factor of 1.

Build instructions

  • Download and Install the Go language for your system. Gopvoc has only been tested and built with Go 1.17.
  • Clone this respository
  • run go build -o gopvoc
  • you should now have an executable ./gopvoc in the current directory or ./gopvoc.exe on Windows.

Binaries have been cross-compiled for OS X amd64 (Intel), arm64 (M1) as well as Linux (amd64) and Windows (amd64).

Similar Resources

Capture packet request/response pairs for a port and/or IP to aid in Network protocol based Nuclei Templates creation.

network-fingerprint Capture packet request/response pairs for a port and/or IP to aid in Network protocol based Nuclei Templates creation. Resources I

Nov 15, 2022

Partial port of Python difflib package to Go

go-difflib THIS PACKAGE IS NO LONGER MAINTAINED. At this point, I have no longer the time nor the interest to work on go-difflib. I apologize for the

Dec 10, 2022

A simple port scanner written in go

Scan27 A simple port scanner written in go Features: V1 it Scans the given Ip or Host name for open ports Usage ./scan27 Enter IP address or Host name

Jul 23, 2022

Yet another TCP Port Scanner, but lightning faster.

Fast TCP Port Scanner A highly concurrent TCP port scanner. Run Tests with Code Coverage (Linux) go test -cover Compile (Linux) go build -v -o fglps R

Jul 23, 2022

Port of HawkAPI's cloudscraper

hawk-go Port of HawkAPI's cloudscraper Everything is exposed to give access to modification, this is subject to change. Installation: go get github.co

Nov 11, 2022

port close check scanner. detects open ports, sends alert with slack.

aite9 (port close check scanner) サーバのポートが空いてないことを確認するポートスキャナー たくさんのサーバを管理していると設定ミスで内部利用ポートが外部に公開されてしまっている可能性があり、それに早く気付くためのチェックツールです。 サーバのリストを標準入力で渡すと

Feb 3, 2022

TCP Port Scanner in GO lang

Port-Scanner-GO Simple TCP port scanner in golang. Installation & Build You have to have GO version 1.13 run: go build port-scanner-go.go Run single

Jun 6, 2022

Port Scanner & Banner Identify From TianXiang

Port Scanner & Banner Identify From TianXiang

TXPortMap Port Scanner & Banner Identify From TianXiang ./TxPortMap -h 新增加彩色文字输出格式 对http/https协议进行title以及报文长度打印,获取title失败打印报文前20字节 新增日志文件以及扫描结果文件 T

Jan 5, 2023
Related tags
Port-proxy - Temporary expose port for remote connections

Port proxy util Temporary expose port for remote connections. E.g. database/wind

Jan 27, 2022
rconn is a multiplatform program for creating generic reverse connections. Lets you consume services that are behind firewall or NAT without opening ports or port-forwarding.
rconn is a multiplatform program for creating generic reverse connections. Lets you consume services that are behind firewall or NAT without opening ports or port-forwarding.

rconn (r[everse] conn[ection]) is a multiplatform program for creating reverse connections. It lets you consume services that are behind NAT and/or fi

Jan 1, 2023
bodyclose is a static analysis tool which checks whether res.Body is correctly closed.

bodyclose is a static analysis tool which checks whether res.Body is correctly closed. Install You can get bodyclose by go get command. $ go

Jan 6, 2023
Fast Static File Analysis Framework
Fast Static File Analysis Framework

Florentino; Fast Static File Analysis Framework Story Florentino is named after a fiction warrior. Flarentino: "I'd wear a fedora but they haven't inv

Nov 9, 2022
All-in-one Network Gateway for Malware analysis

aio-gw [EXPERIMENTAL]: All-in-one Network Gateway for Malware analysis. currently at Alpha stage. HELP NEEDED: if you're keen to contribute to aio-gw,

Dec 14, 2022
Bodyclose: a static analysis tool which checks whether res.Body is correctly closed

bodyclose bodyclose is a static analysis tool which checks whether res.Body is correctly closed. Install You can get bodyclose by go get command. $ go

Dec 9, 2021
grobotstxt is a native Go port of Google's robots.txt parser and matcher library.

grobotstxt grobotstxt is a native Go port of Google's robots.txt parser and matcher C++ library. Direct function-for-function conversion/port Preserve

Dec 27, 2022
Simple HTTP tunnel using SSH remote port forwarding

Simple HTTP tunnel using SSH remote port forwarding

Nov 18, 2022
A fast port forwarding or reverse forwarding tool over HTTP1.0/HTTP1.1
A fast port forwarding or reverse forwarding tool over HTTP1.0/HTTP1.1

gogw What's gogw ? gogw is a port forwarding/reverse forwarding tool over HTTP implements by golang. port forwarding/port reverse forwarding support T

Sep 27, 2022