- 3D-Druck Einstieg und Tipps         
Seite 21 von 25 ErsteErste ... 111920212223 ... LetzteLetzte
Ergebnis 201 bis 210 von 241

Thema: wav Dateien: Programieren von Wiedergabe und Aufnahme

  1. #201
    HaWe
    Gast
    Anzeige

    Powerstation Test
    das Menü habe ich doch schon gebastelt, ohne ncurses.

  2. #202
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    So mein Freund. Mein Spieltrieb ist durchaus entzückt. Hier das Ergebnis:

    main.cpp

    Code:
    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <string>
    
    #include <stdio.h>
    #include <limits.h>
    #include <math.h>
    
    #include <VG/openvg.h>
    #include <VG/vgu.h>
    #include <fontinfo.h>
    #include <shapes.h>
    
    using namespace std;
    
    string version = "2.1";
    
    string _speicher = "leer";
    string _status = "ungesichert";
    string _datei = "";
    string _fehler = "";
    
    #include "diaSound.hpp"
    #include "menu.hpp"
    
    #define BLACK     0,   0,   0
    #define WHITE   255, 255, 255
    #define MAGENTA 255,   0, 255
    #define RED     255,   0,   0
    #define YELLOW  255, 255,   0
    #define LIME      0, 255,   0
    #define GREEN     0, 128,   0
    #define CYAN      0, 255, 255
    #define AQUA    102, 204, 204
    #define BLUE      0,   0, 255
    
    int   _width_=1024, _height_=600;
    int   _fontsize_ = 10;
    
    bool ausgabe = true;
    
    void initOpenVG() 
    {
    	initWindowSize(0, 0, _width_, _height_);
    	init(&_width_, &_height_);               
    	Start(_width_, _height_);                   
    	Background(0, 0, 0);                             
    	StrokeWidth(1.0);
    	WindowClear();
    }
    
    void plotArray(int32_t *array, int32_t arrlength, int y0) 
    {
    	float xscale=1.0, border=100.0;
    	xscale = _width_ / (float) (arrlength-border);
    
    	int i;
    
     	Fill(CYAN, 1); 
    	Stroke(0, 255, 255, 1);
    	     
    	for(i=0;i<arrlength;i++)
    	{		
    		Line((VGfloat)xscale*i, (VGfloat) y0, (VGfloat)xscale*i, (VGfloat)(y0+array[i]));
    	}
    	End();  
    }
    
    void analyse(int32_t *array, int32_t arrlength)
    {
    	int32_t     sbuf[128];
    	int32_t     bias, minr, maxr, baseline, 
    				signalstart, signalend;
    
    	int32_t maximum = array[0];
    	int32_t minimum = array[0];
    	
    	int32_t maxpos, minpos;
    	
    	int32_t i;
    
    	for(i=0;i<arrlength;i++)
    	{
    		if(array[i] > maximum)
    		{
    			maximum = array[i];
    			
    			maxpos = i;
    		}
    
    		if(array[i] < minimum)
    		{
    			minimum = array[i];
    			
    			minpos = i;
    		}
    	}
    	
    	maximum = array[0];
    	minimum = array[0]; 
    
    	for(i=0;i<arrlength; ++i)
    	{
    	 if(array[i] > maximum)    
    	 {
    		maximum = array[i];      
    		maxpos = i;
    	 }
    	 if(array[i] < minimum)     
    	 {
    	   minimum = array[i];      
    	   minpos = i;
    	 }
    	}
    
    
    	// calculate baseline from last 100 array cells:
    	// init vars
    	baseline=(array[minpos] + array[maxpos]) / 2;  // init baseline by (min+max)/2
    
    	minr=baseline - 1;
    	maxr=baseline + 1;
    
    	// auto-adjust:  
    	for(i=arrlength-100; i<arrlength; ++i) 
    	{    
    	 // mean baseline
    	 baseline = round((0.5*(float)array[i]  + 0.5*(float)baseline)) ;
    
    	 // smoothed out max noise
    	 if(array[i] >= baseline) maxr = round((0.6*(float)array[i]  + 0.4*(float)maxr)) +1 ;
    
    	 // smoothed out min noise
    	 if(array[i] <= baseline) minr = round((0.6*(float)array[i]  + 0.4*(float)minr)) -1 ;       
    	}
    
    	bias = max(baseline-minr, maxr-baseline) +1;  
    
    	// noise reduction start/end 
    	// drop small noise
    
    	for(i=0;i<arrlength;++i) 
    	{
    	  if((array[i]>baseline) && (array[i] <= baseline + bias)) array[i] = baseline ; // little higher value => drop to baseline
    	  else
    	  if((array[i]<baseline) && (array[i] >= baseline - bias)) array[i] = baseline ; // little lower value => rise to baseline
    	}
    
    
    	// signalstart, signalend: threshold = bias + (bias/2)   
    	signalstart = 0;
    
    	i = 0;
    
    	while((array[i]<=baseline + 4 * bias/3) && (i<SHRT_MAX-1)) ++i;
    
    	signalstart = i;
    
    	if(i > 0) signalstart -= 1;   
    
    	signalend=arrlength-1;
    
    	i=arrlength-1;
    
    	while((array[i]<=baseline + + 4*bias/3) && (i>signalstart)) --i;
    
    	signalend = i;
    
    	if(i<arrlength-1) signalstart +=1;     
    
    	if(ausgabe) 
    	{
    		cout << "Bias: " << bias << endl;
    		cout << "Maximal: " << maximum << endl;
    		cout << "Minimal: " << minimum << endl;
    		cout << "Signalstart: " << signalstart << endl;
    		cout << "Signalende: " << signalend << endl;
    	}
    }
    
    int main(int argc, char *argv[])
    {
    	fstream datei;
    	
    	string dateiEndung;
    	string dateiName;
    				
    	int32_t waveBuffer[SHRT_MAX];
    
    	int32_t i, menuRet;
    
    	char s[3], m[3];
    
    	initOpenVG();
    
    	menuRet = menu(0, 0);
    	
    	while(menuRet != -1)
    	{
    		switch(menuRet)
    		{
    			case 0:
    			
    				datei.open(_datei, ios::in);
    				
    				if(datei)
    				{
    					for(i=0;i<SHRT_MAX;++i)
    					{
    						datei >> waveBuffer[i];
    					}
    					
    					datei.close();
    				
    					plotArray(waveBuffer, SHRT_MAX, 0);
    					_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 >> waveBuffer[i];
    					}
    					
    					datei.close();
    				
    					_speicher = "Wave vorhanden";
    					_status = "gesichert";
    
    					playCaptured(waveBuffer, 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 5:
    			
    				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;
    		}
    		
    		menuRet = menu(0, 0);
    	}
    /*
    	plotArray(waveBuffer, SHRT_MAX, 0);
    
    	analyse(waveBuffer, SHRT_MAX);
    
    	plotArray(waveBuffer, SHRT_MAX, 255);
    
    	SaveEnd("plott.raw");
    
    	finish();
    */	
    	return 1;
    }
    diasound.hpp

    Code:
    #include <alsa/asoundlib.h>
    
    #include <iostream>
    #include <vector>
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    using namespace std;
    
    typedef struct _FILE_head
    {
    	unsigned char	ID[4];
    	unsigned int	Length;
    	unsigned char	Type[4];
    } FILE_head;
    
    typedef struct _FORMAT 
    {
    	short wFormatTag;
    	unsigned short	wChannels;
    	unsigned int	dwSamplesPerSec;
    	unsigned int	dwAvgBytesPerSec;
    	unsigned short	wBlockAlign;
    	unsigned short	wBitsPerSample;
    } FORMAT;
    
    typedef struct _CHUNK_head
    {
    	unsigned char ID[4];
    	unsigned int	Length;
    } CHUNK_head;
    
    snd_pcm_t *soundKarte;
    
    bool Init(string name, unsigned int channels, unsigned int actualRate, unsigned short WaveBits)
    {
    	int err;
    	
    	snd_pcm_format_t bits;
    
    	unsigned int resample = 1;
    
    	switch(WaveBits)
    	{
    		case 8:
    			bits = SND_PCM_FORMAT_U8;
    			break;
    	
    		case 16:
    			bits = SND_PCM_FORMAT_S16;
    			break;
    	
    		case 24:
    			bits = SND_PCM_FORMAT_S24;
    			break;
    	
    		case 32:
    			bits = SND_PCM_FORMAT_S32;
    			break;
    	}	
    	
    	snd_pcm_hw_params_t *hw_params;
    
    	if(name.length() == 0)
    	{
    		err = snd_pcm_open(&soundKarte, "plughw:1,0", SND_PCM_STREAM_PLAYBACK, 0);
    	}
    	else
    	{
    		err = snd_pcm_open(&soundKarte, name.c_str(), SND_PCM_STREAM_PLAYBACK, 0);
    	}
    
    	if(err < 0)
    	{
    		_fehler = "Init: Kann die Soundkarte nicht öffnen!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_malloc(&hw_params)) < 0)
    	{
    		_fehler = "Init: Parameter können nicht initialisiert werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_any(soundKarte, hw_params)) < 0)
    	{
    		_fehler = "Init: Parameter können nicht ermittelt werden!";
    
    		return false;
    	}
    
    	err = snd_pcm_hw_params_set_rate_resample(soundKarte, hw_params, resample);
    
    	if(err < 0)
    	{
    		_fehler = "Init: Resampling kann nicht eingeschaltet werden!";
    
    		return err;
    	}
    
    	if((err = snd_pcm_hw_params_set_access(soundKarte, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
    	{
    		_fehler = "Init: Zugriffstyp kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_format(soundKarte, hw_params, bits)) < 0)
    	{
    		_fehler = "Init: Sample-Format kann nicht gesetzt werden!";;
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_channels(soundKarte, hw_params, channels)) < 0)
    	{
    		_fehler = "Init: Anzahl der Kanäle kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_rate_near(soundKarte, hw_params, &actualRate, 0)) < 0)
    	{
    		_fehler = "Init: Sample-Rate kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params(soundKarte, hw_params)) < 0)
    	{
    		_fehler = "Init: Parameters können nicht gesetzt werden!";
    
    		return false;
    	}
    	snd_pcm_hw_params_free(hw_params);
    
    	if((err = snd_pcm_prepare(soundKarte)) < 0)
    	{
    		_fehler = "Init: Audio kann nicht zur Nutzung vorbereitet werden!";
    
    		return false;
    	}
    
    	return true;
    }
    
    bool InitCapture(string name, unsigned int channels, unsigned int actualRate, unsigned short WaveBits)
    {
    	int err;
    	
    	snd_pcm_format_t bits;
    
    	switch(WaveBits)
    	{
    		case 8:
    			bits = SND_PCM_FORMAT_U8;
    			break;
    	
    		case 16:
    			bits = SND_PCM_FORMAT_S16;
    			break;
    	
    		case 24:
    			bits = SND_PCM_FORMAT_S24;
    			break;
    	
    		case 32:
    			bits = SND_PCM_FORMAT_S32;
    			break;
    	}	
    	
    	snd_pcm_hw_params_t *hw_params;
    
    	if(name.length() == 0)
    	{
    		err = snd_pcm_open(&soundKarte, "plughw:1,0", SND_PCM_STREAM_CAPTURE, 0);
    	}
    	else
    	{
    		err = snd_pcm_open(&soundKarte, name.c_str(), SND_PCM_STREAM_CAPTURE, 0);
    	}
    
    	if(err < 0)
    	{
    		_fehler = "Init: Kann die Soundkarte nicht öffnen!!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_malloc(&hw_params)) < 0)
    	{
    		_fehler = "Init: Parameter können nicht initialisiert werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_any(soundKarte, hw_params)) < 0)
    	{
    		_fehler = "Init: Parameter können nicht ermittelt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_access(soundKarte, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
    	{
    		_fehler = "Init: Zugriffstyp kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_format(soundKarte, hw_params, bits)) < 0)
    	{
    		_fehler = "Init: Sample-Format kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_channels(soundKarte, hw_params, channels)) < 0)
    	{
    		_fehler = "Init: Anzahl der Kanäle kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params_set_rate_near(soundKarte, hw_params, &actualRate, 0)) < 0)
    	{
    		_fehler = "Init: Sample-Rate kann nicht gesetzt werden!";
    
    		return false;
    	}
    
    	if((err = snd_pcm_hw_params(soundKarte, hw_params)) < 0)
    	{
    		_fehler = "Init: Parameters können nicht gesetzt werden!";
    
    		return false;
    	}
    
    	snd_pcm_hw_params_free(hw_params);
    
    	if((err = snd_pcm_prepare(soundKarte)) < 0)
    	{
    		_fehler = "Init: Audio kann nicht zur Nutzung vorbereitet werden!";
    
    		return false;
    	}
    
    	return true;
    }
    
    bool UnInit()
    {
      snd_pcm_close(soundKarte);
    
      return true;
    }
    
    int playwave(string waveDatei, string name)
    {
    	FORMAT format;
    	FILE_head head;
    	CHUNK_head chead;
    
    	char *wave;
    
    	register snd_pcm_uframes_t count, frames;	
    	
    	int datei;
    	
    	unsigned int WaveSize;
    	
    	datei = open(waveDatei.c_str(), 00);
    		
    	read(datei, &head, sizeof(FILE_head));
    
    	read(datei, &chead, sizeof(CHUNK_head));
    
    	read(datei, &format, sizeof(FORMAT));
    
    	wave = (char *) malloc(head.Length);
    	
    	read(datei, wave, head.Length);
    
    	WaveSize = head.Length * 8 / ((unsigned int)format.wBitsPerSample * (unsigned int)format.wChannels);
    
    	close(datei);
    
    	Init(name, format.wChannels, format.dwSamplesPerSec, format.wBitsPerSample);
    	
    	count = 0;
    	
    	do
    	{
    		frames = snd_pcm_writei(soundKarte, wave + count, WaveSize - count);
    
    		if (frames < 0) frames = snd_pcm_recover(soundKarte, frames, 0);
    		if (frames < 0)
    		{
    			printf("Kann wav nicht abspielen: %s\n", snd_strerror(frames));
    			break;
    		}
    
    		count += frames;
    
    	} while (count < WaveSize);
    
    	if (count == WaveSize) snd_pcm_drain(soundKarte);
    
    	free(wave);
    
    	UnInit();
    
    	return 0;
    }
    
    void audioCapture(int32_t *input, int max, string name, unsigned int channels, unsigned int actualRate, unsigned short WaveBits)
    {
    	int err, i=0;
    	
    	int32_t *puffer;
    	 
    	puffer = (int32_t *) malloc(1);
    	
    	if(InitCapture(name, channels, actualRate, WaveBits))
    	{
    		while(i < max)
    		{
    			err = snd_pcm_readi(soundKarte, puffer, 1);
    			
    			if(err < 0) _fehler = "Fehler bei der Aufnahme!";
    			
    			input[i] = puffer[0];
    
    			i++;
    		}
    
    		free(puffer);
    		
    		UnInit();
    	}
    	else _fehler = "Bei der Initialisierung ist ein Fehler aufgetreten!";
    }
    
    void playCaptured(int32_t *array, unsigned int WaveSize, string name, unsigned int channels, unsigned int actualRate, unsigned short WaveBits)
    {
    	register snd_pcm_uframes_t count, frames;	
    
    	uint8_t *wave;
    
    	wave = (uint8_t *) malloc(WaveSize+1);
    	
    	for(int32_t i=0;i<WaveSize;i++) wave[i] = array[i];
    	
    	Init(name, channels, actualRate, WaveBits);
    
    	WaveSize = WaveSize * 8 / WaveBits * channels;
    
    	count = 0;
    	
    	do
    	{
    		frames = snd_pcm_writei(soundKarte, wave + count, WaveSize - count);
    
    		if(frames < 0) frames = snd_pcm_recover(soundKarte, frames, 0);
    		if(frames < 0)
    		{
    			_fehler = "Kann wav nicht abspielen";;
    			break;
    		}
    
    		count += frames;
    
    	} while (count < WaveSize);
    
    	if (count == WaveSize) snd_pcm_drain(soundKarte);
    
    	UnInit();
    }
    menu.hpp

    Code:
    #include <ncurses.h>
    #include <dirent.h> 
    
    void quit()
    {
    	endwin();
    }
    
    int subMenu(int32_t menu, string text)
    {
    	WINDOW *w;
    
    	DIR *d;
    	struct dirent *dir;
    
    	int32_t i, ch, posMenu, max, start, ende, z;
    	
    	vector<string> dateien;
    
    	switch(menu)
    	{
    		case 0:
    		
    			w = newwin(16, 19, 4, 29);	
    
    			scrollok(w, true);
    			keypad(w, TRUE);
    
    			wbkgd(w, COLOR_PAIR(1));
    			
    			box(w, 0, 0);
    			
    			d = opendir(".");
    
    			if(d)
    			{
    				while((dir = readdir(d)) != NULL)
    				{
    				  	if(strstr(dir->d_name, ".hhw")) dateien.push_back(dir->d_name);
    				}
    
    				closedir(d);
    			}
    			
    			ende = dateien.size() - 1;
    			
    			if(dateien.size() > 14) max = 14;
    			else max = dateien.size();
    			
    			for(i=0;i<max;i++) 
    			{
    				if(i == 0)
    				{
    					wattron(w, A_STANDOUT);
    					mvwprintw(w, i+1, 1, "%-17s", dateien[i].c_str());
    					wattroff(w, A_STANDOUT);
    				}
    				else mvwprintw(w, i+1, 1, "%-17s", dateien[i].c_str());
    			}
    
    			start = 0;
    
    			while(ch = wgetch(w))
    			{ 
    				switch(ch)
    				{
    					case KEY_UP:
    					
    						posMenu--;
    						
    						if(posMenu < 0) posMenu = 0;
    						
    						if(posMenu == start && posMenu > 0)
    						{
    							start--;
    							max--;
    						}
    						
    						break;
    
    					case KEY_DOWN:
    					
    						if(posMenu < ende) posMenu++;
    						
    						if(posMenu == max && posMenu < ende)
    						{
    							start++;
    							max++;
    						}
    						
    						break;
    						
    					case 10:
    					
    						_datei = dateien[posMenu];
    
    						return 1;
    					
    						break;
    				}
    
    				clear();
    
    				for(i=start,z=1;i<max;i++,z++)
    				{
    					if(i == posMenu)
    					{
    						wattron(w, A_STANDOUT);
    						mvwprintw(w, z, 1, "%-17s", dateien[i].c_str());
    						wattroff(w, A_STANDOUT);
    					}
    					else
    					{
    						mvwprintw(w, z, 1, "%-17s", dateien[i].c_str());
    					}
    				}
    				wrefresh(w);
    			}
    			wrefresh(w);
    
    			return 0;
    			
    			break;
    
    		case 1:
    		
    			w = newwin(5, 18, 4, 30);	
    
    			wbkgd(w, COLOR_PAIR(1));
    			
    			box(w, 0, 0);
    			
    			mvwprintw(w, 1, 2, text.c_str());
    
    			wrefresh(w);
    
    			return 1;
    			
    			break;
    
    		case 5:
    
    			w = newwin(4, 29, 11, 30);	
    
    			char inputDatei[20];
    
    			wbkgd(w, COLOR_PAIR(1));
    			
    			box(w, 0, 0);
    			
    			mvwprintw(w, 1, 2, "Dateiname zum Speichern");
    			mvwprintw(w, 2, 2, "->");
    			
    			move(2, 5);
    			curs_set(1);
    			
    			mvwgetnstr(w, 2, 5, inputDatei, 14);
    			
    			_datei = inputDatei;
    			
    			wrefresh(w);
    
    			return 1;
    			
    			break;
    	}
    	
    	return -1;
    }
    
    			
    
    int menu(int32_t menu, int32_t posMenu)
    {
    	char mainMenu[7][20] = {"Datei laden", "Wave aufnehmen", "Datei abspielen", "Speicher abspielen", "Speicher optimieren", "Speicher sichern", "Beenden"};
    
    	int32_t i, ch;
    		
    	initscr();
    	atexit(quit);
    	curs_set(0);
    
    	start_color();
    	clear();
    
    	init_pair(1, COLOR_WHITE, COLOR_BLUE); 
    	bkgd(COLOR_PAIR(1));
    	
    	border(0, 0, 0, 0, 0, 0, 0, 0);
    
    	mvhline(2, 0, ACS_LTEE, 1);
    	mvhline(2, 1, ACS_HLINE, 78);
    	mvhline(2, 79, ACS_RTEE, 1);
    	
    	mvhline(21, 0, ACS_LTEE, 1);
    	mvhline(21, 1, ACS_HLINE, 78);
    	mvhline(21, 79, ACS_RTEE, 1);
    	
    	mvprintw(1, 3, "HaWe und Hirnfrei\'s Soundprojekt V %s", version.c_str());
    	mvprintw(22, 3, "Meldung: %s", _fehler.c_str());
    
    	refresh();
    
    	WINDOW *w, *sw;
    
    	sw = newwin(5, 28, 4, 50);	
    
    	wbkgd(sw, COLOR_PAIR(1));
    	
    	box(sw, 0, 0);
    	
    	mvwprintw(sw, 1, 2, "Speicher: %-15s", _speicher.c_str());
    	mvwprintw(sw, 2, 2, "Status:   %-15s", _status.c_str());
    	mvwprintw(sw, 3, 2, "Datei:    %-15s", _datei.c_str());
    
    	wrefresh(sw);
    
        w = newwin(15, 25, 4, 2);	
    
    	wbkgd(w, COLOR_PAIR(1));
    	
    	box(w, 0, 0);
    	
    	keypad(w, TRUE);
    	
    	for(i=0;i<7;i++)
    	{
    		if(i == posMenu)
    		{
    			wattron(w, A_STANDOUT);
    			mvwprintw(w, i+1, 2, "%s", mainMenu[i]);
    			wattroff(w, A_STANDOUT);
    		}
    		else
    		{
    			mvwprintw(w, i+1, 2, "%s", mainMenu[i]);
    		}
    	}
    	wrefresh(w);
    
        while(ch = wgetch(w))
        { 
    		switch(ch)
    		{
    			case KEY_UP:
    			
    				posMenu--;
    				
    				if(posMenu < 0) posMenu = 6;
    				
    				break;
    
    			case KEY_DOWN:
    			
    				posMenu++;
    				
    				if(posMenu > 6) posMenu = 0;
    				
    				break;
    				
    			case 10:
    			
    				switch(posMenu)
    				{
    					case 0:
    					
    						if(subMenu(0, "") == 1) return 0;
    						
    						break;
    						
    					case 1:
    					
    						if(subMenu(1, "Aufzeichnung...") == 1) return 1;
    						
    						break;
    						
    					case 2:
    					
    						if(subMenu(0, "") == 1) return 2;
    						
    						break;
    						
    					case 3:
    					
    						if(subMenu(1, "Spiele ab...") == 1) return 3;
    						
    						break;
    						
    					case 5:
    					
    						if(_speicher.compare("leer") != 0) if(subMenu(5, "") == 1) return 5;
    						
    						break;
    						
    					case 6:
    						
    						return -1;
    						
    						break;
    				}
    				
    				break;
    		}
    
    		for(i=0;i<7;i++)
    		{
    			if(i == posMenu)
    			{
    				wattron(w, A_STANDOUT);
    				mvwprintw(w, i+1, 2, "%s", mainMenu[i]);
    				wattroff(w, A_STANDOUT);
    			}
    			else
    			{
    				mvwprintw(w, i+1, 2, "%s", mainMenu[i]);
    			}
    		}
    		wrefresh(w);
    	}
    }
    Da gibts doch jetzt nichts mehr zu meckern . Jetzt gehts dann ans optimieren usw.

    Hast du mittlerweile eine Soundkarte usw? Kannst du auch Sounds aufnehmen und abspielen?

    Die alten csv Dateien kannst du damit auch abspielen, musst sie nur in .hhw (HaWe - Hirnfrei - Wave ^^) umbenennen.

    - - - Aktualisiert - - -

    Nebenbei, ich baue gerade das Plotten etwas um, so dass es in einem Fenster dargestellt wird und nicht so dumm auf den Screen geschrieben wird. Das sollte keine grosse Geschichte sein und macht die Sache etwas komfortabler.

  3. #203
    HaWe
    Gast
    hallo,
    nein, habe noch keine soundcard, und auch noch kein ncurses installiert.
    Leider durchblicke ich dein Menü nicht, es ist - nun - etwas - uummmh - deutlich - ääähh - aufgeblähter als meins

    0 Soundfile *.csv in Programm öffnen / laden \n
    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\n


    kann es denn schon alles wie geplant (0-6, 7-9 kommt ja erst noch) ?
    aber dann hast du sicher schon die 3 geplanten Grundwörter aufgenommen und optimiert ?


    ps,
    ich finde noch keine Funktion, um einen sound-array als *.wav zu speichern - wie heißt die bei dir?

  4. #204
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Die heisst "Gibts nicht".

    Ja ist etwas aufgeblähter, funktioniert dafür super ^^. Samt eventueller Fehlermeldungen usw.

    Was bisher funktioniert:

    0, 1 ist bei mir der erste Menüpunkt "Datei laden". Da zeigt sich dann in der Mitte vom Menü eine Auswahl alles vorhandenen Dateien (also alle hhw Dateien), sogar scrollbar. Da wird die Datei nur in den Speicher geschrieben und kann dann nach Belieben weiter verarbeitet werden. Derzeit also abspielen, optimieren und speichern.

    2 ist bei mir "Datei abspielen" und funktioniert wie 0-1 nur das die Datei eben sofort nach dem Laden auch abgespielt wird.

    3 ist bei mir "Wave aufnehmen". Die Daten von der Soundkarte werden in das array geschrieben und liegen im Speicher. Wie beim Laden kann man damit dann auch alles Mögliche damit machen. Abspielen, optimieren, speichern...

    4 ist bei mir "Speicher abspielen. Spielt schon prima ab, plottet aber noch nicht weil ich das noch in ein Fenster packen will. Ich weiss nicht aber so direkt in den Bildschirm schreiben fühlt sich irgendwie "falsch" an.

    5 Optimieren habe ich zu meiner Schande vergessen einzubauen. Der Menüpunkt ist da aber ich hab vergessen ihn funktionsfähig zu machen

    6 ist bei mir "Speicher sichern". Wählt man das an wird man zur Eingabe eines Dateinamens aufgefordert. Die Dateiendung wird automatisch hinzugefügt.

    7-9 füge ich dann noch hinzu.

    Lach nee ich hab die Worte noch nicht aufgenommen.

  5. #205
    HaWe
    Gast
    openVG schreibt immer direkt in den Fensterbereich, es hat nunmal keine XWindows Funktion.
    Ich habe bei mir immer einen openVG Fenster-Bereich für die Grafiken neben einem Terminal-Fenster für die Schrift-Ausgabe (ohne ncurses).
    Von ncurses bin ich einfach nicht überzeugt, es funktionieren dort einfach die normalen printf Befehle nicht korrekt (\n etc), und deshalb nutze ich es nicht.

  6. #206
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Brauchst ja nicht damit zu programmieren, reicht ja wenn du es benutzt oder ^^.

    OpenVG schreibt direkt in die GPU, bzw. dessen Speicher. Das kann man aber anscheinend auch in ein Fenster leiten, was die Sache angenehmer macht wie ich finde.

  7. #207
    HaWe
    Gast
    wie unterscheidet das Programm, ob es einen .wav File oder einen .csv File lädt?

    - - - Aktualisiert - - -

    ps,

    Datei laden und abspielen muss man trennen -
    es muss abspielen möglich sein (z.B. zum Test), ohne dass die wave Daten ins Programm geladen werden!

  8. #208
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Warum sollte man ein wav laden? Ich verstehe deine Affinität zu wav Dateien nicht wirklich .

    Achso. Okay das baue ich um ist kein Ding.

  9. #209
    HaWe
    Gast
    wav ist das universelle Standard-Datenformat für sounds, es werden daher grundsätzlich *.wav gespeichert und geladen.
    Die *.wav Files kann man dann auch mit unabhängigen Programmen abhören (und auch bearbeiten), z.B. mit Omxplayer oder mit Windows wave-edit-Programmen.

  10. #210
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Ich weiss was wav ist. So ganz dämlich bin ich dann ja doch nicht.

    Okay dann kann man sie in einem anderen Programm abspielen. Leuchtet ein, nur warum sollte man das tun? Man kann sie in unserem Programm ja schliesslich auch abspielen. Und in einem anderen Programm bearbeiten leuchtet auch ein, aber da nochmal die Frage nach dem Grund. Ich meine, wenn ich mich nicht irre soll ja unser Programm am Ende ganz alleine das Wort verstehen. Dann sollte das Programm mit der notwendigen Bearbeitung ja auch zurecht kommen oder?

    Fenster lasse ich doch erstmal bleiben. Ich denke da du wahrscheinlich nach wie vor auf dem Raspi das schwache LXDE benutzt wäre der Installationsaufwand zu gross.

Seite 21 von 25 ErsteErste ... 111920212223 ... 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
  •  

12V Akku bauen