002
07.07.2003, 16:40 Uhr
~mathabu
Gast
|
C++: |
#include <iostream.h> // #include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <netinet/in.h> #include "au_laden.h"
using namespace std;
int au_laden::get_header(char *path_of_file){
ifstream instreamobjekt(path_of_file,ios::in|ios::binary);
if(!instreamobjekt){ cerr << "Fehler beim lesen der datei !\n"; exit(1); } header=new au_header[1]; instreamobjekt.seekg(0,ios::beg); instreamobjekt.read(header,25);
int hs=header->header_size; char vokal; //cout << "headersize =" << hs << endl;
if(hs==24) header->vokal_info=0; else if(hs==25) { vokal = header->vokal_info; //cout << "das ist ein: " << vokal << endl; switch(vokal){ case 'a':vokalwert= 0.0;break; case 'o':vokalwert= 1.0;break; case 'u':vokalwert= 2.0;break; case 'e':vokalwert= 3.0;break; case 'i':vokalwert= 4.0;break; } } else{ char *info_string; info_string= new char[hs]; instreamobjekt.seekg(0,ios::beg); instreamobjekt.read(info_string,hs); //for(int i=24;i<(hs);i++) //cout << info_string[i];
vokal = info_string[24]; //cout << "das ist ein: " << vokal << endl; switch(vokal){ case 'a':vokalwert= 0.0;break; case 'o':vokalwert= 1.0;break; case 'u':vokalwert= 2.0;break; case 'e':vokalwert= 3.0;break; case 'i':vokalwert= 4.0;break; } //cout << "..." << endl; //cout << "vokalwert ="<<vokalwert<< endl; }
return 0; }
int au_laden::read_audio(char *path_of_file){
ifstream instreamobjekt(path_of_file,ios::in|ios::binary);
if(!instreamobjekt){ cerr << "fehler beim lesen der datei!\n"; exit(1); } int hs=header->header_size; int ad=header->audio_data_size;
raw_audio_daten = new char[ad]; instreamobjekt.seekg(hs,ios::beg); instreamobjekt.read(raw_audio_daten,ad); return 0; }
// mach den headder-check ******************************************************
int au_laden::make_header_check(){ // magic number check cout << "header->magic_number =" << endl; long mn; mn=ntohl(header->magic_number); cout << mn << endl; cout << "header->magic_number =" << header->magic_number << endl;
if (!((mn == 0x2E736E64) || (mn==0x2E736400))){ //if (!((header->magic_number == 0x2E736E64) || (header->magic_number == 0x2E736400))){ cerr << "das ist keine au_datei!\n"; exit(1); } mn=ntohl(header->codec); cout << mn << endl; // codec check //if (header->codec != 1){ if (mn != 1){ cerr << "fehler: .au-datei ist nicht mu-law codiert! \n"; exit(1); } mn=ntohl(header->samplerate); cout << mn << endl; if (mn!= 11025){ //if (header->samplerate != 11025){ cerr << "fehler: samplerate der .au-datei !=11025Hz \n"; exit(1); } mn=ntohl(header->channels); cout << mn << endl; // channel check if (mn != 1){ // if (header->channels != 1){ cerr << "fehler: .au_datei ist nicht mono !\n"; exit(1); } return 0; }
// cutting_raw_audio schneidet die relevanten audiodaten aus dem geoeffneten file, // ab der halben maximal-amplitude
int au_laden::get_index_max_halbe(){ int index; char max = 0; int ads=header->audio_data_size; for (int i=0; i<ads; i++){ if (max < raw_audio_daten[i]) max = raw_audio_daten[i]; } for (int j=0; j<ads; j++){ if (max/2 <= raw_audio_daten[j]){ index = j; break; } } return index; }
int au_laden::cut_raw_audio(){ int index_max_halbe; index_max_halbe= get_index_max_halbe(); shorted_raw_audio = new char[8192]; for(int i=0;i<8192;i++) shorted_raw_audio[i]= raw_audio_daten[i+index_max_halbe]; return 0; } char* au_laden::aufile_laden(char *path_of_file){ get_header(path_of_file); make_header_check(); read_audio(path_of_file); cut_raw_audio(); return shorted_raw_audio; }
// write_vokalinfo_2_aufile() schreibt die vokal-information: a,e,i,o,u in das audiofile void au_laden::write_vokalinfo_2_aufile(char* path_of_file,char vokal){
if(header->header_size == 25){ cout << "\nwrite_vokalinfo_2_aufile() abgebrochen: eine vokalinformation ist bereits im header enthalten\n" << endl; exit(1); } ofstream outstreamobjekt(path_of_file,ios::out|ios::binary); if(!outstreamobjekt){ cerr << "fehler beim schreiben der datei!\n"; exit(1); }
int hs=25; header->header_size=25; header->vokal_info=vokal;
int ad=header->audio_data_size;
outstreamobjekt.write(header,hs); outstreamobjekt.write(raw_audio_daten,ad);
}
int main(void){ au_laden a; char* audio_array; audio_array = a.aufile_laden("sound006.au"); //for (int i=0;i<200; i++) // cout << audio_array[i] ; cout << " feddisch!!! \n";
return 0; }
|
Dieser Post wurde am 07.07.2003 um 19:07 Uhr von FloSoft editiert. |