Libsndfile-jak smichat libovolny pocet zvukovych souboru ve smycce? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Libsndfile-jak smichat libovolny pocet zvukovych souboru ve smycce? – C / C++ – Fórum – Programujte.comLibsndfile-jak smichat libovolny pocet zvukovych souboru ve smycce? – C / C++ – Fórum – Programujte.com

 

kristian0
Duch
1. 4. 2009   #1
-
0
-

Dobry den, ahoj...

prave podleham tezkym depresim, za vsim stoji nefunkcnost meho programu...
Vytvoril jsem pomerne jednoduchy synthetiser operujici na consoly, vyuzivajici knihovnu libsndfile.
Program ziskava data pro synthesu zvuku z textoveho souboru, ktery predtim musi uzivatel vytvorit (kdo jiny...ve skutecnosti jsem take vytvoril GUI pro formatovani tohoto *.txt, protoze obsahuje mnoho a mnoho udaju).
Kazdy radek obsahuje dulezite informace o zvuku (frekvenci, amplitudu, dobu trvani, udaje o FM, AM a Additive synthese, efekty, obalky...proste vsechno). Pro kazdy nacteny radek program provede operacni smycku, ktera vytvori *.wav s odpovidajicimi parametry. Na konci tohoto procesu je tedy vytvoreno stejne mnozstvi *.wav, jako je radku v *.txt souboru. Zvukove soubory jsou pojmenovany podle cisla radku v textovem souboru, na jehoz zaklade byly vypocitany. Wav soubory se lisi pouze ve sve delce, ne sampling rate, poctu kanalu, atd...Toto vse funguje bez problemu. Kompilator nehlasi zadna varovani, console nepada, vytvorene zvukove soubory odpovidaji parametrum z textoveho souboru. Ted bych mel jasat, ze je uz jen staci smichat do jedineho souboru a nadbytecne soubory vymazat...Hm, nejasam. Mam problem se smyckou, ktera by mela nacitat jedotlive zvukove soubory a jeden po druhem je zapisovat na konec konecneho vystupniho souboru. Pravdepodobne spatne pouzivam funkci sf_seek() - stale ziji v domeni, ze jeji tvurce ECdeL...ma pravdu, kdyz tvrdi: pouzijeli se sf_seek() samostatne pozmeni i nasledujici sf_write() funkci...mozna ale take delam chybu v operovani s pameti...urcite delam chybu v tom, ze micham c s c++, ale programuji teprve necelych sest mesicu a tak to jinak vlastne neumim, pardon, proto taky tato "stupidni" otazka. Toto je relevantni cast kodu se kterou mam problem. Nezapisuje soubory na konec vystupu, jak bych si pral, ale prepisuje je pres sebe. Zkousel jsem i jine varianty, ale nic kloubneho z toho nebylo...

...zde v mem kodu konci vytvareni souboru a cteni txt
|
v

for(int i=0; i<n; i++)
{
char b[10];
itoa(i, b, 10 );
char NAMEIN[8] = {b[0], '.', 'w', 'a', 'v'};

psfinfoin = (SF_INFO *) malloc(sizeof(SF_INFO));
psfinfoout = (SF_INFO *) malloc(sizeof(SF_INFO));

if(!(psfin = soundin_open(NAMEIN, chans, sr)))
{
cout << "error opening output file\n" << NAMEIN << endl;
exit(-1);
}
else cout << "soubor " << NAMEIN << " uspesne otevren pro cteni" << endl;

buffer1= new float [def_len];

if(!(psfout = soundout_open("out.wav")))
{
cout << "error opening output file\n" << endl;
exit(-1);
}
else cout << "soubor <out.wav> otevren pro psani" << endl;
do
{
sf_seek(psfout, 0, SEEK_END);
count1 = sf_readf_float(psfin, buffer1, def_len);
sf_writef_float(psfout, buffer1, count1);
}
while(count1);
soundin_close(psfin);
soundout_close(psfout);
free(psfinfoin);
free(psfinfoout);
free(buffer1);
}

|
v
nasleduje cast kodu, ktera vymaze vse zbytecne, tak, aby zustal jen jediny zvukovy soubor <out.wav> a kod je uzavren

...integer n ve smycce je pocet vsech zvukovych souboru zvetseni o jednu, def_len ma velikost 1024...


Budu vdecny za jakoukoli pripominku, nebo navrh ohledne tohoto problemu, idelni by vsak bylo, kdybych mohl nekomu podekovat za uverejneni kodu, ktery ukazuje jak zapsat jeden zvukovy soubor na konec jineho.

Dekuji mnohokrat...

kristian

Nahlásit jako SPAM
IP: 89.204.176.–
o-lox0
Super člen
1. 4. 2009   #2
-
0
-

Mám teda otázku, proč neotevřeš výstupní soubor před smyčkou for(int i=0; i<n; i++)
pak nemusíš vůbec Seekovat ne?
Nebo vůbec nepoužíváš běžné stdio.h, io.h a spoléháš na možná nefunkční third knihovny pro práci se soubory.

Nahlásit jako SPAM
IP: 85.71.152.–
kristian0
Duch
1. 4. 2009   #3
-
0
-

To kristian :
Problem vyresen za pomoci uzivatele alwaysLearning z go4expert.com.
problem byl v otevirani a zavirani vystupu uvnitr loopu...ten se pak plnil vzdy jen jednou...jsem to ale hlupak...Inkriminovane misto nyni vypada takto:
.
.
.
.
if(!(psfout = soundout_open("out.wav")))
{
cout << "error opening output file\n" << endl; exit(-1);
}
else cout << "file <out.wav> opened for writing" << endl;

for(int inte=0; inte<nn; inte++)
{
char b[1];
itoa(inte, b, 10 );
char NAMEIN[8] = {b[0], 'i', 'n', '.', 'w', 'a', 'v'};

buffer1= new float [def_len];

if(!(psfin = soundin_open(NAMEIN, chans, sr)))
{
cout << "error opening output file\n" << NAMEIN << endl; exit(-1);
}
else cout << "soubor " << NAMEIN << " uspesne otevren pro cteni" << endl;
do {
//sf_seek(psfout, 0, SEEK_END);
count1 = sf_readf_float(psfin, buffer1, 1024);
sf_writef_float(psfout, buffer1, count1);
}
while(count1);
soundin_close(psfin);
free(psfinfoin);
free(buffer1);
}
soundout_close(psfout);
free(psfinfoout);
.
.
.
.
a funguje....

zivot je hnedle hezci

k

Nahlásit jako SPAM
IP: 89.204.176.–
o-lox0
Super člen
1. 4. 2009   #4
-
0
-

no dyť jsem to psal... :D

Nahlásit jako SPAM
IP: 85.71.152.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 95 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý