datei ausgeben (mp3)...
-
habe mal folgendes gemacht ...
Memo1 -> Clear(); RichEdit1 -> Clear(); ifstream datei; datei.open("c:\\pop.mp3", ios_base::out | ios_base::in | ios::binary); char chh; char ch[101]; if (datei) { for (int i = 0; i <= 100; i++) // <----- die hundert muss weg !!!! { chh = datei.get();// Zeichen aus der Datei holen // datei.get(ch,15,' + '); ch[i] = chh; // einlesen von zeichen in ein array Memo1 -> Lines -> Add(chh); // zeichen werden untereinander ausgegeben RichEdit1 -> Lines -> Add(ch); //wenn ich chh ausgebe kommt ein fehler } }will aber alles nacheinander ausgeben und nicht untereinander !!!
p.s.: folgend aus beitrag = http://www.c-plusplus.net/forum/viewtopic.php?p=804797#804797
-
äh, was genau versuchst Du denn da? Eine MP3-Datei zu öffnen und zeichenweise auszulesen??
Mit ->Add() fügst Du eine neue Zeile hinzu, das ist so gewollt. Wenn Du etwas nebeneinander haben möchtest, mußt Du das zuerst in einen AnsiString oder String oder char[] schreiben und diesen dann 'Add'en.
z.B.
AnsiString OutString; for (int i = 0; i < 10; i++) OutString += AnsiString(i); RichEdit1->Lines->Add(OutString);
-
AnsiString AS_ch; for (int i = 0; i <= 100; i++) { ch = datei.get(); // Zeichen aus der Datei holen AS_ch += ch; // Zeihen an einem AnsiString aufreihen } Memo1 -> Lines -> Add(chh); // es werden nur 4 zeichen aufgegeben //RichEdit1 -> Lines -> Add(ch); <- habe ich weggelassen, nur fehlermeldungensiehe kommentare
wieso werden nur 4 zeichen ausgegeben !!
habe doch gesagt das 100 zeichen theoretisch ausgegeben werden sollen,bei textdokumente is das kein problem, da werden auch 100 zeichen ausgegeben,
ich kann da auch "end of file" schreiben:
do { .... }while(datei.eof());das funzt aber nicht weil mp3's kein eof besitzen,
wie soll ich das sont machen ???ich will nur die id3 tags ausgeben !!!
aber erst mal die zeichen ausgeben, vergleichbar mir dem notepad von windows,
ich weiss auch wie groß alles sein muss,
http://www.id3.org/id3v1.html
zumindest v1 ist nicht so schwer, wie ich zuerst fand !!!
Song title 30 characters
Artist 30 characters
Album 30 characters
Year 4 characters
Comment 30 characters
Genre 1 byte
-
Versuche es doch mal so:
TStringList * StringList1 = new TStringList; StringList1->LoadFromFile("C:\\Temp\\test4.doc"); Memo1->Text = StringList1->Text; delete StringList1;
-
textdateien werden komlett ausgegeben !
aber bei mp3's wird nur
ID3
(und ein viereck wird ausgegeben, nicht zu sehen, also 4 zeichen )vielleicht mache ich was falsch ??
-
Huberts schrieb:
aber bei mp3's wird nur
ID3
(und ein viereck wird ausgegeben, nicht zu sehen, also 4 zeichen )...und wenn du die ersten 4 Zeichen ausläßt und ab dem 5. Zeichen liest? Was bekommst du dann?
-
so klappt es bei mir:
void __fastcall TForm1::Button2Click(TObject *Sender) { String FileName = "C:\\Temp\\test.mp3"; String Line = "\0"; { try { // Filehandel holen int FileHandel = FileOpen(FileName, fmOpenRead); // Filegröße ermitteln long FileSize = FileSeek(FileHandel, 0, 2); // an den Anfang der Datei gehen FileSeek(FileHandel, 0, 0); // einen char Buffer mit Größe des Files anlegen char * Buffer = new char[FileSize]; // File in den Buffer einlesen FileRead(FileHandel, Buffer, FileSize); // optional: Memo1 auf unsichtbar stellen, dann gehts ein bisschen schneller Memo1->Visible = false; // Byteweise durch den Buffer for (int i = 0; i <= FileSize; i++) { // Aktuelle Buffer Position in einen AnsiString kopieren Line += Buffer[i]; // nach 32 Bytes neue Zeile if (i % 32 == 0 || i == FileSize) { // Zeile ausgeben Memo1->Lines->Add(Line); // String löschen Line = "\0"; } } // Memo wieder sichtbar stellen Memo1->Visible = true; // WICHTIG: Buffer löschen delete[] Buffer; } catch (Exception &exception) { ShowMessage(exception.Message); } } }der Code ist aber SEHR langsam!
In dem MP3 mit dem ich es versucht habe waren die ID Tags am Ende der Datei.
-
schön,
aber scheint nicht 100% alles auszugeben !bei der ausgabe wird text abgeschnitten, und wahllos irgendwo im text ein return gesetzt,
zb:I
D3
TCON
Chim Chim Cheree (clip)TPE1
wo eigentlich:ID3 TALB Mary PoppinsTCON SoundtrackTIT2 Chim Chim Cheree (clip)TPE1ausgegeben weren soll
wie man sieht wird text angeschnitten !!
**
edit:**long FileSize = FileSeek(FileHandel, 0, 2);
// an den Anfang der Datei gehenwenn jemand sagt wie man zu einer bestimtne posisition in einer datei springt können wir zeit sparen !!!
-
wenn jemand sagt wie man zu einer bestimtne posisition in einer datei springt können wir zeit sparen !!!Siehe hilfe zu FileSeek.
-
Hallo,
Bezüglich des Abschneidens von Text:
Dein mp3-File ist nunmal kein Textfile. Wenn da also eine binäre 0 vorkommt wird der String abgeschnitten. Bei anderern nicht darstellbaren Zeichen (Tab, CR) passiert ähnliches. Im folgenden Thread ist das schonmal etwas ausfühlicher erklärt worden
http://www.c-plusplus.net/forum/viewtopic-var-t-is-69571Ciao