Forum: PC Hard- und Software Kann man eine 2d Funktion in gnuplot irgendwie als Audio Sample Datei exportieren?


von Nano (Gast)


Lesenswert?

Und falls nein, welche Möglichkeiten gibt es, aus einer Funktion, die 
man in gnuplot geplottet hat, in eine Audiodatei, z.b. WAV zu 
verwandeln?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1
gnuplot> set term
2
3
Available terminal types:
4
       cairolatex  LaTeX picture environment using graphicx package and Cairo backend
5
           canvas  HTML Canvas object
6
              cgm  Computer Graphics Metafile
7
          context  ConTeXt with MetaFun (for PDF documents)
8
          domterm  DomTerm terminal emulator with embedded SVG
9
           dpu414  Seiko DPU-414 thermal printer [small medium large]
10
             dumb  ascii art for anything that prints text
11
              dxf  dxf-file for AutoCad (default size 120x80)
12
            eepic  EEPIC -- extended LaTeX picture environment
13
              emf  Enhanced Metafile format
14
            emtex  LaTeX picture environment with emTeX specials
15
         epscairo  eps terminal based on cairo
16
         epslatex  LaTeX picture environment using graphicx package
17
     epson_180dpi  Epson LQ-style 180-dot per inch (24 pin) printers
18
      epson_60dpi  Epson-style 60-dot per inch printers
19
      epson_lx800  Epson LX-800, Star NL-10, NX-1000, PROPRINTER ...
20
              fig  FIG graphics language V3.2 for XFIG graphics editor
21
              gif  GIF images using libgd and TrueType fonts
22
           hp500c  HP DeskJet 500c, [75 100 150 300] [rle tiff]
23
             hpdj  HP DeskJet 500, [75 100 150 300]
24
             hpgl  HP7475 and relatives [number of pens] [eject]
25
           hpljii  HP Laserjet series II, [75 100 150 300]
26
             hppj  HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25]
27
             jpeg  JPEG images using libgd and TrueType fonts
28
            latex  LaTeX picture environment
29
              lua  Lua generic terminal driver
30
               mf  Metafont plotting standard
31
               mp  MetaPost plotting standard
32
          nec_cp6  NEC printer CP6, Epson LQ-800 [monochrome color draft]
33
          okidata  OKIDATA 320/321 Standard
34
              pbm  Portable bitmap [small medium large] [monochrome gray color]
35
             pcl5  HP Designjet 750C, HP Laserjet III/IV, etc. (many options)
36
         pdfcairo  pdf terminal based on cairo
37
              png  PNG images using libgd and TrueType fonts
38
         pngcairo  png terminal based on cairo
39
       postscript  PostScript graphics, including EPSF embedded files (*.eps)
40
          pslatex  LaTeX picture environment with PostScript \specials
41
            pstex  plain TeX with PostScript \specials
42
         pstricks  LaTeX picture environment with PSTricks macros
43
              qms  QMS/QUIC Laser printer (also Talaris 1200 and others)
44
               qt  Qt cross-platform interactive terminal
45
            sixel  Sixel Graphics
46
          sixelgd  sixel using libgd and TrueType fonts
47
            starc  Star Color Printer
48
              svg  W3C Scalable Vector Graphics
49
      tandy_60dpi  Tandy DMP-130 series 60-dot per inch graphics
50
          tek40xx  Tektronix 4010 and others; most TEK emulators
51
          tek410x  Tektronix 4106, 4107, 4109 and 420X terminals
52
          texdraw  LaTeX texdraw environment
53
             tgif  TGIF X11 [mode] [x,y] [dashed] ["font" [fontsize]]
54
             tikz  TeX TikZ graphics macros via the lua script driver
55
         tkcanvas  Tk canvas widget
56
             tpic  TPIC -- LaTeX picture environment with tpic \specials
57
          unknown  Unknown terminal type - not a plotting device
58
            vttek  VT-like tek40xx terminal emulator
59
              wxt  wxWidgets cross-platform interactive terminal
60
              x11  X11 Window System interactive terminal
61
             xlib  X11 Window System (dump of gnuplot_x11 command stream)
62
            xterm  Xterm Tektronix 4014 Mode
Sieht nicht danach aus. ;-)

Ich vermute mal, dass du mit Octave da eher was findest, wie man 
zumindest CSV-Daten oder sowas exportieren kann.

von nicht "Gast" (Gast)


Lesenswert?

gnuPLOT ist zum plotten da wie der Name vermuten lässt. Was du suchst 
nennt sich Mathematica und gibt es kostenlos für den Raspberry Pi.

