- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 22 von 25 ErsteErste ... 122021222324 ... LetzteLetzte
Ergebnis 211 bis 220 von 241

Thema: wav Dateien: Programieren von Wiedergabe und Aufnahme

  1. #211
    HaWe
    Gast
    Anzeige

    Powerstation Test
    Es ist im Moment von mir als ein Regie-Programm zur Vorbereitung und zum Test gedacht, mit universellen Schnittstellen zu Standard-Datenformaten, und das heißt:
    *.wav - Standard.

    Das "echte" Spracherkennungsprogramm wird das sein, das danach kommt und auf den Tests des Regieprogramms aufbaut...

    Trotzdem werden Sounds immer als wav gespeichert und wieder geladen, niemals anders, sonst ist es nicht mehr Standard-kompatibel über verschiedene Plattformen hinweg (z.B. auch für die Anwendung externer Sound-Filter).

  2. #212
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Du sagst es ja. Es ist ein "Regie-Programm". Warum muss das über verschiedene Plattformen hinweg kompatibel sein?

    Bleibt das Plotten jetzt in einer Spur oder wird mehr auf einem Bildschirm geplottet?

  3. #213
    HaWe
    Gast
    zum Plotten:
    es wäre vlt gut, wenn wir später verschiedene Plots vergleichen könnten, also dann 2-3 untereinander, ich weiß noch nicht, was auf uns zu kommt:
    vlt auch oben ein Sound-Plot, darunter der FFT-Graph.
    oder 2 Sounds und 2 FFT-Graphen.
    Eine variable Basis-Null-Linie (x-Achse) macht die Sache sicher sehr übersichlich.

    zum Regie-Programm:
    auch da weiß ich noch nicht, ob wir mit der FFT und dem "Roh-Sound" Erfolg haben, gerade wenn ich spreche und deine Muster verwende, oder auch wenn verschieden starke Störungen dabei sind, oder wenn Wörter verschieden schnell gesprochen werden.
    Auch was die FFT draus macht, kann ich nur grob erahnen.
    Bisher haben wir ja nur die Möglichkeit, Bereiche vorher/nachher abzuschneiden - der Klang an sich wurde nicht verändert.
    Es kann also heißen, daß die Vielzahl an Begleit-Frequenzen reduziert werden muss durch Hoch- oder Tiefpassfilter, damit der signifikante Bereich möglichst prägnant herausgestellt wird und unwichtige Frequenzen eliminiert werden.
    Keine Ahnung, welche das sein werden - hohe Frequenzen können durchaus wichtig sein (Zisch- oder harte "t"-Laute oder Gutturale etc. ) - trotzdem mag es sein, dass die tiefen Anteile des Klangs (z.B. bis 1000 Hz) ausreichend sind.
    Je nachdem, wie die CC Ergebnisse sind, muss man also mit den Klängen experimentieren, aber dafür einen eigenen Equalizer noch zu programmieren, ist sicher etwas hoch gegriffen.
    Daher die Option, dafür zunächst externe wav-edit-Programme verwenden zu können bzw. können zu müssen.

  4. #214
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Was mir eben nicht so gefällt ist dieses Statische beim direkt in den Grafikspeicher schreiben. Man kann es nicht verschieben und gar nichts. Das ist so gar nicht mein Ding. Okay wenn man nur eine Anzeige hat die man danach eh wieder weg klickt von mir aus, aber wenn man das länger verwenden will ist der Teil vom Bildschirm ja futsch. Unschön. GTK wäre da eben eine nette Lösung gewesen, dafür gibt es auch Beispiele, aber dann müsstest du dir erstmal das komplette GTK 3 plus dev installieren. Das ist wohl übertrieben.

    Ich habe aber noch die Möglichkeiten von OpenWF und OpenCV gefunden. Das könnte eine Möglichkeit sein. Mit OpenCV arbeite ich ja sowieso wegen Gesichtserkennung usw. Mal schauen was da geht. Wäre in meinen Augen angenehmer, wenn man das Bild auch in den Hintergrund schicken kann bei Bedarf.

    Hast du eigentlich das mit fftw.org gesehen?

  5. #215
    HaWe
    Gast
    sorry, bitte bleibe bei den Tools, so wie vereinbart, ich werde nichts anderes installieren als mein jetziges openVG, also auch kein openCV.
    Ich muss schließlich das Programm und seine einzelnen API-Tools auch selber verwenden und die Tools entsprechend selber weiter programmieren können.
    Dazu muss ich die Funktionen kennen und selber nutzen können.

    Für andere FFT-Funktionen als die von mir verlinkte sehe ich auch keinen Zusatz-Nutzen - wozu also wechseln? Die Cross-Correlation wird als Herausforderung schwierig genug werden. Es ist ja komplettes Neuland für mich, ich muss mich da selber Schritt für Schritt langsam einarbeiten und hineinfinden. Bei zuviel neuen Dingen verliere ich den Überblick.

    Ich habe mich inzwischen deshalb auch gegen ncurses entschieden, weil ich mich dann in dem Menü nicht mehr zurechtfinde, und außerdem sind ncurses-Fenster für andere Ausgabefunktonen nicht mehr stdio.h-kompatibel, so wie es das LXTerminal-Window ist. Nur für diese einmalige simple Auswahl 0...9 eine inkompatible Monsterlib zu installieren, die ich später nicht mehr weiter verwende, ist für mich ein unwirtschaftlicher und nicht angemessener Aufwand.

    Was in 5 oder 6 Jahren mal sein wird, weiß ich ntl nicht, da kann ich durchaus so weit sein, dass ich auch möglicherweise mal openCV und ncurses verwenden könnte.

    Ich brauche als gemeinsame Regie-Schnittstelle auch genau das Menü, das ich oben bereits vorprogrammiert und dir gepostet hatte.

    Ich bin kein Linux-Programmierer, ich programmiere auf MSDOS- TurboC oder Arduino-IDE-Niveau, und ich verwende selber auch kein C++, sondern ausschließlich ANSI C.
    Daher auch meine absolute Abneigung genüber Vektoren und strings, stattdesen: char * array[size].

    Wenn mir das Programm zu kompliziert und von der Syntax her zu fremd ist, kann ich es selber später nicht mehr für meine eigenen Spracherkennungsprogramme nutzen, und wozu dann der ganze Aufwand?

    Bitte bleib also bei einfachen Menü-Schnittstellen wie diesen hier (Menü-Punkt 0 für csv kann jetzt sogar komplett wegfallen)


    Code:
    0 Soundfile *.csv in Programm öffnen / laden \n  // csv kann jetzt sogar komplett wegfallen !
    
    1 Soundfile *.wav in Programm öffnen / laden \n
    2 Soundfile *.wav öffnen / abspielen + Plot \n
    3 Sound aufnehmen per Micro / SoundCard \n
    4 akt. Sound (Array im RAM) abspielen + Plot \n
    5 akt. Sound optimieren (noise/cut) \n
    6 akt. Sound (im RAM) als *.wav File speichern unter... \n
    
    7 akt. Sound an FFT + Plot \n
    8 akt. Sound cross correlation mit 1 wav File \n
    9 akt. Sound cross correlation mit allen *.wav Files (auto) \n

    und nutze bitte diese API-Schnittstellen mit dieser Syntax, wie ich sie im Prinzip bereits vor vielen Seiten gepostet hatte, nicht wesentlich anders:

    Code:
    a) record_sound(int32_t * array, int32_t length);
    b) save_sound2wavFile(int32_t * array, FILE * fp, char * filename);  // über Zenity PopUp Window
    c) FILE * fp = open_wavFile(int32_t * array, char * filename);       // über Zenity PopUp Window
    d) play_soundArray(int32_t * array, int32_t length);
    e) play_wavFile(char * filename);                                   // über Zenity PopUp Window
    sowie
    f) plotArray(int32_t * array, int32_t length, int y0);
    g) optimizeArray(int32_t * array, int32_t length);
    h) array2FFT(int32_t * array, int32_t length, double * fx, double * fy, int32_t FFT_length);
    i) cross_corr(int32_t * array, int32_t * pattern, int32_t length);

    Diese Funktionen müssen genau so in der Sound-Lib und ggf. in einer weiteren Sound-Tools-Lib genau so zur Verfügung stehen.

    Nur wenn wir diese gemeinsame Menü- und API-Basis haben, kann unsere Arbeit auch später auf andere Anwendungen (z.B echte Wort-Steuerung von mobilen Robotern mit automatischer lernfähiger Spracherkennung) portiert werden.


    ps,

    Wenn du das LXTerminal Window neben dem openVG Window positionieren und in der Größe anpassen willst, können wir diesen Befehl verwenden:

    Code:
    // LXTerminal window:  pos (x,y): 520,0,  size: 320x320   
     system("wmctrl -r LXTerminal -e 0, 520,0, 320,320");
    Geändert von HaWe (23.06.2016 um 11:20 Uhr)

  6. #216
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Also zum Mitschreiben. Dir wird die Variante mit ncurses zu kompliziert? Obwohl du mit ncourses eigentlich nichts zu tun hast und es in der Struktur in Main eigentlich sehr klar zu sehen ist was wie wo passiert? Ich meine, da sind die ganzen case Aufrufe. Diese rufen sehr einfach die Funktionen auf die für die Spracherkennung benötigt werden. Da ist nicht viel Schnick schnack drum rum und das kann man dann auch ziemlich einfach in jede andere Menüstruktur ganz nach Belieben einbauen. Das hat weder was mit Linux-Programmierung noch sonst etwas zu und da ncurses meines Wissens nach auch auf WIndows verfügbar ist wäre sogar eine Portierung kein wirkliches Problem, aber wie gesagt, wie am Ende das Menü aussieht, ob man es ganz minimalistisch über eine Eingabeaufforderung oder bis hin zu einem aufgeblasenen QT oder Windows Fenster haben will ändert nichts an den eigentlichen Funktionen.

    Code:
    		switch(menuRet)
    		{
    			case 0:
    			
    				datei.open(_datei, ios::in);
    				
    				if(datei)
    				{
    					for(i=0;i<SHRT_MAX;++i)
    					{
    						datei >> waveBuffer[i];
    					}
    					
    					datei.close();
    				
    					_speicher = "Wave vorhanden";
    					_status = "gesichert";
    				}
    				else _fehler = "Datei konnte nicht geöffnet werden!";
    				
    				break;
    
    			case 1:
    			
    				audioCapture(waveBuffer, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
    				
    				_speicher = "Wave vorhanden";
    				_status = "ungesichert";
    				_datei = "";
    				
    				break;
    			
    			case 2:
    			
    				datei.open(_datei, ios::in);
    				
    				if(datei)
    				{
    					for(i=0;i<SHRT_MAX;++i)
    					{
    						datei >> waveTemp[i];
    					}
    					
    					datei.close();
    					
    					_fehler = "Datei " + _datei + " wurde abgespielt!";
    					
    					_datei = ""; 
    				
    					playCaptured(waveTemp, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
    				}
    				else _fehler = "Datei konnte nicht geöffnet werden!";
    				
    				break;
    
    			case 3:
    
    				playCaptured(waveBuffer, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
    	
    				break;
    				
    			case 4:
    				
    				optimieren(waveBuffer, SHRT_MAX);
    				
    				_fehler = "Speicher optimiert!";
    
    				_speicher = "Wave optimiert";
    				_status = "ungesichert";
    				_datei = "";
    				
    				break;
    			
    			case 5:	
    					
    				plotArray(waveBuffer, SHRT_MAX, 0);
    				
    				break;
    
    			case 6:
    			
    				dateiEndung = ".hhw";
    
    				dateiName = _datei + dateiEndung;
    				
    				datei.open(dateiName, ios::out);
    		
    				if(datei)
    				{
    					for(i=0;i<SHRT_MAX;++i)
    					{
    						datei << waveBuffer[i] << endl;
    					}
    					
    					datei.close();
    
    					_status = "gesichert";
    				}
    				else _fehler = "Die Datei konnte nicht geöffnet werden!";
    				break;
    				
    			case -1:
    			
    				return 1;
    				
    				break;
    				
    			case -2:
    				
    				_fehler = "Der Speicher ist leer! Erst laden oder aufnehmen!";
    				
    				break;
    		}
    Genau das hier ist das Einzige was für die Spracherkennung dann irgendwie relevant ist. Ich denke das sollte man in jede für sich bevorzugte Variante umstricken können. Denn wo nun menuRet seinen Wert her bekommt ist ja eigentlich völlig egal, ob es nun über Zenity, den Terminal oder irgendein Fenster geschieht.

    Du willst kein OpenCV benutzen, okay damit kann ich leben. Wäre eine (portable) Möglichkeit gewesen das etwas bequemer zu haben. Aber gut, muss ja nicht.

  7. #217
    HaWe
    Gast
    ich nutze ausschließlich das LXTerminal für printf() etc., mit angepasster Größe an definierter Position, und ich habe keinen Platz für 3 Fenster (openVG, LXTerminal und ncurses) - und warum ncurses, wenn es auch ohne geht und ich es sowieso sonst niemals nutze?


    Befehle wie dieser hier

    Code:
    case 0:
    			
    				datei.open(_datei, ios::in);
    				
    				if(datei)
    				{
    					for(i=0;i<SHRT_MAX;++i)
    					{
    						datei >> waveBuffer[i];
    					}
    					
    					datei.close();
    				
    					_speicher = "Wave vorhanden";
    					_status = "gesichert";
    				}
    				else _fehler = "Datei konnte nicht geöffnet werden!";
    				
    				break;

    müssen in eine eigene Funktions-Wrap hinein, und die müssen diese Strukturen haben:

    a) record_sound(int32_t * array, int32_t length);
    b) save_sound2wavFile(int32_t * array, FILE * fp, char * filename); // über Zenity popen PopUp Window
    c) FILE * fp = open_wavFile(int32_t * array, char * filename); // über Zenity popen PopUp Window
    d) play_soundArray(int32_t * array, int32_t length);
    e) play_wavFile(char * filename); // über Zenity popen PopUp Window


    keine C++ Parameter, damit kann ich nicht arbeiten!
    Ich bin ANSI C Programmierer, ich kann kein C++ selber benutzen für meine eigenen Zwecke.
    Fehlerbehandlungen gehören in die Funktion mit hinein, nicht in das Menü!
    Zenity fängt aber die File_IO fehler sowieso selber ab (man kann ja nur auswählen, was auch angezeigt wird)!
    Und bitte immer nur 3 Leerzeichen für jede Einrückung, keine halbe Zeilenlänge!
    Geändert von HaWe (23.06.2016 um 12:22 Uhr)

  8. #218
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Wir haben offensichtlich sehr unterschiedliche Auffassungen...

    zumal ncurses im Terminal läuft und kein eigenes Fenster hat.

  9. #219
    HaWe
    Gast
    ja, naja, ich bin halt absoluter Programmieranfänger auf Arduino Sketch Level, brauche aber ntl alle Funktionen auch für meine eigenen Zwecke und Anwendungen.

  10. #220
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Warum habe ich denn schon soweit es möglich war alles auf int32_t usw. umgestellt? Das ist auch mit ein Grund warum ich überhaupt angefangen habe ein Menu da rein zu stricken und ich versuche auch so gut es geht da Funktionen ein zu bauen die ein späteres Verwenden in den eigentlichen Anwendungsgebieten auch vereinfacht.

    Zumal das was ich gepostet habe da aus meinem Code ist nicht das Menü, sondern nur was die eizelnen Aufrufe vom Menü letzten Endes machen. Das Menü selbst ist da gar nicht zu sehen. Wie gesagt, ist alles so angelegt das man es theoretisch mit sehr geringem Aufwand mit jeder Form der Auswahl betreiben kann.

Seite 22 von 25 ErsteErste ... 122021222324 ... LetzteLetzte

Ähnliche Themen

  1. Video Aufnahme (+12std.)
    Von highdef im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 03.06.2011, 11:08
  2. led ein/aus programieren
    Von anthony im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 15.07.2008, 18:44
  3. hex-dateien in bin-dateien umwandeln
    Von roboterheld im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 02.10.2007, 21:25
  4. Richtiges Drehen einer Flasche/Dose zur Aufnahme
    Von ähM_Key im Forum Mechanik
    Antworten: 2
    Letzter Beitrag: 06.10.2006, 16:43
  5. Automatische Audio-Aufnahme
    Von the_Ghost666 im Forum Software, Algorithmen und KI
    Antworten: 6
    Letzter Beitrag: 11.09.2005, 21:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress