rubySC 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6858da494fb27f379946590d24da5089a5f2b6fd
4
- data.tar.gz: 55a8944fa1c9612bc2a62a9abafbc22c1d194717
3
+ metadata.gz: 23e968f00981ba833168cdab398ff92ea91dcb45
4
+ data.tar.gz: 50197bf580397a184601aa1fffb08b46a8588633
5
5
  SHA512:
6
- metadata.gz: 0a8e9a6e085f7bfd3bcf687298a3b82b5489b0ca71c1f434446c6a0ab88bd1ede09589218fc252f24e68e850fbb47ab7b98dc426a9fb1a32e54b0d6ad20178db
7
- data.tar.gz: e6c1b76395081c586aabcdae5f026f7eb369e5c54d662f16d692d4287ba8b1cde1a99cda5d2d0ad421bf660b901826d742ac25fb076b393a0c37185e5a4488ef
6
+ metadata.gz: ccb00330ad47c9744d60979cfbffe4f0a67f3c2da57e93be2ff73d71637bbe8b6b42eb3881d47d78e63252d5896a41b8d5a8b6023df07cc53c59705bc3306bb3
7
+ data.tar.gz: a4ca6281ac80eb871382e63d1019dd9a9bea8c76257c82a0a61b354e132a3d6906b13b984db35b5f01ee554f0a2f1d9202611c22ddaf5c81b25399f9c61eec63
data/.gitignore CHANGED
@@ -1,4 +1,4 @@
1
- *.wav
1
+
2
2
  *.gem
3
3
  *.rbc
4
4
  .bundle
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ source "http://rubygems.org"
7
7
  # Add dependencies required to use your gem here.
8
8
  # Example:
9
9
  # gem "activesupport", ">= 2.3.5"
10
- gem "colorize"
10
+ gem "qtbindings"
11
11
  # Add dependencies to develop your gem here.
12
12
  # Include everything needed to run rake, tests, features, etc.
13
13
  group :development do