von rbx (Gast)


Lesenswert?

Audiodateien sind periodisierte Wellenformen. Mit einem 
Wellenformengenerator wäre man da schon eher auf der sicheren Seite: 
https://www.mikrocontroller.net/articles/Digitaler_Funktionsgenerator.

Man müsste das Ding etwas umbauen, um dann mit mehreren Sinuswellen 
Additive Sythese zu betreiben, welche sich an komplexeren Funktionen 
orientiert.

Es gibt auch Sythesizerprogramme, in welchen man eine Funktion 
einzeichnen kann, die dann in eine Audiodatei umgewandelt wird.

Ich weiß nicht, wie weit man mit solchen Fragen bei Cubase kommt, aber 
das ist in etwa so die Richtung, in die es geht.

https://p5r.uk/blog/2009/audio-with-gnu-octave.html

von Nano (Gast)


Lesenswert?

rbx schrieb:
> Man müsste das Ding etwas umbauen, um dann mit mehreren Sinuswellen
> Additive Sythese zu betreiben, welche sich an komplexeren Funktionen
> orientiert.

Das ist genau das, was ich gerne machen würde. Mathematisch angegebene 
Sinusfunktionen mit verschiedenen Frequenzen und Amplituden addieren und 
dann nur die Funktion, die als Summe rauskommt, als WAV oder sonstige 
Audio Datei speichern.

Anschließend möchte ich es mir nur anhören und gegebenenfalls 
weiterverwenden.

> Es gibt auch Sythesizerprogramme, in welchen man eine Funktion
> einzeichnen kann, die dann in eine Audiodatei umgewandelt wird.

Das wäre eine Möglichkeit, aber die beraubt mir dann die Möglichkeiten 
von gnuplot.

>
> Ich weiß nicht, wie weit man mit solchen Fragen bei Cubase kommt, aber
> das ist in etwa so die Richtung, in die es geht.
>
> https://p5r.uk/blog/2009/audio-with-gnu-octave.html

Das werde ich mal testen. Bin mir nur nicht gerade so sicher,
ob das da:
wave = sin(time*2*pi*freq)';
das ist, was ich möchte. (allerdings bin ich gerade zu müde, werde mir 
das also Morgen nochmal angucken)

Eigentlich wollte ich jedenfalls eher so etwas machen:
f(x) = sin(x) + sin(2*x) + sin(x/4) usw.
und f(x) soll dann als WAV ausgegeben werden.

von Christoph Z. (christophz)


Lesenswert?

Nano schrieb:
> Das ist genau das, was ich gerne machen würde. Mathematisch angegebene
> Sinusfunktionen mit verschiedenen Frequenzen und Amplituden addieren und
> dann nur die Funktion, die als Summe rauskommt, als WAV oder sonstige
> Audio Datei speichern.

Numerische Mathematik Software wie Octave, Matlab, Python etc. kann so 
was.

Oder sonst vielleicht mal bei den Musikern vorbeisehen, z. B. PureData, 
Faust, Supercollider, SonicPi, ...

von Gerhard Z. (germel)


Lesenswert?

In's unreine gesprochen: Gnuplot kann Daten vor dem Plot durch externe 
Programme "filtern" lassen (siehe z.B. 
http://www.gnuplot.info/faq/#x1-300003.7).

Nun nur noch ein kurzes Filter schreiben, welches die Standart-Eingabe 
in die Standard-Ausgabe durchreicht und gleichzeitig aus den Daten die 
Wave-Datei erzeugt. Hierfür zunächst im Filter einen Header schreiben 
(Pascal Code der Header Definition als Beispiel hier):
1
    WaveHeader: record
2
      ChunkID : array[1..4] of CHAR;
3
      ChunkSize : longint;  // 4 byte
4
      Format  : array[1..4] of CHAR;
5
      Subchunk1ID : array[1..4] of CHAR;
6
      Subchunk1Size : longint;
7
      AudioFormat : smallint;  // 2 byte
8
      NumChannels : smallint;
9
      SampleRate : longint;
10
      ByteRate : longint;
11
      BlockAlign : smallint;
12
      BitsPerSample : smallint;
13
      Subchunk2ID : array[1..4] of CHAR;
14
      Subchunk2Size : longint;
15
    end;

und danach die Gnuplot Daten im int16_t Format anhängen - fertig. Die 
Daten für den Wave Header sind z.B. hier beschrieben:
https://docs.fileformat.com/audio/wav/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.