witam was moi drodzy mam malitki problemik odnośnie efektu echa w c++. Zrobiłem już taki programik i chciałem dodać do niego jeszcze ten efekt. Teoretycznie wiem jak to zrobić. Aby uzyskać efekt echa należy odtworzyć np. dwa razy tę samą próbkę dźwięku w pewnym odstępie czasu nie mniejszym jednak niż 100 ms.
oto programik
#include <fstream>
#include <iostream>
using namespace std;
typedef struct _wave{
char riff[4];
unsigned int RozmiarPliku;
char wave[4];
char fmt[4];
unsigned short FormatProbek;
unsigned short AudioFormat;
unsigned short NunChannels;
unsigned long SampleRate;
unsigned long ByteRate;
unsigned short BlockAlign;
unsigned short BitsPerSample;
char data[4];
unsigned int long LiczbaProbek;
} wave;
int main(int argc, char* argv[])
{
wave waveplik;
char nazwa_pliku[80], *tab;
int index;
cout << "Podaj sciezke do pliku: ";
cin.get(nazwa_pliku, 80);
ifstream plik(nazwa_pliku, ios::binary);
if(!plik)
{
cout << "Blad otwarcia pliku " << nazwa_pliku << " plik zostanie zamkniety!";
return 1;
}
plik.read((char*)&waveplik, sizeof(wave));
tab = new char[waveplik.LiczbaProbek];
plik.read(tab, waveplik.LiczbaProbek);
plik.close();
cout << "O ile chcesz sciszyc/poglosnic plik (+/-): ";
cin >> index;
for(int i=0; i<waveplik.LiczbaProbek; i++)
tab[i] = (index>0) ? (tab[i]*index):(tab[i]/index);
ofstream plik1("c:\\a1.wav", ios::binary);
plik1.write((char*)&waveplik, sizeof(wave));
plik1.write(tab, waveplik.LiczbaProbek);
plik1.close();
delete [] tab;
return 0;
}
z góry dzięki za pomoc
oto programik
#include <fstream>
#include <iostream>
using namespace std;
typedef struct _wave{
char riff[4];
unsigned int RozmiarPliku;
char wave[4];
char fmt[4];
unsigned short FormatProbek;
unsigned short AudioFormat;
unsigned short NunChannels;
unsigned long SampleRate;
unsigned long ByteRate;
unsigned short BlockAlign;
unsigned short BitsPerSample;
char data[4];
unsigned int long LiczbaProbek;
} wave;
int main(int argc, char* argv[])
{
wave waveplik;
char nazwa_pliku[80], *tab;
int index;
cout << "Podaj sciezke do pliku: ";
cin.get(nazwa_pliku, 80);
ifstream plik(nazwa_pliku, ios::binary);
if(!plik)
{
cout << "Blad otwarcia pliku " << nazwa_pliku << " plik zostanie zamkniety!";
return 1;
}
plik.read((char*)&waveplik, sizeof(wave));
tab = new char[waveplik.LiczbaProbek];
plik.read(tab, waveplik.LiczbaProbek);
plik.close();
cout << "O ile chcesz sciszyc/poglosnic plik (+/-): ";
cin >> index;
for(int i=0; i<waveplik.LiczbaProbek; i++)
tab[i] = (index>0) ? (tab[i]*index):(tab[i]/index);
ofstream plik1("c:\\a1.wav", ios::binary);
plik1.write((char*)&waveplik, sizeof(wave));
plik1.write(tab, waveplik.LiczbaProbek);
plik1.close();
delete [] tab;
return 0;
}
z góry dzięki za pomoc