data/README.md CHANGED
@@ -1,22 +1,60 @@
1
- rubySC est une petite biliothèque qui complète à sa manière
2
- [SCruby](https://github.com/maca/scruby) en offrant une interface avec
3
- la bibliothèque JTLib de SuperCollider, cette dernière étant tournée
4
- vers le live coding, et le scriptage de partition plus que la
5
- recherche acoustique _per se_.
1
+ #Coucou M.A.Oistes fous !
2
+
3
+ Vous avez carrément envie de faire de la grosse musique de bâtard ?
4
+
5
+ Vous voulez créer vous-même cette grosse musique de bâtard, mais en même
6
+ temps être un peu aidé par un logiciel non moins autant de bÂtard ?
7
+
8
+ Mais ouais ! Vous êtes au bon endroit !
9
+
10
+ ![](http://upload.wikimedia.org/wikipedia/commons/6/6f/Beethoven.jpg =100x100)
6
11
 
7
12
  ## Installation
8
13
 
9
- vous devez avoir installé supercollider. Pour l'instant, je n'ai testé
14
+ Vous devez avoir installé [SuperCollider](http://supercollider.github.io/).
15
+
16
+ ### Intégrité morale
17
+
18
+ ```gem install rubySC ```
19
+
20
+ Pour l'instant, je n'ai testé
10
21
  le programme que sur linux, et l'appel au programme est fait par une
11
22
  bonne grosse commande 'system'
12
23
 
24
+ Il y a un petit script "installation", qui __peut peut-être être__ utile (bim, port-salut).
25
+
13
26
  ## Utilisation
14
27
 
15
- * Un objet "SC" s'occupe de l'interface OSC avec superCollider.
28
+ RubySC est construit autour de deux idées
29
+
30
+ 1. rubySC complète à sa manière
31
+ [SCruby](https://github.com/maca/scruby) en offrant une interface avec
32
+ Super Collider à coup de gros d'appels OSC bien sales.
33
+
34
+ 2. rubySC implémente la bibliothèque JTLib de SuperCollider, cette dernière étant tournée
35
+ vers le 'scriptage de Patterns', aznoaz le _live coding_, agaga le scriptage de partition plus que la
36
+ recherche acoustique _per se_.
37
+
38
+
39
+ ## Je veux faire de la musique !
40
+
41
+ ```ruby
42
+ require SC
43
+ ```
44
+
45
+ qui créé sévéralz objets
46
+
47
+ *SC qui gère le bouzin de manière global, et qu'on va laisser tranquille la plupart du temps
48
+
49
+ ```ruby
50
+
51
+ SC.listeVoix ## raccourci "li"
52
+ SC.updateScore
53
+ SC.play
16
54
 
17
- `SC.demarrer`
55
+ ```
18
56
 
19
- * On ajoute des "voix", c'est-à-dire un mélange de 7 paramètres
57
+ * Des "voix", c'est-à-dire un mélange de 7 paramètres
20
58
 
21
59
  * instrument : regardez les noms des synthdef dans "init.sc" (ils proviennent tous de recherches sur [SCcode](http://sccode.org/))
22
60
  * dur : les rythmes de votre mélodie
@@ -26,42 +64,47 @@ bonne grosse commande 'system'
26
64
  * root : le micro-registre, utilisé pour faire des marches par exemple
27
65
  * scale : l'echelle utilisé pour votre mélodie
28
66
 
29
- `SC.set paramètre(hash), :nomVoix (ou "nomVoix")`
30
- plus précisément, avec "au clair de la lune" :
67
+ ###Mais c'est trop casse-couilles
31
68
 
32
- ` SC.set ({ :degree => [0,0,0,1,2,1,0,2,1,1,0], :dur => [1, [1, 1, 1 , 1 ,2 ,2 ,1 ,1 ,1 ,1 ,4]]}) , :superius
33
- SC.set ({ :degree => [[0, 2, 4], [0,3,5], [0,2,4], [1,3,4], [0,2,4], [1,3,4], [0,2,4]], :dur => [1, [2,2,2,2,2,2,4]])}, :basse`
69
+ Exactly ! Alors on devient trianglement plus user-friendly !
34
70
 
35
- On peut ensuite modifier ces voix
36
71
 
37
- `SC.set ({ :amp => 0.2, :instrument => :wobble, :
72
+ ```ruby
73
+ mel=Melodie.new ## génère une mélodie et un rythme grâce à un soupçon de magie
74
+ ```
38
75
 
39
- * arrêter ou reprenez vos voix :
40
-
41
- ` mu.stop :voixUn, :voixDeux ## arrête deux voix
42
- mu.play :voixUn ## reprend voixUn
43
- mu.remove :all ## arrête tout et supprime les voix `
76
+ on balance ensuite cette Melodie dans le grand monde
44
77
 
45
- Les voix sont stockées dans 'listeVoix'
78
+ ```ruby
46
79
 
47
- SC.listeVoix.inspect
80
+ mel.mettreVoix :piano
81
+ mel.setDuree [0,1,2,1,0] #si on est des bâtards
82
+ mel.setADSR #si on est des fous
48
83
 
49
- * Deux modules stockent des fonctions plus intéressantes.
84
+ ##j'en passe et des meilleurs !
85
+ ```
50
86
 
51
- 1. Partition, gère tout ce qui est transposition de masse
52
- 1. Marche, permet de transposer la mélodie d'une voix
53
- `Marche.diatonique :nomVoix, intervalleDeMarche, nbRepetitions`
54
- `Marche.diatonique :superius, 2, 2 ## deux marches par tierce ascendante`
87
+
88
+
89
+ ### Mais yen a encore plus !
90
+
91
+ * Trois modules stockent des fonctions plus intéressantes.
92
+
93
+ 1. Partition, gère tout ce qui est phénomène de masse
94
+ 1. Contrepoint, pour générer des voix à partir d'une cellule génératrice
95
+ 1. Harmonie, pour faire des grosses suites d'accords géniales
96
+ 1. Rythme ## à venir
97
+
98
+ ## Des instruments de folie !
55
99
 
56
100
  * Vous pouvez essayer de rajouter des instruments dans "init.sc", ou
57
101
  bien en apprenant SuperCollider, ou bien en cherchant par vous-mêmes
58
102
  des plugins sur le net.
103
+ * possibilität de jouer des samples pour avoir un vrai joli son et tout
104
+
59
105
 
60
- ==
61
-
106
+ # Grosse conclusion ♡
62
107
 
63
108
  Copiez-le comme des gros gorets, qu'un truc un peu simple un jour
64
109
  surgisse de ce monde de fous de MAOistes qui veulent détruire le monde
65
110
  à force de complexitudinités...
66
-
67
- >>>>>>> aff742cafef9b36d744548c85b04fe81943b7a2e
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+
3
+ if [ "$(uname)" == "Darwin" ]
4
+ then
5
+
6
+ brew update
7
+ brew install supercollider
8
+ mkdir bin
9
+ cd bin/
10
+ git clone --recursive https://github.com/supercollider/supercollider.git
11
+ cd supercollider
12
+
13
+ brew install cmake
14
+ brew install readline
15
+ brew install qt
16
+
17
+ mkdir build
18
+ cd build
19
+
20
+ # This due to the broken Symlink feature ( https://github.com/supercollider/supercollider/issues/1119 )
21
+ cmake -DREADLINE_INCLUDE_DIR=/usr/local/Cellar/readline/6.3.3/include -DREADLINE_LIBRARY=/usr/local/Cellar/readline/6.3.3/lib/libreadline.dylib -DCMAKE_BUILD_TYPE=Release -DNATIVE=ON -DSC_SYMLINK_CLASSLIB=OFF ..
22
+
23
+ make -j 8
24
+ make install
25
+
26
+ elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]
27
+ then
28
+
29
+ sudo apt-get install supercollider
30
+
31
+ elif [ -n "$COMSPEC" -a -x "$COMSPEC" ]
32
+ then
33
+ echo $0: this script does not support Windows \:\(
34
+ fi
@@ -1,5 +1,35 @@
1
1
  //////////dictionnaire d'instruments
2
2
 
3
+ ///// Vous pouvez ajouter de nouveaux instruments en mettant du code en-dessous, dans la syntaxe:
4
+ /// SynthDef ("nomInstr", { argumentsModifiables }
5
+ /// son = code
6
+ /// Out.ar(son)
7
+ /// })
8
+
9
+
10
+ //synth muy important
11
+
12
+ SynthDef(\sampler, { |out, bufnum, freq = 1, amp = 1, atk, decay, sustain, rel|
13
+ var sig, env;
14
+ //env=EnvGen.kr(Env.adsr(atk, decay, sustain, rel, amp));
15
+ env= EnvGen.kr(Env.linen(atk,sustain, rel, amp), doneAction:2);
16
+ sig = PlayBuf.ar(1, bufnum, rate: freq/1000, doneAction: 2) * env;
17
+ Out.ar(out, sig ! 2)
18
+ }).add;
19
+
20
+
21
+ SynthDef(\bell, { |out, accent = 0, amp = 0.1, decayScale = 1|
22
+ var exc = PinkNoise.ar(amp)
23
+ * Decay2.kr(Impulse.kr(0), 0.01, 0.05),
24
+ sig = Klank.ar(`[
25
+ { ExpRand(400, 1600) } ! 4,
26
+ 1 ! 4,
27
+ { ExpRand(0.1, 0.4) } ! 4
28
+ ], exc, freqscale: accent + 1, decayscale: decayScale);
29
+ DetectSilence.ar(sig, doneAction: 2);
30
+ Out.ar(out, sig ! 2)
31
+ }).add;
32
+
3
33
  SynthDef(\sax, { |out, freq, amp=0.1, gate=1|
4
34
  var num = 16;
5
35
  var harms = Array.series(num, 1, 1) * Array.exprand(num, 0.995, 1.001);
@@ -69,9 +99,5 @@ OSCFunc.newMatching(
69
99
  message[1].asString.interpret
70
100
  }, "/SC", n
71
101
  );
72
- Scale.major.semitones.asArray
73
- ///// Vous pouvez ajouter de nouveaux instruments en mettant du code en-dessous, dans la syntaxe:
74
- /// SynthDef ("nomInstr", { argumentsModifiables }
75
- /// son = code
76
- /// Out.ar(son)
77
- /// })
102
+ Scale.major.semitones.asArray;
103
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'Qt4'
4
+ require_relative 'qt/form.rb'
5
+ require_relative 'rubySC.rb'
6
+
7
+ marche=true
8
+
9
+ a = Qt::Application.new(ARGV)
10
+ u = Ui::Form.new
11
+ w = Qt::Widget.new
12
+ u.setupUi(w)
13
+
14
+ u.pushButton.connect(SIGNAL :clicked){
15
+ SC.play "melodie1"
16
+ }
17
+ u.pushButton_2.connect(SIGNAL :clicked){
18
+ SC.stop "melodie1"
19
+ }
20
+ u.verticalSlider.connect(SIGNAL ('valueChanged(int)')){
21
+ Rythme.tempo (u.verticalSlider.value/100)
22
+ }
23
+ u.pushButton_3.connect(SIGNAL :clicked) {
24
+ $qApp.quit
25
+ }
26
+
27
+ SC.demarrer
28
+ melodie =Melodie.new
29
+ melodie.enclencher :piano
30
+
31
+ w.show
32
+ a.exec
33
+
@@ -0,0 +1,124 @@
1
+ =begin
2
+ ** Form generated from reading ui file 'form.ui'
3
+ **
4
+ ** Created: ven. déc. 5 14:00:08 2014
5
+ ** by: Qt User Interface Compiler version 4.8.2
6
+ **
7
+ ** WARNING! All changes made in this file will be lost when recompiling ui file!
8
+ =end
9
+
10
+ class Ui_Form
11
+ attr_reader :verticalSlider_5
12
+ attr_reader :pushButton_3
13
+ attr_reader :verticalSlider_6
14
+ attr_reader :verticalSlider_2
15
+ attr_reader :pushButton
16
+ attr_reader :pushButton_2
17
+ attr_reader :verticalSlider_7
18
+ attr_reader :textEdit
19
+ attr_reader :textBrowser
20
+ attr_reader :verticalSlider
21
+ attr_reader :lcdNumber
22
+
23
+ def setupUi(form)
24
+ if form.objectName.nil?
25
+ form.objectName = "form"
26
+ end
27
+ form.resize(533, 477)
28
+ @verticalSlider_5 = Qt::Slider.new(form)
29
+ @verticalSlider_5.objectName = "verticalSlider_5"
30
+ @verticalSlider_5.geometry = Qt::Rect.new(180, 110, 23, 160)
31
+ @verticalSlider_5.maximum = 100
32
+ @verticalSlider_5.singleStep = 1
33
+ @verticalSlider_5.pageStep = 1
34
+ @verticalSlider_5.orientation = Qt::Vertical
35
+ @pushButton_3 = Qt::PushButton.new(form)
36
+ @pushButton_3.objectName = "pushButton_3"
37
+ @pushButton_3.geometry = Qt::Rect.new(400, 240, 95, 24)
38
+ @pushButton_3.cursor = Qt::Cursor.new(Qt::PointingHandCursor)
39
+ @pushButton_3.autoDefault = false
40
+ @pushButton_3.default = false
41
+ @verticalSlider_6 = Qt::Slider.new(form)
42
+ @verticalSlider_6.objectName = "verticalSlider_6"
43
+ @verticalSlider_6.geometry = Qt::Rect.new(320, 110, 23, 160)
44
+ @verticalSlider_6.maximum = 100
45
+ @verticalSlider_6.singleStep = 1
46
+ @verticalSlider_6.pageStep = 1
47
+ @verticalSlider_6.orientation = Qt::Vertical
48
+ @verticalSlider_2 = Qt::Slider.new(form)
49
+ @verticalSlider_2.objectName = "verticalSlider_2"
50
+ @verticalSlider_2.geometry = Qt::Rect.new(110, 110, 23, 160)
51
+ @verticalSlider_2.maximum = 100
52
+ @verticalSlider_2.singleStep = 1
53
+ @verticalSlider_2.pageStep = 1
54
+ @verticalSlider_2.orientation = Qt::Vertical
55
+ @pushButton = Qt::PushButton.new(form)
56
+ @pushButton.objectName = "pushButton"
57
+ @pushButton.geometry = Qt::Rect.new(400, 120, 95, 24)
58
+ @pushButton_2 = Qt::PushButton.new(form)
59
+ @pushButton_2.objectName = "pushButton_2"
60
+ @pushButton_2.geometry = Qt::Rect.new(400, 150, 95, 24)
61
+ @verticalSlider_7 = Qt::Slider.new(form)
62
+ @verticalSlider_7.objectName = "verticalSlider_7"
63
+ @verticalSlider_7.geometry = Qt::Rect.new(250, 110, 23, 160)
64
+ @verticalSlider_7.maximum = 100
65
+ @verticalSlider_7.singleStep = 1
66
+ @verticalSlider_7.pageStep = 1
67
+ @verticalSlider_7.orientation = Qt::Vertical
68
+ @textEdit = Qt::TextEdit.new(form)
69
+ @textEdit.objectName = "textEdit"
70
+ @textEdit.geometry = Qt::Rect.new(20, 80, 71, 31)
71
+ @textBrowser = Qt::TextBrowser.new(form)
72
+ @textBrowser.objectName = "textBrowser"
73
+ @textBrowser.geometry = Qt::Rect.new(50, 300, 451, 161)
74
+ @verticalSlider = Qt::Slider.new(form)
75
+ @verticalSlider.objectName = "verticalSlider"
76
+ @verticalSlider.geometry = Qt::Rect.new(40, 110, 23, 160)
77
+ @verticalSlider.maximum = 100
78
+ @verticalSlider.singleStep = 1
79
+ @verticalSlider.pageStep = 1
80
+ @verticalSlider.orientation = Qt::Vertical
81
+ @lcdNumber = Qt::LCDNumber.new(form)
82
+ @lcdNumber.objectName = "lcdNumber"
83
+ @lcdNumber.geometry = Qt::Rect.new(380, 20, 131, 71)
84
+
85
+ retranslateUi(form)
86
+ Qt::Object.connect(@verticalSlider, SIGNAL('valueChanged(int)'), @verticalSlider, SLOT('setValue(int)'))
87
+ Qt::Object.connect(@verticalSlider, SIGNAL('valueChanged(int)'), @lcdNumber, SLOT('display(int)'))
88
+
89
+
90
+ Qt::MetaObject.connectSlotsByName(form)
91
+ end # setupUi
92
+
93
+ def setup_ui(form)
94
+ setupUi(form)
95
+ end
96
+
97
+ def retranslateUi(form)
98
+ form.windowTitle = Qt::Application.translate("Form", "Form", nil, Qt::Application::UnicodeUTF8)
99
+ @pushButton_3.text = Qt::Application.translate("Form", "Quit", nil, Qt::Application::UnicodeUTF8)
100
+ @pushButton.text = Qt::Application.translate("Form", "play", nil, Qt::Application::UnicodeUTF8)
101
+ @pushButton_2.text = Qt::Application.translate("Form", "stop", nil, Qt::Application::UnicodeUTF8)
102
+ @textEdit.html = Qt::Application.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" \
103
+ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
104
+ "p, li { white-space: pre-wrap; }\n" \
105
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n" \
106
+ "<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">TEMPO</p></body></html>", nil, Qt::Application::UnicodeUTF8)
107
+ @textBrowser.html = Qt::Application.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" \
108
+ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
109
+ "p, li { white-space: pre-wrap; }\n" \
110
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n" \
111
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>", nil, Qt::Application::UnicodeUTF8)
112
+ end # retranslateUi
113
+
114
+ def retranslate_ui(form)
115
+ retranslateUi(form)
116
+ end
117
+
118
+ end
119
+
120
+ module Ui
121
+ class Form < Ui_Form
122
+ end
123
+ end # module Ui
124
+
@@ -0,0 +1,260 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>Form</class>
4
+ <widget class="QWidget" name="Form">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>533</width>
10
+ <height>477</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>Form</string>
15
+ </property>
16
+ <widget class="QSlider" name="verticalSlider_5">
17
+ <property name="geometry">
18
+ <rect>
19
+ <x>180</x>
20
+ <y>110</y>
21
+ <width>23</width>
22
+ <height>160</height>
23
+ </rect>
24
+ </property>
25
+ <property name="maximum">
26
+ <number>100</number>
27
+ </property>
28
+ <property name="singleStep">
29
+ <number>1</number>
30
+ </property>
31
+ <property name="pageStep">
32
+ <number>1</number>
33
+ </property>
34
+ <property name="orientation">
35
+ <enum>Qt::Vertical</enum>
36
+ </property>
37
+ </widget>
38
+ <widget class="QPushButton" name="pushButton_3">
39
+ <property name="geometry">
40
+ <rect>
41
+ <x>400</x>
42
+ <y>240</y>
43
+ <width>95</width>
44
+ <height>24</height>
45
+ </rect>
46
+ </property>
47
+ <property name="cursor">
48
+ <cursorShape>PointingHandCursor</cursorShape>
49
+ </property>
50
+ <property name="text">
51
+ <string>Quit</string>
52
+ </property>
53
+ <property name="autoDefault">
54
+ <bool>false</bool>
55
+ </property>
56
+ <property name="default">
57
+ <bool>false</bool>
58
+ </property>
59
+ </widget>
60
+ <widget class="QSlider" name="verticalSlider_6">
61
+ <property name="geometry">
62
+ <rect>
63
+ <x>320</x>
64
+ <y>110</y>
65
+ <width>23</width>
66
+ <height>160</height>
67
+ </rect>
68
+ </property>
69
+ <property name="maximum">
70
+ <number>100</number>
71
+ </property>
72
+ <property name="singleStep">
73
+ <number>1</number>
74
+ </property>
75
+ <property name="pageStep">
76
+ <number>1</number>
77
+ </property>
78
+ <property name="orientation">
79
+ <enum>Qt::Vertical</enum>
80
+ </property>
81
+ </widget>
82
+ <widget class="QSlider" name="verticalSlider_2">
83
+ <property name="geometry">
84
+ <rect>
85
+ <x>110</x>
86
+ <y>110</y>
87
+ <width>23</width>
88
+ <height>160</height>
89
+ </rect>
90
+ </property>
91
+ <property name="maximum">
92
+ <number>100</number>
93
+ </property>
94
+ <property name="singleStep">
95
+ <number>1</number>
96
+ </property>
97
+ <property name="pageStep">
98
+ <number>1</number>
99
+ </property>
100
+ <property name="orientation">
101
+ <enum>Qt::Vertical</enum>
102
+ </property>
103
+ </widget>
104
+ <widget class="QPushButton" name="pushButton">
105
+ <property name="geometry">
106
+ <rect>
107
+ <x>400</x>
108
+ <y>120</y>
109
+ <width>95</width>
110
+ <height>24</height>
111
+ </rect>
112
+ </property>
113
+ <property name="text">
114
+ <string>play</string>
115
+ </property>
116
+ </widget>
117
+ <widget class="QPushButton" name="pushButton_2">
118
+ <property name="geometry">
119
+ <rect>
120
+ <x>400</x>
121
+ <y>150</y>
122
+ <width>95</width>
123
+ <height>24</height>
124
+ </rect>
125
+ </property>
126
+ <property name="text">
127
+ <string>stop</string>
128
+ </property>
129
+ </widget>
130
+ <widget class="QSlider" name="verticalSlider_7">
131
+ <property name="geometry">
132
+ <rect>
133
+ <x>250</x>
134
+ <y>110</y>
135
+ <width>23</width>
136
+ <height>160</height>
137
+ </rect>
138
+ </property>
139
+ <property name="maximum">
140
+ <number>100</number>
141
+ </property>
142
+ <property name="singleStep">
143
+ <number>1</number>
144
+ </property>
145
+ <property name="pageStep">
146
+ <number>1</number>
147
+ </property>
148
+ <property name="orientation">
149
+ <enum>Qt::Vertical</enum>
150
+ </property>
151
+ </widget>
152
+ <widget class="QTextEdit" name="textEdit">
153
+ <property name="geometry">
154
+ <rect>
155
+ <x>20</x>
156
+ <y>80</y>
157
+ <width>71</width>
158
+ <height>31</height>
159
+ </rect>
160
+ </property>
161
+ <property name="html">
162
+ <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
163
+ &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
164
+ p, li { white-space: pre-wrap; }
165
+ &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
166
+ &lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;TEMPO&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
167
+ </property>
168
+ </widget>
169
+ <widget class="QTextBrowser" name="textBrowser">
170
+ <property name="geometry">
171
+ <rect>
172
+ <x>30</x>
173
+ <y>300</y>
174
+ <width>471</width>
175
+ <height>161</height>
176
+ </rect>
177
+ </property>
178
+ <property name="html">
179
+ <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
180
+ &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
181
+ p, li { white-space: pre-wrap; }
182
+ &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
183
+ &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
184
+ </property>
185
+ </widget>
186
+ <widget class="QSlider" name="verticalSlider">
187
+ <property name="geometry">
188
+ <rect>
189
+ <x>40</x>
190
+ <y>110</y>
191
+ <width>23</width>
192
+ <height>160</height>
193
+ </rect>
194
+ </property>
195
+ <property name="maximum">
196
+ <number>100</number>
197
+ </property>
198
+ <property name="singleStep">
199
+ <number>1</number>
200
+ </property>
201
+ <property name="pageStep">
202
+ <number>1</number>
203
+ </property>
204
+ <property name="value">
205
+ <number>20</number>
206
+ </property>
207
+ <property name="orientation">
208
+ <enum>Qt::Vertical</enum>
209
+ </property>
210
+ </widget>
211
+ <widget class="QLCDNumber" name="lcdNumber">
212
+ <property name="geometry">
213
+ <rect>
214
+ <x>380</x>
215
+ <y>20</y>
216
+ <width>131</width>
217
+ <height>71</height>
218
+ </rect>
219
+ </property>
220
+ </widget>
221
+ </widget>
222
+ <resources/>
223
+ <connections>
224
+ <connection>
225
+ <sender>verticalSlider</sender>
226
+ <signal>valueChanged(int)</signal>
227
+ <receiver>verticalSlider</receiver>
228
+ <slot>setValue(int)</slot>
229
+ <hints>
230
+ <hint type="sourcelabel">
231
+ <x>53</x>
232
+ <y>205</y>
233
+ </hint>
234
+ <hint type="destinationlabel">
235
+ <x>58</x>
236
+ <y>193</y>
237
+ </hint>
238
+ </hints>
239
+ </connection>
240
+ <connection>
241
+ <sender>verticalSlider</sender>
242
+ <signal>valueChanged(int)</signal>
243
+ <receiver>lcdNumber</receiver>
244
+ <slot>display(int)</slot>
245
+ <hints>
246
+ <hint type="sourcelabel">
247
+ <x>57</x>
248
+ <y>163</y>
249
+ </hint>
250
+ <hint type="destinationlabel">
251
+ <x>459</x>
252
+ <y>50</y>
253
+ </hint>
254
+ </hints>
255
+ </connection>
256
+ </connections>
257
+ <slots>
258
+ <slot>test1()</slot>
259
+ </slots>
260
+ </ui>