MusicMaster 0.0.1.20101110
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/ChangeLog +5 -0
- data/Credits +6 -0
- data/LICENSE +31 -0
- data/README +18 -0
- data/ReleaseInfo +8 -0
- data/TODO +3 -0
- data/album.conf.rb.example +78 -0
- data/bin/Album.rb +81 -0
- data/bin/AnalyzeAlbum.rb +66 -0
- data/bin/DBConvert.rb +36 -0
- data/bin/Deliver.rb +42 -0
- data/bin/DeliverAlbum.rb +68 -0
- data/bin/Fct2Wave.rb +58 -0
- data/bin/Master.rb +60 -0
- data/bin/Mix.rb +99 -0
- data/bin/PrepareMix.rb +422 -0
- data/bin/Record.rb +145 -0
- data/lib/MusicMaster/Common.rb +197 -0
- data/lib/MusicMaster/ConfLoader.rb +56 -0
- data/lib/MusicMaster/Processes/AddSilence.rb +27 -0
- data/lib/MusicMaster/Processes/ApplyVolumeFct.rb +46 -0
- data/lib/MusicMaster/Processes/Compressor.rb +246 -0
- data/lib/MusicMaster/Processes/Custom.rb +31 -0
- data/lib/MusicMaster/Processes/CutFirstSignal.rb +27 -0
- data/lib/MusicMaster/Processes/GVerb.rb +30 -0
- data/lib/MusicMaster/Processes/Normalize.rb +51 -0
- data/lib/MusicMaster/Processes/VolCorrection.rb +30 -0
- data/lib/MusicMaster/musicmaster.conf.rb +96 -0
- data/master.conf.rb.example +13 -0
- data/musicmaster.conf.rb.example +95 -0
- data/record.conf.rb.example +45 -0
- metadata +104 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
module MusicMaster
|
7
|
+
|
8
|
+
module Processes
|
9
|
+
|
10
|
+
class Normalize
|
11
|
+
|
12
|
+
# Execute the process
|
13
|
+
#
|
14
|
+
# Parameters:
|
15
|
+
# * *iInputFileName* (_String_): File name we want to apply effects to
|
16
|
+
# * *iOutputFileName* (_String_): File name to write
|
17
|
+
# * *iTempDir* (_String_): Temporary directory that can be used
|
18
|
+
# * *iParams* (<em>map<Symbol,Object></em>): Parameters
|
19
|
+
def execute(iInputFileName, iOutputFileName, iTempDir, iParams)
|
20
|
+
# First, analyze
|
21
|
+
lAnalyzeResultFileName = "#{iTempDir}/#{File.basename(iInputFileName)}.analyze"
|
22
|
+
if (File.exists?(lAnalyzeResultFileName))
|
23
|
+
logWarn "File #{lAnalyzeResultFileName} already exists. Will not overwrite it."
|
24
|
+
else
|
25
|
+
MusicMaster::wsk(iInputFileName, "#{iTempDir}/Dummy.wav", 'Analyze')
|
26
|
+
File.unlink("#{iTempDir}/Dummy.wav")
|
27
|
+
FileUtils::mv('analyze.result', lAnalyzeResultFileName)
|
28
|
+
end
|
29
|
+
lAnalyzeResult = nil
|
30
|
+
File.open(lAnalyzeResultFileName, 'rb') do |iFile|
|
31
|
+
lAnalyzeResult = Marshal.load(iFile.read)
|
32
|
+
end
|
33
|
+
lMaxDataValue = lAnalyzeResult[:MaxValues].sort[-1]
|
34
|
+
lMinDataValue = lAnalyzeResult[:MinValues].sort[0]
|
35
|
+
lMaxPossibleValue = (2**(lAnalyzeResult[:SampleSize]-1)) - 1
|
36
|
+
lMinPossibleValue = -(2**(lAnalyzeResult[:SampleSize]-1))
|
37
|
+
lCoeffNormalizeMax = Rational(lMaxPossibleValue, lMaxDataValue)
|
38
|
+
lCoeffNormalizeMin = Rational(lMinPossibleValue, lMinDataValue)
|
39
|
+
lCoeff = lCoeffNormalizeMax
|
40
|
+
if (lCoeffNormalizeMin < lCoeff)
|
41
|
+
lCoeff = lCoeffNormalizeMin
|
42
|
+
end
|
43
|
+
logInfo "Maximal value: #{lMaxDataValue}/#{lMaxPossibleValue}. Minimal value: #{lMinDataValue}/#{lMinPossibleValue}. Volume correction: #{lCoeff}."
|
44
|
+
MusicMaster::wsk(iInputFileName, iOutputFileName, 'Multiply', "--coeff \"#{lCoeff.numerator}/#{lCoeff.denominator}\"")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
module MusicMaster
|
7
|
+
|
8
|
+
module Processes
|
9
|
+
|
10
|
+
class VolCorrection
|
11
|
+
|
12
|
+
# Parameters of this process:
|
13
|
+
# * *:Factor* (_String_): The volume correction factor, either in ratio ('3/4') or db ('-2db')
|
14
|
+
|
15
|
+
# Execute the process
|
16
|
+
#
|
17
|
+
# Parameters:
|
18
|
+
# * *iInputFileName* (_String_): File name we want to apply effects to
|
19
|
+
# * *iOutputFileName* (_String_): File name to write
|
20
|
+
# * *iTempDir* (_String_): Temporary directory that can be used
|
21
|
+
# * *iParams* (<em>map<Symbol,Object></em>): Parameters
|
22
|
+
def execute(iInputFileName, iOutputFileName, iTempDir, iParams)
|
23
|
+
MusicMaster::wsk(iInputFileName, iOutputFileName, 'Multiply', "--coeff \"#{iParams[:Factor]}\"")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
{
|
7
|
+
|
8
|
+
# Command line to run WSK tool
|
9
|
+
:WSKCmdLine => 'ruby -w -I/cygdrive/f/RR/Source/rutilants/svn/rutilants/lib -I/cygdrive/f/RR/Source/waveswissknife/svn/waveswissknife/lib -I/cygdrive/f/RR/Source/waveswissknife/svn/waveswissknife/ext /cygdrive/f/RR/Source/waveswissknife/svn/waveswissknife/bin/WSK.rb',
|
10
|
+
|
11
|
+
# Command line to run Sample Rate Converter tool
|
12
|
+
:SRCCmdLine => '/cygdrive/e/Temp/Projects/Music/Tools/SSRC/ssrc.exe',
|
13
|
+
|
14
|
+
# Record options
|
15
|
+
:Record => {
|
16
|
+
|
17
|
+
# Method returning the name of the next recorded file
|
18
|
+
:RecordedFileGetter => Proc.new do
|
19
|
+
next `ls -rt /cygdrive/e/Temp/Tests\\ M-Audio/TestFramework\\ Project/Samples/Recorded/*.wav | tail -2 | head -1`.chomp
|
20
|
+
end
|
21
|
+
|
22
|
+
},
|
23
|
+
|
24
|
+
# PrepareMix options
|
25
|
+
:PrepareMix => {
|
26
|
+
|
27
|
+
# Directory in which temporary files will be generated
|
28
|
+
:TempDir => 'PrepareMixTemp',
|
29
|
+
|
30
|
+
# Percentage of values added as a margin of the silence thresholds (arbitrary value)
|
31
|
+
:MarginSilenceThresholds => 0.1,
|
32
|
+
|
33
|
+
},
|
34
|
+
|
35
|
+
# Mix options
|
36
|
+
:Mix => {
|
37
|
+
|
38
|
+
# Directory in which temporary files will be generated
|
39
|
+
:TempDir => 'MixTemp'
|
40
|
+
|
41
|
+
},
|
42
|
+
|
43
|
+
# Master options
|
44
|
+
:Master => {
|
45
|
+
|
46
|
+
# Directory in which files will be generated
|
47
|
+
:Dir => 'Master'
|
48
|
+
|
49
|
+
},
|
50
|
+
|
51
|
+
# Album options
|
52
|
+
:Album => {
|
53
|
+
|
54
|
+
# Directory in which temporary files will be generated
|
55
|
+
:TempDir => 'AlbumTemp',
|
56
|
+
|
57
|
+
# Directory in which files will be generated
|
58
|
+
:Dir => 'Album'
|
59
|
+
|
60
|
+
},
|
61
|
+
|
62
|
+
# Album delivery options
|
63
|
+
:AlbumDeliver => {
|
64
|
+
|
65
|
+
# Directory in which files will be generated
|
66
|
+
:Dir => 'AlbumDeliver'
|
67
|
+
|
68
|
+
},
|
69
|
+
|
70
|
+
# Single Track delivery options
|
71
|
+
:Deliver => {
|
72
|
+
|
73
|
+
# Directory in which files will be generated
|
74
|
+
:Dir => 'Deliver'
|
75
|
+
|
76
|
+
},
|
77
|
+
|
78
|
+
# Options for NoiseGate processes
|
79
|
+
:NoiseGate => {
|
80
|
+
|
81
|
+
# Durations used for noise gates
|
82
|
+
# !!! Attack + Release should be < SilenceMin !!!
|
83
|
+
:Attack => '0.1s',
|
84
|
+
:Release => '0.1s',
|
85
|
+
:SilenceMin => '1s'
|
86
|
+
|
87
|
+
},
|
88
|
+
|
89
|
+
# Options for Compressor processes
|
90
|
+
:Compressor => {
|
91
|
+
|
92
|
+
:Interval => '0.1s'
|
93
|
+
|
94
|
+
}
|
95
|
+
|
96
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
# Mastering effects
|
3
|
+
:Mastering => [
|
4
|
+
# Useful to remove starting beats
|
5
|
+
{ :Name => 'CutFirstSignal' },
|
6
|
+
# Normalization
|
7
|
+
{ :Name => 'Normalize' },
|
8
|
+
# Volume correction, either in ratio (ie. '4/5') or in db (ie. -2db)
|
9
|
+
{ :Name => 'VolCorrection', :Factor => '-2db' },
|
10
|
+
# Compression
|
11
|
+
{ :Name => 'Compressor' }
|
12
|
+
]
|
13
|
+
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
{
|
2
|
+
|
3
|
+
# Command line to run WSK tool
|
4
|
+
:WSKCmdLine => 'ruby -w -S WSK.rb',
|
5
|
+
|
6
|
+
# Command line to run Sample Rate Converter tool
|
7
|
+
:SRCCmdLine => '/path/to/ssrc/ssrc.exe',
|
8
|
+
|
9
|
+
# Record options
|
10
|
+
:Record => {
|
11
|
+
|
12
|
+
# Directory in which temporary files will be generated
|
13
|
+
:TempDir => 'RecordTemp',
|
14
|
+
|
15
|
+
# Method returning the name of the next recorded file
|
16
|
+
:RecordedFileGetter => Proc.new do
|
17
|
+
next `ls -rt /path/to/recorded/files/*.wav | tail -1 | head -1`.chomp
|
18
|
+
end
|
19
|
+
|
20
|
+
},
|
21
|
+
|
22
|
+
# PrepareMix options
|
23
|
+
:PrepareMix => {
|
24
|
+
|
25
|
+
# Directory in which temporary files will be generated
|
26
|
+
:TempDir => 'PrepareMixTemp',
|
27
|
+
|
28
|
+
# Percentage of values added as a margin of the silence thresholds (arbitrary value)
|
29
|
+
:MarginSilenceThresholds => 0.1,
|
30
|
+
|
31
|
+
},
|
32
|
+
|
33
|
+
# Mix options
|
34
|
+
:Mix => {
|
35
|
+
|
36
|
+
# Directory in which temporary files will be generated
|
37
|
+
:TempDir => 'MixTemp'
|
38
|
+
|
39
|
+
},
|
40
|
+
|
41
|
+
# Master options
|
42
|
+
:Master => {
|
43
|
+
|
44
|
+
# Directory in which files will be generated
|
45
|
+
:Dir => 'Master'
|
46
|
+
|
47
|
+
},
|
48
|
+
|
49
|
+
# Album options
|
50
|
+
:Album => {
|
51
|
+
|
52
|
+
# Directory in which temporary files will be generated
|
53
|
+
:TempDir => 'AlbumTemp',
|
54
|
+
|
55
|
+
# Directory in which files will be generated
|
56
|
+
:Dir => 'Album'
|
57
|
+
|
58
|
+
},
|
59
|
+
|
60
|
+
# Album delivery options
|
61
|
+
:AlbumDeliver => {
|
62
|
+
|
63
|
+
# Directory in which files will be generated
|
64
|
+
:Dir => 'AlbumDeliver'
|
65
|
+
|
66
|
+
},
|
67
|
+
|
68
|
+
# Single Track delivery options
|
69
|
+
:Deliver => {
|
70
|
+
|
71
|
+
# Directory in which files will be generated
|
72
|
+
:Dir => 'Deliver'
|
73
|
+
|
74
|
+
},
|
75
|
+
|
76
|
+
# Options for NoiseGate processes
|
77
|
+
:NoiseGate => {
|
78
|
+
|
79
|
+
# Durations used for noise gates
|
80
|
+
# !!! Attack + Release should be < SilenceMin !!!
|
81
|
+
:Attack => '0.1s',
|
82
|
+
:Release => '0.1s',
|
83
|
+
:SilenceMin => '1s'
|
84
|
+
|
85
|
+
},
|
86
|
+
|
87
|
+
# Options for Compressor processes
|
88
|
+
:Compressor => {
|
89
|
+
|
90
|
+
# Interval used to measure volume
|
91
|
+
:Interval => '0.1s'
|
92
|
+
|
93
|
+
}
|
94
|
+
|
95
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
{
|
2
|
+
|
3
|
+
# Tracks that will be recorded during the same take
|
4
|
+
:Performs => [
|
5
|
+
[2, 4, 5],
|
6
|
+
[6, 8, 9],
|
7
|
+
[7],
|
8
|
+
[10]
|
9
|
+
],
|
10
|
+
|
11
|
+
# Tracks that will be recorded alone
|
12
|
+
# Additional parameters are given to adjust their level with the Perform tracks
|
13
|
+
:Patches => {
|
14
|
+
|
15
|
+
1 => {
|
16
|
+
# Effects to apply once recorded
|
17
|
+
:Effects => [
|
18
|
+
{
|
19
|
+
:Name => 'GVerb'
|
20
|
+
}
|
21
|
+
],
|
22
|
+
# Either use :VolCorrection or :VolCompareCuts
|
23
|
+
:VolCorrection => '1/4', # Can be also specified in db (ie. '-5db')
|
24
|
+
# Specify that we can record a sample of the Track with the reference and original volume, and cut the following range in this sample recording, to compute the volume correction to apply.
|
25
|
+
:VolCompareCuts => ['0.1s', '32s']
|
26
|
+
},
|
27
|
+
|
28
|
+
3 => {
|
29
|
+
# Effects to apply once recorded
|
30
|
+
:Effects => [
|
31
|
+
{
|
32
|
+
:Name => 'GVerb'
|
33
|
+
}
|
34
|
+
],
|
35
|
+
# Either use :VolCorrection or :VolCompareCuts
|
36
|
+
:VolCorrection => '3db',
|
37
|
+
:VolCompareCuts => ['1s', '25s']
|
38
|
+
}
|
39
|
+
|
40
|
+
},
|
41
|
+
|
42
|
+
# Specify if there are some files to include in the Mix that don't need to be recorded
|
43
|
+
:WaveFiles => true
|
44
|
+
|
45
|
+
}
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: MusicMaster
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.20101110
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Muriel Salvan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-11-10 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: WaveSwissKnife
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.1
|
24
|
+
version:
|
25
|
+
description: Command line tool handling steps to deliver music album masters from recordings. Handle Track Mixing, Track Mastering, Track Master Delivery, Album Mastering and Album Master Delivery. Easy-to-use configuration files drive the complete processes.
|
26
|
+
email: murielsalvan@users.sourceforge.net
|
27
|
+
executables:
|
28
|
+
- Album.rb
|
29
|
+
- AnalyzeAlbum.rb
|
30
|
+
- DBConvert.rb
|
31
|
+
- Deliver.rb
|
32
|
+
- DeliverAlbum.rb
|
33
|
+
- Fct2Wave.rb
|
34
|
+
- Master.rb
|
35
|
+
- Mix.rb
|
36
|
+
- PrepareMix.rb
|
37
|
+
- Record.rb
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- lib/MusicMaster/Common.rb
|
44
|
+
- lib/MusicMaster/ConfLoader.rb
|
45
|
+
- lib/MusicMaster/musicmaster.conf.rb
|
46
|
+
- lib/MusicMaster/Processes/GVerb.rb
|
47
|
+
- lib/MusicMaster/Processes/CutFirstSignal.rb
|
48
|
+
- lib/MusicMaster/Processes/Normalize.rb
|
49
|
+
- lib/MusicMaster/Processes/VolCorrection.rb
|
50
|
+
- lib/MusicMaster/Processes/Custom.rb
|
51
|
+
- lib/MusicMaster/Processes/AddSilence.rb
|
52
|
+
- lib/MusicMaster/Processes/ApplyVolumeFct.rb
|
53
|
+
- lib/MusicMaster/Processes/Compressor.rb
|
54
|
+
- bin/DBConvert.rb
|
55
|
+
- bin/Deliver.rb
|
56
|
+
- bin/DeliverAlbum.rb
|
57
|
+
- bin/Mix.rb
|
58
|
+
- bin/PrepareMix.rb
|
59
|
+
- bin/Record.rb
|
60
|
+
- bin/AnalyzeAlbum.rb
|
61
|
+
- bin/Master.rb
|
62
|
+
- bin/Fct2Wave.rb
|
63
|
+
- bin/Album.rb
|
64
|
+
- ReleaseInfo
|
65
|
+
- README
|
66
|
+
- LICENSE
|
67
|
+
- AUTHORS
|
68
|
+
- Credits
|
69
|
+
- TODO
|
70
|
+
- ChangeLog
|
71
|
+
- album.conf.rb.example
|
72
|
+
- master.conf.rb.example
|
73
|
+
- musicmaster.conf.rb.example
|
74
|
+
- record.conf.rb.example
|
75
|
+
has_rdoc: true
|
76
|
+
homepage: http://musicmaster.sourceforge.net/
|
77
|
+
licenses: []
|
78
|
+
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
89
|
+
version:
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
95
|
+
version:
|
96
|
+
requirements: []
|
97
|
+
|
98
|
+
rubyforge_project: musicmaster
|
99
|
+
rubygems_version: 1.3.5
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: Command line tool helping recording, mixing and mastering music tracks and albums.
|
103
|
+
test_files: []
|
104
|
+
|