2016-06-14 7 views
0

Ich verwende diese library Proben einer Wave-Datei zu lesen, insbesondere this method:fread Ausfall mit WAVE-Datei

unsigned int ReadDoublesNI(double** samples, unsigned int offs, unsigned int nsamples, int nchdest = 0) 

die Grv Kick Acoustic 01.wav Datei kann ich öffnen here heruntergeladen werden.

Es scheint, die Datei korrekt mit diesem Code zu laden (Dateiattribute korrekt sind, wie m_bps, m_nch und size):

WaveReader mWaveReader = WaveReader("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav"); 
const unsigned int size = mWaveReader.GetSize(); 
vector<double> samplesContainer(size); 
double* mono[1] = { samplesContainer.data() }; 
mWaveReader.ReadDoublesNI(mono, 0, size, 0); 

aber sobald es fread auf dem ReadDoublesNI erreicht, überspringt es bis zum Ende der Funktion, beendet die for-Anweisung und kehrt sofort zurück. Daher kann ich keine Beispiele aus der Datei lesen.

Wo liege ich falsch?

+0

Was ist los, wenn man diese Art von Frage stellt? -2 und schließen 1? Ich habe auch alle Details angegeben. – markzzz

+1

Aufruf von 'Open' aus dem' WaveReader'-Konstruktor macht Sie blind für jeden Fehler, der während der 'Open' aufgetreten sein könnte. Versuchen Sie, den Standardkonstruktor aufzurufen, gefolgt von einem expliziten 'Open'-Aufruf (und überprüfen Sie den Rückgabecode):' WaveReader mWaveReader = WaveReader(); std :: cout << mWaveReader.Open ("Ihre_Datei"); ' –

+0

Es scheint das Problem zu beheben. Mach die Antwort und du wirst akzeptiert! – markzzz

Antwort

1

Ihr aktueller Code öffnet die Datei als Teil des WaveReader Konstruktoraufruf:

WaveReader mWaveReader = WaveReader("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav"); 

Dieser Konstruktor Open nennt, aber nicht den Fall behandeln, in denen dieser Aufruf fehlschlägt.

Rufen Sie stattdessen die Standard-Konstruktor, um Open durch einen expliziten Aufruf gefolgt, und der Griff der Fehlerfall selbst:

WaveReader mWaveReader = WaveReader(); 
if (!mWaveReader.Open("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav")) { 
    // something went wrong - handle this appropriately, and don't use the mWaveReader object 
} 

Das zumindest wird den Fall behandeln, in denen die Datei nicht ordnungsgemäß geöffnet wurde.