SoX Plugin for Solar2D

The SoX plugin allows you to process audio files using the Sound eXchange toolkit. Features audio equalizer, audio normalization, adding reverberation, trimming silence, adjusting pitch, speed and many more.

To get access to the plugin, you need to support me on Patreon https://www.patreon.com/lerg

Here is the list of feautes of SoX http://sox.sourceforge.net/Docs/Features

See the official documentation of the toolkit for all effect names and their parameters.

Supported platforms: iOS, Android, macOS.

Sample Project

https://github.com/Lerg/plugins-sample-sox

API Overview

Functions

Project Settings

To use this plugin, add an entry into the plugins table of build.settings. When added, the build server will integrate the plugin during the build phase.

You also need to add a special function at the top of the build.settings file and provide your Patreon email and an access key. The access key you get when you become a patron.

local spiralcodestudio_patreon_email = 'YOUR_EMAIL'
local spiralcodestudio_key = 'YOUR_ACCESS_KEY'

local function spiralcodestudio_plugin(name)
	local plugin = {publisherId = 'com.spiralcodestudio', supportedPlatforms = {}}
	local platforms = {'android', 'appletvos', 'appletvsimulator', 'iphone', 'iphone-sim', 'mac-sim', 'win32-sim'}
	for i = 1, #platforms do
		local platform = platforms[i]
		plugin.supportedPlatforms[platform] = {url = 'https://build.spiralcodestudio.com/' .. spiralcodestudio_patreon_email .. '/' .. spiralcodestudio_key .. '/solar2d/' .. name .. '_' .. platform .. '.tgz'}
	end
	return plugin
end

settings = {
	plugins = {
		['plugin.sox'] = spiralcodestudio_plugin('sox')
	}
}

Functions

sox.init(params)

Initializes the plugin. This function has to be called first, before using any other methods of the plugin.

Returns true if initialized successfully, false otherwise.

params optional

Table. Contains parameters for the call — see the next section for details.

Parameter Reference

The params table includes parameters for the call.

verbosity optional

String. Set logging level: 'none', 'fail', 'warn', 'report', 'debug', 'debug_more', 'debug_most'. Default is 'warn'.

temporary_directory optional

String. Path to temporay directory, used by some effects. Normally you should set it to system.pathForFile(nil, system.TemporaryDirectory).

buffer_size optional

Integer. Size (in bytes) used for blocks of sample data.

input_buffer_size optional

Integer. Size (in bytes) used for blocks of input sample data.

use_threads optional

Boolean. Set to true to use threading.


sox.process(params)

Opens an audio file, applies audio effects on it and saves the result as a new audio file.

params required

Table. Contains parameters for the call — see the next section for details.

Parameter Reference

The params table includes parameters for the call.

input required

String. Path to the input file.

output required

String. Path to the output file.

effects required

Array. The list of effects to apply. Each effect is a table with effect name and optionally effect parameters.

  • effect.name - String. Name of the effect.
  • effect.params- String. Optional parameters for the effect.

sox.quit()

Shuts down the SoX engine.


Example

local sox = require('plugin.sox')

-- Init the SoX engine.
local success = sox.init{
	verbosity = 'debug_most',
	temporary_directory = system.pathForFile(nil, system.TemporaryDirectory),
	buffer_size = 32768,
	input_buffer_size = 32768,
	use_threads = true
}
if not success then
	print('Failed to init the SoX plugin.')
end

-- Open sample.wav, normalize audio levels and add audio contrast. Save the result as result.wav.
sox.process{
	input = system.pathForFile('sample.wav', system.ResourceDirectory),
	output = system.pathForFile('result.wav', system.DocumentsDirectory),
	effects = {
		{name = 'gain', params = '-n'},
		{name = 'contrast', params = '50'}
	}
}

-- Quit the engine.
sox.quit()