- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 241

Thema: wav Dateien: Programieren von Wiedergabe und Aufnahme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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 10:20 Uhr)

  2. #2
    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.

  3. #3
    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 11:22 Uhr)

  4. #4
    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.

  5. #5
    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.

  6. #6
    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.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    hatte ich schonmal erwähnt dass ihr euren Code z.B. auf Github hochladen, forken und bearbeiten bzw. synchronisieren und kommentieren könnt? Ich will nicht dass ihr eure Entwicklung dahin beschränkt oder sowas, ich hab nur das Gefühl, dass es euch wesentlich helfen könnte einfach mit der gleichen Code basis zu arbeiten und darauf dann jeweils eine eigene Menüstruktur aufzubauen

    Ihr ladet einfach den Kern des Programms hoch, schön gepackt und unterteilt in Methoden und Prozeduren und dann kann jeder in seinem eigenen Fork davon das Menü implementieren wie er es wünscht
    Sonst gibts irgendwann nur noch streit und die Trennung von Kern und GUI tut dem Programmierstil gut und es kann alles dokumentiert werden und wenn was schiefgeht einfach ein rollback machen
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    HaWe
    Gast
    wie Github aussieht, weiß ich, aber wie man damit arbeitet: kein Plan, und da will ich mich auch gar nicht erst einarbeiten müssen.

    wesentlich sind im Moment nur die API-Tool-Funktionen samt Menü.

    Was das Menü angeht, heißt das für mich:
    ohne ncurses,

    und was die API wave-Tools angeht, eben einfach so etwas ähnliches, in ANSI C (unter Zuhilfenahme von Zenity und popen(), wie ich es ja auch schon gepostet habe):

    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
    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);


    wenn wir uns auf diese Schnittstellen einigen können, ist doch alles prima, damit könnte ich anfangen zu arbeiten.

Ähnliche Themen

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

Berechtigungen

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

LiFePO4 Speicher Test