- commit
- 6fc5e1681f3609aea6f34f52a021926cb82b5182
- parent
- 030c7547aab47a831a094db66c1d915bc61cd88f
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2010-10-29 20:42
marker
Diffstat
| A | rb_expermients/buffer.cpp | 71 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | rb_expermients/buffer.h | 34 | ++++++++++++++++++++++++++++++++++ |
| A | rb_expermients/gs.c | 58 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | rb_expermients/marker.cpp | 64 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | rb_expermients/marker.h | 33 | +++++++++++++++++++++++++++++++++ |
| A | rb_expermients/rb1 | 6 | ++++++ |
| A | rb_expermients/rb2 | 41 | +++++++++++++++++++++++++++++++++++++++++ |
| A | rb_expermients/rb3 | 28 | ++++++++++++++++++++++++++++ |
| A | rb_expermients/test.cpp | 18 | ++++++++++++++++++ |
| A | rb_expermients/test.h | 39 | +++++++++++++++++++++++++++++++++++++++ |
10 files changed, 392 insertions, 0 deletions
diff --git a/rb_expermients/buffer.cpp b/rb_expermients/buffer.cpp
@@ -0,0 +1,71 @@
-1 1 #include "buffer.h"
-1 2
-1 3 Buffer::Buffer() {
-1 4 _length=0;
-1 5 array=new float[length()];
-1 6 }
-1 7
-1 8 Buffer::~Buffer() {
-1 9 delete[] array;
-1 10 }
-1 11
-1 12 float Buffer::get(int i) {
-1 13 if (i>=0 && i<length())
-1 14 return array[i];
-1 15 else
-1 16 return NULL;
-1 17 }
-1 18
-1 19 void Buffer::set(int i, float v) {
-1 20 if (i>=0 && i<=length()) array[i]=v;
-1 21 }
-1 22
-1 23 void Buffer::insert(int i,float v) {
-1 24 if (i>=0 && i<=length()) {
-1 25 float* tmpArray=new float[length()+1];
-1 26 for (int ii=0; ii<i; ii++)
-1 27 tmpArray[ii]=array[ii];
-1 28 tmpArray[i]=v;
-1 29 for (int ii=i; ii<length(); ii++)
-1 30 tmpArray[ii+1]=array[ii];
-1 31 delete[] array;
-1 32 array=tmpArray;
-1 33 _length++;
-1 34 }
-1 35 }
-1 36
-1 37 void Buffer::add(float v) {
-1 38 insert(length(),v);
-1 39 }
-1 40
-1 41 void Buffer::remove(int i) {
-1 42 if (i>=0 && i<length()) {
-1 43 float* tmpArray=new float[length()-1];
-1 44 for (int ii=0; ii<i; ii++)
-1 45 tmpArray[ii]=array[ii];
-1 46 for (int ii=i+1; ii<length(); ii++)
-1 47 tmpArray[ii-1]=array[ii];
-1 48 delete[] array;
-1 49 array=tmpArray;
-1 50 _length--;
-1 51 }
-1 52 }
-1 53
-1 54 int Buffer::length() {
-1 55 return _length;
-1 56 }
-1 57
-1 58 void Buffer::print() {
-1 59 std::cout << "[";
-1 60 for (int i=0; i<length()-1; i++)
-1 61 std::cout << get(i) << " ";
-1 62 if (length() > 0)
-1 63 std::cout << get(length()-1);
-1 64 std::cout << "]";
-1 65 }
-1 66
-1 67 void Buffer::println() {
-1 68 print();
-1 69 std::cout << std::endl;
-1 70 }
-1 71
diff --git a/rb_expermients/buffer.h b/rb_expermients/buffer.h
@@ -0,0 +1,34 @@
-1 1 #ifndef __XIBUFFER_H
-1 2 #define __XIBUFFER_H
-1 3
-1 4 #include <iostream>
-1 5
-1 6 class Buffer {
-1 7 public:
-1 8 Buffer();
-1 9 ~Buffer();
-1 10 float get(int i);
-1 11 void set(int i, float v);
-1 12 void add(float v);
-1 13 void insert(int i,float v);
-1 14 void remove(int i);
-1 15 int length();
-1 16 void print();
-1 17 void println();
-1 18 private:
-1 19 float* array;
-1 20 int _length;
-1 21 };
-1 22
-1 23 /*
-1 24 int main() {
-1 25 Buffer b;
-1 26 b.insert(0,17);
-1 27 b.insert(0,13);
-1 28 b.insert(1,9);
-1 29 b.remove(1);
-1 30 b.println();
-1 31 }
-1 32 */
-1 33
-1 34 #endif
diff --git a/rb_expermients/gs.c b/rb_expermients/gs.c
@@ -0,0 +1,58 @@
-1 1 #include <gst/gst.h>
-1 2 #include <stdbool.h>
-1 3
-1 4 static GMainLoop *loop;
-1 5
-1 6 static gboolean bus_call(GstBus *bus, GstMessage *msg, void *user_data)
-1 7 {
-1 8 switch (GST_MESSAGE_TYPE(msg)) {
-1 9 case GST_MESSAGE_EOS: {
-1 10 g_message("End-of-stream");
-1 11 g_main_loop_quit(loop);
-1 12 break;
-1 13 }
-1 14 case GST_MESSAGE_ERROR: {
-1 15 GError *err;
-1 16 gst_message_parse_error(msg, &err, NULL);
-1 17 g_error("%s", err->message);
-1 18 g_error_free(err);
-1 19
-1 20 g_main_loop_quit(loop);
-1 21 break;
-1 22 }
-1 23 default:
-1 24 break;
-1 25 }
-1 26
-1 27 return true;
-1 28 }
-1 29
-1 30 static void play_uri(const char *uri)
-1 31 {
-1 32 GstElement *pipeline;
-1 33 GstBus *bus;
-1 34
-1 35 loop = g_main_loop_new(NULL, FALSE);
-1 36 pipeline = gst_element_factory_make("playbin", "player");
-1 37
-1 38 if (uri)
-1 39 g_object_set(G_OBJECT(pipeline), "uri", uri, NULL);
-1 40
-1 41 bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
-1 42 gst_bus_add_watch(bus, bus_call, NULL);
-1 43 gst_object_unref(bus);
-1 44
-1 45 gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING);
-1 46
-1 47 g_main_loop_run(loop);
-1 48
-1 49 gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL);
-1 50 gst_object_unref(GST_OBJECT(pipeline));
-1 51 }
-1 52
-1 53 int main(int argc, char *argv[])
-1 54 {
-1 55 gst_init(&argc, &argv);
-1 56 play_uri(argv[1]);
-1 57 return 0;
-1 58 }
diff --git a/rb_expermients/marker.cpp b/rb_expermients/marker.cpp
@@ -0,0 +1,64 @@
-1 1 #include "marker.h"
-1 2
-1 3 Marker::Marker() {
-1 4 anew;
-1 5 aold;
-1 6 }
-1 7
-1 8 Marker::~Marker() {
-1 9 }
-1 10
-1 11 void Marker::add(float pold, float pnew) {
-1 12 anew.add(pnew);
-1 13 aold.add(pold);
-1 14 }
-1 15
-1 16 void Marker::rm(int pi) {
-1 17 anew.remove(resort(pi));
-1 18 anew.remove(resort(pi));
-1 19 }
-1 20
-1 21 float Marker::getNew(int pi) {
-1 22 return anew.get(resort(pi));
-1 23 }
-1 24
-1 25 float Marker::getOld(int pi) {
-1 26 return aold.get(resort(pi));
-1 27 }
-1 28
-1 29 void Marker::setNew(int pi, float pnew) {
-1 30 anew.set(resort(pi), pnew);
-1 31 }
-1 32
-1 33 int Marker::length() {
-1 34 return anew.length();
-1 35 }
-1 36
-1 37 int Marker::resort(int pi) {
-1 38 if (!(pi>=0 && pi<length())) return -1;
-1 39 // write anew and indices into arrays
-1 40 float tnew[length()];
-1 41 int ti[length()];
-1 42 for (int i=0; i<length(); i++) {
-1 43 tnew[i]=anew.get(i);
-1 44 ti[i]=i;
-1 45 }
-1 46 // sort arrays
-1 47 for (int j=0; j<length()-1; j++) {
-1 48 for (int i=0; i<length()-1-j; i++) {
-1 49 if (tnew[i]>tnew[i+1]) {
-1 50 // swap
-1 51 float ttf;
-1 52 ttf=tnew[i];
-1 53 tnew[i]=tnew[i+1];
-1 54 tnew[i+1]=ttf;
-1 55 int tti;
-1 56 tti=ti[i];
-1 57 ti[i]=ti[i+1];
-1 58 ti[i+1]=tti;
-1 59 }
-1 60 }
-1 61 }
-1 62 return ti[pi];
-1 63 }
-1 64
diff --git a/rb_expermients/marker.h b/rb_expermients/marker.h
@@ -0,0 +1,33 @@
-1 1 #ifndef __XIMARKER_H
-1 2 #define __XIMARKER_H
-1 3
-1 4 #include <iostream>
-1 5 #include "buffer.h"
-1 6
-1 7 class Marker {
-1 8 public:
-1 9 Marker();
-1 10 ~Marker();
-1 11 void add(float pold, float pnew);
-1 12 void rm(int pi);
-1 13 float getNew(int pi);
-1 14 float getOld(int pi);
-1 15 void setNew(int pi, float pnew);
-1 16 int length();
-1 17 private:
-1 18 Buffer anew;
-1 19 Buffer aold;
-1 20 int resort(int pi);
-1 21 };
-1 22
-1 23 /*
-1 24 int main() {
-1 25 Marker m;
-1 26 m.add(0,0);
-1 27 m.add(1,1);
-1 28 m.add(0.5,0.4);
-1 29 std::cout << m.getNew(3) << std::endl;
-1 30 }
-1 31 */
-1 32
-1 33 #endif
diff --git a/rb_expermients/rb1 b/rb_expermients/rb1
@@ -0,0 +1,6 @@ -1 1 include -1 2 -1 3 // für jeden Abschnitt wird ein Stretcher erstellt, der den Abschnitt anpasst -1 4 rb=new RubberBandStretcher(44100,1,DefaultOptions,ratio); -1 5 rb.study(abschnitt,abschnitt.length,true); -1 6 rb.process(abschnitt,abschnitt.length,true);
diff --git a/rb_expermients/rb2 b/rb_expermients/rb2
@@ -0,0 +1,41 @@
-1 1
-1 2 SNDFILE *sndfile;
-1 3 SNDFILE *sndfileOut;
-1 4 SF_INFO sfinfo;
-1 5 SF_INFO sfinfoOut;
-1 6
-1 7 sndfile = sf_open(fileName, SFM_READ, &sfinfo);
-1 8
-1 9 sfinfoOut.channels = sfinfo.channels;
-1 10 sfinfoOut.format = sfinfo.format;
-1 11 sfinfoOut.frames = int(sfinfo.frames * ratio + 0.1);
-1 12 sfinfoOut.samplerate = sfinfo.samplerate;
-1 13 sfinfoOut.sections = sfinfo.sections;
-1 14 sfinfoOut.seekable = sfinfo.seekable;
-1 15
-1 16 sndfileOut = sf_open(fileNameOut, SFM_WRITE, &sfinfoOut)
-1 17
-1 18 RubberBandStretcher ts(sfinfo.samplerate, channels, options,
-1 19 ratio, frequencyshift);
-1 20
-1 21 float *fbuf = new float[channels * ibs];
-1 22 float **ibuf = new float *[channels];
-1 23 for (size_t i = 0; i < channels; ++i) ibuf[i] = new float[ibs];
-1 24
-1 25 if ((count = sf_readf_float(sndfile, fbuf, ibs)) < 0) break;
-1 26
-1 27 for (size_t c = 0; c < channels; ++c) {
-1 28 for (int i = 0; i < count; ++i) {
-1 29 float value = fbuf[i * channels + c];
-1 30 ibuf[c][i] = value;
-1 31 }
-1 32 }
-1 33
-1 34 ts.study(ibuf, count, final);
-1 35 ts.process(ibuf, count, final);
-1 36
-1 37
-1 38 sf_writef_float(sndfileOut, fobf, avail);
-1 39
-1 40 sf_close(sndfile);
-1 41 sf_close(sndfileOut);
diff --git a/rb_expermients/rb3 b/rb_expermients/rb3
@@ -0,0 +1,28 @@
-1 1
-1 2 double getRatio(int i) {
-1 3 float o1=marger.getOld(i);
-1 4 float n1=marger.getNew(i);
-1 5 float o2=marger.getOld(i+1);
-1 6 float n2=marger.getNew(i+1);
-1 7 return (n2-n1)/(o2-o1);
-1 8 }
-1 9
-1 10 int samples=10000000;
-1 11 int sample_rate=44100
-1 12 float[] raw=new float[samples];
-1 13
-1 14 Marker marker=new Marker();
-1 15
-1 16 marker.add(0,0);
-1 17 marker.add(0.4,0.5);
-1 18 marker.add(1,1);
-1 19
-1 20
-1 21 for (int i=0; i<marker.length()-1; i++) {
-1 22 RubberBandStretcher ts(sample_rate, 1, DefaultOptions, getRatio(i), 0);
-1 23 ts.study(raw, raw.length, true);
-1 24 ts.process(raw, raw.length, true);
-1 25 int avail=ts.available();
-1 26 float[] tmpRaw=new tmpRaw[avail];
-1 27 addRaw(ts.recieve(tmpRaw,avail));
-1 28 }
diff --git a/rb_expermients/test.cpp b/rb_expermients/test.cpp
@@ -0,0 +1,18 @@
-1 1
-1 2 #include "test.h"
-1 3
-1 4 /*
-1 5 RTlayer::RTlayer() {
-1 6 marker;
-1 7 }
-1 8
-1 9 RTlayer::~RTlayer() {
-1 10 }
-1 11
-1 12 float RTlayer::getRatio(int i) {
-1 13 if (i>=0 && i<marker.length()-1)
-1 14 return (marker.getNew(i+1)-marker.getNew(i))/(marker.getOld(i+1)-marker.getOld(i));
-1 15 else
-1 16 return NULL;
-1 17 }
-1 18 */
diff --git a/rb_expermients/test.h b/rb_expermients/test.h
@@ -0,0 +1,39 @@
-1 1
-1 2 //#include <iostream>
-1 3 //#include "marker.h"
-1 4 #include <rubberband/RubberBandStretcher.h>
-1 5
-1 6 /*
-1 7 class RTlayer {
-1 8 public:
-1 9 RTlayer();
-1 10 ~RTlayer();
-1 11 float getRatio(int i);
-1 12 Marker marker;
-1 13 };
-1 14 */
-1 15
-1 16 int main() {
-1 17 /*
-1 18 RTlayer layer;
-1 19
-1 20 int samples=10000000;
-1 21 int sample_rate=44100;
-1 22 float* raw=new float[samples];
-1 23
-1 24 layer.marker.add(0,0);
-1 25 layer.marker.add(0.4,0.5);
-1 26 layer.marker.add(1,1);
-1 27 */
-1 28
-1 29 // for (int i=0; i<layer.marker.length()-1; i++) {
-1 30 RubberBand::RubberBandStretcher ts(44100, 1);
-1 31 // ts.study(raw, raw.length, true);
-1 32 // ts.process(raw, raw.length, true);
-1 33 // int avail=ts.available();
-1 34 // float[] tmpRaw=new tmpRaw[avail];
-1 35 // addRaw(ts.recieve(tmpRaw,avail));
-1 36 // }
-1 37
-1 38
-1 39 }